@ditojs/admin 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dito-admin.es.js
CHANGED
|
@@ -9411,4 +9411,4 @@ function kh(e) {
|
|
|
9411
9411
|
export {
|
|
9412
9412
|
uc as default
|
|
9413
9413
|
};
|
|
9414
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQubWpzIiwiLi4vc3JjL21peGlucy9Tb3J0YWJsZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL0RpdG9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdGl2ZSh7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn0pXG4iLCJpbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbikge1xuICByZXR1cm4gZGF0YVBhdGhcbiAgICA/IGAke2RhdGFQYXRofS8ke3Rva2VufWBcbiAgICA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICBwYXRoPy5wb3AoKVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBuZXN0ZWQgPyBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSA6IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgaWYgKHBhdGgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCB0b2tlbi4gSWYgaXQncyBhIG51bWJlciwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW5cbiAgICAvLyBhcnJheSBhbmQgbmVlZCB0byByZW1vdmUgbW9yZSB0b2tlbnMgdW50aWwgd2UgbWVldCB0aGUgYWN0dWFsIHBhcmVudDpcbiAgICBsZXQgdG9rZW5cbiAgICBkbyB7XG4gICAgICB0b2tlbiA9IHBhdGgucG9wKClcbiAgICB9IHdoaWxlICh0b2tlbiAhPSBudWxsICYmIGlzSW50ZWdlcigrdG9rZW4pKVxuICAgIC8vIElmIHRoZSByZW1vdmVkIHRva2VuIGlzIHZhbGlkLCB3ZSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGF0YTpcbiAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhOYW1lKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIHJldHVybiB0b2tlbiA9PSBudWxsIHx8IGlzSW50ZWdlcigrdG9rZW4pID8gbnVsbCA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhJbmRleChkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICBjb25zdCBpbmRleCA9IHRva2VuID09IG51bGwgPyBudWxsIDogK3Rva2VuXG4gIHJldHVybiBpc0ludGVnZXIoaW5kZXgpID8gaW5kZXggOiBudWxsXG59XG5cbmxldCB0ZW1wb3JhcnlJZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZW1wb3JhcnlJZChkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGlkcyBhcmUgbWFya2VkIHdpdGggYSAnQCcgYXQgdGhlIGJlZ2lubmluZy5cbiAgZGF0YVtpZEtleV0gPSBgQCR7Kyt0ZW1wb3JhcnlJZH1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBvcmFyeUlkKGlkKSB7XG4gIHJldHVybiAvXkAvLnRlc3QoaWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7XG4gIGdldEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtLFxuICBnZXRJdGVtLFxuICBnZXRMYXN0RGF0YVBhdGhOYW1lLFxuICBnZXRMYXN0RGF0YVBhdGhJbmRleFxufSBmcm9tICcuL3V0aWxzL2RhdGEuanMnXG5cbmNvbnN0IHsgaGFzT3duUHJvcGVydHkgfSA9IE9iamVjdC5wcm90b3R5cGVcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KHRvUmF3KGNvbnRleHQpKVxuICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBpdGVtKCkge1xuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gICAgLy8gSWYgYGRhdGFgIGlzbid0IHByb3ZpZGVkLCB3ZSBjYW4gZGV0ZXJtaW5lIGl0IGZyb20gcm9vdERhdGEgJiBkYXRhUGF0aDpcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OXG4gIC8vIGRhdGEuICBUaGlzIGlzIHdoeSB0aGUgdGVybSBgaXRlbWAgd2FzIGNob3NlbiBvdmVyIGBkYXRhYCwgZS5nLiBWUyB0aGVcbiAgLy8gdXNlIG9mIGBwYXJlbnREYXRhYCBpbiBzZXJ2ZXItc2lkZWQgdmFsaWRhdGlvbiwgd2hpY2ggaXMgdGhlIGNsb3Nlc3RcbiAgLy8gcGFyZW50LiBJZiBuZWVkZWQsIHdlIGNvdWxkIGV4cG9zZSB0aGlzIGRhdGEgaGVyZSB0b28sIGFzIHdlIGNhbiBkbyBhbGxcbiAgLy8gc29ydHMgb2YgZGF0YSBwcm9jZXNzaW5nIHdpdGggYHJvb3REYXRhYCBhbmQgYGRhdGFQYXRoYC5cbiAgZ2V0IHBhcmVudEl0ZW0oKSB7XG4gICAgY29uc3QgcGFyZW50SXRlbSA9IChcbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8XG4gICAgICBudWxsXG4gICAgKVxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBhc0FycmF5LFxuICBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgICAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdWlkXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHJlYWN0aXZlKHt9KSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSAqTGluaygpIHRvICpSb3V0ZSgpLlxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICEhc2NoZW1hICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICBzY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgcmV0dXJuIHVybCA/IHRoaXMuYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnk6IHJlc291cmNlLnF1ZXJ5IH0pIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgcXVlcnksIGRhdGEsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVVybCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7IG1ldGhvZCwgdXJsLCBkYXRhLCBxdWVyeSB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBidXR0b25zLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzZXR0aW5nc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSAoXG4gICAgICAgIGNhY2hlICYmXG4gICAgICAgIHtcbiAgICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgICB9W2NhY2hlXVxuICAgICAgKVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSAoXG4gICAgICAgIGxvYWRDYWNoZSAmJlxuICAgICAgICBgJHtcbiAgICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J1xuICAgICAgICB9ICR7XG4gICAgICAgICAgb3B0aW9ucy51cmxcbiAgICAgICAgfSAke1xuICAgICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaChsb2NhdGlvbilcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICAgICAgICA/IHsgZ2V0OiB2YWx1ZSB9XG4gICAgICAgICAgOiBpc09iamVjdCh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXQpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PlxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IG51bGwsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHRoaXMucGFyc2VkVmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBldmVudHMoKSB7XG4gICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IFtlbGVtZW50XSA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKVxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGRpc2FibGVkLCBgZm9jdXMoKWAgd2lsbCBsaWtlbHkgbm90IGhhdmUgdGhlXG4gICAgICAgICAgLy8gZGVzaXJlZCBlZmZlY3QuIFVzZSBgc2Nyb2xsSW50b1ZpZXcoKWAgaWYgYXZhaWxhYmxlOlxuICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICA7KGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OlxuICAgICAgICAgIHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgaXNNb2R1bGUsXG4gIGNsb25lLFxuICBtZXJnZSxcbiAgY2FtZWxpemUsXG4gIG1hcENvbmN1cnJlbnRseVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBbLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSksIHNjaGVtYV1cbiAgICA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIHJldHVybiBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzY2hlbWFzID0gZ2V0U2NoZW1hcyhzY2hlbWEpXG4gICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSB8fCBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkKVxuICAgICkgPT09XG4gICAgdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAoIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZClcbiAgICApICE9PVxuICAgIGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBwcm9jZXNzRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYS5jb21wb25lbnQsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHJldHVybiB7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBwcm9jZXNzRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICBhd2FpdCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgbGV0IGRlZmF1bHRzID0gYXBpLmRlZmF1bHRzW3NjaGVtYS50eXBlXVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0cykpIHtcbiAgICAgIGRlZmF1bHRzID0gZGVmYXVsdHMoc2NoZW1hKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSBtZXJnZSh2YWx1ZSwgc2NoZW1hW2tleV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluLlxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICBjb25zdCBwcm9jZXNzRm9ybSA9IGFzeW5jIGZvcm0gPT4ge1xuICAgIGZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICAgIHByb2Nlc3NEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBwcm9jZXNzRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcHJvY2Vzc0Zvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuXG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5mb3JtIHx8IHNjaGVtYS5mb3JtcyB8fCBzY2hlbWEuY29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNWaWV3KHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuY29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC52aWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YFxuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5uZXN0ZWQgfHwgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKFxuICAgICAgRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9XG4gICAgICAgICAgICAgIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGlmIChzY2hlbWEudGFicykge1xuICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMpKSB7XG4gICAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBwYW5lbCBvZiBnZXRBbGxQYW5lbFNjaGVtYXMoc2NoZW1hLCBkYXRhUGF0aCkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5zY2hlbWEuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0UGFkZGluZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZC5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUoXG4gIHYtaWY9XCJ1c2VyXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbiAgKVxuICAgIERpdG9TY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7IHNvbWVTY2hlbWFDb21wb25lbnQsIGlzU2luZ2xlQ29tcG9uZW50VmlldyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1ZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsIHtcbiAgeWVhciA9IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgbW9udGggPSBkYXRlPy5nZXRNb250aCgpID8/IDAsXG4gIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICBob3VyID0gZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICBtaW51dGUgPSBkYXRlPy5nZXRNaW51dGVzKCkgPz8gMCxcbiAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gIG1pbGxpc2Vjb25kID0gZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxufSA9IHt9KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKGRhdGUuZGF0ZSwgZGF0ZS5zdGF0ZSwgdHJ1ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheShcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgICksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0byB8fCBuZXcgRGF0ZSgpXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiZcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmIHllYXIgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlLCBzdGF0ZSwgY29weSA9IGZhbHNlKSB7XG4gICAgICBpZiAoc3RhdGUgIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9KVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhkYXRlLCB7IHllYXIsIG1vbnRoLCBkYXkgfSkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgaG9yLCB2ZXIsIGVudGVyIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudE1vZGUsIGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKGhvciB8fCB2ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgICBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBob3IgKyB2ZXIgKiA3XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICAgIHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgaG9yICsgdmVyICogNVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KHRvZGF5KVxuICAgICAgICAgICAgPyAndG9kYXknXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpXG4gICAgICAgICAgICAgID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNhbGVuZGFyIHtcbiAgbWluLXdpZHRoOiAyNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmRpdG8tY2FsZW5kYXItcG9wdXAge1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB6LWluZGV4OiAxMDAwO1xufVxuXG4uZGl0by1jYWxlbmRhci1ib2R5IHtcbiAgcGFkZGluZzogMCAwLjVlbTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5IHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlIHtcbiAgICAmLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXkge1xuICAgIGNvbG9yOiAjOTk5OTk5O1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHtcbiAgc3BhbiB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpO1xuICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xufVxuXG4uZGl0by1jYWxlbmRhciBhLFxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW4ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMCAwLjJlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQtaGVpZ2h0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgZGlzcGxheTogZmxleDtcblxuICA+IHNwYW4ge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA1JTtcbiAgbWluLXdpZHRoOiAyZW07XG4gIG1heC13aWR0aDogM2VtO1xuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuSc7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8KrJztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuic7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8K7JztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ05vdyc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJleHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldCwgZXZlbnRzKSB7XG4gIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICB9XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnNob3cnXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgICBpZiAodG8pIHtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLmZvY3VzRXZlbnRzID0gYWRkRXZlbnRzKHRhcmdldCwge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gbnVsbFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyh0aGlzLnRhcmdldClcbiAgICAgICAgPyB0aGlzLiRyZWZzW3RoaXMudGFyZ2V0XVxuICAgICAgICA6IHRoaXMudGFyZ2V0XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgICBjb25zdCBlbCA9IHRhcmdldCA9PT0gcG9wdXAgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSAodGFyZ2V0IHx8IHRyaWdnZXIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zY3NzJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXRcbiAgaW5wdXQoXG4gICAgOmlkPVwiaWRcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgOmF1dG9mb2N1cz1cImF1dG9mb2N1c1wiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIDphdXRvY29tcGxldGU9XCJhdXRvY29tcGxldGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cIiRhdHRyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICAgIC8qXG4gICAgY2xlYXJhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgICBzdWZmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHByZWZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgICAqL1xuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICBkYXRlOiB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgdGltZTogZmFsc2VcbiAgICAgICAgfSkgfHwgJydcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmICgrY3VycmVudFZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBzZWVtcyB0byBjb250cmFkaWN0IHRoZSBgY3VycmVudFZhbHVlKClgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgLy8gICAgICAgSXMgdGhpcyBuZWVkZWQgYXQgYWxsP1xuICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIG1pbi13aWR0aDogMTBlbTtcblxuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gICAgfVxuICApXG4gIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgY29uc3QgcGVyVGljayA9IGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDEwXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgKyBwZXJUaWNrXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSByZXR1cm5cbiAgICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKGZpZWxkLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpXG4gICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKVxuICAgIHJhbmdlLnNlbGVjdCgpXG4gICAgZmllbGQuZm9jdXMoKVxuICB9IGVsc2UgaWYgKGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZmllbGQuZm9jdXMoKVxuICAgIGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBmaWVsZCkge1xuICAgIGZpZWxkLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRcbiAgICBmaWVsZC5zZWxlY3Rpb25FbmQgPSBlbmRcbiAgICBmaWVsZC5mb2N1cygpXG4gIH1cbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICApXG4gICAgLy8tIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vLSA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8tIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IHNjcm9sbFRvIH0gZnJvbSAnLi4vdXRpbHMvc2Nyb2xsLmpzJ1xuaW1wb3J0IHsgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZClcbiAgICAgICAgICB9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2VsZWN0aW9uOiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWUgPCAwID8gMiA6IHZhbHVlID4gMiA/IDAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aFxuICAgICAgICAgICAgICAgID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kaXRvLWljb24tdGltZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiA3cHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLXBpY2tlcnMoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgKVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvY3VzZWQgfHwgdGhpcy50aW1lRm9jdXNlZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuYmx1cigpXG4gICAgICB0aGlzLiRyZWZzLnRpbWUuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8tcGlja2VycyB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyIHtcbiAgICB3aWR0aDogNjAlO1xuICAgIG1pbi13aWR0aDogNi45ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICB3aWR0aDogNDAlO1xuICAgIG1pbi13aWR0aDogNS40ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLSN7JG5hbWV9IHtcbiAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlXG4gICAgKSAwXG4gICAgfCAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gKHRoaXMubnVtUGFnZXMgPSBNYXRoLmNlaWwodG90YWwgLyBjdXJyZW50UGFnZVNpemUpKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLCBjb2xvciAwcywgYmFja2dyb3VuZCAwcywgYm9yZGVyIDBzO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgcGFkZGluZzogMCAwLjVlbTtcblxuICAgICYtcHJldixcbiAgICAmLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1hcnJvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICYtZWxsaXBzaXMtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAtLXN3aXRjaC13aWR0aDogNHJlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKTtcbiAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjVlbTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uaGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmhlaWdodC1lbnRlci1mcm9tLFxuLmhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuXG5jb25zdCBVc2VGb2N1c1RyYXAgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogYCR7c2V0dGluZ3Mud2lkdGh9cHhgIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcChcbiAgICA6b3B0aW9ucz1cInsgaW1tZWRpYXRlOiB0cnVlLCBmYWxsYmFja0ZvY3VzOiAoKSA9PiAkcmVmcy5kaWFsb2cgfVwiXG4gIClcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgRGl0b1NjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMjAwMDtcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLy8gVE9ETzogYCZfX2lubmVyYFxuICBmb3JtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgsIDQ4MHB4KTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IC0ycHggcmdiYSgyNywgMzMsIDU4LCAwLjQpO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kaWFsb2ctbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cztcblxuICBmb3JtIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWZyb20sXG4uZGl0by1kaWFsb2ctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdFxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9NZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBEaXRvQWNjb3VudChcbiAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgKVxuICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgIClcbiAgICAgICAgc3BhbiBMb2dpblxuICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBtYXBDb25jdXJyZW50bHksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldyxcbiAgcmVzb2x2ZVNjaGVtYXMsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRpdGxlIHx8PSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgICAgZXJyb3I6ICdFcnJvcicsXG4gICAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnTm90aWZpY2F0aW9uJ1xuICAgICAgKVxuICAgICAgdGV4dCA9IGA8cD4ke1xuICAgICAgICBhc0FycmF5KHRleHQpLmpvaW4oJzwvcD4gPHA+JylcbiAgICAgIH08L3A+YC5yZXBsYWNlKC9cXG58XFxyXFxufFxcci9nLCAnPGJyPicpXG4gICAgICBjb25zdCBsb2cgPSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnZXJyb3InXG4gICAgICApXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZVtsb2ddKHN0cmlwVGFncyh0ZXh0KSlcbiAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9ucyA9IHRydWUgfSA9IHRoaXMuYXBpXG4gICAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgZGlzcGxheS1kdXJhdGlvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbiBiYXNlZCBvbiBpdHMgY29udGVudFxuICAgICAgICAvLyBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIGBkdXJhdGlvbkZhY3RvcmAgY29uZmlndXJhdGlvbi4gSXQgZGVmaW5lcyB0aGVcbiAgICAgICAgLy8gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzXG4gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGUgbm90aWZpY2F0aW9uLCBwbHVzIDQwICg0MCArIHRpdGxlICsgbWVzc2FnZSk6XG4gICAgICAgIGNvbnN0IHsgZHVyYXRpb25GYWN0b3IgPSAyMCB9ID0gbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICg0MCArIHRleHQubGVuZ3RoICsgdGl0bGUubGVuZ3RoKSAqIGR1cmF0aW9uRmFjdG9yXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBkdXJhdGlvbiB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgYW5kIHdyYXBzIGl0IGluIGEgcHJvbWlzZSBzbyB0aGF0IHRoZVxuICAgICAgLy8gYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgIGFuZCBgZGlhbG9nLnJlamVjdCgpYFxuICAgICAgLy8gdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdCB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBjb21wb25lbnRzIHRvIHJlc29sdmUgYXN5bmMgc2NoZW1hcy5cbiAgICAgICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKHRoaXMuYXBpLCB7IGNvbXBvbmVudHMgfSwgcm91dGVzLCAwKVxuICAgICAgICAgIGlmIChyb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRGlhbG9ncyBkbyBub3Qgc3VwcG9ydCBjb21wb25lbnRzIHRoYXQgcHJvZHVjZSByb3V0ZXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpLFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lKVxuICAgICAgKVxuICAgICAgLy8gTm93IHRoYXQgdGhlIHJvdXRlcyBhcmUgbG9hZGVkLCByZXBsYWNlIGFsbCBleGlzdGluZyByb3V0ZXMgd2l0aCB0aGVcbiAgICAgIC8vIG5ldyByb3V0ZXMsIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICBjb25zdCB7IGZ1bGxQYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXM/LigpXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcyA9IGFkZFJvdXRlcyh0aGlzLiRyb3V0ZXIsIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgfSxcbiAgICAgICAgLi4ucm91dGVzXG4gICAgICBdKVxuICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoZnVsbFBhdGgpXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlUm91dGUgPSByb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgcmVtb3ZlcnMucHVzaChyZW1vdmVSb3V0ZSlcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCByZW1vdmUgb2YgcmVtb3ZlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnO1xuXG4uZGl0by1hcHAsXG4uZGl0by1yb290IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmRpdG8tcm9vdCB7XG4gIC5kaXRvLXBhZ2Uge1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAvLyBzaG91bGQgYXBwZWFyIGxheWVyZWQgb3ZlciBgLmRpdG8tbWVudWAsIHdoaWxlIGhhdmluZyBgb3ZlcmxheTogaGlkZGVuYFxuICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICA+IC5kaXRvLWZvcm0sXG4gICAgPiAuZGl0by12aWV3IHtcbiAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHQ7XG4gICAgICBwYWRkaW5nLXRvcDogJG1lbnUtaGVpZ2h0O1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJ2aWV3IGluIHZpZXdzXCJcbiAgICApXG4gICAgICBSb3V0ZXJMaW5rLmRpdG8tbGluayhcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgIGFjdGl2ZUNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b01lbnUnLCB7fSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1lbnUge1xuICBmbGV4OiBpbml0aWFsO1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdWwge1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZTtcbiAgfVxuXG4gIGEsXG4gIGgxIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIGgxIHtcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgLmRpdG8tbGluayB7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1saW5rIHtcbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbilcbiAgLy8tIFRPRE86IENvbnZlcnQgdG8gQkVNXG4gIC52LXB1bHNlLnYtcHVsc2UxKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTFdXCIpXG4gIC52LXB1bHNlLnYtcHVsc2UyKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTJdXCIpXG4gIC52LXB1bHNlLnYtcHVsc2UzKDpzdHlsZT1cIltzcGlubmVyU3R5bGUsIHNwaW5uZXJEZWxheTNdXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBvbmx5IGNsYXNzZXNcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgd2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICAgIG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICAgIGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXkge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIFJvdXRlckxpbmsuZGl0by1icmVhZGNydW1iKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp0bz1cImNvbXBvbmVudC5wYXRoXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b1NwaW5uZXIgZnJvbSAnLi9EaXRvU3Bpbm5lci52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0hlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBEaXRvU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIHRvIHNldCB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIERpdG9TcGlubmVyLlxuICAgIC8vIFBhc3MgdGhlbSBvbiB0aHJvdWdoIHRoZSB0ZW1wbGF0ZSBpbnN0ZWFkIVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IERpdG9TcGlubmVyXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkbWVudS16LWluZGV4O1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgLmRpdG8tdHJhaWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBoZWlnaHQ6IDNlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZztcblxuICAgIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtO1xuXG4gICAgICAkYW5nbGU6IDMzZGVnO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM5OTk5OTk7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgaGVpZ2h0OiAxLjJlbTtcbiAgICAgICAgcmlnaHQ6IC0xcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNwaW5uZXIge1xuICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyO1xuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWFjY291bnQsXG4gIC5kaXRvLWxvZ2luIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWFjY291bnQge1xuICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIERpdG9FbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbChcbiAgICA6Zm9yPVwiZGF0YVBhdGhcIlxuICAgIHYtaHRtbD1cInRleHRcIlxuICApXG4gIERpdG9FbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnZXhwYW5kJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyB7IG9uQ2xpY2s6IHRoaXMub25DbGljayB9IDoge31cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1sYWJlbCB7XG4gIC0tbGFiZWwtcGFkZGluZzogMDtcbiAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpO1xuICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcblxuICBsYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgbGFiZWwsXG4gIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgLmRpdG8tbGFiZWwtc3VmZml4IHtcbiAgICAmOm50aC1sYXN0LWNoaWxkKDIpIHtcbiAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgLy8gc28gdGhhdCBidXR0b25zIGFsd2F5cyBhcHBlYXIgcmlnaHQtYWxpZ25lZDpcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7O1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgLmRpdG8tbGFiZWwtc3VmZml4IHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgLy8gbmVhciBtb3VzZSBldmVudHM6XG4gICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpO1xuICB9XG5cbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLlxuICAgIGxhYmVsIHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgfVxuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSxcbiAgZ2V0SXRlbUlkLFxuICBnZXRJdGVtVWlkLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8gLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgICBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgIDsoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgIShpdGVtTGFiZWwgaW4gaXRlbSkpIHtcbiAgICAgICAgLy8gYGl0ZW1MYWJlbGAgY2FuIGJlIGJvdGggYSBrZXksIG9yIHNpbXBseSBhIGxhYmVsLlxuICAgICAgICB0ZXh0ID0gaXRlbUxhYmVsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICA/ICh0ZXh0ID0gYCR7aW5kZXggKyAxfWApXG4gICAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdCA/IHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA6IHRleHRcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8tIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgRGl0b1RhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJ0YWJTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUoXG4gICAgdi1pZj1cImlubGluZWRcIlxuICApXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsU2NoZW1hcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPVxuICAgICAgICBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB3YXRjaGVyIVxuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IGAjJHt0YWJ9YCB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICByZWdpc3RyeVt1aWRdID0gZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyeVt1aWRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IChlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdKVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgZGlzcGxheTogZmxleDtcbiAgbWluLWhlaWdodDogMTAwJTtcblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG5cbiAgICA+ICo6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zLFxuICA+IC5kaXRvLXBhbmVscyB7XG4gICAgZmxleDogMSAxIDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxuXG4gID4gLmRpdG8tcGFuZWxzIHtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwO1xuICB9XG5cbiAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAuZGl0by10YWJzLFxuICAuZGl0by1jbGlwYm9hcmQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1jbGlwYm9hcmQge1xuICAgICY6b25seS1jaGlsZCB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlciB7XG4gICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0O1xuICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3I7XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4O1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIGJ1dHRvbi5kaXRvLWxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgIHotaW5kZXg6IDE7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b1NjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8tIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzY2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8tIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWFJbmxpbmVkJywge1xuICBlbWl0czogWydkZWxldGUnXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEtaW5saW5lZCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgLy8gQ2hhbmdlIHNwYWNpbmcgc28gLmRpdG8tbGFiZWwgY292ZXJzIHRoZSBmdWxsIC5kaXRvLXNjaGVtYS1oZWFkZXIuXG4gICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nO1xuXG4gICAgICAuZGl0by1sYWJlbCB7XG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgLS1sYWJlbC1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICAgICAgLy8gUHJldmVudCBjb2xsYXBzaW5nIHRvIG1pbi1oZWlnaHQgd2hlbiBhbG9uZSBpblxuICAgICAgICAvLyAuZGl0by1zY2hlbWEtY29udGVudCwgZHVlIHRvIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgICAgbWluLWhlaWdodDogMmVtO1xuICAgICAgfVxuXG4gICAgICAmICsgLmRpdG8tcGFuZSB7XG4gICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtc2hvdz1cInZpc2libGVcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1ge1xuICAgICAgc2NoZW1hLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgIG5lc3RlZCxcbiAgICAgIHN0b3JlXG4gICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgICAgIG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PlxuICAgICAgICAgIGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogYCMke3RoaXMudGFifWAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgOlxuICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpO1xuICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICBmbGV4OiAwJTtcblxuICAmLmRpdG8tcGFuZS1tYWluIHtcbiAgICBmbGV4OiAxMDAlO1xuICB9XG5cbiAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICYge1xuICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJiB7XG4gICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgbWFyZ2luOiAwO1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gIH1cblxuICAuZGl0by1icmVhayB7XG4gICAgZmxleDogMTAwJTtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBEaXRvTGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgRGl0b0Vycm9ycyg6ZXJyb3JzPVwiZXJyb3JzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCwgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHR5cGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS50eXBlKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxhYmVsICE9PSBmYWxzZSAmJlxuICAgICAgICAoISFsYWJlbCB8fCB0aGlzLnR5cGVDb21wb25lbnQ/LmdlbmVyYXRlTGFiZWwgJiYgdGhpcy5nZW5lcmF0ZUxhYmVscylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbnRhaW5lckNsYXNzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY29udGFpbmVyQ2xhc3MgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tb21pdC1wYWRkaW5nJzogc2hvdWxkT21pdFBhZGRpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oXG4gICAgICAgICAgaXNTdHJpbmcoY29udGFpbmVyQ2xhc3MpXG4gICAgICAgICAgICA/IHsgW2NvbnRhaW5lckNsYXNzXTogdHJ1ZSB9XG4gICAgICAgICAgICA6IGNvbnRhaW5lckNsYXNzXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50QmFzaXMoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29tcG9uZW50V2lkdGhcbiAgICAgIC8vICdhdXRvJyA9IG5vIGZpdHRpbmc6XG4gICAgICBjb25zdCBiYXNpcyA9IFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpXG4gICAgICAgID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKVxuICAgICAgICAgID8gcGFyc2VGbG9hdCh3aWR0aCkgLy8gcGVyY2VudGFnZVxuICAgICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvbnRhaW5lciB7XG4gIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYuZGl0by1vbWl0LXBhZGRpbmcge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+IC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbTtcbiAgfVxufVxuXG4vLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbi8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4uZGl0by1jb21wb25lbnQge1xuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwieyBoYXNoOiBgIyR7a2V5fWAgfVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBrZXkgfVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0O1xuJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdDtcbiR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZTtcblxuLmRpdG8tdGFicyB7XG4gIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gIGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZTtcbiAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3I7XG4gICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIERpdG9TY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgIERpdG9CdXR0b25zKFxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuXG4gIC5kaXRvLXBhbmVsLXRpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3I7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gIC5kaXRvLXBhbmVsLXNjaGVtYSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZztcblxuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLW9iamVjdCB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgbGFiZWwge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLXBhbmUge1xuICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKTtcbiAgICB9XG5cbiAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICApXG4gICAgRGl0b1BhbmVsKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWxzIHtcbiAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoO1xuICBtaW4td2lkdGg6IGNhbGMoJGNvbnRlbnQtc2lkZWJhci13aWR0aCAvIDIpO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCBoYXNTbG90Q29udGVudCgkc2xvdHMuZGVmYXVsdClcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBEaXRvVm5vZGUoOnZub2RlPVwidm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaGFzU2xvdENvbnRlbnQsIGhhc1ZOb2RlQ29udGVudCB9IGZyb20gJy4uL3V0aWxzL3Z1ZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICAgIHNjaGVtYXNbYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGJ1dHRvbi5uYW1lKV0gPSBidXR0b25cbiAgICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2xvdENvbnRlbnQsXG4gICAgaGFzVk5vZGVDb250ZW50XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1idXR0b25zIHtcbiAgPiAuZGl0by1jb250YWluZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFNldCBgQGNsaWNrLnN0b3BgIHRvIHByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbC5cbkRpdG9CdXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIEBjbGljay5zdG9wXG4pXG4gIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gIGEuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIERpdG9DcmVhdGVCdXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1lZGl0LWJ1dHRvbnMge1xuICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZsZXg6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUoXG4gICAgdi1pZj1cInNob3dQdWxsZG93blwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcbmltcG9ydCB7IGdldEZvcm1TY2hlbWFzLCBpc0lubGluZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NyZWF0ZUJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIHBhc3RlLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgoXG4gICAgICAgIHRoaXMucGF0aFxuICAgICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhIHx8PSB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XSA9IG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEodG8sIGZyb20pIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnRcbiAgICAgICAgICA/ICdjcmVhdGUnXG4gICAgICAgICAgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50XG4gICAgICAgICAgPyAnc3VibWl0J1xuICAgICAgICAgIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IHJlc29sdmVQYXRoKGAke3RoaXMucGF0aH0vLi4vJHtpZH1gKSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgJixcbiAgLmRpdG8tc2Nyb2xsIHtcbiAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCJcbiAgICApXG4gICAgICB8IHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG5cbiAgdWwge1xuICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgbmV4dFRpY2ssIGRlZmluZUNvbXBvbmVudCwgcmVmLCByZWFjdGl2ZSwgaCB9IGZyb20gJ3Z1ZS1kZW1pJztcbmltcG9ydCB7IHRyeU9uTW91bnRlZCwgdHJ5T25TY29wZURpc3Bvc2UsIHVucmVmRWxlbWVudCwgZGVmYXVsdERvY3VtZW50LCB0b1ZhbHVlLCB1c2VWTW9kZWwgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gJ3NvcnRhYmxlanMnO1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19vYmpSZXN0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0uY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmZ1bmN0aW9uIHVzZVNvcnRhYmxlKGVsLCBsaXN0LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvcnRhYmxlO1xuICBjb25zdCBfYSA9IG9wdGlvbnMsIHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQgfSA9IF9hLCByZXNldE9wdGlvbnMgPSBfX29ialJlc3QoX2EsIFtcImRvY3VtZW50XCJdKTtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBkZWZhdWx0T3B0aW9ucyksIHJlc2V0T3B0aW9ucykpO1xuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4gc29ydGFibGUgPT0gbnVsbCA/IHZvaWQgMCA6IHNvcnRhYmxlLmRlc3Ryb3koKTtcbiAgdHJ5T25Nb3VudGVkKHN0YXJ0KTtcbiAgdHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7IHN0b3AsIHN0YXJ0IH07XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvKSB7XG4gIGNvbnN0IGFycmF5ID0gdG9WYWx1ZShsaXN0KTtcbiAgaWYgKHRvID49IDAgJiYgdG8gPCBhcnJheS5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXkuc3BsaWNlKGZyb20sIDEpWzBdO1xuICAgIG5leHRUaWNrKCgpID0+IGFycmF5LnNwbGljZSh0bywgMCwgZWxlbWVudCkpO1xuICB9XG59XG5cbmNvbnN0IFVzZVNvcnRhYmxlID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZVNvcnRhYmxlXCIsXG4gIG1vZGVsOiB7XG4gICAgLy8gQ29tcGF0aWJsZSB3aXRoIHZ1ZTJcbiAgICBwcm9wOiBcIm1vZGVsVmFsdWVcIixcbiAgICBldmVudDogXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcImRpdlwiXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGxpc3QgPSB1c2VWTW9kZWwocHJvcHMsIFwibW9kZWxWYWx1ZVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBkYXRhID0gcmVhY3RpdmUodXNlU29ydGFibGUodGFyZ2V0LCBsaXN0LCBwcm9wcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy50YWcsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdChkYXRhKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZVNvcnRhYmxlIH07XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgVXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlU29ydGFibGUgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNvcnRhYmxlT3B0aW9ucyhkcmFnZ2FibGUsIGZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBkaXNhYmxlZDogIWRyYWdnYWJsZSxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6ICdkaXRvLXNvcnRhYmxlLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1zb3J0YWJsZS1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1zb3J0YWJsZS1naG9zdCcsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6ICdkaXRvLXNvcnRhYmxlLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjazogZmFsbGJhY2ssXG4gICAgICAgIG9uU3RhcnQ6IHRoaXMub25TdGFydERyYWcsXG4gICAgICAgIG9uRW5kOiB0aGlzLm9uRW5kRHJhZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKFxuICAgICAgICB2LWlmPVwiZGV0YWlsc1wiXG4gICAgICApIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYoXG4gICAgICB2LWVsc2VcbiAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBEaXRvTGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICBVc2VTb3J0YWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAoY2hpbGRyZW5MaXN0ID0gdmFsdWUpXCJcbiAgKVxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vLSBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyZWVJdGVtJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcihcbiAgICAgICAgICBjaGlsZHJlblNjaGVtYSxcbiAgICAgICAgICBjaGlsZHJlbkxpc3QubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBudW1DaGlsZHJlbiAmJlxuICAgICAgICBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8tIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6aXM9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlQ2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Wbm9kZScsIERpdG9WTm9kZSlcbjwvc2NyaXB0PlxuIiwiLy8gRGl0b1R5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZVxuLy8gY29tcG9uZW50cyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgRGl0b1R5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgYHsgdHlwZTogJ2NvbXBvbmVudCcgfWBcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGV4dGVuZHM6IERpdG9Db21wb25lbnQsXG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRQYWRkaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbikge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydidXR0b24nLCAnc3VibWl0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBleGNsdWRlVmFsdWU6IHRydWUsXG4gICAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gICAgLy8gb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZlcmIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV0gfHwgdGhpcy5uYW1lXG4gICAgICB9LFxuXG4gICAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBnZXQodGV4dCkge1xuICAgICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pLFxuXG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveCB7XG4gIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9ICh0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHw9IHJlYWN0aXZlKHtcbiAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlXG4gICAgICB9KSlcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplLFxuICBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmXG4gICAgICAgICAgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+ICh2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZSlcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbiB8fCBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94ZXMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLWNoZWNrYm94IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJjb2RlXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvZGUge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEZvciBwcm9wZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gIC5jb2RlZmxhc2sge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgLy8gSWdub3JlIHRoZSBwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fcHJlIHtcbiAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19jb2RlLFxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICB9XG5cbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1jb2xvcihcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgLmRpdG8taW5wdXQoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCIpXG4gICAgICBpbnB1dChcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIFNrZXRjaFBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlQWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGVGaWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXRDb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ0Bsazc3L3Z1ZTMtY29sb3InXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRIZXhWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwge31cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOT1RFOiB2dWUzLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgICAgICBmb3JtYXRcbiAgICAgICAgKVxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBmb2N1c2VkKGZvY3VzZWQpIHtcbiAgICAgIGlmICghZm9jdXNlZCAmJiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKGAjJHt0aGlzLmNvbnZlcnRlZEhleFZhbHVlfWApXG4gICAgICAgIGlmIChjb2xvcj8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbG9yLnRvU3RyaW5nKHRoaXMuY29sb3JGb3JtYXQpXG4gICAgICAgICAgLy8gVE9ETzogRW1pdCAnaW5wdXQnIGhlcmUgaW5zdGVhZCwgYW5kICdjaGFuZ2UnIGluIGJsdXIsIGxpa2Ugb3RoZXJzLlxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGVcbiAgICAgICAgICAgICAgLy8gYHZhbHVlYCBnZXR0ZXIsIHNvIHVzZSBhIHZhbHVlIG9mIDIgZm9yIGByZXNvbHZlQ291bnRlcmAgdG9cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYVxuICAgIC8vIGJldHRlciB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseVxuICAgIC8vIHN1cHBvcnRlZCBhdHRyaWJ1dGVzKVxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkYXRlVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXJcbiAgICAgICAgICAgICAgICAucHVzaCh7IHBhdGggfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PlxuICAgICAgICBwYXJhbVxuICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ0RpdG9Gb3JtTmVzdGVkJyA6ICdEaXRvRm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICAndGV4dCcoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIG9wdGlvbnM6IGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzYwJScgOiAnZmlsbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc1BhbmVsKGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbGVhcjoge1xuICAgICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQucmVzZXREYXRhKClcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICB0ZXh0OiAnRmlsdGVyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSksXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGZpbHRlcnMgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA/IGZpbHRlcnMgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tbmF2aWdhdGlvbihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgVXNlU29ydGFibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAobGlzdERhdGEgPSB2YWx1ZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdERhdGFcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgIClcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoOmNvbHNwYW49XCJudW1Db2x1bW5zXCIpXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgU29ydGFibGVNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHNjaGVtYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIC8vIEF0IHRoZSB0aW1lIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFuZWwgc2NoZW1hLCB0aGUgc2NoZW1hQ29tcG9uZW50IGlzXG4gICAgICAvLyBub3QgZmlsbGVkIHlldCwgc28gd2UgY2FuJ3QgZ2V0IHRoZSB0YXJnZXQgY29tcG9uZW50IChkYXRhUGF0aCkgcmlnaHRcbiAgICAgIC8vIGF3YXkuIFVzZSBhIHByb3h5IGFuZCBhIGdldHRlciBpbnN0ZWFkLCB0byBnZXQgYXJvdW5kIHRoaXM6XG4gICAgICBjb25zdCBnZXRMaXN0Q29tcG9uZW50ID0gKCkgPT5cbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgoXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgICAgKVxuXG4gICAgICByZXR1cm4gZ2V0RmlsdGVyc1BhbmVsKFxuICAgICAgICBnZXROYW1lZFNjaGVtYXMoZmlsdGVycyksXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1uYXZpZ2F0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvTGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoXG4gIDpsYWJlbD1cInZhbHVlXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWxhYmVsLWNvbXBvbmVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMmVtO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoOmlkPVwiZGF0YVBhdGhcIilcbiAgLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBJY29uKDpuYW1lPVwiaWNvblwiKVxuICBFZGl0b3JDb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNPYmplY3QsXG4gIHVuZGVyc2NvcmUsXG4gIGh5cGhlbmF0ZSxcbiAgZGVib3VuY2UsXG4gIGNhbWVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEljb25cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogZWRpdG9yID0+IHRoaXMub25DbGlja0xpbmsoZWRpdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBwYXJhZ3JhcGggY29tbWFuZCBhcyBhY3RpdmUgaWYgYW55IG9mIHRoZSBibG9ja1xuICAgICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGVkaXRvciA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGVkaXRvcilcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIERvY3VtZW50LFxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIEhhcmRCcmVhaywgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cmlidXRlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmNvbW1hbmRzW2tleV0pIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpW2tleV0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogY29tbWFuZChhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0cmlidXRlLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgU21hbGwgPSBNYXJrLmNyZWF0ZSh7XG4gIG5hbWU6ICdzbWFsbCcsXG5cbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbeyB0YWc6ICdzbWFsbCcgfV1cbiAgfSxcblxuICByZW5kZXJIVE1MKCkge1xuICAgIHJldHVybiBbJ3NtYWxsJywgMF1cbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0U21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHRvZ2dsZVNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB1bnNldFNtYWxsOlxuICAgICAgICAoKSA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpXG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IExpbmtXaXRoVGl0bGUgPSBMaW5rLmV4dGVuZCh7XG4gIGluY2x1c2l2ZTogZmFsc2UsXG4gIHNjaGVtYToge1xuICAgIGF0dHJzOiB7XG4gICAgICBocmVmOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiAoe1xuICAgICAgICAgICAgaHJlZjogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgcmVuZGVySFRNTChub2RlKSB7XG4gICAgICByZXR1cm4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tYXJrdXAge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcmVzaXplIHtcbiAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHVuc2V0O1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMWVtO1xuICAgIGhlaWdodDogMWVtO1xuICB9XG5cbiAgLlByb3NlTWlycm9yIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLW1hcmt1cC1lZGl0b3Ige1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDA7XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBwLFxuICB1bCxcbiAgb2wsXG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbiAgfVxuXG4gIGNvZGUge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgfVxuXG4gIHByZSB7XG4gICAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG5cbiAgICBjb2RlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIHAgY29kZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC4zcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICB9XG5cbiAgYSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGNvbG9yOiBibHVlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cblxuICBsaSB7XG4gICAgJiA+IHAsXG4gICAgJiA+IG9sLFxuICAgICYgPiB1bCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlcjtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW11bHRpc2VsZWN0KFxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICB9YFxuKVxuICBWdWVNdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tTGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cFZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhck9uU2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZVxuICAgICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIHRvIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAubXVsdGlzZWxlY3Qge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3RhZ3Mge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpbjtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fdGFnIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpbjtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgaGVpZ2h0OiBjYWxjKCRpbnB1dC1oZWlnaHQgLSAyICogJHRhZy1wYWRkaW5nKTtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwIHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBsaW5lLWhlaWdodDogMDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAubXVsdGlzZWxlY3RfX2lucHV0IHtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50O1xuICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdC0tYWN0aXZlIHtcbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyIHtcbiAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIH1cbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAubXVsdGlzZWxlY3RfX3NwaW5uZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgdG9wOiAkYm9yZGVyLXdpZHRoO1xuICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgIGJvdHRvbTogJGJvcmRlci13aWR0aDtcbiAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3NlbGVjdCB7XG4gICAgd2lkdGg6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKTtcbiAgICB9XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3NwaW5uZXIge1xuICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGluc2V0OiAwO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fb3B0aW9uIHtcbiAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgICBoZWlnaHQ6IHVuc2V0O1xuICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICB9XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICB9XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fdGFnLWljb24ge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgbWFyZ2luOiAwO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICB9XG5cbiAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgfVxuICB9XG5cbiAgLm11bHRpc2VsZWN0X19vcHRpb24tLXNlbGVjdGVkIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuXG4gICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHQge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgIH1cbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0IHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXIge1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICYuZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUge1xuICAgIC0taW5wdXQtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAmLmRpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUge1xuICAgIC0taW5wdXQtd2lkdGg6IGF1dG87XG4gIH1cblxuICAubXVsdGlzZWxlY3QtLWFjdGl2ZSB7XG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dCB7XG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBtYXJnaW46IC0xcHggMCAwO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYubXVsdGlzZWxlY3QtLWFib3ZlIHtcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFncyB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgICAgbWFyZ2luOiAwIDAgLTFweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGl0by1oYXMtZXJyb3JzIHtcbiAgICAubXVsdGlzZWxlY3RfX3RhZ3Mge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlLCAxMClcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID1cbiAgICAgICAgICBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9XG4gICAgICAgICAgbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgO1t0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9iamVjdExhYmVsKCkge1xuICAgICAgLy8gT25seSBzaG93IGEgbGFiZWwgaWYgdGhlIG9iamVjdCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgID8gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMub2JqZWN0RGF0YSwgeyBhc09iamVjdDogdHJ1ZSB9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1vYmplY3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZVsxXSAtIHJhbmdlWzBdIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCc6ICEhc2NoZW1hLmxhYmVsIH1cIilcbiAgRGl0b1BhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLmRpdG8tc2VjdGlvbi1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgc2VsZWN0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICApXG4gICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgIClcbiAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMik7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KTtcbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vLSBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgICBwcm92aWRlKCkge1xuICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgICB9LFxuXG4gICAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGVkaXRQYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgICB9LFxuXG4gICAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICAgIH0sXG5cbiAgICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsLFxuICAgICAgbmVzdGVkID0gdHJ1ZSxcbiAgICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICAgIHByb2Nlc3MgPSBudWxsXG4gICAgKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICBhcGksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICBmbGF0dGVuLFxuICAgICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCBgcHJvY2Vzc1NjaGVtYSgpYCBmb3IgdGhlIG5lc3RlZCB0cmVlIGxpc3Q6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLm5hbWUsXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXMsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSxcblxuICAgIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlblxuICAgICAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtbGlzdCB7XG4gIEBleHRlbmQgJWZpZWxkO1xuXG4gIC5kaXRvLXRyZWUtcGFuZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgPiAuZGl0by10cmVlLWl0ZW0ge1xuICAgICAgZmxleDogMSAxIDI1JTtcbiAgICB9XG5cbiAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIge1xuICAgICAgZmxleDogMCAxIDc1JTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIFVzZVNvcnRhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZChcbiAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgdGQge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICBWdWVVcGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICA6aW5wdXRJZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3RBY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aCAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyBmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb3JtYXRGaWxlU2l6ZSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbChmaWxlLm5hbWUpXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbGUgJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IG5ld0ZpbGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgaW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUgLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKCh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAoIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsKSlcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by11cGxvYWQge1xuICAuZGl0by10YWJsZSB7XG4gICAgdHIge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tYWRkLXVwbG9hZCB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gKiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tdXBsb2FkLWZvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAuZGl0by1wcm9ncmVzcyB7XG4gICAgICBmbGV4OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IHsgY3JlYXRlQXBwLCBoIGFzIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZVdlYkhpc3RvcnkgfSBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAnQGt5dmcvdnVlMy1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgYXNBcnJheSxcbiAgaXNBYnNvbHV0ZVVybCxcbiAgbWVyZ2UsXG4gIGh5cGhlbmF0ZSxcbiAgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi91dGlscy9kZXByZWNhdGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IGRlZmluaXRpb24gb2YgZGVmYXVsdHMgZm9yIGFkbWluIGNvbXBvbmVudCB0eXBlcywgbmVzdGVkIHBlciB0eXBlOlxuICAgIC8vIGFwaS5kZWZhdWx0cyA9IHtcbiAgICAvLyAgICdtdWx0aXNlbGVjdCc6IHtcbiAgICAvLyAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIC8vICAgfSxcbiAgICAvLyAgICdmYWtlLXR5cGUnOiBzY2hlbWEgPT4ge1xuICAgIC8vICAgICAvLyBSZXR1cm4gZGVmYXVsdHMsIG9yIGRpcmVjdGx5IG1vZGlmeSB0aGUgc2NoZW1hOlxuICAgIC8vICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgIC8vICAgICAgIHR5cGU6ICdyZWFsLXR5cGUnLFxuICAgIC8vICAgICAgIGZvcm1hdDogKHsgdmFsdWUgfSkgPT4gYEZvcm1hdHRlZCAke3ZhbHVlfWAsXG4gICAgLy8gICAgICAgcHJvY2VzczogKHsgdmFsdWUgfSkgPT4gYFByb2Nlc3NlZCAke3ZhbHVlfWBcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkuZGVmYXVsdHMgfHw9IHt9XG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgYXBpLnVzZXJzID0gdXNlcnNcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSAodGhpcy5hcHAgPSBjcmVhdGVBcHAoe1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEaXRvUm9vdCxcbiAgICAgICAgVnVlTm90aWZpY2F0aW9ucyxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgLi4udHlwZXNcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgICAgcmVmOiAncm9vdCcsXG4gICAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9KVxuICAgIH0pKVxuXG4gICAgYXBwLnVzZShWdWVOb3RpZmljYXRpb25zLCB7XG4gICAgICBuYW1lOiAnbm90aWZ5JyxcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJ1xuICAgIH0pXG5cbiAgICAvLyByb290LmNvbXBvbmVudCgndnVlLW1vZGFsJywgVnVlTW9kYWwpXG5cbiAgICBhcHAudXNlKFxuICAgICAgY3JlYXRlUm91dGVyKHtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIGNhdGNoLWFsbCByb3V0ZSwgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbCByb3V0ZXNcbiAgICAgICAgLy8gb25jZSB0aGUgc2NoZW1hcyBhcmUgbG9hZGVkLCB0byBwcmV2ZW50IHZ1ZS1yb3V0ZXIgZnJvbSBjb21wbGFpbmluZyxcbiAgICAgICAgLy8gc2VlOiBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICAgIHJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICAgICAgcGF0aDogJy86XyguKiknLFxuICAgICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KVxuICAgIClcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKFxuICAgICAgYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgfSlgXG4gICAgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICBgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczpcbiAgICAgIGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgICA/ICdpbmNsdWRlJ1xuICAgICAgICA6ICdzYW1lLW9yaWdpbidcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfT8ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgIC8vIGBmb3JtYXRRdWVyeSh7IGZvbzogWzEsIDJdLCBiYXI6IDMgfSlgID0+ICdmb289MSZmb289MiZiYXI9MycuXG4gICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKS50b1N0cmluZygpXG59XG4iXSwibmFtZXMiOlsiYXBwU3RhdGUiLCJyZWFjdGl2ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiaGFzT3duUHJvcGVydHkiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ0b1JhdyIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwicGFyZW50SXRlbSIsIm9wdGlvbnMiLCJsb2NhdGlvbiIsInJlc291cmNlIiwiRW1pdHRlck1peGluIiwiZXZlbnQiLCJjYWxsYmFjayIsImlzQXJyYXkiLCJldiIsImlzUGxhaW5PYmplY3QiLCJsaXN0ZW5lcnMiLCJjYWxsYmFja3MiLCJvbiIsImFyZ3MiLCJlbnRyeSIsIl9hIiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwidG9TdHJpbmciLCJ0b0RhdGUiLCJ0b0FycmF5IiwiYXNBcnJheSIsInRvT2JqZWN0IiwidG9SZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJ0eXBlIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJoYXNSZXNvdXJjZSIsInNjaGVtYSIsImdldFJlc291cmNlIiwiZGVmYXVsdHMiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJEaXRvTWl4aW4iLCJ1aWQiLCJuZXh0VWlkIiwia2V5T3JEYXRhUGF0aCIsImRlZiIsImNvbnZlcnRlZCIsIm5hbWUiLCJsYWJlbGl6ZSIsImJ1dHRvbiIsInZlcmIiLCJxdWVyeSIsInVybCIsIm1ldGhvZCIsImludGVybmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjb21wb25lbnRzIiwiYnV0dG9ucyIsInNldHRpbmdzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiZm9ybWF0IiwiYSIsImJvZHkiLCJhY2Nlc3NvciIsIndhdGNoIiwiZXZlbnRzIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJnZXRDb250ZXh0IiwicGFyYW1zIiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsImNvbXB1dGVWYWx1ZSIsInBhcnNlIiwic2NoZW1hQ29tcG9uZW50IiwibGFiZWwiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwiYWRkIiwiZWxlbWVudCIsIl9iIiwidWlkTWFwIiwiZ2V0VWlkIiwiaXRlbUlkIiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwic3ViR3JhcGgiLCJwYXJ0IiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJnZXRTY2hlbWFzIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJzY2hlbWFzIiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInJlc29sdmVTY2hlbWFDb21wb25lbnQiLCJtYXJrUmF3IiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMiLCJwcm9jZXNzVmlldyIsImFwaSIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsInByb2Nlc3NEZWZhdWx0cyIsImNoaWxkcmVuIiwicHJvY2Vzc0NvbXBvbmVudCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwicm91dGVzIiwibGV2ZWwiLCJnZXRUeXBlT3B0aW9ucyIsIm1lcmdlIiwicHJvbWlzZXMiLCJwcm9jZXNzRm9ybXMiLCJwcm9jZXNzRm9ybSIsImZvcm0iLCJyZXNvbHZlRm9ybSIsImZvcm1zIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImdldFZpZXdFZGl0UGF0aCIsImdldEZvcm1TY2hlbWFzIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaGFzTGFiZWwiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsInNob3VsZE9taXRQYWRkaW5nIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsImhhc0xhYmVscyIsImNoZWNrQ29tcG9uZW50cyIsInNldERlZmF1bHRWYWx1ZXMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsInJvb3REYXRhIiwiY29tcHV0ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImFycmF5IiwidG9TY2hlbWEiLCJjYW1lbGl6ZSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwicmVzb2x2ZU1lcmdlZE9wdGlvbnMiLCJtaXhpbnMiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJtaXhpbiIsImRpdG9PcHRpb25LZXlzIiwiRGl0b0NvbXBvbmVudCIsImRlZmluaXRpb24iLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiY29weURhdGUiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibW9kZSIsIm92ZXJyaWRlcyIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJzdGF0ZSIsImhvciIsInZlciIsImVudGVyIiwiY3VycmVudE1vZGUiLCJzdGFydFllYXIiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsInRvZGF5IiwiaXNEYXkiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwic2l6ZSIsImdldExlbmd0aCIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJkZWZhdWx0Rm9ybWF0cyIsInNjcm9sbFRvIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwZXJUaWNrIiwic2V0U2VsZWN0aW9uIiwiZmllbGQiLCJzdGFydCIsImVuZCIsImZvcmNlIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsInNlbGVjdGVkIiwibGVuZ3RoIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJwYWdlIiwicGFnZVNpemUiLCJjdXJyZW50UGFnZVNpemUiLCJzaG93UHJldiIsInNob3dOZXh0IiwidG90YWwiLCJjdXJyZW50UGFnZSIsInNob3dMZW5ndGgiLCJudW1QYWdlcyIsInBhZ2VSYW5nZSIsImNoZWNrZWQiLCJkaXNhYmxlZCIsInVuY2hlY2tlZCIsIm1vZGVsVmFsdWUiLCJUcmFuc2l0aW9uSGVpZ2h0IiwiZW5hYmxlZCIsInNsb3RzIiwiY3JlYXRlRWxlbWVudCIsIlRyYW5zaXRpb24iLCJwcm9wcyIsInNldFN0eWxlIiwic3R5bGUiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsIlVzZUZvY3VzVHJhcCIsImRlZmluZUNvbXBvbmVudCIsInRyYXAiLCJhY3RpdmF0ZSIsImRlYWN0aXZhdGUiLCJ1bnJlZkVsZW1lbnQiLCJjcmVhdGVGb2N1c1RyYXAiLCJvblNjb3BlRGlzcG9zZSIsImgiLCJkaWFsb2dEYXRhIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJoYW5kbGVyIiwiRGl0b0RpYWxvZyIsImVyciIsInRpdGxlIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsInJlamVjdCIsImRpYWxvZ0lkIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJmdWxsUGF0aCIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJyZW1vdmVSb3V0ZSIsIkRpdG9TcGlubmVyIiwiY29sb3IiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwicHJlZml4Iiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwicGFuZSIsImN1cnJlbnRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl9ob2lzdGVkXzEiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzIiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwiX2hvaXN0ZWRfMyIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJjb250YWluZXJDbGFzcyIsImJhc2lzIiwiZ3JvdyIsInNocmluayIsImJhc2lzSXNBdXRvIiwiaGFzVk5vZGVDb250ZW50Iiwidm5vZGUiLCJDb21tZW50IiwiaGFzU2xvdENvbnRlbnQiLCJzbG90IiwidXNlU2xvdHMiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiX2MiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJzY29wZSIsIlBhZ2luYXRpb24iLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJwcm9wIiwiX19vYmpSZXN0IiwidXNlU29ydGFibGUiLCJsaXN0Iiwic29ydGFibGUiLCJkb2N1bWVudCIsImRlZmF1bHREb2N1bWVudCIsInJlc2V0T3B0aW9ucyIsImRlZmF1bHRPcHRpb25zIiwiZSIsIm1vdmVBcnJheUVsZW1lbnQiLCJTb3J0YWJsZSIsInN0b3AiLCJ0cnlPbk1vdW50ZWQiLCJ0cnlPblNjb3BlRGlzcG9zZSIsInRvVmFsdWUiLCJuZXh0VGljayIsIlVzZVNvcnRhYmxlIiwidXNlVk1vZGVsIiwiU29ydGFibGVNaXhpbiIsImRyYWdnYWJsZSIsImZhbGxiYWNrIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsInBhZ2luYXRpb25SYW5nZSIsIm9mZnNldCIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl93aXRoRGlyZWN0aXZlcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfVXNlU29ydGFibGUiLCJfY29tcG9uZW50X0RpdG9UcmVlSXRlbSIsImNoaWxkcmVuU2NoZW1hIiwiY2hpbGRyZW5MaXN0IiwiZWRpdFBhdGgiLCJjaGlsZHJlbk9wZW4iLCJudW1DaGlsZHJlbiIsImNyZWF0YWJsZSIsImVkaXRhYmxlIiwib3JkZXIiLCJjb2x1bW4iLCJyZW5kZXIiLCJlc2NhcGVIdG1sIiwiRGl0b1ZOb2RlIiwiRGl0b1R5cGVDb21wb25lbnQkMSIsIkRpdG9UeXBlQ29tcG9uZW50Iiwib25DbGljayIsIkRhdGFNaXhpbiIsInJlc29sdmVDb3VudGVyIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJnZXRMaXN0Q29tcG9uZW50IiwiZmlsdGVyc0RhdGFQYXRoIiwiRWRpdG9yQ29udGVudCIsIkljb24iLCJlZGl0b3IiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwib25VcGRhdGUiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJhZGRCdXR0b24iLCJpY29uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiY29tbWFuZHMiLCJMaW5rIiwibm9kZSIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwiZmlsZSIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiZmlsZXMiLCJ1cGxvYWQiLCJsb2dnZWREZXByZWNhdGlvbnMiLCJkZXByZWNhdGUiLCJEaXRvQWRtaW4iLCJkaXRvIiwidmlld3MiLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInZhbCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiZm9ybWF0UXVlcnkiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBQUEsS0FBZUMsR0FBUztBQUFBLEVBQ3RCLE9BQU87QUFBQSxFQUNQLGlCQUFpQixDQUFFO0FBQUEsRUFDbkIsTUFBTTtBQUFBLEVBQ04sV0FBVyxDQUFFO0FBQUE7QUFBQSxFQUNiLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFDakIsQ0FBQztBQ0ZNLFNBQVNDLEVBQWVDLEdBQVVDLEdBQU87QUFDOUMsU0FBT0QsSUFDSCxHQUFHQSxLQUFZQyxNQUNmQTtBQUNOO0FBRU8sU0FBU0MsR0FBb0JGLEdBQVU7QUFDNUMsUUFBTUcsSUFBT0MsR0FBY0osQ0FBUTtBQUNuQyxTQUFBRyxLQUFBLFFBQUFBLEVBQU0sT0FDQ0E7QUFDVDtBQU1PLFNBQVNFLEdBQWtCTCxHQUFVTSxJQUFTLElBQU87QUFDMUQsU0FBT0EsSUFBU0osR0FBb0JGLENBQVEsSUFBSUksR0FBY0osQ0FBUTtBQUN4RTtBQUVPLFNBQVNPLEdBQWdCUCxHQUFVTSxJQUFTLElBQU87QUFDeEQsU0FBT0UsR0FBa0JILEdBQWtCTCxHQUFVTSxDQUFNLENBQUM7QUFDOUQ7QUFFTyxTQUFTRyxHQUF3QlQsR0FBVU0sSUFBUyxJQUFPO0FBQ2hFLFFBQU1ILElBQU9FLEdBQWtCTCxHQUFVTSxDQUFNO0FBQy9DLE1BQUlILEdBQU07QUFHUixRQUFJRjtBQUNKO0FBQ0UsTUFBQUEsSUFBUUUsRUFBSyxJQUFLO0FBQUEsV0FDWEYsS0FBUyxRQUFRUyxHQUFVLENBQUNULENBQUs7QUFFMUMsUUFBSUEsS0FBUztBQUNYLGFBQU9FO0FBQUE7QUFHWCxTQUFPO0FBQ1Q7QUFFTyxTQUFTUSxHQUFzQlgsR0FBVU0sSUFBUyxJQUFPO0FBQzlELFNBQU9FLEdBQWtCQyxH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
|
|
9414
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQubWpzIiwiLi4vc3JjL21peGlucy9Tb3J0YWJsZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL0RpdG9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvZGUudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29sb3IudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXB1dGVkLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZURhdGUudnVlIiwiLi4vc3JjL21peGlucy9Tb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9maWx0ZXIuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU1hcmt1cC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTnVtYmVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVQcm9ncmVzcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVSYWRpby52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlbGVjdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy91dGlscy9kZXByZWNhdGUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdGl2ZSh7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn0pXG4iLCJpbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbikge1xuICByZXR1cm4gZGF0YVBhdGhcbiAgICA/IGAke2RhdGFQYXRofS8ke3Rva2VufWBcbiAgICA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICBwYXRoPy5wb3AoKVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBuZXN0ZWQgPyBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSA6IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgaWYgKHBhdGgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCB0b2tlbi4gSWYgaXQncyBhIG51bWJlciwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW5cbiAgICAvLyBhcnJheSBhbmQgbmVlZCB0byByZW1vdmUgbW9yZSB0b2tlbnMgdW50aWwgd2UgbWVldCB0aGUgYWN0dWFsIHBhcmVudDpcbiAgICBsZXQgdG9rZW5cbiAgICBkbyB7XG4gICAgICB0b2tlbiA9IHBhdGgucG9wKClcbiAgICB9IHdoaWxlICh0b2tlbiAhPSBudWxsICYmIGlzSW50ZWdlcigrdG9rZW4pKVxuICAgIC8vIElmIHRoZSByZW1vdmVkIHRva2VuIGlzIHZhbGlkLCB3ZSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGF0YTpcbiAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhOYW1lKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIHJldHVybiB0b2tlbiA9PSBudWxsIHx8IGlzSW50ZWdlcigrdG9rZW4pID8gbnVsbCA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhJbmRleChkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICBjb25zdCBpbmRleCA9IHRva2VuID09IG51bGwgPyBudWxsIDogK3Rva2VuXG4gIHJldHVybiBpc0ludGVnZXIoaW5kZXgpID8gaW5kZXggOiBudWxsXG59XG5cbmxldCB0ZW1wb3JhcnlJZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZW1wb3JhcnlJZChkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGlkcyBhcmUgbWFya2VkIHdpdGggYSAnQCcgYXQgdGhlIGJlZ2lubmluZy5cbiAgZGF0YVtpZEtleV0gPSBgQCR7Kyt0ZW1wb3JhcnlJZH1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBvcmFyeUlkKGlkKSB7XG4gIHJldHVybiAvXkAvLnRlc3QoaWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7XG4gIGdldEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtLFxuICBnZXRJdGVtLFxuICBnZXRMYXN0RGF0YVBhdGhOYW1lLFxuICBnZXRMYXN0RGF0YVBhdGhJbmRleFxufSBmcm9tICcuL3V0aWxzL2RhdGEuanMnXG5cbmNvbnN0IHsgaGFzT3duUHJvcGVydHkgfSA9IE9iamVjdC5wcm90b3R5cGVcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KHRvUmF3KGNvbnRleHQpKVxuICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBpdGVtKCkge1xuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gICAgLy8gSWYgYGRhdGFgIGlzbid0IHByb3ZpZGVkLCB3ZSBjYW4gZGV0ZXJtaW5lIGl0IGZyb20gcm9vdERhdGEgJiBkYXRhUGF0aDpcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OXG4gIC8vIGRhdGEuICBUaGlzIGlzIHdoeSB0aGUgdGVybSBgaXRlbWAgd2FzIGNob3NlbiBvdmVyIGBkYXRhYCwgZS5nLiBWUyB0aGVcbiAgLy8gdXNlIG9mIGBwYXJlbnREYXRhYCBpbiBzZXJ2ZXItc2lkZWQgdmFsaWRhdGlvbiwgd2hpY2ggaXMgdGhlIGNsb3Nlc3RcbiAgLy8gcGFyZW50LiBJZiBuZWVkZWQsIHdlIGNvdWxkIGV4cG9zZSB0aGlzIGRhdGEgaGVyZSB0b28sIGFzIHdlIGNhbiBkbyBhbGxcbiAgLy8gc29ydHMgb2YgZGF0YSBwcm9jZXNzaW5nIHdpdGggYHJvb3REYXRhYCBhbmQgYGRhdGFQYXRoYC5cbiAgZ2V0IHBhcmVudEl0ZW0oKSB7XG4gICAgY29uc3QgcGFyZW50SXRlbSA9IChcbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8XG4gICAgICBudWxsXG4gICAgKVxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBhc0FycmF5LFxuICBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgICAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdWlkXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHJlYWN0aXZlKHt9KSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSAqTGluaygpIHRvICpSb3V0ZSgpLlxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICEhc2NoZW1hICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICBzY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgcmV0dXJuIHVybCA/IHRoaXMuYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnk6IHJlc291cmNlLnF1ZXJ5IH0pIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgcXVlcnksIGRhdGEsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVVybCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7IG1ldGhvZCwgdXJsLCBkYXRhLCBxdWVyeSB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBidXR0b25zLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzZXR0aW5nc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSAoXG4gICAgICAgIGNhY2hlICYmXG4gICAgICAgIHtcbiAgICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgICB9W2NhY2hlXVxuICAgICAgKVxuICAgICAgY29uc3QgbG9hZENhY2hlID0gY2FjaGVQYXJlbnQ/LmxvYWRDYWNoZVxuICAgICAgLy8gQnVpbGQgYSBjYWNoZSBrZXkgZnJvbSB0aGUgY29uZmlnOlxuICAgICAgY29uc3QgY2FjaGVLZXkgPSAoXG4gICAgICAgIGxvYWRDYWNoZSAmJlxuICAgICAgICBgJHtcbiAgICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J1xuICAgICAgICB9ICR7XG4gICAgICAgICAgb3B0aW9ucy51cmxcbiAgICAgICAgfSAke1xuICAgICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaChsb2NhdGlvbilcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICAgICAgICA/IHsgZ2V0OiB2YWx1ZSB9XG4gICAgICAgICAgOiBpc09iamVjdCh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXQpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PlxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IG51bGwsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHRoaXMucGFyc2VkVmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBldmVudHMoKSB7XG4gICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25JbnB1dCwgb25DaGFuZ2UgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IFtlbGVtZW50XSA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKVxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGRpc2FibGVkLCBgZm9jdXMoKWAgd2lsbCBsaWtlbHkgbm90IGhhdmUgdGhlXG4gICAgICAgICAgLy8gZGVzaXJlZCBlZmZlY3QuIFVzZSBgc2Nyb2xsSW50b1ZpZXcoKWAgaWYgYXZhaWxhYmxlOlxuICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICA7KGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OlxuICAgICAgICAgIHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgaXNNb2R1bGUsXG4gIGNsb25lLFxuICBtZXJnZSxcbiAgY2FtZWxpemUsXG4gIG1hcENvbmN1cnJlbnRseVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5mdW5jdGlvbiBnZXRTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBbLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSksIHNjaGVtYV1cbiAgICA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIHJldHVybiBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzY2hlbWFzID0gZ2V0U2NoZW1hcyhzY2hlbWEpXG4gICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSB8fCBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkKVxuICAgICkgPT09XG4gICAgdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICAoY29tcG9uZW50LCBuYW1lKSA9PiAoIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZClcbiAgICApICE9PVxuICAgIGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBwcm9jZXNzRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYS5jb21wb25lbnQsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHJldHVybiB7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBwcm9jZXNzRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICBhd2FpdCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgbGV0IGRlZmF1bHRzID0gYXBpLmRlZmF1bHRzW3NjaGVtYS50eXBlXVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0cykpIHtcbiAgICAgIGRlZmF1bHRzID0gZGVmYXVsdHMoc2NoZW1hKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSBtZXJnZSh2YWx1ZSwgc2NoZW1hW2tleV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluLlxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICBjb25zdCBwcm9jZXNzRm9ybSA9IGFzeW5jIGZvcm0gPT4ge1xuICAgIGZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICAgIHByb2Nlc3NEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBwcm9jZXNzRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcHJvY2Vzc0Zvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuXG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5mb3JtIHx8IHNjaGVtYS5mb3JtcyB8fCBzY2hlbWEuY29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNWaWV3KHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuY29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC52aWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YFxuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5uZXN0ZWQgfHwgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKFxuICAgICAgRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9XG4gICAgICAgICAgICAgIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGlmIChzY2hlbWEudGFicykge1xuICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMpKSB7XG4gICAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBwYW5lbCBvZiBnZXRBbGxQYW5lbFNjaGVtYXMoc2NoZW1hLCBkYXRhUGF0aCkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5zY2hlbWEuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0UGFkZGluZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZC5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUoXG4gIHYtaWY9XCJ1c2VyXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbiAgKVxuICAgIERpdG9TY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7IHNvbWVTY2hlbWFDb21wb25lbnQsIGlzU2luZ2xlQ29tcG9uZW50VmlldyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1ZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsIHtcbiAgeWVhciA9IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgbW9udGggPSBkYXRlPy5nZXRNb250aCgpID8/IDAsXG4gIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICBob3VyID0gZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICBtaW51dGUgPSBkYXRlPy5nZXRNaW51dGVzKCkgPz8gMCxcbiAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gIG1pbGxpc2Vjb25kID0gZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxufSA9IHt9KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKGRhdGUuZGF0ZSwgZGF0ZS5zdGF0ZSwgdHJ1ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheShcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgICksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0byB8fCBuZXcgRGF0ZSgpXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiZcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmIHllYXIgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlLCBzdGF0ZSwgY29weSA9IGZhbHNlKSB7XG4gICAgICBpZiAoc3RhdGUgIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9KVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhkYXRlLCB7IHllYXIsIG1vbnRoLCBkYXkgfSkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgaG9yLCB2ZXIsIGVudGVyIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudE1vZGUsIGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKGhvciB8fCB2ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgICBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBob3IgKyB2ZXIgKiA3XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICAgIHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgaG9yICsgdmVyICogNVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KHRvZGF5KVxuICAgICAgICAgICAgPyAndG9kYXknXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpXG4gICAgICAgICAgICAgID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNhbGVuZGFyIHtcbiAgbWluLXdpZHRoOiAyNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmRpdG8tY2FsZW5kYXItcG9wdXAge1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB6LWluZGV4OiAxMDAwO1xufVxuXG4uZGl0by1jYWxlbmRhci1ib2R5IHtcbiAgcGFkZGluZzogMCAwLjVlbTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5IHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlIHtcbiAgICAmLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXkge1xuICAgIGNvbG9yOiAjOTk5OTk5O1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHtcbiAgc3BhbiB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpO1xuICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xufVxuXG4uZGl0by1jYWxlbmRhciBhLFxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW4ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMCAwLjJlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQtaGVpZ2h0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgZGlzcGxheTogZmxleDtcblxuICA+IHNwYW4ge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA1JTtcbiAgbWluLXdpZHRoOiAyZW07XG4gIG1heC13aWR0aDogM2VtO1xuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuSc7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8KrJztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuic7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8K7JztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ05vdyc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJleHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldCwgZXZlbnRzKSB7XG4gIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICB9XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnNob3cnXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgICBpZiAodG8pIHtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0aGlzLmZvY3VzRXZlbnRzID0gYWRkRXZlbnRzKHRhcmdldCwge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gbnVsbFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyh0aGlzLnRhcmdldClcbiAgICAgICAgPyB0aGlzLiRyZWZzW3RoaXMudGFyZ2V0XVxuICAgICAgICA6IHRoaXMudGFyZ2V0XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgICBjb25zdCBlbCA9IHRhcmdldCA9PT0gcG9wdXAgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSAodGFyZ2V0IHx8IHRyaWdnZXIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zY3NzJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXRcbiAgaW5wdXQoXG4gICAgOmlkPVwiaWRcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgOmF1dG9mb2N1cz1cImF1dG9mb2N1c1wiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIDphdXRvY29tcGxldGU9XCJhdXRvY29tcGxldGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cIiRhdHRyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICAgIC8qXG4gICAgY2xlYXJhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgICBzdWZmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHByZWZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgICAqL1xuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICBkYXRlOiB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgdGltZTogZmFsc2VcbiAgICAgICAgfSkgfHwgJydcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmICgrY3VycmVudFZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBzZWVtcyB0byBjb250cmFkaWN0IHRoZSBgY3VycmVudFZhbHVlKClgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgLy8gICAgICAgSXMgdGhpcyBuZWVkZWQgYXQgYWxsP1xuICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIG1pbi13aWR0aDogMTBlbTtcblxuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gICAgfVxuICApXG4gIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgY29uc3QgcGVyVGljayA9IGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDEwXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgKyBwZXJUaWNrXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSByZXR1cm5cbiAgICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKGZpZWxkLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpXG4gICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKVxuICAgIHJhbmdlLnNlbGVjdCgpXG4gICAgZmllbGQuZm9jdXMoKVxuICB9IGVsc2UgaWYgKGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZmllbGQuZm9jdXMoKVxuICAgIGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBmaWVsZCkge1xuICAgIGZpZWxkLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRcbiAgICBmaWVsZC5zZWxlY3Rpb25FbmQgPSBlbmRcbiAgICBmaWVsZC5mb2N1cygpXG4gIH1cbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICApXG4gICAgLy8tIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vLSA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8tIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IHNjcm9sbFRvIH0gZnJvbSAnLi4vdXRpbHMvc2Nyb2xsLmpzJ1xuaW1wb3J0IHsgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZClcbiAgICAgICAgICB9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2VsZWN0aW9uOiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWUgPCAwID8gMiA6IHZhbHVlID4gMiA/IDAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aFxuICAgICAgICAgICAgICAgID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kaXRvLWljb24tdGltZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiA3cHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLXBpY2tlcnMoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgKVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvY3VzZWQgfHwgdGhpcy50aW1lRm9jdXNlZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuYmx1cigpXG4gICAgICB0aGlzLiRyZWZzLnRpbWUuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8tcGlja2VycyB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyIHtcbiAgICB3aWR0aDogNjAlO1xuICAgIG1pbi13aWR0aDogNi45ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICB3aWR0aDogNDAlO1xuICAgIG1pbi13aWR0aDogNS40ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLSN7JG5hbWV9IHtcbiAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlXG4gICAgKSAwXG4gICAgfCAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gKHRoaXMubnVtUGFnZXMgPSBNYXRoLmNlaWwodG90YWwgLyBjdXJyZW50UGFnZVNpemUpKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLCBjb2xvciAwcywgYmFja2dyb3VuZCAwcywgYm9yZGVyIDBzO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgcGFkZGluZzogMCAwLjVlbTtcblxuICAgICYtcHJldixcbiAgICAmLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1hcnJvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICYtZWxsaXBzaXMtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAtLXN3aXRjaC13aWR0aDogNHJlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKTtcbiAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjVlbTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uaGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmhlaWdodC1lbnRlci1mcm9tLFxuLmhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuXG5jb25zdCBVc2VGb2N1c1RyYXAgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogYCR7c2V0dGluZ3Mud2lkdGh9cHhgIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcChcbiAgICA6b3B0aW9ucz1cInsgaW1tZWRpYXRlOiB0cnVlLCBmYWxsYmFja0ZvY3VzOiAoKSA9PiAkcmVmcy5kaWFsb2cgfVwiXG4gIClcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgRGl0b1NjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMjAwMDtcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXJvb3RcbiAgVnVlTm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTWVudVxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBEaXRvSGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgRGl0b0FjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgYXNBcnJheSwgbWFwQ29uY3VycmVudGx5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEaXRvRGlhbG9nIGZyb20gJy4vRGl0b0RpYWxvZy52dWUnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1ZpZXcsXG4gIHJlc29sdmVTY2hlbWFzLFxuICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Jvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBEaXRvRGlhbG9nIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIHJlbW92ZVJvdXRlczogbnVsbCxcbiAgICAgIGRpYWxvZ3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyh0aGlzLmFwaSwgeyBjb21wb25lbnRzIH0sIHJvdXRlcywgMClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlc1xuICAgICAgXSlcbiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKGZ1bGxQYXRoKVxuICAgIH1cbiAgfVxufSlcblxubGV0IGRpYWxvZ0lkID0gMFxuXG5mdW5jdGlvbiBhZGRSb3V0ZXMocm91dGVyLCByb3V0ZXMpIHtcbiAgY29uc3QgcmVtb3ZlcnMgPSBbXVxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IHJlbW92ZVJvdXRlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlUm91dGUpXG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcmVtb3ZlIG9mIHJlbW92ZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJztcblxuLmRpdG8tYXBwLFxuLmRpdG8tcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kaXRvLXJvb3Qge1xuICAuZGl0by1wYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIC8vIFRoZSByb290LWxldmVsIHZpZXdzIGFuZCBmb3JtcyBtYXkgaGF2ZSBhIGAuZGl0by1zY2hlbWEtaGVhZGVyYCB0aGF0XG4gICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAvLyBJbiBvcmRlciB0byBub3QgaGF2ZSB0aGUgaGVhZGVyIGNsaXBwZWQsIGFkanVzdCB0aGUgdG9wIGhlcmU6XG4gICAgPiAuZGl0by1mb3JtLFxuICAgID4gLmRpdG8tdmlldyB7XG4gICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0O1xuICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgaDEge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgdWwuZGl0by1zY3JvbGxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwidmlldyBpbiB2aWV3c1wiXG4gICAgKVxuICAgICAgUm91dGVyTGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmVDbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge30pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tZW51IHtcbiAgZmxleDogaW5pdGlhbDtcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHVsIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGU7XG4gIH1cblxuICBhLFxuICBoMSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBoMSB7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3Q7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gIC5kaXRvLWxpbmsge1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tbGluayB7XG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3Bpbm5lcihcbiAgdi1zaG93PVwibG9hZGluZ1wiXG4pXG4gIC8vLSBUT0RPOiBDb252ZXJ0IHRvIEJFTVxuICAudi1wdWxzZS52LXB1bHNlMSg6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLCBzcGlubmVyRGVsYXkxXVwiKVxuICAudi1wdWxzZS52LXB1bHNlMig6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLCBzcGlubmVyRGVsYXkyXVwiKVxuICAudi1wdWxzZS52LXB1bHNlMyg6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLCBzcGlubmVyRGVsYXkzXVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjNWRjNTk2J1xuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzE1cHgnXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcycHgnXG4gICAgfSxcbiAgICByYWRpdXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxMDAlJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgb25seSBjbGFzc2VzXG4gICAgcmV0dXJuIHtcbiAgICAgIHNwaW5uZXJTdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuY29sb3IsXG4gICAgICAgIHdpZHRoOiB0aGlzLnNpemUsXG4gICAgICAgIGhlaWdodDogdGhpcy5zaXplLFxuICAgICAgICBtYXJnaW46IHRoaXMubWFyZ2luLFxuICAgICAgICBib3JkZXJSYWRpdXM6IHRoaXMucmFkaXVzLFxuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgYW5pbWF0aW9uTmFtZTogJ3YtcHVsc2VTdHJldGNoRGVsYXknLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogJzAuNzVzJyxcbiAgICAgICAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ICdpbmZpbml0ZScsXG4gICAgICAgIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOiAnY3ViaWMtYmV6aWVyKC4yLC42OCwuMTgsMS4wOCknLFxuICAgICAgICBhbmltYXRpb25GaWxsTW9kZTogJ2JvdGgnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5MToge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMTJzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTI6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjI0cydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkzOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4zNnMnXG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXkge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5IHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIlxuICAgICAgICApXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgICBSb3V0ZXJMaW5rLmRpdG8tYnJlYWRjcnVtYihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dG89XCJjb21wb25lbnQucGF0aFwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgRGl0b1NwaW5uZXIoXG4gICAgICB2LWlmPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9TcGlubmVyIGZyb20gJy4vRGl0b1NwaW5uZXIudnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9IZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgRGl0b1NwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayB0byBzZXQgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBEaXRvU3Bpbm5lci5cbiAgICAvLyBQYXNzIHRoZW0gb24gdGhyb3VnaCB0aGUgdGVtcGxhdGUgaW5zdGVhZCFcbiAgICBjb25zdCB7IHByb3BzIH0gPSBEaXRvU3Bpbm5lclxuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWhlYWRlciB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1ibGFjaztcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgei1pbmRleDogJG1lbnUtei1pbmRleDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gIC5kaXRvLXRyYWlsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgaGVpZ2h0OiAzZW07XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmc7XG5cbiAgICB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgIH1cblxuICAgIGEge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbTtcblxuICAgICAgJGFuZ2xlOiAzM2RlZztcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjOTk5OTk5O1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgIGhlaWdodDogMS4yZW07XG4gICAgICAgIHJpZ2h0OiAtMXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFyaztcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgICAgIH1cblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBib3R0b206IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1zcGlubmVyIHtcbiAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlcjtcbiAgfVxuXG4gIC5kaXRvLWRpcnR5IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiA4cHg7XG4gICAgICBoZWlnaHQ6IDhweDtcbiAgICAgIG1hcmdpbjogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1hY2NvdW50LFxuICAuZGl0by1sb2dpbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by1hY2NvdW50IHtcbiAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0FjY291bnQnLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHNldHRpbmdzOiAnU2V0dGluZ3MnLFxuICAgICAgICBsb2dvdXQ6ICdMb2dvdXQnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duU2VsZWN0KHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWFjY291bnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBEaXRvRWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoXG4gICAgOmZvcj1cImRhdGFQYXRoXCJcbiAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgKVxuICBEaXRvRWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTGFiZWwnLCB7XG4gIGVtaXRzOiBbJ2V4cGFuZCddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8geyBvbkNsaWNrOiB0aGlzLm9uQ2xpY2sgfSA6IHt9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGFiZWwge1xuICAtLWxhYmVsLXBhZGRpbmc6IDA7XG4gIC8vIEZvciBidXR0b25zIGFuZCBjaGV2cm9uIHRvIGFsaWduIHJpZ2h0OlxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG5cbiAgbGFiZWwge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIGxhYmVsLFxuICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gIC5kaXRvLWxhYmVsLXN1ZmZpeCB7XG4gICAgJjpudGgtbGFzdC1jaGlsZCgyKSB7XG4gICAgICAvLyBUbyBzdHJldGNoIGVpdGhlciBsYWJlbCBvciAuZGl0by1sYWJlbC1zdWZmaXggdG8gZnVsbCBhdmFpbGFibGUgd2lkdGhcbiAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICBmbGV4OiAxIDEgYXV0bztcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnXFxhMCc7IC8vICZuYnNwOztcbiAgICB9XG4gIH1cblxuICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gIC5kaXRvLWxhYmVsLXN1ZmZpeCB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICBsYWJlbCB7XG4gICAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIC8vIFNpbmNlIDxsYWJlbD4gdXNlcyBgcG9zaXRpb246IGFic29sdXRlYCwgc2V0IGNvbnRlbnQgdG8gYSB6ZXJvLXdpZHRoXG4gICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgIH1cbiAgfVxufVxuXG5hLmRpdG8tbGFiZWwge1xuICAmOmhvdmVyIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyO1xuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0XG4gICAgLy8gbGF5b3V0cyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWNvbXBhY3Qge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgPiAuZGl0by1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsXG4gIGdldEl0ZW1JZCxcbiAgZ2V0SXRlbVVpZCxcbiAgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IC8vIEZvciB0cmFuc2llbnQgZGF0YSwgdGhlIGluZGV4IGlzIHVzZWQgYXMgdGhlIGlkXG4gICAgICAgICAgaXRlbUlkXG4gICAgICAgIDogZGF0YT8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpID09PSBpdGVtSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICA7KHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA9IGxhYmVsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSBsYWJlbFxuICAgICAgICB9XG4gICAgICAgIC8vIEl0J3MgdXAgdG8gYGl0ZW1MYWJlbCgpYCBlbnRpcmVseSB0byBwcm9kdWNlIHRoZSBsYWJlbDpcbiAgICAgICAgZXh0ZW5kZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhpdGVtTGFiZWwpICYmICEoaXRlbUxhYmVsIGluIGl0ZW0pKSB7XG4gICAgICAgIC8vIGBpdGVtTGFiZWxgIGNhbiBiZSBib3RoIGEga2V5LCBvciBzaW1wbHkgYSBsYWJlbC5cbiAgICAgICAgdGV4dCA9IGl0ZW1MYWJlbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9vayB1cCB0aGUgbmFtZSBvbiB0aGUgaXRlbSwgYnkgdGhlc2UgcnVsZXM6XG4gICAgICAgIC8vIDEuIElmIGBpdGVtTGFiZWxgIGlzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIHByb3BlcnR5IGtleVxuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBjb2x1bW5zLCB1c2UgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyAzLiBPdGhlcndpc2UsIHNlZSBpZiB0aGUgaXRlbSBoYXMgYSBwcm9wZXJ0eSBuYW1lZCAnbmFtZSdcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgaXRlbUxhYmVsIHx8XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgY29sdW1ucyAmJiBPYmplY3Qua2V5cyhjb2x1bW5zKVswXSB8fFxuICAgICAgICAgICduYW1lJ1xuICAgICAgICApXG4gICAgICAgIHRleHQgPSBpdGVtW2tleV1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhZExhYmVsID0gISF0ZXh0XG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGUgaW5kZXguXG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICB0ZXh0ID1cbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgPyAodGV4dCA9IGAke2luZGV4ICsgMX1gKVxuICAgICAgICAgICAgOiAnJ1xuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2NoZW1hXG4gIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgKVxuICAgICAgRGl0b0xhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vLSBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgIClcbiAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgIERpdG9UYWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIERpdG9DbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgKVxuICAgICAgRGl0b1BhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1mb3I9XCIodGFiU2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwidGFiU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICBUcmFuc2l0aW9uSGVpZ2h0KDplbmFibGVkPVwiaW5saW5lZFwiKVxuICAgICAgRGl0b1BhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUoXG4gICAgdi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIlxuICApXG4gICAgRGl0b1BhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRQYW5lbFNjaGVtYXMsXG4gIHNldERlZmF1bHRWYWx1ZXMsXG4gIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID1cbiAgICAgICAgY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgd2F0Y2hlciFcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiBgIyR7dGFifWAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG5cbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgZmxleDogMSAxIDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuXG4gICAgPiAqOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cblxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyxcbiAgPiAuZGl0by1wYW5lbHMge1xuICAgIGZsZXg6IDEgMSAwJTtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cblxuICA+IC5kaXRvLXBhbmVscyB7XG4gICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMDtcbiAgfVxuXG4gIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gIC5kaXRvLXBhbmUtdGFiICsgLmRpdG8tcGFuZS1tYWluIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluIHRvIHRoZSBydWxlclxuICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8tdGFicyxcbiAgLmRpdG8tY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICB9XG5cbiAgLmRpdG8tY2xpcGJvYXJkIHtcbiAgICAmOm9ubHktY2hpbGQge1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXIge1xuICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBoZWlnaHQ6ICRtZW51LWhlaWdodDtcbiAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yO1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleDtcbiAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cblxuICBidXR0b24uZGl0by1sYWJlbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICB6LWluZGV4OiAxO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hLWlubGluZWQge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZztcblxuICAgICAgLmRpdG8tbGFiZWwge1xuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluXG4gICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgICAgLy8gQmVjYXVzZSB0YWJsZXMgaGF2ZSBhIGZ1bm55IHdheSBvZiBhbGxvd2luZyB0b28gbXVjaCB3aWR0aCBncm93dGg6XG4gICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgICAgIC8vIFByZXZlbnQgY29sbGFwc2luZyB0byBtaW4taGVpZ2h0IHdoZW4gYWxvbmUgaW5cbiAgICAgICAgLy8gLmRpdG8tc2NoZW1hLWNvbnRlbnQsIGR1ZSB0byBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJlbTtcbiAgICAgIH1cblxuICAgICAgJiArIC5kaXRvLXBhbmUge1xuICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgIG1pbi1oZWlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT5cbiAgICAgICAgICBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKTtcbiAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJi5kaXRvLXBhbmUtbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmIHtcbiAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG4gIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICYge1xuICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtd2lkdGg6IHVuc2V0O1xuICB9XG5cbiAgLmRpdG8tYnJlYWsge1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgRGl0b0xhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEudHlwZSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlQ29tcG9uZW50Py5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb250YWluZXIge1xuICAvLyBOZWVkZWQgZm9yIGJldHRlciB2ZXJ0aWNhbCBhbGlnbm1lbnQ6XG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICY6ZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLmRpdG8tb21pdC1wYWRkaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gIH1cbn1cblxuLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4vLyB0eXBlIGNvbXBvbmVudHMgY2FuIG92ZXJyaWRlIGAuZGl0by13aWR0aC1maWxsYCBjbGFzcyAoZmlsdGVyIHByZWNlZGVuY2UpLlxuLmRpdG8tY29tcG9uZW50IHtcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICYuZGl0by1yYWRpby1idXR0b24ge1xuICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgbGlrZSBjaGFuZ2VkIHdpZHRoIG9uIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgb3ZlcnJpZGU6XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdGFic1xuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gIClcbiAgICBSb3V0ZXJMaW5rLmRpdG8tbGluayhcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDogYCMke2tleX1gIH1cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBzZWxlY3RlZFRhYiA9PT0ga2V5IH1cIlxuICAgICkge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFicycsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNlbGVjdGVkVGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kdGFiLWNvbG9yLWJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodDtcbiR0YWItY29sb3ItYWN0aXZlOiAkY29sb3ItbGlnaHRlc3Q7XG4kdGFiLWNvbG9yLWhvdmVyOiAkY29sb3Itd2hpdGU7XG5cbi5kaXRvLXRhYnMge1xuICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICBtYXJnaW4tbGVmdDogYXV0bztcblxuICBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaW5hY3RpdmU7XG4gICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpbjtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaG92ZXI7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWJhY2tncm91bmQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICBEaXRvU2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICBEaXRvQnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcblxuICAuZGl0by1wYW5lbC10aXRsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIH1cblxuICAuZGl0by1wYW5lbC1zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1vYmplY3Qge1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1wYW5lIHtcbiAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gICAgfVxuXG4gICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgKVxuICAgIERpdG9QYW5lbChcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aDtcbiAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKTtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyB1c2VTbG90cywgQ29tbWVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZOb2RlQ29udGVudCh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUgJiYgYXNBcnJheSh2bm9kZSkuc29tZSh2bm9kZSA9PiB2bm9kZS50eXBlICE9PSBDb21tZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzU2xvdENvbnRlbnQoc2xvdCwgcHJvcHMgPSB7fSkge1xuICBzbG90ID0gaXNTdHJpbmcoc2xvdCkgPyB1c2VTbG90cygpW3Nsb3RdIDogc2xvdFxuICByZXR1cm4gaGFzVk5vZGVDb250ZW50KHNsb3Q/Lihwcm9wcykpXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYnV0dG9ucyhcbiAgdi1pZj1cImJ1dHRvblNjaGVtYXMgfHwgaGFzU2xvdENvbnRlbnQoJHNsb3RzLmRlZmF1bHQpXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihidXR0b25TY2hlbWEpXCJcbiAgICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIClcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ2bm9kZSBvZiAkc2xvdHMuZGVmYXVsdD8uKClcIlxuICApXG4gICAgLy8tIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCxcbiAgICAvLy0gc28gaXQgY2FuIGJlIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgICAuZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzVk5vZGVDb250ZW50KHZub2RlKVwiXG4gICAgKVxuICAgICAgRGl0b1Zub2RlKDp2bm9kZT1cInZub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGhhc1Nsb3RDb250ZW50LCBoYXNWTm9kZUNvbnRlbnQgfSBmcm9tICcuLi91dGlscy92dWUuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0J1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgUm91dGVyTGluay5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNFZGl0YWJsZVwiXG4gICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRGVsZXRhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgIEBjbGljaz1cIiRlbWl0KCdkZWxldGUnKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VkaXRCdXR0b25zJywge1xuICBlbWl0czogWydkZWxldGUnXSxcblxuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8IChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIHRlbXBsYXRlKFxuICAgIHYtaWY9XCJzaG93UHVsbGRvd25cIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DcmVhdGVCdXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHJpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2UsXG4gICAgICBmaXhDbGlwYm9hcmQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBjb3B5LmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgICAgIGNsaXBib2FyZERhdGFcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykge1xuICAgICAgICAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0VmFsdWVzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIExvYWRpbmdNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgLy8gUGFzcyBsb2NhbCB2ZXJicyBvdmVycmlkZXMgb24gdG8gY2hpbGRyZW4sIHNlZSB2ZXJicygpIGNvbXB1dGVkIHByb3AuXG4gICAgICAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMsXG4gICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRoaXMuaGFzRGF0YVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkZWREYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdGhlIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlIGZvciB0aGVcbiAgICAgIC8vIGFzc29jaWF0ZWQgc291cmNlIHNjaGVtYS5cbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKClcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgYSBkYXRhLXNvdXJjZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2U6XG4gICAgICByZXR1cm4gISF0aGlzLnJlc291cmNlXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgLy8gUmV0dXJucyBgZmFsc2VgaGVyZSwgYnV0IGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIGB0cnVlYCBpblxuICAgICAgLy8gYFNvdXJjZU1peGluYCBmb3IgY29tcG9uZW50IHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEsIGJ1dFxuICAgICAgLy8gZWRpdCB0aGVpciBpdGVtcyB0aHJvdWdoIGEgbGlua2VkIHZpZXcuICBJbiB0aGlzIGNhc2UsIHJlYWwgaWRzIG5lZWQgdG9cbiAgICAgIC8vIGJlIHVzZWQuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgZm9ybSB0aGF0IHRoaXMgY29tcG9uZW50IGJlbG9uZ3MgdG8gYXMgd2VsbCwgc2luY2UgaXQgbWF5IGJlXG4gICAgICAvLyBpbiBjcmVhdGlvbiBtb2RlLCB3aGljaCBtYWtlcyBpdCB0cmFuc2llbnQuXG4gICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGxvb3AgZW5kbGVzc2x5IGJlY2F1c2UgRGl0b0Zvcm0gcmVkZWZpbmVzXG4gICAgICAvLyBgaXNUcmFuc2llbnQoKWAgdG8gb25seSByZXR1cm4gYCF0aGlzLnByb3ZpZGVzRGF0YWAuXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ29tcG9uZW50XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgIXRoaXMubGlua3NUb1ZpZXcgfHxcbiAgICAgICAgZm9ybSAmJiAoXG4gICAgICAgICAgZm9ybS5pc1RyYW5zaWVudCB8fFxuICAgICAgICAgIGZvcm0uaXNDcmVhdGluZ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHRyYW5zaWVudE5vdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmIChcbiAgICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICAgJ2luIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UuJ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBxdWVyeVBhcmFtcygpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wYWdpbmF0aW9uUmFuZ2VcbiAgICAgIGNvbnN0IHsgcGFnZSwgLi4ucXVlcnkgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnF1ZXJ5LCAvLyBRdWVyeSBtYXkgb3ZlcnJpZGUgc2NvcGUuXG4gICAgICAgIC4uLihyYW5nZSAmJiB7XG4gICAgICAgICAgLy8gUGFzcyBwYWdpbmF0aW9uIGFzIHJhbmdlLCBzbyB0aGF0IHdlIGF1dG9tYXRpY2FsbHkgZ2V0IE9iamVjdGlvbidzXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb3VudGluZzpcbiAgICAgICAgICByYW5nZTogcmFuZ2Uuam9pbignLCcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBuZXN0ZWQgZGF0YSwgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHNldHVwRGF0YSgpXG4gICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhIHx8IHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgdGhpcy5zZXR1cERhdGEoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UmVzb3VyY2UoKSB7XG4gICAgICAvLyBUaGlzIGlzIGRlZmluZWQgYXMgYSBtZXRob2Qgc28gdGhlIGNvbXB1dGVkIGByZXNvdXJjZWAgZ2V0dGVyIGNhblxuICAgICAgLy8gYmUgb3ZlcnJpZGRlbiBhbmQgYHN1cGVyYCBmdW5jdGlvbmFsaXR5IGNhbiBzdGlsbCBiZSBhY2Nlc3NlZC5cbiAgICAgIHJldHVybiBnZXRSZXNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYT8ucmVzb3VyY2UsIHtcbiAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50Rm9ybUNvbXBvbmVudD8ucmVzb3VyY2UgPz8gbnVsbFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0VmVyYnMoKSB7XG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuJHZlcmJzKClcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgICAgY3JlYXRlOiAnYWRkJyxcbiAgICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgICAgc2F2ZWQ6ICdhcHBsaWVkJyxcbiAgICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgICB9XG4gICAgICAgIDogdmVyYnNcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgLy8gQWN0dWFsIGNvZGUgaXMgaW4gc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQncyBlYXNlciB0byBvdmVycmlkZVxuICAgICAgLy8gYHNldHVwRGF0YSgpYCBhbmQgYW5kIGNhbGwgYGVuc3VyZURhdGEoKWAgZnJvbSB0aGUgb3ZlcnJpZGVzLFxuICAgICAgLy8gc2VlIERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpbi5cbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIGVuc3VyZURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEpIHtcbiAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWxvYWREYXRhKCkge1xuICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICB9LFxuXG4gICAgbG9hZERhdGEoY2xlYXIpIHtcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKSB7XG4gICAgICByZXR1cm4gc2V0RGVmYXVsdFZhbHVlcyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YVxuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IGlzU3RyaW5nKGRhdGE/LnR5cGUpXG4gICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBkYXRhPy5tZXNzYWdlID8/IGVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIHJlc291cmNlLCBkYXRhIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0byB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aCkge1xuICAvLyBGb3IgcGF0aHMgc3RhcmluZyB3aXRoIGAvYCwgd2UgY2FuIHVzZSB0aGUgbmF0aXZlIGBVUkwoKWAgY2xhc3MgdG8gcmVzb2x2ZVxuICAvLyB0aGUgcGF0aCwgd2hpY2ggd2lsbCBhbHNvIGhhbmRsZSBgLi5gIGFuZCBgLmAgc2VnbWVudHM6XG4gIHJldHVybiBuZXcgVVJMKGBmaWxlOiR7cGF0aH1gKS5wYXRobmFtZVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vLSBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8tIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8tIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8tIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vLSBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKVxuICAgIC8vLSBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8tIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vLSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGVcbiAgICAgICAgICAvLyByaWdodCB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgICApIHx8IHt9XG4gICAgICApIC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5pc011dGF0aW5nICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzTXV0YXRpbmcgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBwZXJzaXN0ZW5jZSB1cG9uIHN1Ym1pc3Npb24uXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiAhIXRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMucGFyYW0gPz8gbnVsbFxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICAvLyBGb3JtcyB0aGF0IGFyZSBhYm91dCB0byBiZSBkZXN0cm95ZWQgZHVlIHRvIG5hdmlnYXRpb24gbG9vc2UgdGhlaXJcbiAgICAgIC8vIHJvdXRlLXJlY29yZCwgYnV0IG1pZ2h0IHN0aWxsIHRyaWdnZXIgdGhpcyBnZXR0ZXIuIEZpbHRlciB0aG9zZSBvdXQuXG4gICAgICBsZXQgZGF0YSA9IHRoaXMucm91dGVSZWNvcmQgPyB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LmRhdGEgOiBudWxsXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKFxuICAgICAgICB0aGlzLnBhdGhcbiAgICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPSBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50XG4gICAgICAgICAgPyAnY3JlYXRlJ1xuICAgICAgICAgIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudFxuICAgICAgICAgID8gJ3N1Ym1pdCdcbiAgICAgICAgICA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiByZXNvbHZlUGF0aChgJHt0aGlzLnBhdGh9Ly4uLyR7aWR9YCkgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybU5lc3RlZCcsIHtcbiAgZXh0ZW5kczogRGl0b0Zvcm1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1mb3JtLW5lc3RlZCB7XG4gICYsXG4gIC5kaXRvLXNjcm9sbCB7XG4gICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAvLyBiZWluZyBjcm9wcGVkLlxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiXG4gICAgKVxuICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Vycm9ycycsIHtcbiAgcHJvcHM6IHtcbiAgICBlcnJvcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZXJyb3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuXG4gIHVsIHtcbiAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fb2JqUmVzdCA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB1c2VTb3J0YWJsZShlbCwgbGlzdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBzb3J0YWJsZTtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50IH0gPSBfYSwgcmVzZXRPcHRpb25zID0gX19vYmpSZXN0KF9hLCBbXCJkb2N1bWVudFwiXSk7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQpXG4gICAgICByZXR1cm47XG4gICAgc29ydGFibGUgPSBuZXcgU29ydGFibGUodGFyZ2V0LCBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgZGVmYXVsdE9wdGlvbnMpLCByZXNldE9wdGlvbnMpKTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlID09IG51bGwgPyB2b2lkIDAgOiBzb3J0YWJsZS5kZXN0cm95KCk7XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCB9O1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bykge1xuICBjb25zdCBhcnJheSA9IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpKTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VTb3J0YWJsZVwiLFxuICBtb2RlbDoge1xuICAgIC8vIENvbXBhdGlibGUgd2l0aCB2dWUyXG4gICAgcHJvcDogXCJtb2RlbFZhbHVlXCIsXG4gICAgZXZlbnQ6IFwidXBkYXRlOm1vZGVsVmFsdWVcIlxuICB9LFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJkaXZcIlxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBsaXN0ID0gdXNlVk1vZGVsKHByb3BzLCBcIm1vZGVsVmFsdWVcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHJlYWN0aXZlKHVzZVNvcnRhYmxlKHRhcmdldCwgbGlzdCwgcHJvcHMub3B0aW9ucykpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMudGFnLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoZGF0YSkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VTb3J0YWJsZSB9O1xuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IFVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTb3J0YWJsZU9wdGlvbnMoZHJhZ2dhYmxlLCBmYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgZGlzYWJsZWQ6ICFkcmFnZ2FibGUsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1zb3J0YWJsZS1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tc29ydGFibGUtY2hvc2VuJyxcbiAgICAgICAgZ2hvc3RDbGFzczogJ2RpdG8tc29ydGFibGUtZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1zb3J0YWJsZS1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgVXNlU29ydGFibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGNoaWxkcmVuTGlzdCA9IHZhbHVlKVwiXG4gIClcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vLSBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmVlSXRlbScsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgY2hpbGRyZW5TY2hlbWEsXG4gICAgICAgICAgY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1pdGVtIHtcbiAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9O1xuXG4gID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgPiAuZGl0by10cmVlLWxlYWYge1xuICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gsXG4gIC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFweCAwO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbTtcbiAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIDAuMik7XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAxcHggMCAxcHggMWVtO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXIge1xuICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIH0gLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICB9XG5cbiAgJi5kaXRvLWRyYWdnaW5nIHtcbiAgICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmUge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tcHJvcGVydGllcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudDtcblxuICAgID4gdHIge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnOiAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgIClcbiAgICAgIHRoKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgUm91dGVyTGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbVxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNjc3NcbiAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVIZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPVxuICAgICAgICB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICAgID8gJ2Rlc2MnXG4gICAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFibGUtaGVhZCB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHRyIHtcbiAgICB0aCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAuZGl0by1idXR0b24ge1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnYnV0dG9uJywgJ3N1Ym1pdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICAgIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAgIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZ2V0KHRleHQpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KSxcblxuICAgICAgLy8gQG92ZXJyaWRlXG4gICAgICBldmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCB7XG4gICAgICByZXNvbHZlQ291bnRlciA9IDEsXG4gICAgICAuLi5sb2FkaW5nT3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8PSByZWFjdGl2ZSh7XG4gICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgIHJlc29sdmVkRGF0YTogbnVsbCxcbiAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgfSkpXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgdmFsdWUgb25jZVxuICAgICAgICAvLyBgcmVzb2x2ZUNvdW50ZXJgIHJlYWNoZXMgemVyby4gQ291bnRpbmcgaXMgbmVlZGVkIGJlY2F1c2UgZGVwZW5kaW5nXG4gICAgICAgIC8vIG9uIHRoZSB1c2Ugb2YgZGF0YSBhbmQgcmVhY3Rpdml0eSwgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGNvbXB1dGVkXG4gICAgICAgIC8vIGdldHRlciBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGEgaXMgY2hhbmdpbmcuIENsZWFyaW5nIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyBkYXRhIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnMgYW5kIG9ubHlcbiAgICAgICAgLy8gcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZSByZWV2YWx1YXRpb246XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGlmICgtLWFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPT09IDApIHtcbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPSByZXNvbHZlQ291bnRlclxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZSxcbiAgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJlxuICAgICAgICAgIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb24gfHwgW11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveGVzIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1jaGVja2JveCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvZGUoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiY29kZVwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplO1xuJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aDtcblxuLmRpdG8tY29sb3Ige1xuICAuZGl0by1pbnB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcGlja2VyIHtcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXByZXZpZXcge1xuICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeTtcbiAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcblxuICAgICYsXG4gICAgZGl2IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlU2NoZW1hQ29tcG9uZW50KClgLiBUaGlzXG4vLyBjYW4gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIGF3YWl0IHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vLSBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbiddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICdzY2hlbWEnLCB7XG4gICAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlXG4gICAgICAgICAgICAgIC8vIGB2YWx1ZWAgZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvXG4gICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgcmVzb2x2ZWQgZGF0YSB0d2ljZS5cbiAgICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGFcbiAgICAvLyBiZXR0ZXIgd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHlcbiAgICAvLyBzdXBwb3J0ZWQgYXR0cmlidXRlcylcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZGF0ZVZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGF0ZUZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RhdGVGb3JtYXQnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgICB9W3R5cGVdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLFxuICBwcm9jZXNzRm9ybXMsXG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIGdldFZpZXdTY2hlbWEsXG4gIGhhc0xhYmVscyxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2UsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyBkYXRhICYmIGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT5cbiAgICAgICAgcGFyYW1cbiAgICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb24oXG4gICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgKVxuICAgIERpdG9TY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLy0gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vLSBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBEaXRvUGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgRGl0b1RhYmxlSGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIFVzZVNvcnRhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGxpc3REYXRhID0gdmFsdWUpXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGxpc3REYXRhXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiKVxuICAgICAgICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICApXG4gIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBEaXRvRWRpdEJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFZpZXdFZGl0UGF0aCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0RmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIHNpbXBsZSBwcm94eSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdENvbXBvbmVudCgpPy5xdWVyeVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0IHF1ZXJ5KHF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBnZXRMaXN0Q29tcG9uZW50KClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNQYWdpbmF0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGUgJiYgdGhpcy50b3RhbCA+IHRoaXMucGFnaW5hdGVcbiAgICB9LFxuXG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5idXR0b25TY2hlbWFzIHx8IHRoaXMuY3JlYXRhYmxlKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEuY29sdW1ucyksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxpc3Qge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tbmF2aWdhdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZjtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZGl0by1zY29wZXMsXG4gICAgLmRpdG8tcGFnaW5hdGlvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNpbmdsZSB7XG4gICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b0xhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KFxuICA6bGFiZWw9XCJ2YWx1ZVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFVuZGVybGluZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcbi8vIE5vZGVzOlxuaW1wb3J0IHsgQmxvY2txdW90ZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUnXG5pbXBvcnQgeyBDb2RlQmxvY2sgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrJ1xuaW1wb3J0IHsgSGFyZEJyZWFrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGFyZC1icmVhaydcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJ1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbFJ1bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ob3Jpem9udGFsLXJ1bGUnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCdcbmltcG9ydCB7IEJ1bGxldExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWxsZXQtbGlzdCdcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGlzdC1pdGVtJ1xuLy8gVE9ETzpcbi8vIGltcG9ydCB7IEltYWdlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnXG4vLyBpbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbidcbi8vIGltcG9ydCB7IENvZGVCbG9ja0hpZ2hsaWdodCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2staGlnaGxpZ2h0J1xuLy8gaW1wb3J0IHsgVGFibGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZSdcbi8vIGltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnXG4vLyBpbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcidcbi8vIGltcG9ydCB7IFRhYmxlTm9kZXMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1ub2Rlcydcbi8vIGltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93J1xuLy8gaW1wb3J0IHsgVGFza0xpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWxpc3QnXG4vLyBpbXBvcnQgeyBUYXNrSXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2staXRlbSdcbi8vIFRvb2xzOlxuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXG5cbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICB1bmRlcnNjb3JlLFxuICBoeXBoZW5hdGUsXG4gIGRlYm91bmNlLFxuICBjYW1lbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgICAvLyBjb21tYW5kcyBhcmUgYWxzbyBhY3RpdmU6XG4gICAgICAgICAgaWdub3JlQWN0aXZlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5vdGhlck5vZGVCdXR0b25zLnNvbWUoYnV0dG9uID0+IGJ1dHRvbi5pc0FjdGl2ZSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShlZGl0b3IgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZWRpdG9yLmdldEhUTUwoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChlZGl0b3IpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhlZGl0b3IpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZ2V0TWFya0F0dHJpYnV0ZXModGhpcy5lZGl0b3Iuc3RhdGUsICdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cmlidXRlc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCxcbiAgICAgICAgICAvLyBwcmVmaXggaXQgd2l0aCBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cHM6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0TGluayh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICBEb2N1bWVudCxcbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBIYXJkQnJlYWssIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJpYnV0ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pc0FjdGl2ZShuYW1lLCBhdHRyaWJ1dGVzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvci5jb21tYW5kc1trZXldKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtrZXldKGF0dHJpYnV0ZXMpLmZvY3VzKCkucnVuKClcbiAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgID8gb25DbGljayh0aGlzLmVkaXRvciwgYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICA6IGNvbW1hbmQoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZSwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBbYXR0cmlidXRlXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXJlc2l6ZSB7XG4gICAgQGV4dGVuZCAlaWNvbi1yZXNpemU7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucy10b29sYmFyIHtcbiAgICBtYXJnaW46ICRpbnB1dC1wYWRkaW5nLXZlciAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgVnVlTXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgOnNob3dMYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZ1BsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIlxuICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFja0J5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cExhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbFNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZVNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZU9uU2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgQG9wZW49XCJvbk9wZW5cIlxuICAgIEBjbG9zZT1cIm9uQ2xvc2VcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gKFxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcGxhY2Vob2xkZXIgfHwgKFxuICAgICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGVcbiAgICAgICAgICAgID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbk9wZW4oKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgZmlyZSBibHVyIGV2ZW50cyB3aGlsZSB0aGUgbXVsdGlzZWxlY3QgaXMgb3BlbiAoc2VlXG4gICAgICAvLyBiZWxvdyksIHdlIG5lZWQgdG8gZG8gaXQgaGVyZSwgd2hlbiBpdCdzIGFjdHVhbGx5IGNsb3NlZC5cbiAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMuZWxlbWVudC5pc09wZW4pIHtcbiAgICAgICAgVHlwZU1peGluLm1ldGhvZHMub25CbHVyLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0LmNzcyc7XG5cbiRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuJHRhZy1pY29uLXdpZHRoOiAxLjhlbTtcbiR0YWctbWFyZ2luOiAycHg7XG4kdGFnLXBhZGRpbmc6IDNweDtcbiR0YWctbGluZS1oZWlnaHQ6IDFlbTtcblxuLmRpdG8tbXVsdGlzZWxlY3Qge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLm11bHRpc2VsZWN0IHtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLWJsYWNrO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0X190YWdzIHtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMDtcbiAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3RhZyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW47XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3RhZ3Mtd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgLm11bHRpc2VsZWN0X19pbnB1dCB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudDtcbiAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAvLyAubXVsdGlzZWxlY3RfX3RhZ3M6XG4gICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXI7XG4gIH1cblxuICAubXVsdGlzZWxlY3QtLWFjdGl2ZSB7XG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlciB7XG4gICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAvLyBjb2xsYXBzZS5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB9XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3NlbGVjdCxcbiAgLm11bHRpc2VsZWN0X19zcGlubmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgICBib3R0b206ICRib3JkZXItd2lkdGg7XG4gICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0X19zZWxlY3Qge1xuICAgIHdpZHRoOiAwO1xuICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMik7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMik7XG4gICAgfVxuICB9XG5cbiAgLm11bHRpc2VsZWN0X19zcGlubmVyIHtcbiAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICBpbnNldDogMDtcbiAgICAgIG1hcmdpbjogYXV0bztcbiAgICB9XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX29wdGlvbiB7XG4gICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgaGVpZ2h0OiB1bnNldDtcbiAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodCB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3RhZy1pY29uIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoO1xuICAgIG1hcmdpbjogMDtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBleHRlbmQgJWljb24tY2xlYXI7XG5cbiAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgfVxuXG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgIH1cbiAgfVxuXG4gIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZCB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbiAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcblxuICAgICYubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0IHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICB9XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodCB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gIH1cblxuICAubXVsdGlzZWxlY3RfX3RhZ3MsXG4gIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyIHtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIH1cblxuICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlIHtcbiAgICAtLWlucHV0LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlIHtcbiAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0LS1hY3RpdmUge1xuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXQge1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyB7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgbWFyZ2luOiAtMXB4IDAgMDtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLm11bHRpc2VsZWN0LS1hYm92ZSB7XG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3Mge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICAgIG1hcmdpbjogMCAwIC0xcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8taGFzLWVycm9ycyB7XG4gICAgLm11bHRpc2VsZWN0X190YWdzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlciA/ICdhbnknIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ251bWJlcicsICdpbnRlZ2VyJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4vLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG5pbnB1dFt0eXBlPSdudW1iZXInXTpub3QoW3N0ZXBdKSB7XG4gICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8tIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpsYWJlbD1cIm9iamVjdExhYmVsXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHJhbmdlID8gcmFuZ2VbMV0gLSByYW5nZVswXSA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcmFkaW8tYnV0dG9ucyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2VjdGlvbig6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnOiAhIXNjaGVtYS5sYWJlbCB9XCIpXG4gIERpdG9QYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWN0aW9uIHtcbiAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWQge1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4kc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpO1xuXG4uZGl0by1zZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBzZWxlY3Qge1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4gIH1cbiAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICBzZWxlY3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSk7XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuU3dpdGNoQnV0dG9uLmRpdG8tc3dpdGNoKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLXRleHQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuICAgIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgICAgICB9W3RoaXMudHlwZV0gfHxcbiAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgaW5wdXRWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBVc2VTb3J0YWJsZShcbiAgICAgIHYtbW9kZWw9XCJmaWxlc1wiXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6b3B0aW9ucz1cImdldFNvcnRhYmxlT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQoXG4gICAgICAgICAgdi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICApXG4gICAgICAgIHRkIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgVnVlVXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9ybWF0RmlsZVNpemUsXG5cbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuICAgICAgICAgICAgfVtlcnJvcl0gfHxcbiAgICAgICAgICAgIGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcCgoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gKCF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkIHtcbiAgLmRpdG8tdGFibGUge1xuICAgIHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+ICoge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXVwbG9hZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGFzQXJyYXksXG4gIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLFxuICBoeXBoZW5hdGUsXG4gIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgbmFtZTogJ25vdGlmeScsXG4gICAgICBjb21wb25lbnROYW1lOiAnVnVlTm90aWZpY2F0aW9ucydcbiAgICB9KVxuXG4gICAgLy8gcm9vdC5jb21wb25lbnQoJ3Z1ZS1tb2RhbCcsIFZ1ZU1vZGFsKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICkudG9TdHJpbmcoKVxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidG9SYXciLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsImFzQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwidHlwZSIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwiaGFzUmVzb3VyY2UiLCJzY2hlbWEiLCJnZXRSZXNvdXJjZSIsImRlZmF1bHRzIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5IiwiRGl0b01peGluIiwidWlkIiwibmV4dFVpZCIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwibGFiZWxpemUiLCJidXR0b24iLCJ2ZXJiIiwicXVlcnkiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImV2ZW50cyIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImdldFN0b3JlQWNjZXNzb3IiLCJUeXBlTWl4aW4iLCJjb21wdXRlVmFsdWUiLCJwYXJzZSIsInNjaGVtYUNvbXBvbmVudCIsImxhYmVsIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImFkZCIsImVsZW1lbnQiLCJfYiIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZ2V0U2NoZW1hcyIsIml0ZXJhdGVTY2hlbWFDb21wb25lbnRzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3Iiwic2NoZW1hcyIsInNvbWVTY2hlbWFDb21wb25lbnQiLCJpc1NjaGVtYSIsImlzRm9ybSIsImlzVmlldyIsImdldFNjaGVtYUlkZW50aWZpZXIiLCJyZXNvbHZlU2NoZW1hIiwidW53cmFwTW9kdWxlIiwiaXNQcm9taXNlIiwiaXNNb2R1bGUiLCJrZXlzIiwicmVzb2x2ZVNjaGVtYXMiLCJ1bnJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVJdGVtIiwibWFwQ29uY3VycmVudGx5IiwiaXRlbSIsInJlc29sdmVQYW5lbHMiLCJwYW5lbHMiLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50IiwibWFya1JhdyIsInJlc29sdmVTY2hlbWFDb21wb25lbnRzIiwicHJvY2Vzc1ZpZXciLCJhcGkiLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJwcm9jZXNzRGVmYXVsdHMiLCJjaGlsZHJlbiIsInByb2Nlc3NDb21wb25lbnQiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsInJvdXRlcyIsImxldmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJtZXJnZSIsInByb21pc2VzIiwicHJvY2Vzc0Zvcm1zIiwicHJvY2Vzc0Zvcm0iLCJmb3JtIiwicmVzb2x2ZUZvcm0iLCJmb3JtcyIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld0Zvcm1TY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsImdldFZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJnZXRGb3JtU2NoZW1hcyIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImhhc0xhYmVsIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJzaG91bGRPbWl0UGFkZGluZyIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJoYXNMYWJlbHMiLCJjaGVja0NvbXBvbmVudHMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsInByb2Nlc3MiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJwcm9jZXNzZWRJdGVtIiwidGFiIiwicGFuZWwiLCJnZXRBbGxQYW5lbFNjaGVtYXMiLCJnZXROYW1lZFNjaGVtYXMiLCJhcnJheSIsInRvU2NoZW1hIiwiY2FtZWxpemUiLCJnZXRCdXR0b25TY2hlbWFzIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbFNjaGVtYSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbUlkIiwiZ2V0SXRlbVVpZCIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInJvdXRlQ29tcG9uZW50IiwibWF0Y2hlZCIsImkiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsImlzTG9hZGluZyIsImNvcHlEYXRlIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsInNpemUiLCJnZXRMZW5ndGgiLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiZGVmYXVsdEZvcm1hdHMiLCJzY3JvbGxUbyIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyVGljayIsInNldFNlbGVjdGlvbiIsImZpZWxkIiwic3RhcnQiLCJlbmQiLCJmb3JjZSIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJzZWxlY3RlZCIsImxlbmd0aCIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwicGFnZSIsInBhZ2VTaXplIiwiY3VycmVudFBhZ2VTaXplIiwic2hvd1ByZXYiLCJzaG93TmV4dCIsInRvdGFsIiwiY3VycmVudFBhZ2UiLCJzaG93TGVuZ3RoIiwibnVtUGFnZXMiLCJwYWdlUmFuZ2UiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsIkRpdG9EaWFsb2ciLCJlcnIiLCJ0aXRsZSIsInRleHQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiZnVsbFBhdGgiLCJhZGRSb3V0ZXMiLCJyb3V0ZXIiLCJyZW1vdmVycyIsInJvdXRlIiwicmVtb3ZlUm91dGUiLCJEaXRvU3Bpbm5lciIsImNvbG9yIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJjb250ZW50IiwiYXNPYmplY3QiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsInByZWZpeCIsInN1ZmZpeCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsInBhbmUiLCJjdXJyZW50VGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfaG9pc3RlZF8xIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsIl9jdHgiLCJfaG9pc3RlZF8yIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9EaXRvQ29udGFpbmVyIiwibmVzdGVkRGF0YVBhdGgiLCJzdG9yZSIsIl9ob2lzdGVkXzMiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiY2FwaXRhbGl6ZSIsImNsaXBib2FyZERhdGEiLCJwYXN0ZSIsInJlcG9ydCIsImpzb24iLCJfZCIsIl9jIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiX2UiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJyZXNvbHZlUGF0aCIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwicHJvcCIsIl9fb2JqUmVzdCIsInVzZVNvcnRhYmxlIiwibGlzdCIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIlNvcnRhYmxlTWl4aW4iLCJkcmFnZ2FibGUiLCJmYWxsYmFjayIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJfbm9ybWFsaXplU3R5bGUiLCJfY2FjaGUiLCJfd2l0aE1vZGlmaWVycyIsIiRldmVudCIsIl9ub3JtYWxpemVDbGFzcyIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX3RvRGlzcGxheVN0cmluZyIsIl9ob2lzdGVkXzUiLCJfaG9pc3RlZF83IiwiX21lcmdlUHJvcHMiLCJfd2l0aERpcmVjdGl2ZXMiLCJfaG9pc3RlZF84IiwiX2NvbXBvbmVudF9EaXRvTGFiZWwiLCJfY3JlYXRlVk5vZGUiLCJfY29tcG9uZW50X0RpdG9UYWJsZUNlbGwiLCJfY29tcG9uZW50X1VzZVNvcnRhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiZm9jdXNlZCIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwicGFyYW0iLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImdldEZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInBhcnNlRmlsdGVyc0RhdGEiLCJnZXRGaWx0ZXJzQ29tcG9uZW50cyIsImZvcm1hdEZpbHRlcnNEYXRhIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJfY29tcG9uZW50X0RpdG9UYWJsZUhlYWQiLCJfY29tcG9uZW50X0RpdG9TY2hlbWFJbmxpbmVkIiwiX3Jlc29sdmVEeW5hbWljQ29tcG9uZW50IiwiX2NvbXBvbmVudF9EaXRvRWRpdEJ1dHRvbnMiLCJfaG9pc3RlZF85IiwiZ2V0TGlzdENvbXBvbmVudCIsImZpbHRlcnNEYXRhUGF0aCIsIkVkaXRvckNvbnRlbnQiLCJJY29uIiwiZWRpdG9yIiwibWFya0J1dHRvbnMiLCJiYXNpY05vZGVCdXR0b25zIiwib3RoZXJOb2RlQnV0dG9ucyIsInRvb2xCdXR0b25zIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsIm9uVXBkYXRlIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiYWRkQnV0dG9uIiwiaWNvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiTWFyayIsImNvbW1hbmRzIiwiTGluayIsIm5vZGUiLCJfY29tcG9uZW50X1Z1ZU11bHRpc2VsZWN0IiwiVnVlTXVsdGlzZWxlY3QiLCJwbGFjZWhvbGRlciIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsImZpbGUiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ2YWwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImZvcm1hdFF1ZXJ5IiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQUFBLEtBQWVDLEdBQVM7QUFBQSxFQUN0QixPQUFPO0FBQUEsRUFDUCxpQkFBaUIsQ0FBRTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNOLFdBQVcsQ0FBRTtBQUFBO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixlQUFlO0FBQ2pCLENBQUM7QUNGTSxTQUFTQyxFQUFlQyxHQUFVQyxHQUFPO0FBQzlDLFNBQU9ELElBQ0gsR0FBR0EsS0FBWUMsTUFDZkE7QUFDTjtBQUVPLFNBQVNDLEdBQW9CRixHQUFVO0FBQzVDLFFBQU1HLElBQU9DLEdBQWNKLENBQVE7QUFDbkMsU0FBQUcsS0FBQSxRQUFBQSxFQUFNLE9BQ0NBO0FBQ1Q7QUFNTyxTQUFTRSxHQUFrQkwsR0FBVU0sSUFBUyxJQUFPO0FBQzFELFNBQU9BLElBQVNKLEdBQW9CRixDQUFRLElBQUlJLEdBQWNKLENBQVE7QUFDeEU7QUFFTyxTQUFTTyxHQUFnQlAsR0FBVU0sSUFBUyxJQUFPO0FBQ3hELFNBQU9FLEdBQWtCSCxHQUFrQkwsR0FBVU0sQ0FBTSxDQUFDO0FBQzlEO0FBRU8sU0FBU0csR0FBd0JULEdBQVVNLElBQVMsSUFBTztBQUNoRSxRQUFNSCxJQUFPRSxHQUFrQkwsR0FBVU0sQ0FBTTtBQUMvQyxNQUFJSCxHQUFNO0FBR1IsUUFBSUY7QUFDSjtBQUNFLE1BQUFBLElBQVFFLEVBQUssSUFBSztBQUFBLFdBQ1hGLEtBQVMsUUFBUVMsR0FBVSxDQUFDVCxDQUFLO0FBRTFDLFFBQUlBLEtBQVM7QUFDWCxhQUFPRTtBQUFBO0FBR1gsU0FBTztBQUNUO0FBRU8sU0FBU1EsR0FBc0JYLEdBQVVNLElBQVMsSUFBTztBQUM5RCxTQUFPRSxHQUFr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SUFBVzFqQixFQUFJLFNBQVNqSSxDQUFHLEdBRTNCSSxJQUFXLE1BQU0sTUFBTTZILEVBQUksVUFBVSxFQUFFLEtBQUFqSSxHQUFLLE9BQUFELEVBQUssQ0FBRSxHQUFHO0FBQUEsSUFDMUQsUUFBUUUsRUFBTyxZQUFhO0FBQUEsSUFDNUIsR0FBSW5GLEtBQVEsRUFBRSxNQUFNLEtBQUssVUFBVUEsQ0FBSTtJQUN2QyxTQUFTO0FBQUEsTUFDUCxHQUFJNndCLEtBQVkxakIsRUFBSTtBQUFBLE1BQ3BCLEdBQUdxa0I7QUFBQSxJQUNKO0FBQUEsSUFDRCxhQUNFWCxPQUFZNXVCLElBQUFrTCxFQUFJLFNBQUosUUFBQWxMLEVBQVUsZUFDbEIsWUFDQTtBQUFBLEVBQ1YsQ0FBRztBQU1ELE9BSkkwSCxJQUFBckUsRUFBUyxRQUFRLElBQUksY0FBYyxNQUFuQyxRQUFBcUUsRUFBc0MsU0FBUyx3QkFDakRyRSxFQUFTLE9BQU8sTUFBTUEsRUFBUyxLQUFNLElBR25DLENBQUNBLEVBQVM7QUFDWixVQUFNLElBQUlpc0IsR0FBYWpzQixDQUFRO0FBRWpDLFNBQU9BO0FBQ1Q7QUFFQSxTQUFTdXJCLEdBQVMxakIsR0FBS2pJLEdBQUs7QUFDMUIsU0FBTyxDQUFDdXNCLEdBQWN2c0IsQ0FBRyxLQUFLQSxFQUFJLFdBQVdpSSxFQUFJLEdBQUc7QUFDdEQ7QUFFQSxTQUFTeWpCLEdBQVV6akIsR0FBSyxFQUFFLEtBQUFqSSxHQUFLLE9BQUFELEVBQUssR0FBSTtBQUN0QyxFQUFLd3NCLEdBQWN2c0IsQ0FBRyxNQUNwQkEsSUFBTXdzQixHQUFZdmtCLEVBQUksS0FBS2pJLENBQUc7QUFHaEMsUUFBTXlpQixJQUFTZ0ssR0FBWTFzQixDQUFLO0FBQ2hDLFNBQU8waUIsSUFBUyxHQUFHemlCLEtBQU95aUIsTUFBV3ppQjtBQUN2QztBQUVBLFNBQVN3c0IsR0FBWUUsR0FBU0MsR0FBYTtBQUV6QyxTQUFPLEdBQUdELEVBQVEsUUFBUSxRQUFRLEVBQUUsS0FBS0MsRUFBWSxRQUFRLFFBQVEsRUFBRTtBQUN6RTtBQUVBLFNBQVNGLEdBQVkxc0IsR0FBTztBQUMxQixRQUFNc0YsSUFBVXRGLElBQ1p4RCxFQUFRd0QsQ0FBSyxJQUNYQSxJQUNBLE9BQU8sUUFBUUEsQ0FBSyxJQUN0QixDQUFFO0FBQ04sU0FBTyxJQUFJO0FBQUE7QUFBQTtBQUFBLElBR1RzRixFQUFRO0FBQUEsTUFDTixDQUFDQSxHQUFTLENBQUM5SixHQUFLSSxDQUFLLE1BQU07QUFDekIsbUJBQVdpd0IsS0FBT3h0QixFQUFRekMsQ0FBSztBQUM3QixVQUFBMEosRUFBUSxLQUFLLENBQUM5SixHQUFLcXdCLENBQUcsQ0FBQztBQUV6QixlQUFPdm1CO0FBQUEsTUFDUjtBQUFBLE1BQ0QsQ0FBRTtBQUFBLElBQ0g7QUFBQSxFQUNGLEVBQUMsU0FBVTtBQUNkOyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOls0Niw3OV19
|