@onekeyfe/cross-inpage-provider-injected 0.0.7-alpha.2 → 0.0.7-alpha.3
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.
|
@@ -3960,7 +3960,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
3960
3960
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
3961
3961
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
3962
3962
|
/* harmony export */ });
|
|
3963
|
-
const version = '0.0.7-alpha.
|
|
3963
|
+
const version = '0.0.7-alpha.3';
|
|
3964
3964
|
const versionBuild = '2020-0101-1';
|
|
3965
3965
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
|
3966
3966
|
version,
|
|
@@ -6142,4 +6142,4 @@ void 0;
|
|
|
6142
6142
|
/******/ })()
|
|
6143
6143
|
;
|
|
6144
6144
|
});
|
|
6145
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxRQUFuQztBQUNBQSxFQUFBQSxzQkFBc0IsQ0FBQyxRQUFELENBQXRCLEdBQW1DLFFBQW5DO0FBQ0FBLEVBQUFBLHNCQUFzQixDQUFDLE1BQUQsQ0FBdEIsR0FBaUMsTUFBakM7QUFDQUEsRUFBQUEsc0JBQXNCLENBQUMsVUFBRCxDQUF0QixHQUFxQyxVQUFyQztBQUNILENBUEQsRUFPR0Esc0JBQXNCLEtBQUtBLHNCQUFzQixHQUFHLEVBQTlCLENBUHpCOzs7Ozs7VUNOQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7O0FDTjRFO0FBQzJCO0FBQ25DO0FBQ3BFLHlCQUF5QixzRkFBdUI7QUFDaEQsb0JBQW9CLGdHQUE4QjtBQUNsRCxDQUFDO0FBQ0Qsb0ZBQWM7QUFDZCxrRkFBa0I7QUFDbEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL25vZGVfbW9kdWxlcy9mYXN0LXNhZmUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvbm9kZV9tb2R1bGVzL2V0aC1ycGMtZXJyb3JzL2Rpc3QvY2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL25vZGVfbW9kdWxlcy9ldGgtcnBjLWVycm9ycy9kaXN0L2Vycm9yLWNvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL25vZGVfbW9kdWxlcy9ldGgtcnBjLWVycm9ycy9kaXN0L2Vycm9ycy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL25vZGVfbW9kdWxlcy9ldGgtcnBjLWVycm9ycy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvbm9kZV9tb2R1bGVzL2V0aC1ycGMtZXJyb3JzL2Rpc3QvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9wcm92aWRlcnMvb25la2V5LWV0aC1wcm92aWRlci9ub2RlX21vZHVsZXMvZmFzdC1zYWZlLXN0cmluZ2lmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJlbGVjdHJvblwiIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L0pzQnJpZGdlQmFzZS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9Kc0JyaWRnZVNpbXBsZS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9Qcm92aWRlckJhc2UuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvY29uc3RzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2RlYnVnL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvZGVidWcvY29tbW9uLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2RlYnVnL2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2luamVjdEpzQnJpZGdlLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2luamVjdGVkRmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9pbmplY3RlZFByb3ZpZGVyUmVjZWl2ZUhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvbG9nZ2Vycy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9zaXRlTWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvdmVyc2lvbkluZm8uanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9kZXNrdG9wL2Rlc2t0b3AtYnJpZGdlLWluamVjdGVkL2Rpc3QvSnNCcmlkZ2VEZXNrdG9wSW5qZWN0ZWQuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9kZXNrdG9wL2Rlc2t0b3AtYnJpZGdlLWluamVjdGVkL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9lcnJvcnMvZGlzdC9jbGFzc2VzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL2Rpc3QvZXJyb3ItY29uc3RhbnRzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL2Rpc3QvZXJyb3JzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9lcnJvcnMvZGlzdC91dGlscy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9pbnBhZ2UtcHJvdmlkZXJzLWh1Yi9kaXN0L2luamVjdFdlYjNQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvUHJvdmlkZXJFdGhlcmV1bS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vQmFzZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvZGlzdC9ldGhlcmV1bS9NZXRhTWFza0lucGFnZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvZGlzdC9ldGhlcmV1bS9pbmRleC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vaW5pdGlhbGl6ZUlucGFnZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvZGlzdC9ldGhlcmV1bS9tZXNzYWdlcy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vc2hpbVdlYjMuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9wcm92aWRlcnMvb25la2V5LWV0aC1wcm92aWRlci9kaXN0L2V0aGVyZXVtL3NpdGVNZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9wcm92aWRlcnMvb25la2V5LXByaXZhdGUtcHJvdmlkZXIvZGlzdC9Qcm92aWRlclByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi90eXBlcy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4vc3JjL2luamVjdGVkRGVza3RvcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkod2luZG93LCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIndXNlIHN0cmljdCc7XG5cbi8vIGRvIG5vdCBlZGl0IC5qcyBmaWxlcyBkaXJlY3RseSAtIGVkaXQgc3JjL2luZGV4LmpzdFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09ICdvYmplY3QnICYmIHR5cGVvZiBiID09ICdvYmplY3QnKSB7XG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW5ndGgsIGksIGtleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0cnVlIGlmIGJvdGggTmFOLCBmYWxzZSBvdGhlcndpc2VcbiAgcmV0dXJuIGEhPT1hICYmIGIhPT1iO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuZGVmYXVsdCA9IHN0cmluZ2lmeVxuc3RyaW5naWZ5LnN0YWJsZSA9IGRldGVybWluaXN0aWNTdHJpbmdpZnlcbnN0cmluZ2lmeS5zdGFibGVTdHJpbmdpZnkgPSBkZXRlcm1pbmlzdGljU3RyaW5naWZ5XG5cbnZhciBMSU1JVF9SRVBMQUNFX05PREUgPSAnWy4uLl0nXG52YXIgQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFID0gJ1tDaXJjdWxhcl0nXG5cbnZhciBhcnIgPSBbXVxudmFyIHJlcGxhY2VyU3RhY2sgPSBbXVxuXG5mdW5jdGlvbiBkZWZhdWx0T3B0aW9ucyAoKSB7XG4gIHJldHVybiB7XG4gICAgZGVwdGhMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgZWRnZXNMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgfVxufVxuXG4vLyBSZWd1bGFyIHN0cmluZ2lmeVxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmosIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucygpXG4gIH1cblxuICBkZWNpcmMob2JqLCAnJywgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucylcbiAgdmFyIHJlc1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdbdW5hYmxlIHRvIHNlcmlhbGl6ZSwgY2lyY3VsYXIgcmVmZXJlbmNlIGlzIHRvbyBjb21wbGV4IHRvIGFuYWx5emVdJylcbiAgfSBmaW5hbGx5IHtcbiAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKClcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc2V0UmVwbGFjZSAocmVwbGFjZSwgdmFsLCBrLCBwYXJlbnQpIHtcbiAgdmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBrKVxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGssIHsgdmFsdWU6IHJlcGxhY2UgfSlcbiAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbCwgcHJvcGVydHlEZXNjcmlwdG9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZXJTdGFjay5wdXNoKFt2YWwsIGssIHJlcGxhY2VdKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJlbnRba10gPSByZXBsYWNlXG4gICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsXSlcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNpcmMgKHZhbCwgaywgZWRnZUluZGV4LCBzdGFjaywgcGFyZW50LCBkZXB0aCwgb3B0aW9ucykge1xuICBkZXB0aCArPSAxXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdGFja1tpXSA9PT0gdmFsKSB7XG4gICAgICAgIHNldFJlcGxhY2UoQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuZGVwdGhMaW1pdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGRlcHRoID4gb3B0aW9ucy5kZXB0aExpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5lZGdlc0xpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZWRnZUluZGV4ICsgMSA+IG9wdGlvbnMuZWRnZXNMaW1pdFxuICAgICkge1xuICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWwpXG4gICAgLy8gT3B0aW1pemUgZm9yIEFycmF5cy4gQmlnIGFycmF5cyBjb3VsZCBraWxsIHRoZSBwZXJmb3JtYW5jZSBvdGhlcndpc2UhXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZWNpcmModmFsW2ldLCBpLCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpXG4gICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgICBkZWNpcmModmFsW2tleV0sIGtleSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICAgIHN0YWNrLnBvcCgpXG4gIH1cbn1cblxuLy8gU3RhYmxlLXN0cmluZ2lmeVxuZnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uIChhLCBiKSB7XG4gIGlmIChhIDwgYikge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChhID4gYikge1xuICAgIHJldHVybiAxXG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY1N0cmluZ2lmeSAob2JqLCByZXBsYWNlciwgc3BhY2VyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMoKVxuICB9XG5cbiAgdmFyIHRtcCA9IGRldGVybWluaXN0aWNEZWNpcmMob2JqLCAnJywgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucykgfHwgb2JqXG4gIHZhciByZXNcbiAgdHJ5IHtcbiAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KHRtcCwgcmVwbGFjZXIsIHNwYWNlcilcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkodG1wLCByZXBsYWNlR2V0dGVyVmFsdWVzKHJlcGxhY2VyKSwgc3BhY2VyKVxuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgnW3VuYWJsZSB0byBzZXJpYWxpemUsIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyB0b28gY29tcGxleCB0byBhbmFseXplXScpXG4gIH0gZmluYWxseSB7XG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgcmVzdG9yZSB0aGUgb2JqZWN0IGFzIGl0IHdhcy5cbiAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKClcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY0RlY2lyYyAodmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gIGRlcHRoICs9IDFcbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWwpIHtcbiAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZGVwdGggPiBvcHRpb25zLmRlcHRoTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmVkZ2VzTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbClcbiAgICAvLyBPcHRpbWl6ZSBmb3IgQXJyYXlzLiBCaWcgYXJyYXlzIGNvdWxkIGtpbGwgdGhlIHBlcmZvcm1hbmNlIG90aGVyd2lzZSFcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRldGVybWluaXN0aWNEZWNpcmModmFsW2ldLCBpLCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IG9iamVjdCBpbiB0aGUgcmVxdWlyZWQgd2F5XG4gICAgICB2YXIgdG1wID0ge31cbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsKS5zb3J0KGNvbXBhcmVGdW5jdGlvbilcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICAgIGRldGVybWluaXN0aWNEZWNpcmModmFsW2tleV0sIGtleSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpXG4gICAgICAgIHRtcFtrZXldID0gdmFsW2tleV1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGFyZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKVxuICAgICAgICBwYXJlbnRba10gPSB0bXBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0bXBcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxufVxuXG4vLyB3cmFwcyByZXBsYWNlciBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWVzIHdlIGNvdWxkbid0IHJlcGxhY2Vcbi8vIGFuZCBtYXJrIHRoZW0gYXMgcmVwbGFjZWQgdmFsdWVcbmZ1bmN0aW9uIHJlcGxhY2VHZXR0ZXJWYWx1ZXMgKHJlcGxhY2VyKSB7XG4gIHJlcGxhY2VyID1cbiAgICB0eXBlb2YgcmVwbGFjZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IHJlcGxhY2VyXG4gICAgICA6IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICAgIHJldHVybiB2XG4gICAgICB9XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGxhY2VyU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSByZXBsYWNlclN0YWNrW2ldXG4gICAgICAgIGlmIChwYXJ0WzFdID09PSBrZXkgJiYgcGFydFswXSA9PT0gdmFsKSB7XG4gICAgICAgICAgdmFsID0gcGFydFsyXVxuICAgICAgICAgIHJlcGxhY2VyU3RhY2suc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbClcbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV0aGVyZXVtUHJvdmlkZXJFcnJvciA9IGV4cG9ydHMuRXRoZXJldW1ScGNFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGZhc3Rfc2FmZV9zdHJpbmdpZnlfMSA9IHJlcXVpcmUoXCJmYXN0LXNhZmUtc3RyaW5naWZ5XCIpO1xuLyoqXG4gKiBFcnJvciBzdWJjbGFzcyBpbXBsZW1lbnRpbmcgSlNPTiBSUEMgMi4wIGVycm9ycyBhbmQgRXRoZXJldW0gUlBDIGVycm9yc1xuICogcGVyIEVJUC0xNDc0LlxuICogUGVybWl0cyBhbnkgaW50ZWdlciBlcnJvciBjb2RlLlxuICovXG5jbGFzcyBFdGhlcmV1bVJwY0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiY29kZVwiIG11c3QgYmUgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibWVzc2FnZVwiIG11c3QgYmUgYSBub25lbXB0eSBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHBsYWluIG9iamVjdCB3aXRoIGFsbCBwdWJsaWMgY2xhc3MgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB7XG4gICAgICAgICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YWNrKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnN0YWNrID0gdGhpcy5zdGFjaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZXJpYWxpemVkIGVycm9yLCBvbWl0dGluZ1xuICAgICAqIGFueSBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFzdF9zYWZlX3N0cmluZ2lmeV8xLmRlZmF1bHQodGhpcy5zZXJpYWxpemUoKSwgc3RyaW5naWZ5UmVwbGFjZXIsIDIpO1xuICAgIH1cbn1cbmV4cG9ydHMuRXRoZXJldW1ScGNFcnJvciA9IEV0aGVyZXVtUnBjRXJyb3I7XG4vKipcbiAqIEVycm9yIHN1YmNsYXNzIGltcGxlbWVudGluZyBFdGhlcmV1bSBQcm92aWRlciBlcnJvcnMgcGVyIEVJUC0xMTkzLlxuICogUGVybWl0cyBpbnRlZ2VyIGVycm9yIGNvZGVzIGluIHRoZSBbIDEwMDAgPD0gNDk5OSBdIHJhbmdlLlxuICovXG5jbGFzcyBFdGhlcmV1bVByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBFdGhlcmV1bVJwY0Vycm9yIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gRXRoZXJldW0gUHJvdmlkZXIgSlNPTi1SUEMgZXJyb3IuXG4gICAgICogYGNvZGVgIG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgMTAwMCA8PSA0OTk5IHJhbmdlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRXRoUHJvdmlkZXJDb2RlKGNvZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiY29kZVwiIG11c3QgYmUgYW4gaW50ZWdlciBzdWNoIHRoYXQ6IDEwMDAgPD0gY29kZSA8PSA0OTk5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoY29kZSwgbWVzc2FnZSwgZGF0YSk7XG4gICAgfVxufVxuZXhwb3J0cy5FdGhlcmV1bVByb3ZpZGVyRXJyb3IgPSBFdGhlcmV1bVByb3ZpZGVyRXJyb3I7XG4vLyBJbnRlcm5hbFxuZnVuY3Rpb24gaXNWYWxpZEV0aFByb3ZpZGVyQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA+PSAxMDAwICYmIGNvZGUgPD0gNDk5OTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeVJlcGxhY2VyKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAnW0NpcmN1bGFyXScpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJ4aGMzTmxjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5amJHRnpjMlZ6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096dEJRVUZCTERaRVFVRm5SRHRCUVZOb1JEczdPenRIUVVsSE8wRkJRMGdzVFVGQllTeG5Ra0ZCYjBJc1UwRkJVU3hMUVVGTE8wbEJUVFZETEZsQlFWa3NTVUZCV1N4RlFVRkZMRTlCUVdVc1JVRkJSU3hKUVVGUk8xRkJSV3BFTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzFsQlF6TkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzTkVKQlFUUkNMRU5CUXpkQ0xFTkJRVU03VTBGRFNEdFJRVU5FTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhQUVVGUExFdEJRVXNzVVVGQlVTeEZRVUZGTzFsQlF6TkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzYzBOQlFYTkRMRU5CUTNaRExFTkJRVU03VTBGRFNEdFJRVVZFTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVObUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFbEJRVWtzU1VGQlNTeExRVUZMTEZOQlFWTXNSVUZCUlR0WlFVTjBRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0VFFVTnNRanRKUVVOSUxFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTklMRk5CUVZNN1VVRkRVQ3hOUVVGTkxGVkJRVlVzUjBGQkswSTdXVUZETjBNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTzFsQlEyWXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUE8xTkJRM1JDTEVOQlFVTTdVVUZEUml4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVXNzVTBGQlV5eEZRVUZGTzFsQlF6TkNMRlZCUVZVc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0VFFVTTNRanRSUVVORUxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlR0WlFVTmtMRlZCUVZVc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0VFFVTXZRanRSUVVORUxFOUJRVThzVlVGQlZTeERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRkZSRHM3TzA5QlIwYzdTVUZEU0N4UlFVRlJPMUZCUTA0c1QwRkJUeXcyUWtGQllTeERRVU5zUWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRMmhDTEdsQ1FVRnBRaXhGUVVOcVFpeERRVUZETEVOQlEwWXNRMEZCUXp0SlFVTktMRU5CUVVNN1EwRkRSanRCUVhSRVJDdzBRMEZ6UkVNN1FVRkZSRHM3TzBkQlIwYzdRVUZEU0N4TlFVRmhMSEZDUVVGNVFpeFRRVUZSTEdkQ1FVRnRRanRKUVVVdlJEczdPMDlCUjBjN1NVRkRTQ3haUVVGWkxFbEJRVmtzUlVGQlJTeFBRVUZsTEVWQlFVVXNTVUZCVVR0UlFVVnFSQ3hKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3V1VGRGFrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkRZaXd5UkVGQk1rUXNRMEZETlVRc1EwRkJRenRUUVVOSU8xRkJSVVFzUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE4wSXNRMEZCUXp0RFFVTkdPMEZCYUVKRUxITkVRV2RDUXp0QlFVVkVMRmRCUVZjN1FVRkZXQ3hUUVVGVExITkNRVUZ6UWl4RFFVRkRMRWxCUVZrN1NVRkRNVU1zVDBGQlR5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeEpRVUZKTEVsQlFVa3NTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJRenRCUVVOb1JTeERRVUZETzBGQlJVUXNVMEZCVXl4cFFrRkJhVUlzUTBGQlF5eERRVUZWTEVWQlFVVXNTMEZCWXp0SlFVTnVSQ3hKUVVGSkxFdEJRVXNzUzBGQlN5eFpRVUZaTEVWQlFVVTdVVUZETVVJc1QwRkJUeXhUUVVGVExFTkJRVU03UzBGRGJFSTdTVUZEUkN4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVObUxFTkJRVU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lcnJvclZhbHVlcyA9IGV4cG9ydHMuZXJyb3JDb2RlcyA9IHZvaWQgMDtcbmV4cG9ydHMuZXJyb3JDb2RlcyA9IHtcbiAgICBycGM6IHtcbiAgICAgICAgaW52YWxpZElucHV0OiAtMzIwMDAsXG4gICAgICAgIHJlc291cmNlTm90Rm91bmQ6IC0zMjAwMSxcbiAgICAgICAgcmVzb3VyY2VVbmF2YWlsYWJsZTogLTMyMDAyLFxuICAgICAgICB0cmFuc2FjdGlvblJlamVjdGVkOiAtMzIwMDMsXG4gICAgICAgIG1ldGhvZE5vdFN1cHBvcnRlZDogLTMyMDA0LFxuICAgICAgICBsaW1pdEV4Y2VlZGVkOiAtMzIwMDUsXG4gICAgICAgIHBhcnNlOiAtMzI3MDAsXG4gICAgICAgIGludmFsaWRSZXF1ZXN0OiAtMzI2MDAsXG4gICAgICAgIG1ldGhvZE5vdEZvdW5kOiAtMzI2MDEsXG4gICAgICAgIGludmFsaWRQYXJhbXM6IC0zMjYwMixcbiAgICAgICAgaW50ZXJuYWw6IC0zMjYwMyxcbiAgICB9LFxuICAgIHByb3ZpZGVyOiB7XG4gICAgICAgIHVzZXJSZWplY3RlZFJlcXVlc3Q6IDQwMDEsXG4gICAgICAgIHVuYXV0aG9yaXplZDogNDEwMCxcbiAgICAgICAgdW5zdXBwb3J0ZWRNZXRob2Q6IDQyMDAsXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogNDkwMCxcbiAgICAgICAgY2hhaW5EaXNjb25uZWN0ZWQ6IDQ5MDEsXG4gICAgfSxcbn07XG5leHBvcnRzLmVycm9yVmFsdWVzID0ge1xuICAgICctMzI3MDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgSlNPTiB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci4gQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIHNlcnZlciB3aGlsZSBwYXJzaW5nIHRoZSBKU09OIHRleHQuJyxcbiAgICB9LFxuICAgICctMzI2MDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBKU09OIHNlbnQgaXMgbm90IGEgdmFsaWQgUmVxdWVzdCBvYmplY3QuJyxcbiAgICB9LFxuICAgICctMzI2MDEnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBtZXRob2QgZG9lcyBub3QgZXhpc3QgLyBpcyBub3QgYXZhaWxhYmxlLicsXG4gICAgfSxcbiAgICAnLTMyNjAyJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIG1ldGhvZCBwYXJhbWV0ZXIocykuJyxcbiAgICB9LFxuICAgICctMzI2MDMnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludGVybmFsIEpTT04tUlBDIGVycm9yLicsXG4gICAgfSxcbiAgICAnLTMyMDAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQuJyxcbiAgICB9LFxuICAgICctMzIwMDEnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnRUlQLTE0NzQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzb3VyY2Ugbm90IGZvdW5kLicsXG4gICAgfSxcbiAgICAnLTMyMDAyJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc291cmNlIHVuYXZhaWxhYmxlLicsXG4gICAgfSxcbiAgICAnLTMyMDAzJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1RyYW5zYWN0aW9uIHJlamVjdGVkLicsXG4gICAgfSxcbiAgICAnLTMyMDA0Jzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ01ldGhvZCBub3Qgc3VwcG9ydGVkLicsXG4gICAgfSxcbiAgICAnLTMyMDA1Jzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgbGltaXQgZXhjZWVkZWQuJyxcbiAgICB9LFxuICAgICc0MDAxJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1VzZXIgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuJyxcbiAgICB9LFxuICAgICc0MTAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSByZXF1ZXN0ZWQgYWNjb3VudCBhbmQvb3IgbWV0aG9kIGhhcyBub3QgYmVlbiBhdXRob3JpemVkIGJ5IHRoZSB1c2VyLicsXG4gICAgfSxcbiAgICAnNDIwMCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgRXRoZXJldW0gcHJvdmlkZXIuJyxcbiAgICB9LFxuICAgICc0OTAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwcm92aWRlciBpcyBkaXNjb25uZWN0ZWQgZnJvbSBhbGwgY2hhaW5zLicsXG4gICAgfSxcbiAgICAnNDkwMSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcHJvdmlkZXIgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBjaGFpbi4nLFxuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSXRZMjl1YzNSaGJuUnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDJWeWNtOXlMV052Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN1FVRjFRbUVzVVVGQlFTeFZRVUZWTEVkQlFXVTdTVUZEY0VNc1IwRkJSeXhGUVVGRk8xRkJRMGdzV1VGQldTeEZRVUZGTEVOQlFVTXNTMEZCU3p0UlFVTndRaXhuUWtGQlowSXNSVUZCUlN4RFFVRkRMRXRCUVVzN1VVRkRlRUlzYlVKQlFXMUNMRVZCUVVVc1EwRkJReXhMUVVGTE8xRkJRek5DTEcxQ1FVRnRRaXhGUVVGRkxFTkJRVU1zUzBGQlN6dFJRVU16UWl4clFrRkJhMElzUlVGQlJTeERRVUZETEV0QlFVczdVVUZETVVJc1lVRkJZU3hGUVVGRkxFTkJRVU1zUzBGQlN6dFJRVU55UWl4TFFVRkxMRVZCUVVVc1EwRkJReXhMUVVGTE8xRkJRMklzWTBGQll5eEZRVUZGTEVOQlFVTXNTMEZCU3p0UlFVTjBRaXhqUVVGakxFVkJRVVVzUTBGQlF5eExRVUZMTzFGQlEzUkNMR0ZCUVdFc1JVRkJSU3hEUVVGRExFdEJRVXM3VVVGRGNrSXNVVUZCVVN4RlFVRkZMRU5CUVVNc1MwRkJTenRMUVVOcVFqdEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMRzFDUVVGdFFpeEZRVUZGTEVsQlFVazdVVUZEZWtJc1dVRkJXU3hGUVVGRkxFbEJRVWs3VVVGRGJFSXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNUdFJRVU4yUWl4WlFVRlpMRVZCUVVVc1NVRkJTVHRSUVVOc1FpeHBRa0ZCYVVJc1JVRkJSU3hKUVVGSk8wdEJRM2hDTzBOQlEwWXNRMEZCUXp0QlFVVlhMRkZCUVVFc1YwRkJWeXhIUVVGSE8wbEJRM3BDTEZGQlFWRXNSVUZCUlR0UlFVTlNMRkZCUVZFc1JVRkJSU3hqUVVGak8xRkJRM2hDTEU5QlFVOHNSVUZCUlN4MVIwRkJkVWM3UzBGRGFrZzdTVUZEUkN4UlFVRlJMRVZCUVVVN1VVRkRVaXhSUVVGUkxFVkJRVVVzWTBGQll6dFJRVU40UWl4UFFVRlBMRVZCUVVVc09FTkJRVGhETzB0QlEzaEVPMGxCUTBRc1VVRkJVU3hGUVVGRk8xRkJRMUlzVVVGQlVTeEZRVUZGTEdOQlFXTTdVVUZEZUVJc1QwRkJUeXhGUVVGRkxDdERRVUVyUXp0TFFVTjZSRHRKUVVORUxGRkJRVkVzUlVGQlJUdFJRVU5TTEZGQlFWRXNSVUZCUlN4alFVRmpPMUZCUTNoQ0xFOUJRVThzUlVGQlJTdzRRa0ZCT0VJN1MwRkRlRU03U1VGRFJDeFJRVUZSTEVWQlFVVTdVVUZEVWl4UlFVRlJMRVZCUVVVc1kwRkJZenRSUVVONFFpeFBRVUZQTEVWQlFVVXNNRUpCUVRCQ08wdEJRM0JETzBsQlEwUXNVVUZCVVN4RlFVRkZPMUZCUTFJc1VVRkJVU3hGUVVGRkxGVkJRVlU3VVVGRGNFSXNUMEZCVHl4RlFVRkZMR2RDUVVGblFqdExRVU14UWp0SlFVTkVMRkZCUVZFc1JVRkJSVHRSUVVOU0xGRkJRVkVzUlVGQlJTeFZRVUZWTzFGQlEzQkNMRTlCUVU4c1JVRkJSU3h4UWtGQmNVSTdTMEZETDBJN1NVRkRSQ3hSUVVGUkxFVkJRVVU3VVVGRFVpeFJRVUZSTEVWQlFVVXNWVUZCVlR0UlFVTndRaXhQUVVGUExFVkJRVVVzZFVKQlFYVkNPMHRCUTJwRE8wbEJRMFFzVVVGQlVTeEZRVUZGTzFGQlExSXNVVUZCVVN4RlFVRkZMRlZCUVZVN1VVRkRjRUlzVDBGQlR5eEZRVUZGTEhWQ1FVRjFRanRMUVVOcVF6dEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMRkZCUVZFc1JVRkJSU3hWUVVGVk8xRkJRM0JDTEU5QlFVOHNSVUZCUlN4MVFrRkJkVUk3UzBGRGFrTTdTVUZEUkN4UlFVRlJMRVZCUVVVN1VVRkRVaXhSUVVGUkxFVkJRVVVzVlVGQlZUdFJRVU53UWl4UFFVRlBMRVZCUVVVc2VVSkJRWGxDTzB0QlEyNURPMGxCUTBRc1RVRkJUU3hGUVVGRk8xRkJRMDRzVVVGQlVTeEZRVUZGTEZWQlFWVTdVVUZEY0VJc1QwRkJUeXhGUVVGRkxEUkNRVUUwUWp0TFFVTjBRenRKUVVORUxFMUJRVTBzUlVGQlJUdFJRVU5PTEZGQlFWRXNSVUZCUlN4VlFVRlZPMUZCUTNCQ0xFOUJRVThzUlVGQlJTd3dSVUZCTUVVN1MwRkRjRVk3U1VGRFJDeE5RVUZOTEVWQlFVVTdVVUZEVGl4UlFVRlJMRVZCUVVVc1ZVRkJWVHRSUVVOd1FpeFBRVUZQTEVWQlFVVXNhMFZCUVd0Rk8wdEJRelZGTzBsQlEwUXNUVUZCVFN4RlFVRkZPMUZCUTA0c1VVRkJVU3hGUVVGRkxGVkJRVlU3VVVGRGNFSXNUMEZCVHl4RlFVRkZMQ3REUVVFclF6dExRVU42UkR0SlFVTkVMRTFCUVUwc1JVRkJSVHRSUVVOT0xGRkJRVkVzUlVGQlJTeFZRVUZWTzFGQlEzQkNMRTlCUVU4c1JVRkJSU3gzUkVGQmQwUTdTMEZEYkVVN1EwRkRSaXhEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXRoRXJyb3JzID0gdm9pZCAwO1xuY29uc3QgY2xhc3Nlc18xID0gcmVxdWlyZShcIi4vY2xhc3Nlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IGVycm9yX2NvbnN0YW50c18xID0gcmVxdWlyZShcIi4vZXJyb3ItY29uc3RhbnRzXCIpO1xuZXhwb3J0cy5ldGhFcnJvcnMgPSB7XG4gICAgcnBjOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgUGFyc2UgKC0zMjcwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogKGFyZykgPT4gZ2V0RXRoSnNvblJwY0Vycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucnBjLnBhcnNlLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgSlNPTiBSUEMgMi4wIEludmFsaWQgUmVxdWVzdCAoLTMyNjAwKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludmFsaWRSZXF1ZXN0OiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW52YWxpZFJlcXVlc3QsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgSW52YWxpZCBQYXJhbXMgKC0zMjYwMikgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBpbnZhbGlkUGFyYW1zOiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW52YWxpZFBhcmFtcywgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBNZXRob2QgTm90IEZvdW5kICgtMzI2MDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgbWV0aG9kTm90Rm91bmQ6IChhcmcpID0+IGdldEV0aEpzb25ScGNFcnJvcihlcnJvcl9jb25zdGFudHNfMS5lcnJvckNvZGVzLnJwYy5tZXRob2ROb3RGb3VuZCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBJbnRlcm5hbCAoLTMyNjAzKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludGVybmFsOiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW50ZXJuYWwsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgU2VydmVyIGVycm9yLlxuICAgICAgICAgKiBQZXJtaXRzIGludGVnZXIgZXJyb3IgY29kZXMgaW4gdGhlIFsgLTMyMDk5IDw9IC0zMjAwNSBdIHJhbmdlLlxuICAgICAgICAgKiBDb2RlcyAtMzIwMDAgdGhyb3VnaCAtMzIwMDQgYXJlIHJlc2VydmVkIGJ5IEVJUC0xNDc0LlxuICAgICAgICAgKi9cbiAgICAgICAgc2VydmVyOiAob3B0cykgPT4ge1xuICAgICAgICAgICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdGhlcmV1bSBSUEMgU2VydmVyIGVycm9ycyBtdXN0IHByb3ZpZGUgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gb3B0cztcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2RlKSB8fCBjb2RlID4gLTMyMDA1IHx8IGNvZGUgPCAtMzIwOTkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiY29kZVwiIG11c3QgYmUgYW4gaW50ZWdlciBzdWNoIHRoYXQ6IC0zMjA5OSA8PSBjb2RlIDw9IC0zMjAwNScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldEV0aEpzb25ScGNFcnJvcihjb2RlLCBvcHRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBKU09OIFJQQyBJbnZhbGlkIElucHV0ICgtMzIwMDApIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgaW52YWxpZElucHV0OiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW52YWxpZElucHV0LCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIEpTT04gUlBDIFJlc291cmNlIE5vdCBGb3VuZCAoLTMyMDAxKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIHJlc291cmNlTm90Rm91bmQ6IChhcmcpID0+IGdldEV0aEpzb25ScGNFcnJvcihlcnJvcl9jb25zdGFudHNfMS5lcnJvckNvZGVzLnJwYy5yZXNvdXJjZU5vdEZvdW5kLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIEpTT04gUlBDIFJlc291cmNlIFVuYXZhaWxhYmxlICgtMzIwMDIpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVzb3VyY2VVbmF2YWlsYWJsZTogKGFyZykgPT4gZ2V0RXRoSnNvblJwY0Vycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucnBjLnJlc291cmNlVW5hdmFpbGFibGUsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gRXRoZXJldW0gSlNPTiBSUEMgVHJhbnNhY3Rpb24gUmVqZWN0ZWQgKC0zMjAwMykgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc2FjdGlvblJlamVjdGVkOiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMudHJhbnNhY3Rpb25SZWplY3RlZCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBKU09OIFJQQyBNZXRob2QgTm90IFN1cHBvcnRlZCAoLTMyMDA0KSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIG1ldGhvZE5vdFN1cHBvcnRlZDogKGFyZykgPT4gZ2V0RXRoSnNvblJwY0Vycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucnBjLm1ldGhvZE5vdFN1cHBvcnRlZCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBKU09OIFJQQyBMaW1pdCBFeGNlZWRlZCAoLTMyMDA1KSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGxpbWl0RXhjZWVkZWQ6IChhcmcpID0+IGdldEV0aEpzb25ScGNFcnJvcihlcnJvcl9jb25zdGFudHNfMS5lcnJvckNvZGVzLnJwYy5saW1pdEV4Y2VlZGVkLCBhcmcpLFxuICAgIH0sXG4gICAgcHJvdmlkZXI6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBQcm92aWRlciBVc2VyIFJlamVjdGVkIFJlcXVlc3QgKDQwMDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdXNlclJlamVjdGVkUmVxdWVzdDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci51c2VyUmVqZWN0ZWRSZXF1ZXN0LCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIFByb3ZpZGVyIFVuYXV0aG9yaXplZCAoNDEwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRFdGhQcm92aWRlckVycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucHJvdmlkZXIudW5hdXRob3JpemVkLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIFByb3ZpZGVyIFVuc3VwcG9ydGVkIE1ldGhvZCAoNDIwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB1bnN1cHBvcnRlZE1ldGhvZDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci51bnN1cHBvcnRlZE1ldGhvZCwgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBQcm92aWRlciBOb3QgQ29ubmVjdGVkICg0OTAwKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci5kaXNjb25uZWN0ZWQsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gRXRoZXJldW0gUHJvdmlkZXIgQ2hhaW4gTm90IENvbm5lY3RlZCAoNDkwMSkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBjaGFpbkRpc2Nvbm5lY3RlZDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci5jaGFpbkRpc2Nvbm5lY3RlZCwgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGN1c3RvbSBFdGhlcmV1bSBQcm92aWRlciBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGN1c3RvbTogKG9wdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXRoZXJldW0gUHJvdmlkZXIgY3VzdG9tIGVycm9ycyBtdXN0IHByb3ZpZGUgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgbWVzc2FnZSwgZGF0YSB9ID0gb3B0cztcbiAgICAgICAgICAgIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibWVzc2FnZVwiIG11c3QgYmUgYSBub25lbXB0eSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgY2xhc3Nlc18xLkV0aGVyZXVtUHJvdmlkZXJFcnJvcihjb2RlLCBtZXNzYWdlLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8vIEludGVybmFsXG5mdW5jdGlvbiBnZXRFdGhKc29uUnBjRXJyb3IoY29kZSwgYXJnKSB7XG4gICAgY29uc3QgW21lc3NhZ2UsIGRhdGFdID0gcGFyc2VPcHRzKGFyZyk7XG4gICAgcmV0dXJuIG5ldyBjbGFzc2VzXzEuRXRoZXJldW1ScGNFcnJvcihjb2RlLCBtZXNzYWdlIHx8IHV0aWxzXzEuZ2V0TWVzc2FnZUZyb21Db2RlKGNvZGUpLCBkYXRhKTtcbn1cbmZ1bmN0aW9uIGdldEV0aFByb3ZpZGVyRXJyb3IoY29kZSwgYXJnKSB7XG4gICAgY29uc3QgW21lc3NhZ2UsIGRhdGFdID0gcGFyc2VPcHRzKGFyZyk7XG4gICAgcmV0dXJuIG5ldyBjbGFzc2VzXzEuRXRoZXJldW1Qcm92aWRlckVycm9yKGNvZGUsIG1lc3NhZ2UgfHwgdXRpbHNfMS5nZXRNZXNzYWdlRnJvbUNvZGUoY29kZSksIGRhdGEpO1xufVxuZnVuY3Rpb24gcGFyc2VPcHRzKGFyZykge1xuICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gW2FyZ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBkYXRhIH0gPSBhcmc7XG4gICAgICAgICAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBzdHJpbmcgbWVzc2FnZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZSB8fCB1bmRlZmluZWQsIGRhdGFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpYSnliM0p6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwyVnljbTl5Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdRVUZCUVN4MVEwRkJiMFU3UVVGRGNFVXNiVU5CUVRaRE8wRkJRemRETEhWRVFVRXJRenRCUVdWc1F5eFJRVUZCTEZOQlFWTXNSMEZCUnp0SlFVTjJRaXhIUVVGSExFVkJRVVU3VVVGRlNEczdWMEZGUnp0UlFVTklMRXRCUVVzc1JVRkJSU3hEUVVGSkxFZEJRWEZDTEVWQlFVVXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeERRVU55UkN3MFFrRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVTXhRanRSUVVWRU96dFhRVVZITzFGQlEwZ3NZMEZCWXl4RlFVRkZMRU5CUVVrc1IwRkJjVUlzUlVGQlJTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRemxFTERSQ1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExHTkJRV01zUlVGQlJTeEhRVUZITEVOQlEyNURPMUZCUlVRN08xZEJSVWM3VVVGRFNDeGhRVUZoTEVWQlFVVXNRMEZCU1N4SFFVRnhRaXhGUVVGRkxFVkJRVVVzUTBGQlF5eHJRa0ZCYTBJc1EwRkROMFFzTkVKQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1lVRkJZU3hGUVVGRkxFZEJRVWNzUTBGRGJFTTdVVUZGUkRzN1YwRkZSenRSUVVOSUxHTkJRV01zUlVGQlJTeERRVUZKTEVkQlFYRkNMRVZCUVVVc1JVRkJSU3hEUVVGRExHdENRVUZyUWl4RFFVTTVSQ3cwUWtGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4alFVRmpMRVZCUVVVc1IwRkJSeXhEUVVOdVF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc1VVRkJVU3hGUVVGRkxFTkJRVWtzUjBGQmNVSXNSVUZCUlN4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVOQlEzaEVMRFJDUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUXpkQ08xRkJSVVE3T3pzN1YwRkpSenRSUVVOSUxFMUJRVTBzUlVGQlJTeERRVUZKTEVsQlFUSkNMRVZCUVVVc1JVRkJSVHRaUVVONlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRTlCUVU4c1NVRkJTU3hMUVVGTExGRkJRVkVzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8yZENRVU0xUkN4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHbEZRVUZwUlN4RFFVRkRMRU5CUVVNN1lVRkRjRVk3V1VGRFJDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVTdaMEpCUXpkRUxFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlEySXNLMFJCUVN0RUxFTkJRMmhGTEVOQlFVTTdZVUZEU0R0WlFVTkVMRTlCUVU4c2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM2hETEVOQlFVTTdVVUZGUkRzN1YwRkZSenRSUVVOSUxGbEJRVmtzUlVGQlJTeERRVUZKTEVkQlFYRkNMRVZCUVVVc1JVRkJSU3hEUVVGRExHdENRVUZyUWl4RFFVTTFSQ3cwUWtGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1IwRkJSeXhEUVVOcVF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc1owSkJRV2RDTEVWQlFVVXNRMEZCU1N4SFFVRnhRaXhGUVVGRkxFVkJRVVVzUTBGQlF5eHJRa0ZCYTBJc1EwRkRhRVVzTkVKQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVTnlRenRSUVVWRU96dFhRVVZITzFGQlEwZ3NiVUpCUVcxQ0xFVkJRVVVzUTBGQlNTeEhRVUZ4UWl4RlFVRkZMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNRMEZEYmtVc05FSkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUjBGQlJ5eERRVU40UXp0UlFVVkVPenRYUVVWSE8xRkJRMGdzYlVKQlFXMUNMRVZCUVVVc1EwRkJTU3hIUVVGeFFpeEZRVUZGTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGRGJrVXNORUpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zYlVKQlFXMUNMRVZCUVVVc1IwRkJSeXhEUVVONFF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc2EwSkJRV3RDTEVWQlFVVXNRMEZCU1N4SFFVRnhRaXhGUVVGRkxFVkJRVVVzUTBGQlF5eHJRa0ZCYTBJc1EwRkRiRVVzTkVKQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNSMEZCUnl4RFFVTjJRenRSUVVWRU96dFhRVVZITzFGQlEwZ3NZVUZCWVN4RlFVRkZMRU5CUVVrc1IwRkJjVUlzUlVGQlJTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRemRFTERSQ1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExHRkJRV0VzUlVGQlJTeEhRVUZITEVOQlEyeERPMHRCUTBZN1NVRkZSQ3hSUVVGUkxFVkJRVVU3VVVGRlVqczdWMEZGUnp0UlFVTklMRzFDUVVGdFFpeEZRVUZGTEVOQlFVa3NSMEZCY1VJc1JVRkJSU3hGUVVGRk8xbEJRMmhFTEU5QlFVOHNiVUpCUVcxQ0xFTkJRM2hDTERSQ1FVRlZMRU5CUVVNc1VVRkJVU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZMRWRCUVVjc1EwRkROME1zUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkRzN1YwRkZSenRSUVVOSUxGbEJRVmtzUlVGQlJTeERRVUZKTEVkQlFYRkNMRVZCUVVVc1JVRkJSVHRaUVVONlF5eFBRVUZQTEcxQ1FVRnRRaXhEUVVONFFpdzBRa0ZCVlN4RFFVRkRMRkZCUVZFc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eERRVU4wUXl4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRU96dFhRVVZITzFGQlEwZ3NhVUpCUVdsQ0xFVkJRVVVzUTBGQlNTeEhRVUZ4UWl4RlFVRkZMRVZCUVVVN1dVRkRPVU1zVDBGQlR5eHRRa0ZCYlVJc1EwRkRlRUlzTkVKQlFWVXNRMEZCUXl4UlFVRlJMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNSMEZCUnl4RFFVTXpReXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc1dVRkJXU3hGUVVGRkxFTkJRVWtzUjBGQmNVSXNSVUZCUlN4RlFVRkZPMWxCUTNwRExFOUJRVThzYlVKQlFXMUNMRU5CUTNoQ0xEUkNRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmxCUVZrc1JVRkJSU3hIUVVGSExFTkJRM1JETEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRN08xZEJSVWM3VVVGRFNDeHBRa0ZCYVVJc1JVRkJSU3hEUVVGSkxFZEJRWEZDTEVWQlFVVXNSVUZCUlR0WlFVTTVReXhQUVVGUExHMUNRVUZ0UWl4RFFVTjRRaXcwUWtGQlZTeERRVUZETEZGQlFWRXNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeEhRVUZITEVOQlF6TkRMRU5CUVVNN1VVRkRTaXhEUVVGRE8xRkJSVVE3TzFkQlJVYzdVVUZEU0N4TlFVRk5MRVZCUVVVc1EwRkJTU3hKUVVGMVFpeEZRVUZGTEVWQlFVVTdXVUZEY2tNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeFBRVUZQTEVsQlFVa3NTMEZCU3l4UlFVRlJMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0blFrRkROVVFzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4elJVRkJjMFVzUTBGQlF5eERRVUZETzJGQlEzcEdPMWxCUlVRc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJSWEpETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhQUVVGUExFdEJRVXNzVVVGQlVTeEZRVUZGTzJkQ1FVTXpReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVU5pTEhGRFFVRnhReXhEUVVOMFF5eERRVUZETzJGQlEwZzdXVUZEUkN4UFFVRlBMRWxCUVVrc0swSkJRWEZDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4RFFVRkRPMHRCUTBZN1EwRkRSaXhEUVVGRE8wRkJSVVlzVjBGQlZ6dEJRVVZZTEZOQlFWTXNhMEpCUVd0Q0xFTkJRVWtzU1VGQldTeEZRVUZGTEVkQlFYRkNPMGxCUTJoRkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzWkRMRTlCUVU4c1NVRkJTU3d3UWtGQlowSXNRMEZEZWtJc1NVRkJTU3hGUVVOS0xFOUJRVThzU1VGQlNTd3dRa0ZCYTBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGRGJrTXNTVUZCU1N4RFFVTk1MRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJSVVFzVTBGQlV5eHRRa0ZCYlVJc1EwRkJTU3hKUVVGWkxFVkJRVVVzUjBGQmNVSTdTVUZEYWtVc1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGRrTXNUMEZCVHl4SlFVRkpMQ3RDUVVGeFFpeERRVU01UWl4SlFVRkpMRVZCUTBvc1QwRkJUeXhKUVVGSkxEQkNRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVOdVF5eEpRVUZKTEVOQlEwd3NRMEZCUXp0QlFVTktMRU5CUVVNN1FVRkZSQ3hUUVVGVExGTkJRVk1zUTBGQlNTeEhRVUZ4UWp0SlFVTjZReXhKUVVGSkxFZEJRVWNzUlVGQlJUdFJRVU5RTEVsQlFVa3NUMEZCVHl4SFFVRkhMRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRek5DTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOa08yRkJRVTBzU1VGQlNTeFBRVUZQTEVkQlFVY3NTMEZCU3l4UlFVRlJMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZPMWxCUTNwRUxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1IwRkJSeXhEUVVGRE8xbEJSVGxDTEVsQlFVa3NUMEZCVHl4SlFVRkpMRTlCUVU4c1QwRkJUeXhMUVVGTExGRkJRVkVzUlVGQlJUdG5Ra0ZETVVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5dzRRa0ZCT0VJc1EwRkJReXhEUVVGRE8yRkJRMnBFTzFsQlEwUXNUMEZCVHl4RFFVRkRMRTlCUVU4c1NVRkJTU3hUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEY2tNN1MwRkRSanRKUVVORUxFOUJRVThzUlVGQlJTeERRVUZETzBGQlExb3NRMEZCUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRNZXNzYWdlRnJvbUNvZGUgPSBleHBvcnRzLnNlcmlhbGl6ZUVycm9yID0gZXhwb3J0cy5FdGhlcmV1bVByb3ZpZGVyRXJyb3IgPSBleHBvcnRzLkV0aGVyZXVtUnBjRXJyb3IgPSBleHBvcnRzLmV0aEVycm9ycyA9IGV4cG9ydHMuZXJyb3JDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGNsYXNzZXNfMSA9IHJlcXVpcmUoXCIuL2NsYXNzZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFdGhlcmV1bVJwY0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjbGFzc2VzXzEuRXRoZXJldW1ScGNFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV0aGVyZXVtUHJvdmlkZXJFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xhc3Nlc18xLkV0aGVyZXVtUHJvdmlkZXJFcnJvcjsgfSB9KTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcmlhbGl6ZUVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLnNlcmlhbGl6ZUVycm9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0TWVzc2FnZUZyb21Db2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLmdldE1lc3NhZ2VGcm9tQ29kZTsgfSB9KTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXRoRXJyb3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcnNfMS5ldGhFcnJvcnM7IH0gfSk7XG5jb25zdCBlcnJvcl9jb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLWNvbnN0YW50c1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVycm9yQ29kZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPMEZCUVVFc2RVTkJRVzlGTzBGQlZXeEZMR2xIUVZaUExEQkNRVUZuUWl4UFFWVlFPMEZCUTJoQ0xITkhRVmg1UWl3clFrRkJjVUlzVDBGWGVrSTdRVUZXZGtJc2JVTkJSV2xDTzBGQlUyWXNLMFpCVmtFc2MwSkJRV01zVDBGVlFUdEJRVU5rTEcxSFFWaG5RaXd3UWtGQmEwSXNUMEZYYUVJN1FVRlVjRUlzY1VOQlFYRkRPMEZCUzI1RExEQkdRVXhQTEd0Q1FVRlRMRTlCUzFBN1FVRktXQ3gxUkVGQkswTTdRVUZITjBNc01rWkJTRThzTkVKQlFWVXNUMEZIVUNKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXJpYWxpemVFcnJvciA9IGV4cG9ydHMuaXNWYWxpZENvZGUgPSBleHBvcnRzLmdldE1lc3NhZ2VGcm9tQ29kZSA9IGV4cG9ydHMuSlNPTl9SUENfU0VSVkVSX0VSUk9SX01FU1NBR0UgPSB2b2lkIDA7XG5jb25zdCBlcnJvcl9jb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLWNvbnN0YW50c1wiKTtcbmNvbnN0IGNsYXNzZXNfMSA9IHJlcXVpcmUoXCIuL2NsYXNzZXNcIik7XG5jb25zdCBGQUxMQkFDS19FUlJPUl9DT0RFID0gZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW50ZXJuYWw7XG5jb25zdCBGQUxMQkFDS19NRVNTQUdFID0gJ1Vuc3BlY2lmaWVkIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgYSBidWcsIHBsZWFzZSByZXBvcnQgaXQuJztcbmNvbnN0IEZBTExCQUNLX0VSUk9SID0ge1xuICAgIGNvZGU6IEZBTExCQUNLX0VSUk9SX0NPREUsXG4gICAgbWVzc2FnZTogZ2V0TWVzc2FnZUZyb21Db2RlKEZBTExCQUNLX0VSUk9SX0NPREUpLFxufTtcbmV4cG9ydHMuSlNPTl9SUENfU0VSVkVSX0VSUk9SX01FU1NBR0UgPSAnVW5zcGVjaWZpZWQgc2VydmVyIGVycm9yLic7XG4vKipcbiAqIEdldHMgdGhlIG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gY29kZSwgb3IgYSBmYWxsYmFjayBtZXNzYWdlIGlmIHRoZSBjb2RlIGhhc1xuICogbm8gY29ycmVzcG9uZGluZyBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlRnJvbUNvZGUoY29kZSwgZmFsbGJhY2tNZXNzYWdlID0gRkFMTEJBQ0tfTUVTU0FHRSkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgIGNvbnN0IGNvZGVTdHJpbmcgPSBjb2RlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChoYXNLZXkoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JWYWx1ZXMsIGNvZGVTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JWYWx1ZXNbY29kZVN0cmluZ10ubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkpTT05fUlBDX1NFUlZFUl9FUlJPUl9NRVNTQUdFO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxsYmFja01lc3NhZ2U7XG59XG5leHBvcnRzLmdldE1lc3NhZ2VGcm9tQ29kZSA9IGdldE1lc3NhZ2VGcm9tQ29kZTtcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBjb2RlIGlzIHZhbGlkLlxuICogQSBjb2RlIGlzIG9ubHkgdmFsaWQgaWYgaXQgaGFzIGEgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvZGUoY29kZSkge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvZGVTdHJpbmcgPSBjb2RlLnRvU3RyaW5nKCk7XG4gICAgaWYgKGVycm9yX2NvbnN0YW50c18xLmVycm9yVmFsdWVzW2NvZGVTdHJpbmddKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuaXNWYWxpZENvZGUgPSBpc1ZhbGlkQ29kZTtcbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gZXJyb3IgdG8gYW4gRXRoZXJldW0gSlNPTiBSUEMtY29tcGF0aWJsZSBlcnJvciBvYmplY3QuXG4gKiBNZXJlbHkgY29waWVzIHRoZSBnaXZlbiBlcnJvcidzIHZhbHVlcyBpZiBpdCBpcyBhbHJlYWR5IGNvbXBhdGlibGUuXG4gKiBJZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgbm90IGZ1bGx5IGNvbXBhdGlibGUsIGl0IHdpbGwgYmUgcHJlc2VydmVkIG9uIHRoZVxuICogcmV0dXJuZWQgb2JqZWN0J3MgZGF0YS5vcmlnaW5hbEVycm9yIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFcnJvcihlcnJvciwgeyBmYWxsYmFja0Vycm9yID0gRkFMTEJBQ0tfRVJST1IsIHNob3VsZEluY2x1ZGVTdGFjayA9IGZhbHNlLCB9ID0ge30pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghZmFsbGJhY2tFcnJvciB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihmYWxsYmFja0Vycm9yLmNvZGUpIHx8XG4gICAgICAgIHR5cGVvZiBmYWxsYmFja0Vycm9yLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGZhbGxiYWNrIGVycm9yIHdpdGggaW50ZWdlciBudW1iZXIgY29kZSBhbmQgc3RyaW5nIG1lc3NhZ2UuJyk7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGNsYXNzZXNfMS5FdGhlcmV1bVJwY0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5zZXJpYWxpemUoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICAgIGlmIChlcnJvciAmJlxuICAgICAgICB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGVycm9yKSAmJlxuICAgICAgICBoYXNLZXkoZXJyb3IsICdjb2RlJykgJiZcbiAgICAgICAgaXNWYWxpZENvZGUoZXJyb3IuY29kZSkpIHtcbiAgICAgICAgY29uc3QgX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IF9lcnJvci5jb2RlO1xuICAgICAgICBpZiAoX2Vycm9yLm1lc3NhZ2UgJiYgdHlwZW9mIF9lcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gX2Vycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoaGFzS2V5KF9lcnJvciwgJ2RhdGEnKSkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQuZGF0YSA9IF9lcnJvci5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gZ2V0TWVzc2FnZUZyb21Db2RlKHNlcmlhbGl6ZWQuY29kZSk7XG4gICAgICAgICAgICBzZXJpYWxpemVkLmRhdGEgPSB7IG9yaWdpbmFsRXJyb3I6IGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IGZhbGxiYWNrRXJyb3IuY29kZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IChfYSA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZTtcbiAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gKG1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG1lc3NhZ2VcbiAgICAgICAgICAgIDogZmFsbGJhY2tFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgc2VyaWFsaXplZC5kYXRhID0geyBvcmlnaW5hbEVycm9yOiBhc3NpZ25PcmlnaW5hbEVycm9yKGVycm9yKSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IChfYiA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RhY2s7XG4gICAgaWYgKHNob3VsZEluY2x1ZGVTdGFjayAmJiBlcnJvciAmJiBzdGFjayAmJiB0eXBlb2Ygc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuc3RhY2sgPSBzdGFjaztcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59XG5leHBvcnRzLnNlcmlhbGl6ZUVycm9yID0gc2VyaWFsaXplRXJyb3I7XG4vLyBJbnRlcm5hbFxuZnVuY3Rpb24gaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IC0zMjA5OSAmJiBjb2RlIDw9IC0zMjAwMDtcbn1cbmZ1bmN0aW9uIGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZkWFJwYkhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPMEZCUVVFc2RVUkJRVFJFTzBGQlF6VkVMSFZEUVVGNVJUdEJRVVY2UlN4TlFVRk5MRzFDUVVGdFFpeEhRVUZITERSQ1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF6dEJRVU53UkN4TlFVRk5MR2RDUVVGblFpeEhRVUZITERaRVFVRTJSQ3hEUVVGRE8wRkJRM1pHTEUxQlFVMHNZMEZCWXl4SFFVRXJRanRKUVVOcVJDeEpRVUZKTEVWQlFVVXNiVUpCUVcxQ08wbEJRM3BDTEU5QlFVOHNSVUZCUlN4clFrRkJhMElzUTBGQlF5eHRRa0ZCYlVJc1EwRkJRenREUVVOcVJDeERRVUZETzBGQlJWY3NVVUZCUVN3MlFrRkJOa0lzUjBGQlJ5d3lRa0ZCTWtJc1EwRkJRenRCUVVsNlJUczdPMGRCUjBjN1FVRkRTQ3hUUVVGblFpeHJRa0ZCYTBJc1EwRkRhRU1zU1VGQldTeEZRVU5hTEd0Q1FVRXdRaXhuUWtGQlowSTdTVUZGTVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMUZCUXpGQ0xFMUJRVTBzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRSUVVWdVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl3MlFrRkJWeXhGUVVGRkxGVkJRVlVzUTBGQlF5eEZRVUZGTzFsQlEyNURMRTlCUVU4c05rSkJRVmNzUTBGQlF5eFZRVUV5UWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRE8xTkJRM3BFTzFGQlEwUXNTVUZCU1N4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0WlFVTTVRaXhQUVVGUExIRkRRVUUyUWl4RFFVRkRPMU5CUTNSRE8wdEJRMFk3U1VGRFJDeFBRVUZQTEdWQlFXVXNRMEZCUXp0QlFVTjZRaXhEUVVGRE8wRkJaa1FzWjBSQlpVTTdRVUZGUkRzN08wZEJSMGM3UVVGRFNDeFRRVUZuUWl4WFFVRlhMRU5CUVVNc1NVRkJXVHRKUVVOMFF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFJRVU16UWl4UFFVRlBMRXRCUVVzc1EwRkJRenRMUVVOa08wbEJSVVFzVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMjVETEVsQlFVa3NOa0pCUVZjc1EwRkJReXhWUVVFeVFpeERRVUZETEVWQlFVVTdVVUZETlVNc1QwRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlqdEpRVVZFTEVsQlFVa3NiMEpCUVc5Q0xFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlqdEpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVdSRUxHdERRV05ETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4VFFVRm5RaXhqUVVGakxFTkJRelZDTEV0QlFXTXNSVUZEWkN4RlFVTkZMR0ZCUVdFc1IwRkJSeXhqUVVGakxFVkJRemxDTEd0Q1FVRnJRaXhIUVVGSExFdEJRVXNzUjBGRE0wSXNSMEZCUnl4RlFVRkZPenRKUVVkT0xFbEJRMFVzUTBGQlF5eGhRVUZoTzFGQlEyUXNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEY2tNc1QwRkJUeXhoUVVGaExFTkJRVU1zVDBGQlR5eExRVUZMTEZGQlFWRXNSVUZEZWtNN1VVRkRRU3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVU5pTERCRlFVRXdSU3hEUVVNelJTeERRVUZETzB0QlEwZzdTVUZGUkN4SlFVRkpMRXRCUVVzc1dVRkJXU3d3UWtGQlowSXNSVUZCUlR0UlFVTnlReXhQUVVGUExFdEJRVXNzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0TFFVTXhRanRKUVVWRUxFMUJRVTBzVlVGQlZTeEhRVUYzUXl4RlFVRkZMRU5CUVVNN1NVRkZNMFFzU1VGRFJTeExRVUZMTzFGQlEwd3NUMEZCVHl4TFFVRkxMRXRCUVVzc1VVRkJVVHRSUVVONlFpeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM0pDTEUxQlFVMHNRMEZCUXl4TFFVRm5ReXhGUVVGRkxFMUJRVTBzUTBGQlF6dFJRVU5vUkN4WFFVRlhMRU5CUVVVc1MwRkJiME1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZEZGtRN1VVRkRRU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eExRVUUwUXl4RFFVRkRPMUZCUXpWRUxGVkJRVlVzUTBGQlF5eEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVVNVFpeEpRVUZKTEUxQlFVMHNRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhOUVVGTkxFTkJRVU1zVDBGQlR5eExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTjRSQ3hWUVVGVkxFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkZjRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhGUVVGRk8yZENRVU14UWl4VlFVRlZMRU5CUVVNc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZETDBJN1UwRkRSanRoUVVGTk8xbEJRMHdzVlVGQlZTeERRVUZETEU5QlFVOHNSMEZCUnl4clFrRkJhMElzUTBGRGNFTXNWVUZCZVVNc1EwRkJReXhKUVVGSkxFTkJRMmhFTEVOQlFVTTdXVUZGUml4VlFVRlZMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzWVVGQllTeEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTTdVMEZEYWtVN1MwRkRSanRUUVVGTk8xRkJRMHdzVlVGQlZTeERRVUZETEVsQlFVa3NSMEZCUnl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJSWEpETEUxQlFVMHNUMEZCVHl4VFFVRkpMRXRCUVdFc01FTkJRVVVzVDBGQlR5eERRVUZETzFGQlJYaERMRlZCUVZVc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGRGJrSXNUMEZCVHl4SlFVRkpMRTlCUVU4c1QwRkJUeXhMUVVGTExGRkJRVkU3V1VGRGNFTXNRMEZCUXl4RFFVRkRMRTlCUVU4N1dVRkRWQ3hEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZETVVJc1EwRkJRenRSUVVOR0xGVkJRVlVzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4aFFVRmhMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJRenRMUVVOcVJUdEpRVVZFTEUxQlFVMHNTMEZCU3l4VFFVRkpMRXRCUVdFc01FTkJRVVVzUzBGQlN5eERRVUZETzBsQlJYQkRMRWxCUVVrc2EwSkJRV3RDTEVsQlFVa3NTMEZCU3l4SlFVRkpMRXRCUVVzc1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEY2tVc1ZVRkJWU3hEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdTMEZETVVJN1NVRkRSQ3hQUVVGUExGVkJRWGRETEVOQlFVTTdRVUZEYkVRc1EwRkJRenRCUVd4RlJDeDNRMEZyUlVNN1FVRkZSQ3hYUVVGWE8wRkJSVmdzVTBGQlV5eHZRa0ZCYjBJc1EwRkJReXhKUVVGWk8wbEJRM2hETEU5QlFVOHNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0QlFVTXhReXhEUVVGRE8wRkJSVVFzVTBGQlV5eHRRa0ZCYlVJc1EwRkJReXhMUVVGak8wbEJRM3BETEVsQlFVa3NTMEZCU3l4SlFVRkpMRTlCUVU4c1MwRkJTeXhMUVVGTExGRkJRVkVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3VVVGREwwUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0TFFVTnFRenRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFZEJRVFJDTEVWQlFVVXNSMEZCVnp0SlFVTjJSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZUVRc1EwRkJReUo5IiwibW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnlcbnN0cmluZ2lmeS5kZWZhdWx0ID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuc3RhYmxlID0gZGV0ZXJtaW5pc3RpY1N0cmluZ2lmeVxuc3RyaW5naWZ5LnN0YWJsZVN0cmluZ2lmeSA9IGRldGVybWluaXN0aWNTdHJpbmdpZnlcblxudmFyIExJTUlUX1JFUExBQ0VfTk9ERSA9ICdbLi4uXSdcbnZhciBDSVJDVUxBUl9SRVBMQUNFX05PREUgPSAnW0NpcmN1bGFyXSdcblxudmFyIGFyciA9IFtdXG52YXIgcmVwbGFjZXJTdGFjayA9IFtdXG5cbmZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zICgpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXB0aExpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICBlZGdlc0xpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICB9XG59XG5cbi8vIFJlZ3VsYXIgc3RyaW5naWZ5XG5mdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgcmVwbGFjZXIsIHNwYWNlciwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKClcbiAgfVxuXG4gIGRlY2lyYyhvYmosICcnLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKVxuICB2YXIgcmVzXG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2VyU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZUdldHRlclZhbHVlcyhyZXBsYWNlciksIHNwYWNlcilcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJ1t1bmFibGUgdG8gc2VyaWFsaXplLCBjaXJjdWxhciByZWZlcmVuY2UgaXMgdG9vIGNvbXBsZXggdG8gYW5hbHl6ZV0nKVxuICB9IGZpbmFsbHkge1xuICAgIHdoaWxlIChhcnIubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgcGFydCA9IGFyci5wb3AoKVxuICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydFswXVtwYXJ0WzFdXSA9IHBhcnRbMl1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzZXRSZXBsYWNlIChyZXBsYWNlLCB2YWwsIGssIHBhcmVudCkge1xuICB2YXIgcHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGspXG4gIGlmIChwcm9wZXJ0eURlc2NyaXB0b3IuZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwgaywgeyB2YWx1ZTogcmVwbGFjZSB9KVxuICAgICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsLCBwcm9wZXJ0eURlc2NyaXB0b3JdKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXBsYWNlclN0YWNrLnB1c2goW3ZhbCwgaywgcmVwbGFjZV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcmVudFtrXSA9IHJlcGxhY2VcbiAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY2lyYyAodmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gIGRlcHRoICs9IDFcbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWwpIHtcbiAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZGVwdGggPiBvcHRpb25zLmRlcHRoTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmVkZ2VzTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbClcbiAgICAvLyBPcHRpbWl6ZSBmb3IgQXJyYXlzLiBCaWcgYXJyYXlzIGNvdWxkIGtpbGwgdGhlIHBlcmZvcm1hbmNlIG90aGVyd2lzZSFcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlY2lyYyh2YWxbaV0sIGksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbClcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICAgIGRlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxufVxuXG4vLyBTdGFibGUtc3RyaW5naWZ5XG5mdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24gKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljU3RyaW5naWZ5IChvYmosIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucygpXG4gIH1cblxuICB2YXIgdG1wID0gZGV0ZXJtaW5pc3RpY0RlY2lyYyhvYmosICcnLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKSB8fCBvYmpcbiAgdmFyIHJlc1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkodG1wLCByZXBsYWNlciwgc3BhY2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeSh0bXAsIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdbdW5hYmxlIHRvIHNlcmlhbGl6ZSwgY2lyY3VsYXIgcmVmZXJlbmNlIGlzIHRvbyBjb21wbGV4IHRvIGFuYWx5emVdJylcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSByZXN0b3JlIHRoZSBvYmplY3QgYXMgaXQgd2FzLlxuICAgIHdoaWxlIChhcnIubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgcGFydCA9IGFyci5wb3AoKVxuICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydFswXVtwYXJ0WzFdXSA9IHBhcnRbMl1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljRGVjaXJjICh2YWwsIGssIGVkZ2VJbmRleCwgc3RhY2ssIHBhcmVudCwgZGVwdGgsIG9wdGlvbnMpIHtcbiAgZGVwdGggKz0gMVxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3RhY2tbaV0gPT09IHZhbCkge1xuICAgICAgICBzZXRSZXBsYWNlKENJUkNVTEFSX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmRlcHRoTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBkZXB0aCA+IG9wdGlvbnMuZGVwdGhMaW1pdFxuICAgICkge1xuICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuZWRnZXNMaW1pdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGVkZ2VJbmRleCArIDEgPiBvcHRpb25zLmVkZ2VzTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsKVxuICAgIC8vIE9wdGltaXplIGZvciBBcnJheXMuIEJpZyBhcnJheXMgY291bGQga2lsbCB0aGUgcGVyZm9ybWFuY2Ugb3RoZXJ3aXNlIVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxbaV0sIGksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2JqZWN0IGluIHRoZSByZXF1aXJlZCB3YXlcbiAgICAgIHZhciB0bXAgPSB7fVxuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpLnNvcnQoY29tcGFyZUZ1bmN0aW9uKVxuICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV1cbiAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgICAgdG1wW2tleV0gPSB2YWxba2V5XVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbF0pXG4gICAgICAgIHBhcmVudFtrXSA9IHRtcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRtcFxuICAgICAgfVxuICAgIH1cbiAgICBzdGFjay5wb3AoKVxuICB9XG59XG5cbi8vIHdyYXBzIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZXMgd2UgY291bGRuJ3QgcmVwbGFjZVxuLy8gYW5kIG1hcmsgdGhlbSBhcyByZXBsYWNlZCB2YWx1ZVxuZnVuY3Rpb24gcmVwbGFjZUdldHRlclZhbHVlcyAocmVwbGFjZXIpIHtcbiAgcmVwbGFjZXIgPVxuICAgIHR5cGVvZiByZXBsYWNlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gcmVwbGFjZXJcbiAgICAgIDogZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgcmV0dXJuIHZcbiAgICAgIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwbGFjZXJTdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IHJlcGxhY2VyU3RhY2tbaV1cbiAgICAgICAgaWYgKHBhcnRbMV0gPT09IGtleSAmJiBwYXJ0WzBdID09PSB2YWwpIHtcbiAgICAgICAgICB2YWwgPSBwYXJ0WzJdXG4gICAgICAgICAgcmVwbGFjZXJTdGFjay5zcGxpY2UoaSwgMSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsKVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICdsb2Rhc2gvaXNQbGFpbk9iamVjdCc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCB7IGFwcERlYnVnTG9nZ2VyLCBjb25zb2xlRXJyb3JJbkRldiB9IGZyb20gJy4vbG9nZ2Vycyc7XG5pbXBvcnQgeyBJSnNCcmlkZ2VNZXNzYWdlVHlwZXMsIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci10eXBlcyc7XG5pbXBvcnQgeyB3ZWIzRXJyb3JzIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1lcnJvcnMnO1xuaW1wb3J0IHZlcnNpb25JbmZvIGZyb20gJy4vdmVyc2lvbkluZm8nO1xuZnVuY3Rpb24gaXNMZWdhY3lFeHRNZXNzYWdlKHBheWxvYWQpIHtcbiAgICBjb25zdCBwYXlsb2FkT2JqID0gcGF5bG9hZDtcbiAgICByZXR1cm4gKEJvb2xlYW4ocGF5bG9hZE9iai5uYW1lKSAmJlxuICAgICAgICBbJ29uZWtleS1wcm92aWRlci1ldGgnLCAnb25la2V5LXByb3ZpZGVyLWNmeCcsICdwdWJsaWNDb25maWcnXS5pbmNsdWRlcyhwYXlsb2FkT2JqLm5hbWUpKTtcbn1cbmNvbnN0IEJSSURHRV9FVkVOVFMgPSB7XG4gICAgbWVzc2FnZTogJ21lc3NhZ2UnLFxuICAgIGVycm9yOiAnZXJyb3InLFxufTtcbmNsYXNzIEpzQnJpZGdlQmFzZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc0V4dFVpID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNJbmplY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbmRBc1N0cmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xvYmFsT25NZXNzYWdlRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzSHViID0ge1xuICAgICAgICAvLyBuYW1lOiBbXVxuICAgICAgICB9O1xuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0eXBlPVJFUVVFU1QgbWVzc2FnZXMsIHR5cGU9UkVTUE9OU0UgbWVzc2FnZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgICAgdGhpcy5nbG9iYWxPbk1lc3NhZ2UgPSAobWVzc2FnZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcucmVjZWl2ZUhhbmRsZXIgJiYgdGhpcy5nbG9iYWxPbk1lc3NhZ2VFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0geWllbGQgdGhpcy5jb25maWcucmVjZWl2ZUhhbmRsZXIobWVzc2FnZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogbWVzc2FnZS5zY29wZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVJZDogbWVzc2FnZS5yZW1vdGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaWQgJiYgbWVzc2FnZS50eXBlID09PSBJSnNCcmlkZ2VNZXNzYWdlVHlwZXMuUkVRVUVTVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogbWVzc2FnZS5zY29wZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUlkOiBtZXNzYWdlLnJlbW90ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoQlJJREdFX0VWRU5UUy5lcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbkluZm8udmVyc2lvbjtcbiAgICAgICAgdGhpcy5yZW1vdGVJbmZvID0ge1xuICAgICAgICAgICAgb3JpZ2luOiAnJyxcbiAgICAgICAgICAgIHJlbW90ZUlkOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IGFwcERlYnVnTG9nZ2VyO1xuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICAgICAgICB0aGlzLmNhbGxiYWNrSWQgPSAxO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5jYWxsYmFja3NFeHBpcmVUaW1lb3V0ID0gKF9hID0gY29uZmlnLnRpbWVvdXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDYwICogMTAwMDtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IGNvbmZpZy5kZWJ1Z0xvZ2dlciB8fCBhcHBEZWJ1Z0xvZ2dlcjtcbiAgICAgICAgdGhpcy5zZW5kQXNTdHJpbmcgPSAoX2IgPSBjb25maWcuc2VuZEFzU3RyaW5nKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0aGlzLnNlbmRBc1N0cmluZztcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlY2VpdmVIYW5kbGVyKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgICAgICAgIHRoaXMub24oQlJJREdFX0VWRU5UUy5tZXNzYWdlLCB0aGlzLmdsb2JhbE9uTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbihCUklER0VfRVZFTlRTLmVycm9yLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnNvbGVFcnJvckluRGV2KCdKc0JyaWRnZSBFUlJPUjogJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiAoX2EgPSBlcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVqZWN0RXhwaXJlZENhbGxiYWNrcygpO1xuICAgIH1cbiAgICBhdHRhY2hQcm92aWRlckluc3RhbmNlKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHByb3ZpZGVyLnByb3ZpZGVyTmFtZTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzSHViW25hbWVdID0gKF9hID0gdGhpcy5wcm92aWRlcnNIdWJbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnNIdWJbbmFtZV0ucHVzaChwcm92aWRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlQ2FsbGJhY2tJZCgpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja0lkICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxiYWNrSWQ7XG4gICAgfVxuICAgIGNyZWF0ZVBheWxvYWQocGF5bG9hZCwgeyByZXNvbHZlLCByZWplY3QsIH0pIHtcbiAgICAgICAgY29uc3QgeyBpZCwgdHlwZSB9ID0gcGF5bG9hZDtcbiAgICAgICAgaWYgKHJlc29sdmUgJiYgcmVqZWN0ICYmIGlkICYmIHR5cGUgPT09IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVFVRVNUKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3NbaWRdKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjdXN0b20gZXJyb3JcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEpzQnJpZGdlIEVSUk9SOiBjYWxsYmFjayBleGlzdHMsIGlkPSR7aWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tpZF0gPSB7IGlkLCByZXNvbHZlLCByZWplY3QsIGNyZWF0ZWQ6IERhdGUubm93KCkgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb252ZXJ0IHRvIHBsYWluIGVycm9yIG9iamVjdCB3aGljaCBjYW4gYmUgc3RyaW5naWZ5XG4gICAgICAgIGlmIChwYXlsb2FkLmVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckluZm8gPSBwYXlsb2FkLmVycm9yO1xuICAgICAgICAgICAgcGF5bG9hZC5lcnJvciA9IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvckluZm8uY29kZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvckluZm8ubWVzc2FnZSxcbiAgICAgICAgICAgICAgICBkYXRhOiBlcnJvckluZm8uZGF0YSxcbiAgICAgICAgICAgICAgICBzdGFjazogZXJyb3JJbmZvLnN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGUgcmVzb2x2ZSwgcmVqZWN0IGZ1bmN0aW9uIHdoaWNoIGNhbiBub3QgYmUgc2VuZCBhcyBzdHJpbmdcbiAgICAgICAgcGF5bG9hZCA9PT0gbnVsbCB8fCBwYXlsb2FkID09PSB2b2lkIDAgPyB0cnVlIDogZGVsZXRlIHBheWxvYWQucmVzb2x2ZTtcbiAgICAgICAgcGF5bG9hZCA9PT0gbnVsbCB8fCBwYXlsb2FkID09PSB2b2lkIDAgPyB0cnVlIDogZGVsZXRlIHBheWxvYWQucmVqZWN0O1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgc2VuZCh7IHR5cGUsIGRhdGEsIGVycm9yLCBpZCwgcmVtb3RlSWQsIHN5bmMgPSBmYWxzZSwgc2NvcGUgfSkge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIC8vIFRPRE8gY2hlY2sgcmVzb2x2ZSB3aGVuIGNhbGxpbmcgd2l0aG91dCBhd2FpdFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICAgICAgbGV0IF9pZCA9IGlkO1xuICAgICAgICAgICAgLy8gc2VuZFN5bmMgd2l0aG91dCBQcm9taXNlIGNhY2hlXG4gICAgICAgICAgICBpZiAoIXN5bmMgJiYgdHlwZSA9PT0gSUpzQnJpZGdlTWVzc2FnZVR5cGVzLlJFUVVFU1QpIHtcbiAgICAgICAgICAgICAgICBfaWQgPSB0aGlzLmNyZWF0ZUNhbGxiYWNrSWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY3JlYXRlUGF5bG9hZCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBfaWQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46ICgoX2EgPSBnbG9iYWwgPT09IG51bGwgfHwgZ2xvYmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWwubG9jYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcmlnaW4pIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgfSwgeyByZXNvbHZlLCByZWplY3QgfSk7XG4gICAgICAgICAgICAgICAgbGV0IHBheWxvYWRUb1NlbmQgPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbmRBc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkVG9TZW5kID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIuanNCcmlkZ2UoJ3NlbmQnLCBwYXlsb2FkLCAnXFxyXFxuIC0tLS0tLT4gJywgcGF5bG9hZC5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRQYXlsb2FkKHBheWxvYWRUb1NlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdENhbGxiYWNrKF9pZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMuZXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICBleGVjdXRvcigpO1xuICAgICAgICAgICAgdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGV4ZWN1dG9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWplY3RDYWxsYmFjayhpZCwgZXJyb3IpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2FsbGJhY2soe1xuICAgICAgICAgICAgbWV0aG9kOiAncmVqZWN0JyxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNvbHZlQ2FsbGJhY2soaWQsIGRhdGEpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2FsbGJhY2soe1xuICAgICAgICAgICAgbWV0aG9kOiAncmVzb2x2ZScsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm9jZXNzQ2FsbGJhY2soeyBtZXRob2QsIGlkLCBkYXRhLCBlcnJvciwgfSkge1xuICAgICAgICBjb25zdCBjYWxsYmFja0luZm8gPSB0aGlzLmNhbGxiYWNrc1tpZF07XG4gICAgICAgIGlmIChjYWxsYmFja0luZm8pIHtcbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdyZWplY3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrSW5mby5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmZvLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChCUklER0VfRVZFTlRTLmVycm9yLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSAncmVzb2x2ZScpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tJbmZvLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmZvLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGVhckNhbGxiYWNrQ2FjaGUoaWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlamVjdEV4cGlyZWRDYWxsYmFja3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsYmFja3NFeHBpcmVUaW1lb3V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mb3ItaW4tYXJyYXlcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tJbmZvID0gdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrSW5mbyAmJiBjYWxsYmFja0luZm8uY3JlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmIChub3cgLSBjYWxsYmFja0luZm8uY3JlYXRlZCA+IHRoaXMuY2FsbGJhY2tzRXhwaXJlVGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHdlYjNFcnJvcnMucHJvdmlkZXIucmVxdWVzdFRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3RDYWxsYmFjayhpZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0RXhwaXJlZENhbGxiYWNrcygpO1xuICAgICAgICB9LCB0aGlzLmNhbGxiYWNrc0V4cGlyZVRpbWVvdXQpO1xuICAgIH1cbiAgICBjbGVhckNhbGxiYWNrQ2FjaGUoaWQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICB9XG4gICAgcmVjZWl2ZShwYXlsb2FkUmVjZWl2ZWQgPSAnJywgc2VuZGVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QocGF5bG9hZFJlY2VpdmVkKSkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IHBheWxvYWRSZWNlaXZlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcocGF5bG9hZFJlY2VpdmVkKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShwYXlsb2FkUmVjZWl2ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMuZXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pzQnJpZGdlIEVSUk9SOiBKU09OLnBhcnNlIHBheWxvYWRSZWNlaXZlZCBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyAhSU1QT1JUQU5UOiBmb3JjZSBvdmVyd3JpdGUgb3JpZ2luIGFuZCBpbnRlcm5hbCBmaWVsZFxuICAgICAgICAvLyAgICBETyBOT1QgdHJ1c3QgZGFwcCBwYXJhbXNcbiAgICAgICAgcGF5bG9hZC5vcmlnaW4gPSBzZW5kZXIgPT09IG51bGwgfHwgc2VuZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kZXIub3JpZ2luO1xuICAgICAgICBwYXlsb2FkLmludGVybmFsID0gQm9vbGVhbihzZW5kZXIgPT09IG51bGwgfHwgc2VuZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kZXIuaW50ZXJuYWwpO1xuICAgICAgICAvLyBpZ25vcmUgbGVnYWN5IEV4dCBwdWJsaWNDb25maWcgbWVzc2FnZVxuICAgICAgICBpZiAoKHNlbmRlciA9PT0gbnVsbCB8fCBzZW5kZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbmRlci5pbnRlcm5hbCkgJiYgdGhpcy5pc0V4dFVpICYmIGlzTGVnYWN5RXh0TWVzc2FnZShwYXlsb2FkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZC5vcmlnaW4gJiYgIXRoaXMuaXNJbmplY3RlZCkge1xuICAgICAgICAgICAgY29uc29sZUVycm9ySW5EZXYoKF9hID0gdGhpcyA9PT0gbnVsbCB8fCB0aGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aGlzLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSwgJ1twYXlsb2FkLm9yaWdpbl0gaXMgbWlzc2luZy4nLCB0aGlzKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSnNCcmlkZ2UgRVJST1I6IHJlY2VpdmUgbWVzc2FnZSBbcGF5bG9hZC5vcmlnaW5dIGlzIHJlcXVpcmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZC5pbnRlcm5hbCAmJiAhcGF5bG9hZC5zY29wZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKc0JyaWRnZSBFUlJPUjogcmVjZWl2ZSBtZXNzYWdlIFtwYXlsb2FkLnNjb3BlXSBpcyByZXF1aXJlZCBmb3Igbm9uLWludGVybmFsIG1ldGhvZCBjYWxsLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIuanNCcmlkZ2UoJ3JlY2VpdmUnLCBwYXlsb2FkLCB7IHNlbmRlciB9LCAnXFxyXFxuIC0tLS0tPiAnLCAoX2IgPSBwYXlsb2FkLmRhdGEpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZXN1bHQsICdcXHJcXG4gLS0tLS0+ICcsIHBheWxvYWQuZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgaWQsIGRhdGEsIGVycm9yLCBvcmlnaW4sIHJlbW90ZUlkIH0gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLnJlbW90ZUluZm8gPSB7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT09IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVNQT05TRSkge1xuICAgICAgICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pzQnJpZGdlIEVSUk9SOiBwYXJhbWV0ZXIgW2lkXSBpcyByZXF1aXJlZCBpbiBKc0JyaWRnZS5yZWNlaXZlKCkgd2hlbiBSRVFVRVNUIHR5cGUgbWVzc2FnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tJbmZvID0gdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrSW5mbykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3RDYWxsYmFjayhpZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ2FsbGJhY2soaWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcjApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMuZXJyb3IsIGVycm9yMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVFVRVNUKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudE1lc3NhZ2VQYXlsb2FkID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXlsb2FkKSwgeyBjcmVhdGVkOiBEYXRlLm5vdygpIH0pO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9ldmVudHMuaHRtbCNjYXB0dXJlLXJlamVjdGlvbnMtb2YtcHJvbWlzZXNcbiAgICAgICAgICAgIC8vIG9ubHkgdHlwZT1SRVFVRVNUIG1lc3NhZ2Ugd2lsbCBiZSBoYW5kbGVkIGJ5IGdsb2JhbE9uTWVzc2FnZVxuICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMubWVzc2FnZSwgZXZlbnRNZXNzYWdlUGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEpzQnJpZGdlIEVSUk9SOiBwYXlsb2FkIHR5cGUgbm90IHN1cHBvcnQgeWV0ICh0eXBlPSR7dHlwZSB8fCAndW5kZWZpbmVkJ30pYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdFN5bmMoeyBkYXRhLCBzY29wZSwgcmVtb3RlSWQsIH0pIHtcbiAgICAgICAgdm9pZCB0aGlzLnNlbmQoe1xuICAgICAgICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHR5cGU6IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVFVRVNULFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcmVtb3RlSWQsXG4gICAgICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdChpbmZvKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgcmVtb3RlSWQsIHNjb3BlIH0gPSBpbmZvO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0pzQnJpZGdlIEVSUk9SOiBkYXRhIHJlcXVpcmVkLiBDYWxsIGxpa2UgYGJyaWRnZS5yZXF1ZXN0KHsgZGF0YTogey4uLn0gfSk7YCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmQoe1xuICAgICAgICAgICAgdHlwZTogSUpzQnJpZGdlTWVzc2FnZVR5cGVzLlJFUVVFU1QsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcmVtb3RlSWQsXG4gICAgICAgICAgICBzeW5jOiBmYWxzZSxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gc2VuZCByZXNwb25zZSBEQVRBIHRvIHJlbW90ZVxuICAgIHJlc3BvbnNlKHsgaWQsIGRhdGEsIHJlbW90ZUlkLCBzY29wZSwgfSkge1xuICAgICAgICB2b2lkIHRoaXMuc2VuZCh7XG4gICAgICAgICAgICB0eXBlOiBJSnNCcmlkZ2VNZXNzYWdlVHlwZXMuUkVTUE9OU0UsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgc3luYzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHNlbmQgcmVzcG9uc2UgRVJST1IgdG8gcmVtb3RlXG4gICAgcmVzcG9uc2VFcnJvcih7IGlkLCBlcnJvciwgc2NvcGUsIHJlbW90ZUlkLCB9KSB7XG4gICAgICAgIHZvaWQgdGhpcy5zZW5kKHtcbiAgICAgICAgICAgIHR5cGU6IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVNQT05TRSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgc3luYzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IHsgSnNCcmlkZ2VCYXNlLCBpc0xlZ2FjeUV4dE1lc3NhZ2UgfTtcbiIsImltcG9ydCB7IEpzQnJpZGdlQmFzZSB9IGZyb20gJy4vSnNCcmlkZ2VCYXNlJztcbmNsYXNzIEpzQnJpZGdlU2ltcGxlIGV4dGVuZHMgSnNCcmlkZ2VCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zZW5kQXNTdHJpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG4gICAgfVxuICAgIHNlbmRQYXlsb2FkKHBheWxvYWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKc0JyaWRnZVNpbXBsZSBFUlJPUjogcmVtb3RlIG5vdCBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdGUucmVjZWl2ZShwYXlsb2FkKTtcbiAgICB9XG4gICAgc2V0UmVtb3RlKHJlbW90ZSkge1xuICAgICAgICB0aGlzLnJlbW90ZSA9IHJlbW90ZTtcbiAgICB9XG59XG5leHBvcnQgeyBKc0JyaWRnZVNpbXBsZSB9O1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnbG9kYXNoL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHNpdGVNZXRhZGF0YSBmcm9tICcuL3NpdGVNZXRhZGF0YSc7XG5pbXBvcnQgeyBmYWtlTG9nZ2VyLCBmYWtlRGVidWdMb2dnZXIsIGNvbnNvbGVFcnJvckluRGV2IH0gZnJvbSAnLi9sb2dnZXJzJztcbmltcG9ydCB2ZXJzaW9uSW5mbyBmcm9tICcuL3ZlcnNpb25JbmZvJztcbmNvbnN0IE1FVEhPRFMgPSB7XG4gICAgd2FsbGV0X2dldENvbm5lY3RXYWxsZXRJbmZvOiAnd2FsbGV0X2dldENvbm5lY3RXYWxsZXRJbmZvJyxcbiAgICB3YWxsZXRfc2VuZFNpdGVNZXRhZGF0YTogJ3dhbGxldF9zZW5kU2l0ZU1ldGFkYXRhJyxcbn07XG5jbGFzcyBQcm92aWRlckJhc2UgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbkluZm8udmVyc2lvbjtcbiAgICAgICAgdGhpcy5pc09uZUtleSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgPSBmYWtlRGVidWdMb2dnZXI7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gZmFrZUxvZ2dlcjtcbiAgICAgICAgaWYgKCFjb25maWcuYnJpZGdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVyQmFzZSBpbml0IGVycm9yOiBicmlkZ2UgcmVxdWlyZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuYnJpZGdlID0gY29uZmlnLmJyaWRnZTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBjb25maWcubG9nZ2VyIHx8IGZha2VMb2dnZXI7XG4gICAgICAgIC8vIFRPRE8gaW5pdCB0aGlzLmRlYnVnTG9nZ2VyIGZpcnN0LCBhbmQgZW5hYmxlIGRlYnVnIGNvbmZpZyBhZnRlciBleHRlbnNpb24gY29ubmVjdFxuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyID0gKChfYSA9IHRoaXMuYnJpZGdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWdMb2dnZXIpIHx8IGZha2VEZWJ1Z0xvZ2dlcjtcbiAgICAgICAgKF9jID0gKF9iID0gdGhpcy5icmlkZ2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kZWJ1Z0xvZ2dlcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLl9hdHRhY2hFeHRlcm5hbExvZ2dlcih0aGlzLmxvZ2dlcik7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXMuYnJpZGdlLmF0dGFjaFByb3ZpZGVySW5zdGFuY2UodGhpcyk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBpZiAoY29uZmlnLnNob3VsZFNlbmRNZXRhZGF0YSkge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnNlbmRTaXRlTWV0YWRhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25maWdEZWJ1Z0xvZ2dlcihjb25maWcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghY29uZmlnIHx8ICF0aGlzLmJyaWRnZS5kZWJ1Z0xvZ2dlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlYnVnTG9nZ2VyID0gdGhpcy5icmlkZ2UuZGVidWdMb2dnZXI7XG4gICAgICAgICAgICAoY29uZmlnLmVuYWJsZWRLZXlzIHx8IFtdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZ2dlci5fY3JlYXRlRGVidWdJbnN0YW5jZShrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nZ2VyLl9kZWJ1Zy5lbmFibGUoY29uZmlnLmNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICB3aW5kb3cuJG9uZWtleSA9IHdpbmRvdy4kb25la2V5IHx8IHt9O1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgd2luZG93LiRvbmVrZXkuJGRlYnVnTG9nZ2VyID0gZGVidWdMb2dnZXI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlRXJyb3JJbkRldignY29uZmlnRGVidWdMb2dnZXIgRVJST1I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbm5lY3RXYWxsZXRJbmZvKHsgdGltZW91dCA9IDMwMDAgfSA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvcixAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICh5aWVsZCB0aGlzLmJyaWRnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBNRVRIT0RTLndhbGxldF9nZXRDb25uZWN0V2FsbGV0SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3sgdGltZTogRGF0ZS5ub3coKSB9XSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHJvdmlkZXJTdGF0ZSA9IHJlc3VsdC5wcm92aWRlclN0YXRlIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmRlYnVnTG9nZ2VyQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RlYnVnTG9nZ2VyKHJlc3VsdC5kZWJ1Z0xvZ2dlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQud2FsbGV0SW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiRvbmVrZXkgPSB3aW5kb3cuJG9uZWtleSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy4kb25la2V5LiR3YWxsZXRJbmZvID0gcmVzdWx0LndhbGxldEluZm87XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gd2FsbGV0IG5vdCBpbnN0YWxsZWQsIHRpbWVvdXQgRVJST1JcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZUVycm9ySW5EZXYoJ2dldENvbm5lY3RXYWxsZXRJbmZvOiBFUlJPUicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGJyaWRnZVJlcXVlc3QoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBoYXNDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgaGFzQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHZvaWQgMCA/IGRhdGEgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMucHJvdmlkZXJOYW1lLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlci5wcm92aWRlckJhc2UoJ2JyaWRnZVJlcXVlc3Q6JywgcGF5bG9hZCwgJ1xcclxcbiAtLS0tLT4gJywgcGF5bG9hZC5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNEYXRhID0geWllbGQgdGhpcy5icmlkZ2UucmVxdWVzdChwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNEYXRhID8gcmVzRGF0YS5yZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGhhc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIucHJvdmlkZXJCYXNlKCdicmlkZ2VSZXF1ZXN0IFJFVFVSTjonLCB7IHJlcTogcGF5bG9hZCwgcmVzOiByZXNEYXRhIH0sICdcXHJcXG4gLS0tLS0+ICcsIHBheWxvYWQuZGF0YSwgJ1xcclxcbiAtLS0tLT4gJywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGhhc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU2l0ZU1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB5aWVsZCBzaXRlTWV0YWRhdGEuZ2V0U2l0ZU1ldGFkYXRhKCk7XG4gICAgICAgICAgICByZXR1cm4geWllbGQgdGhpcy5icmlkZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IE1FVEhPRFMud2FsbGV0X3NlbmRTaXRlTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBtZXRhZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgeyBQcm92aWRlckJhc2UgfTtcbiIsImV4cG9ydCBjb25zdCBKU19CUklER0VfTUVTU0FHRV9JUENfQ0hBTk5FTCA9ICdvbmVrZXlASlNfQlJJREdFX01FU1NBR0VfSVBDX0NIQU5ORUwnO1xuZXhwb3J0IGNvbnN0IEpTX0JSSURHRV9NRVNTQUdFX0VYVF9DSEFOTkVMID0gJ29uZWtleUBKU19CUklER0VfTUVTU0FHRV9FWFRfQ0hBTk5FTCc7XG5leHBvcnQgY29uc3QgSlNfQlJJREdFX01FU1NBR0VfRVhUX1BJTkcgPSAnb25la2V5QEpTX0JSSURHRV9NRVNTQUdFX0VYVF9QSU5HJztcbmV4cG9ydCBjb25zdCBKU19CUklER0VfTUVTU0FHRV9ESVJFQ1RJT04gPSB7XG4gICAgJ0hPU1RfVE9fSU5QQUdFJzogJ29uZWtleUBKU19CUklER0VfTUVTU0FHRV9ESVJFQ1RJT04tSE9TVF9UT19JTlBBR0UnLFxuICAgICdJTlBBR0VfVE9fSE9TVCc6ICdvbmVrZXlASlNfQlJJREdFX01FU1NBR0VfRElSRUNUSU9OLUlOUEFHRV9UT19IT1NUJyxcbn07XG5leHBvcnQgY29uc3QgRVhUX1BPUlRfQ1NfVE9fQkcgPSAnb25la2V5QEVYVF9QT1JUX0NTX1RPX0JHJztcbmV4cG9ydCBjb25zdCBFWFRfUE9SVF9VSV9UT19CRyA9ICdvbmVrZXlARVhUX1BPUlRfVUlfVE9fQkcnO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xPR0dFUl9TVE9SQUdFX0tFWSA9ICckJE9ORUtFWV9ERUJVR19MT0dHRVInO1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5pbXBvcnQgeyBERUJVR19MT0dHRVJfU1RPUkFHRV9LRVkgfSBmcm9tICcuLi9jb25zdHMnO1xuaW1wb3J0IGh1bWFuaXplIGZyb20gJ21zJztcbmNvbnN0IHN0b3JhZ2VLZXkgPSBERUJVR19MT0dHRVJfU1RPUkFHRV9LRVk7XG5jb25zdCBleHBvcnRzQnJvd3NlciA9IHt9O1xuZXhwb3J0c0Jyb3dzZXIuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzQnJvd3Nlci5zYXZlID0gc2F2ZTtcbmV4cG9ydHNCcm93c2VyLmxvYWQgPSBsb2FkO1xuZXhwb3J0c0Jyb3dzZXIudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0c0Jyb3dzZXIuc3RvcmFnZSA9IGN1c3RvbUxvY2FsU3RvcmFnZSgpO1xuZXhwb3J0c0Jyb3dzZXIuaHVtYW5pemUgPSBodW1hbml6ZTtcbmV4cG9ydHNCcm93c2VyLmRlc3Ryb3kgPSAoKCkgPT4ge1xuICAgIGxldCB3YXJuZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG4vKipcbiAqIENvbG9ycy5cbiAqL1xuZXhwb3J0c0Jyb3dzZXIuY29sb3JzID0gW1xuICAgICcjMDAwMENDJyxcbiAgICAnIzAwMDBGRicsXG4gICAgJyMwMDMzQ0MnLFxuICAgICcjMDAzM0ZGJyxcbiAgICAnIzAwNjZDQycsXG4gICAgJyMwMDY2RkYnLFxuICAgICcjMDA5OUNDJyxcbiAgICAnIzAwOTlGRicsXG4gICAgJyMwMENDMDAnLFxuICAgICcjMDBDQzMzJyxcbiAgICAnIzAwQ0M2NicsXG4gICAgJyMwMENDOTknLFxuICAgICcjMDBDQ0NDJyxcbiAgICAnIzAwQ0NGRicsXG4gICAgJyMzMzAwQ0MnLFxuICAgICcjMzMwMEZGJyxcbiAgICAnIzMzMzNDQycsXG4gICAgJyMzMzMzRkYnLFxuICAgICcjMzM2NkNDJyxcbiAgICAnIzMzNjZGRicsXG4gICAgJyMzMzk5Q0MnLFxuICAgICcjMzM5OUZGJyxcbiAgICAnIzMzQ0MwMCcsXG4gICAgJyMzM0NDMzMnLFxuICAgICcjMzNDQzY2JyxcbiAgICAnIzMzQ0M5OScsXG4gICAgJyMzM0NDQ0MnLFxuICAgICcjMzNDQ0ZGJyxcbiAgICAnIzY2MDBDQycsXG4gICAgJyM2NjAwRkYnLFxuICAgICcjNjYzM0NDJyxcbiAgICAnIzY2MzNGRicsXG4gICAgJyM2NkNDMDAnLFxuICAgICcjNjZDQzMzJyxcbiAgICAnIzk5MDBDQycsXG4gICAgJyM5OTAwRkYnLFxuICAgICcjOTkzM0NDJyxcbiAgICAnIzk5MzNGRicsXG4gICAgJyM5OUNDMDAnLFxuICAgICcjOTlDQzMzJyxcbiAgICAnI0NDMDAwMCcsXG4gICAgJyNDQzAwMzMnLFxuICAgICcjQ0MwMDY2JyxcbiAgICAnI0NDMDA5OScsXG4gICAgJyNDQzAwQ0MnLFxuICAgICcjQ0MwMEZGJyxcbiAgICAnI0NDMzMwMCcsXG4gICAgJyNDQzMzMzMnLFxuICAgICcjQ0MzMzY2JyxcbiAgICAnI0NDMzM5OScsXG4gICAgJyNDQzMzQ0MnLFxuICAgICcjQ0MzM0ZGJyxcbiAgICAnI0NDNjYwMCcsXG4gICAgJyNDQzY2MzMnLFxuICAgICcjQ0M5OTAwJyxcbiAgICAnI0NDOTkzMycsXG4gICAgJyNDQ0NDMDAnLFxuICAgICcjQ0NDQzMzJyxcbiAgICAnI0ZGMDAwMCcsXG4gICAgJyNGRjAwMzMnLFxuICAgICcjRkYwMDY2JyxcbiAgICAnI0ZGMDA5OScsXG4gICAgJyNGRjAwQ0MnLFxuICAgICcjRkYwMEZGJyxcbiAgICAnI0ZGMzMwMCcsXG4gICAgJyNGRjMzMzMnLFxuICAgICcjRkYzMzY2JyxcbiAgICAnI0ZGMzM5OScsXG4gICAgJyNGRjMzQ0MnLFxuICAgICcjRkYzM0ZGJyxcbiAgICAnI0ZGNjYwMCcsXG4gICAgJyNGRjY2MzMnLFxuICAgICcjRkY5OTAwJyxcbiAgICAnI0ZGOTkzMycsXG4gICAgJyNGRkNDMDAnLFxuICAgICcjRkZDQzMzJyxcbl07XG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gICAgLy8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2VcbiAgICAvLyBleHBsaWNpdGx5XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzICYmXG4gICAgICAgICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJlxuICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICAgIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gICAgcmV0dXJuICgodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgICAgICAvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG4gICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiZcbiAgICAgICAgICAgICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcbiAgICAgICAgLy8gSXMgZmlyZWZveCA+PSB2MzE/XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmXG4gICAgICAgICAgICBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcbiAgICAgICAgLy8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuICAgICAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSkpO1xufVxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG4gICAgYXJnc1swXSA9IGAkeyh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuICAgICAgICB0aGlzLm5hbWVzcGFjZSArXG4gICAgICAgICh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG4gICAgICAgIGFyZ3NbMF0gK1xuICAgICAgICAodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJyl9KyR7ZXhwb3J0c0Jyb3dzZXIuaHVtYW5pemUodGhpcy5kaWZmKX1gO1xuICAgIGlmICghdGhpcy51c2VDb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjID0gYGNvbG9yOiAke3RoaXMuY29sb3J9YDtcbiAgICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcbiAgICAvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuICAgIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBsYXN0QyA9IDA7XG4gICAgYXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIChtYXRjaCkgPT4ge1xuICAgICAgICBpZiAobWF0Y2ggPT09ICclJScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICBpZiAobWF0Y2ggPT09ICclYycpIHtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgICAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzQnJvd3Nlci5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGlmIChjb25zb2xlLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoLi4uYXJncyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgIH1cbn07XG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChuYW1lc3BhY2VzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZXhwb3J0c0Jyb3dzZXIuc3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIG5hbWVzcGFjZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZXhwb3J0c0Jyb3dzZXIuc3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gU3dhbGxvd1xuICAgICAgICAgICAgLy8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdkZWJ1ZyBsb2dnZXIgc3RvcmFnZSBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIgPSB5aWVsZCBleHBvcnRzQnJvd3Nlci5zdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBTd2FsbG93XG4gICAgICAgICAgICAvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2RlYnVnIGxvZ2dlciBzdG9yYWdlIGVycm9yJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcbiAgICAgICAgaWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG4gICAgICAgICAgICByID0gcHJvY2Vzcy5lbnYuREVCVUc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG59XG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjdXN0b21Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC4kJG9uZWtleUFwcFN0b3JhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWwuJCRvbmVrZXlBcHBTdG9yYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcbiAgICAgICAgLy8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignZGVidWdMb2dnZXIgaW5pdCB3YXJuaW5nLCBuZWl0aGVyIGBnbG9iYWwuJCRvbmVrZXlBcHBTdG9yYWdlYCBub3IgYHdpbmRvdy5sb2NhbFN0b3JhZ2VgIGZvdW5kLicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0SXRlbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0SXRlbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlSXRlbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gU3dhbGxvd1xuICAgICAgICAvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cbiAgICAgICAgY29uc29sZS5lcnJvcignZGVidWcgbG9nZ2VyIHN0b3JhZ2UgZXJyb3InLCBlcnJvcik7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0c0Jyb3dzZXI7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5pbXBvcnQgaHVtYW5pemUgZnJvbSAnbXMnO1xuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1ZztcbiAgICAgICAgY3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG4gICAgICAgIGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG4gICAgICAgIGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcbiAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG4gICAgICAgIGNyZWF0ZURlYnVnLnNraXBzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaih2KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2VcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG4gICAgICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBsZXQgaGFzaCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICAgICAgICogQGFwaSBwdWJsaWNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgbGV0IHByZXZUaW1lO1xuICAgICAgICAgICAgbGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBuYW1lc3BhY2VzQ2FjaGU7XG4gICAgICAgICAgICBsZXQgZW5hYmxlZENhY2hlO1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIERpc2FibGVkP1xuICAgICAgICAgICAgICAgIGlmICghZGVidWcuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSBkZWJ1ZztcbiAgICAgICAgICAgICAgICAvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuZGlmZiA9IG1zO1xuICAgICAgICAgICAgICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgICAgICAgICAgICAgcHJldlRpbWUgPSBjdXJyO1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoJyVPJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPT09ICclJScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcbiAgICAgICAgICAgICAgICBsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICAgICAgICAgIGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuICAgICAgICAgICAgZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuICAgICAgICAgICAgZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuICAgICAgICAgICAgZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRDYWNoZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldDogKHYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlT3ZlcnJpZGUgPSB2O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWJ1ZztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0RlYnVnO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gICAgICAgICAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gICAgICAgICAqIEBhcGkgcHVibGljXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG4gICAgICAgICAgICAgICAgY3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgaTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNwbGl0W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cChgXiR7bmFtZXNwYWNlcy5zdWJzdHIoMSl9JGApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cChgXiR7bmFtZXNwYWNlc30kYCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAgICAgICAgICogQGFwaSBwdWJsaWNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VzID0gW1xuICAgICAgICAgICAgICAgIC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG4gICAgICAgICAgICAgICAgLi4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAoKG5hbWVzcGFjZSkgPT4gYC0ke25hbWVzcGFjZX1gKSxcbiAgICAgICAgICAgIF0uam9pbignLCcpO1xuICAgICAgICAgICAgY3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VzO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICAgICAqIEBhcGkgcHVibGljXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGk7XG4gICAgICAgICAgICBsZXQgbGVuO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG4gICAgICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVnZXhwXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb2VyY2UgYHZhbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAgICAgICAgKiBAcmV0dXJuIHtNaXhlZH1cbiAgICAgICAgICogQGFwaSBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cbiAgICAgICAgICogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHlpZWxkIGNyZWF0ZURlYnVnLmxvYWQoKTtcbiAgICAgICAgeWllbGQgY3JlYXRlRGVidWcuZW5hYmxlKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVEZWJ1ZztcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHNldHVwO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgc2V0dXAgZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJztcbmZ1bmN0aW9uIGNyZWF0ZURlYnVnQXN5bmMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHNldHVwKGJyb3dzZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRGVidWdBc3luYztcbiIsImV4cG9ydCAqIGZyb20gJy4vSnNCcmlkZ2VCYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vUHJvdmlkZXJCYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2Vycyc7XG5leHBvcnQgKiBmcm9tICcuL2luamVjdEpzQnJpZGdlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5qZWN0ZWRQcm92aWRlclJlY2VpdmVIYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vSnNCcmlkZ2VTaW1wbGUnO1xuaW1wb3J0ICogYXMgY29uc3RzIGZyb20gJy4vY29uc3RzJztcbmV4cG9ydCB7IGNvbnN0cyB9O1xuaW1wb3J0IGluamVjdGVkRmFjdG9yeSBmcm9tICcuL2luamVjdGVkRmFjdG9yeSc7XG5leHBvcnQgeyBpbmplY3RlZEZhY3RvcnkgfTtcbmltcG9ydCBzaXRlTWV0YWRhdGEgZnJvbSAnLi9zaXRlTWV0YWRhdGEnO1xuZXhwb3J0IHsgc2l0ZU1ldGFkYXRhIH07XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZlcnNpb25JbmZvIH0gZnJvbSAnLi92ZXJzaW9uSW5mbyc7XG4iLCJpbXBvcnQgeyBERUJVR19MT0dHRVJfU1RPUkFHRV9LRVkgfSBmcm9tICcuL2NvbnN0cyc7XG5mdW5jdGlvbiBmaXhHbG9iYWxTaGltKCkge1xuICAgIC8vIEZJWCBlcnJvcnMgaW4gUmVhY3ROYXRpdmVcbiAgICAvLyAgICBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZ2xvYmFsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHdpbmRvdy5nbG9iYWwgPSB3aW5kb3cuZ2xvYmFsIHx8IHdpbmRvdyB8fCB3aW5kb3cuZ2xvYmFsVGhpcztcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgd2luZG93Lmdsb2JhbCA9IHdpbmRvdy5nbG9iYWwgfHwgd2luZG93IHx8IHdpbmRvdy5nbG9iYWxUaGlzO1xufVxuZnVuY3Rpb24gaW5qZWN0SnNCcmlkZ2UoYnJpZGdlQ3JlYXRvcikge1xuICAgIHZhciBfYTtcbiAgICBmaXhHbG9iYWxTaGltKCk7XG4gICAgaWYgKCEoKF9hID0gd2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LiRvbmVrZXkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qc0JyaWRnZSkpIHtcbiAgICAgICAgd2luZG93LiRvbmVrZXkgPSB3aW5kb3cuJG9uZWtleSB8fCB7fTtcbiAgICAgICAgd2luZG93LiRvbmVrZXkuanNCcmlkZ2UgPSBicmlkZ2VDcmVhdG9yKCk7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShERUJVR19MT0dHRVJfU1RPUkFHRV9LRVkpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT0ganNCcmlkZ2UgaW5qZWN0ZWQgc3VjY2VzcyEgPj4+Pj4gJywgcGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3cuJG9uZWtleS5qc0JyaWRnZTtcbn1cbmV4cG9ydCB7IGluamVjdEpzQnJpZGdlIH07XG4iLCJmdW5jdGlvbiBjcmVhdGVDb2RlV2l0aFNjcmlwdFRhZyh7IGNvZGUgfSkge1xuICAgIC8vIHNjcmlwdCBpZCBjaGVjaywgb25seSBpbmplY3Qgb25jZS5cbiAgICByZXR1cm4gYFxuICAgIChmdW5jdGlvbigpe1xuICAgICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgcy5zZXRBdHRyaWJ1dGUoJ2FzeW5jJywgJ2ZhbHNlJyk7XG4gICAgICBzLnNldEF0dHJpYnV0ZSgnZGF0YS1vbmVrZXktaW5qZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgcy50ZXh0Q29udGVudD0ke0pTT04uc3RyaW5naWZ5KGNvZGUpfTtcbiAgICAgIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQocyk7XG4gICAgICBzLnJlbW92ZSgpO1xuICAgIH0pKCk7XG4gIGA7XG59XG5mdW5jdGlvbiBpbmplY3RDb2RlV2l0aFNjcmlwdFRhZyh7IGNvZGUsIGZpbGUsIHJlbW92ZSA9IHRydWUsIH0pIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHMuc2V0QXR0cmlidXRlKCdhc3luYycsICdmYWxzZScpO1xuICAgICAgICBzLnNldEF0dHJpYnV0ZSgnZGVmZXInLCAnZmFsc2UnKTtcbiAgICAgICAgcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtb25la2V5LWluamVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICAgIHMudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgcy5zcmMgPSBmaWxlO1xuICAgICAgICB9XG4gICAgICAgIHMub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZSAmJiBmaWxlKSB7XG4gICAgICAgICAgICAgICAgcy5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzKTtcbiAgICAgICAgaWYgKHJlbW92ZSAmJiBjb2RlKSB7XG4gICAgICAgICAgICBzLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSkoKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvZGVKc0JyaWRnZVJlY2VpdmUocGF5bG9hZFN0cikge1xuICAgIHJldHVybiBgXG4gIGlmKHdpbmRvdy4kb25la2V5ICYmIHdpbmRvdy4kb25la2V5LmpzQnJpZGdlKXtcbiAgICB3aW5kb3cuJG9uZWtleS5qc0JyaWRnZS5yZWNlaXZlKCR7SlNPTi5zdHJpbmdpZnkocGF5bG9hZFN0cil9KTtcbiAgfVxuICB2b2lkIDA7XG4gIGA7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5qZWN0Q29kZVdpdGhTY3JpcHRUYWcsXG4gICAgY3JlYXRlQ29kZVdpdGhTY3JpcHRUYWcsXG4gICAgY3JlYXRlQ29kZUpzQnJpZGdlUmVjZWl2ZSxcbn07XG4iLCJpbXBvcnQgeyBjb25zb2xlRXJyb3JJbkRldiB9IGZyb20gJy4vbG9nZ2Vycyc7XG5mdW5jdGlvbiBpbmplY3RlZFByb3ZpZGVyUmVjZWl2ZUhhbmRsZXIocGF5bG9hZCwgYnJpZGdlKSB7XG4gICAgLy8gZXRoZXJldW0sIHNvbGFuYSwgY29uZmx1eFxuICAgIGNvbnN0IHByb3ZpZGVySHViID0gKGJyaWRnZSA9PT0gbnVsbCB8fCBicmlkZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJyaWRnZS5wcm92aWRlcnNIdWIpIHx8IHdpbmRvdy4kb25la2V5O1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IHBheWxvYWQuc2NvcGU7XG4gICAgY29uc3QgcGF5bG9hZERhdGEgPSBwYXlsb2FkLmRhdGE7XG4gICAgaWYgKCFwcm92aWRlck5hbWUpIHtcbiAgICAgICAgY29uc29sZUVycm9ySW5EZXYoJ3Byb3ZpZGVyTmFtZSAoc2NvcGUpIGlzIHJlcXVpcmVkIGluIGluamVjdGVkUHJvdmlkZXJSZWNlaXZlSGFuZGxlci4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm92aWRlcnMgPSBbXVxuICAgICAgICAuY29uY2F0KHByb3ZpZGVySHViW3Byb3ZpZGVyTmFtZV0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKCFwcm92aWRlcnMgfHwgIXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZUVycm9ySW5EZXYoYFske3Byb3ZpZGVyTmFtZX1dIHByb3ZpZGVyIGlzIE5PVCBpbmplY3RlZCB0byBkb2N1bWVudCBvciBicmlkZ2UuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZW1pdCBldmVudHMgdG8gaW5qZWN0ZWQgcHJvdmlkZXJcbiAgICBwcm92aWRlcnMuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICAgICAgaWYgKHByb3ZpZGVyICYmIHByb3ZpZGVyLmVtaXQpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyLmVtaXQoJ21lc3NhZ2VfbG93X2xldmVsJywgcGF5bG9hZERhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgeyBpbmplY3RlZFByb3ZpZGVyUmVjZWl2ZUhhbmRsZXIgfTtcbiIsIi8vIEB0cy1pZ25vcmVcbmltcG9ydCBjcmVhdGVEZWJ1Z0FzeW5jIGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgREVCVUdfTE9HR0VSX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9jb25zdHMnO1xuLy8gZW5hYmxlIGRlYnVnTG9nZ2VyOlxuLy8gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJyQkT05FS0VZX0RFQlVHX0xPR0dFUicsICcqJyk7XG5mdW5jdGlvbiBjb25zb2xlRXJyb3JJbkRldiguLi5hcmdzKSB7XG4gICAgY29uc3QgbG9nZ2VyQ29uZmlnID0gdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oREVCVUdfTE9HR0VSX1NUT1JBR0VfS0VZKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyB8fCBsb2dnZXJDb25maWcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICB9XG59XG5jb25zdCBmYWtlTG9nZ2VyID0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBfaXNGYWtlTG9nZ2VyOiB0cnVlLFxuICAgIGxvZzogKC4uLmFyZ3MpID0+IHVuZGVmaW5lZCxcbiAgICB3YXJuOiAoLi4uYXJncykgPT4gdW5kZWZpbmVkLFxuICAgIGVycm9yOiAoLi4uYXJncykgPT4gdW5kZWZpbmVkLFxuICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdW5kZWZpbmVkLFxuICAgIGluZm86ICguLi5hcmdzKSA9PiB1bmRlZmluZWQsXG4gICAgdHJhY2U6ICguLi5hcmdzKSA9PiB1bmRlZmluZWQsXG59O1xuY2xhc3MgRmFrZURlYnVnTG9nZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fZGVidWcgPSB7XG4gICAgICAgICAgICBlbmFibGUoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgLy9ub29wXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9leHRlcm5hbExvZ2dlciA9IGZha2VMb2dnZXI7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUV4dGVybmFsTG9nID0gKG5hbWUpID0+ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfbG9nZ2VyID0gdGhpcy5fZXh0ZXJuYWxMb2dnZXI7XG4gICAgICAgICAgICBpZiAoX2xvZ2dlcikge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9sb2dnZXIubG9nKG5hbWUsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmpzQnJpZGdlID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ2pzQnJpZGdlID4+Jyk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJCYXNlID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ3Byb3ZpZGVyQmFzZSA+PicpO1xuICAgICAgICB0aGlzLmV4dEluamVjdGVkID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ2V4dEluamVjdGVkID4+Jyk7XG4gICAgICAgIHRoaXMuZXh0Q29udGVudFNjcmlwdHMgPSB0aGlzLl9jcmVhdGVFeHRlcm5hbExvZygnZXh0Q29udGVudFNjcmlwdHMgPj4nKTtcbiAgICAgICAgdGhpcy53ZWJ2aWV3ID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ3dlYnZpZXcgPj4nKTtcbiAgICAgICAgdGhpcy5kZXNrdG9wSW5qZWN0ZWQgPSB0aGlzLl9jcmVhdGVFeHRlcm5hbExvZygnZGVza3RvcEluamVjdGVkID4+Jyk7XG4gICAgICAgIHRoaXMuZXRoZXJldW0gPSB0aGlzLl9jcmVhdGVFeHRlcm5hbExvZygnZXRoZXJldW0gPj4nKTtcbiAgICB9XG4gICAgX2F0dGFjaEV4dGVybmFsTG9nZ2VyKGxvZ2dlcikge1xuICAgICAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9leHRlcm5hbExvZ2dlciA9IGxvZ2dlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY3JlYXRlRGVidWdJbnN0YW5jZShuYW1lKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG59XG5jbGFzcyBBcHBEZWJ1Z0xvZ2dlciBleHRlbmRzIEZha2VEZWJ1Z0xvZ2dlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2RlYnVnSW5zdGFuY2VDcmVhdGVkTWFwID0ge307XG4gICAgICAgIHZvaWQgY3JlYXRlRGVidWdBc3luYygpLnRoZW4oKGRlYnVnKSA9PiAodGhpcy5fZGVidWcgPSBkZWJ1ZykpO1xuICAgIH1cbiAgICBfY3JlYXRlRGVidWdJbnN0YW5jZShuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z0luc3RhbmNlQ3JlYXRlZE1hcFtuYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlYnVnSW5zdGFuY2VDcmVhdGVkTWFwW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgdGhpcy5fZGVidWcgJiYgdHlwZW9mIHRoaXMuX2RlYnVnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgY29uc3QgX2RlYnVnTG9nID0gdGhpcy5fZGVidWcobmFtZSk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBfb3JpZ2luTG9nID0gdGhpc1tuYW1lXTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgdGhpc1tuYW1lXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICBfZGVidWdMb2coLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKF9vcmlnaW5Mb2cgJiYgdHlwZW9mIF9vcmlnaW5Mb2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgX29yaWdpbkxvZyguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gVE9ETyBtZXJnZSBGYWtlRGVidWdMb2dnZXIgYW5kIEFwcERlYnVnTG9nZ2VyIHRvIHNpbmdsZSBjbGFzc1xuY29uc3QgZmFrZURlYnVnTG9nZ2VyID0gbmV3IEZha2VEZWJ1Z0xvZ2dlcigpO1xuY29uc3QgYXBwRGVidWdMb2dnZXIgPSBuZXcgQXBwRGVidWdMb2dnZXIoKTtcbmV4cG9ydCB7IGZha2VEZWJ1Z0xvZ2dlciwgYXBwRGVidWdMb2dnZXIsIGZha2VMb2dnZXIsIGNvbnNvbGVFcnJvckluRGV2IH07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBpbWFnZSBVUkwgZXhpc3RzXG4gKiBAcGFyYW0gdXJsIC0gdGhlIHVybCBvZiB0aGUgaW1hZ2VcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGltYWdlIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gaW1nRXhpc3RzKHVybCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBHZXRzIHNpdGUgbWV0YWRhdGEgYW5kIHJldHVybnMgaXRcbiAqXG4gKi9cbmZ1bmN0aW9uIGdldFNpdGVNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogZ2V0U2l0ZU5hbWUod2luZG93KSxcbiAgICAgICAgICAgIGljb246IHlpZWxkIGdldFNpdGVJY29uKHdpbmRvdyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIEV4dHJhY3RzIGEgbmFtZSBmb3IgdGhlIHNpdGUgZnJvbSB0aGUgRE9NXG4gKi9cbmZ1bmN0aW9uIGdldFNpdGVOYW1lKHdpbmRvd09iamVjdCkge1xuICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvd09iamVjdDtcbiAgICBjb25zdCBzaXRlTmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgPiBtZXRhW3Byb3BlcnR5PVwib2c6c2l0ZV9uYW1lXCJdJyk7XG4gICAgaWYgKHNpdGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBzaXRlTmFtZS5jb250ZW50O1xuICAgIH1cbiAgICBjb25zdCBtZXRhVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkID4gbWV0YVtuYW1lPVwidGl0bGVcIl0nKTtcbiAgICBpZiAobWV0YVRpdGxlKSB7XG4gICAgICAgIHJldHVybiBtZXRhVGl0bGUuY29udGVudDtcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LnRpdGxlICYmIGRvY3VtZW50LnRpdGxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnRpdGxlO1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhbiBpY29uIGZvciB0aGUgc2l0ZSBmcm9tIHRoZSBET01cbiAqIEByZXR1cm5zIGFuIGljb24gVVJMXG4gKi9cbmZ1bmN0aW9uIGdldFNpdGVJY29uKHdpbmRvd09iamVjdCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvd09iamVjdDtcbiAgICAgICAgY29uc3QgaWNvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdoZWFkID4gbGlua1tyZWx+PVwiaWNvblwiXScpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgaWNvbnNBcnIgPSBpY29ucztcbiAgICAgICAgZm9yIChjb25zdCBpY29uIG9mIGljb25zQXJyKSB7XG4gICAgICAgICAgICBpZiAoaWNvbiAmJiAoeWllbGQgaW1nRXhpc3RzKGljb24uaHJlZikpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGljb24uaHJlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXRTaXRlTWV0YWRhdGEsXG4gICAgZ2V0U2l0ZUljb24sXG4gICAgZ2V0U2l0ZU5hbWUsXG4gICAgaW1nRXhpc3RzLFxufTtcbiIsImNvbnN0IHZlcnNpb24gPSAnMC4wLjctYWxwaGEuMic7XG5jb25zdCB2ZXJzaW9uQnVpbGQgPSAnMjAyMC0wMTAxLTEnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHZlcnNpb24sXG4gICAgdmVyc2lvbkJ1aWxkLFxufTtcbiIsImltcG9ydCB7IGlwY1JlbmRlcmVyIH0gZnJvbSAnZWxlY3Ryb24nO1xuaW1wb3J0IHsgYXBwRGVidWdMb2dnZXIgYXMgZGVidWdMb2dnZXIsIEpzQnJpZGdlQmFzZSwgY29uc3RzLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItY29yZSc7XG5jbGFzcyBKc0JyaWRnZURlc2t0b3BJbmplY3RlZCBleHRlbmRzIEpzQnJpZGdlQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2VuZEFzU3RyaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0luamVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgc2VuZFBheWxvYWQocGF5bG9hZCkge1xuICAgICAgICAvLyBzZW5kIHRvIHJlbmRlcmVyICh3ZWJ2aWV3IGhvc3QpXG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoY29uc3RzLkpTX0JSSURHRV9NRVNTQUdFX0lQQ19DSEFOTkVMLCBwYXlsb2FkKTtcbiAgICAgICAgZGVidWdMb2dnZXIuZGVza3RvcEluamVjdGVkKCdpcGNSZW5kZXJlci5zZW5kVG9Ib3N0JywgY29uc3RzLkpTX0JSSURHRV9NRVNTQUdFX0lQQ19DSEFOTkVMLCBwYXlsb2FkKTtcbiAgICAgICAgLy8gc2VuZCB0byBtYWluXG4gICAgICAgIC8vIGlwY1JlbmRlcmVyLnNlbmQoSlNfQlJJREdFX01FU1NBR0VfSVBDX0NIQU5ORUwsIHBheWxvYWRTdHIpO1xuICAgIH1cbn1cbmV4cG9ydCB7IEpzQnJpZGdlRGVza3RvcEluamVjdGVkIH07XG4iLCJleHBvcnQgKiBmcm9tICcuL0pzQnJpZGdlRGVza3RvcEluamVjdGVkJztcbiIsImltcG9ydCBzYWZlU3RyaW5naWZ5IGZyb20gJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknO1xuLyoqXG4gKiBFcnJvciBzdWJjbGFzcyBpbXBsZW1lbnRpbmcgSlNPTiBSUEMgMi4wIGVycm9ycyBhbmQgV2ViMyBSUEMgZXJyb3JzXG4gKiBwZXIgRUlQLTE0NzQuXG4gKiBQZXJtaXRzIGFueSBpbnRlZ2VyIGVycm9yIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWIzUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY29kZSwgbWVzc2FnZSwgZGF0YSkge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJjb2RlXCIgbXVzdCBiZSBhbiBpbnRlZ2VyLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJtZXNzYWdlXCIgbXVzdCBiZSBhIG5vbmVtcHR5IHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIHB1YmxpYyBjbGFzcyBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHtcbiAgICAgICAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhY2spIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuc3RhY2sgPSB0aGlzLnN0YWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgZXJyb3IsIG9taXR0aW5nXG4gICAgICogYW55IGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzYWZlU3RyaW5naWZ5KHRoaXMuc2VyaWFsaXplKCksIHN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHN1YmNsYXNzIGltcGxlbWVudGluZyBXZWIzIFByb3ZpZGVyIGVycm9ycyBwZXIgRUlQLTExOTMuXG4gKiBQZXJtaXRzIGludGVnZXIgZXJyb3IgY29kZXMgaW4gdGhlIFsgMTAwMCA8PSA0OTk5IF0gcmFuZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWIzUHJvdmlkZXJFcnJvciBleHRlbmRzIFdlYjNScGNFcnJvciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIFdlYjMgUHJvdmlkZXIgSlNPTi1SUEMgZXJyb3IuXG4gICAgICogYGNvZGVgIG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgMTAwMCA8PSA0OTk5IHJhbmdlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkV2ViM1Byb3ZpZGVyQ29kZShjb2RlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcImNvZGVcIiBtdXN0IGJlIGFuIGludGVnZXIgc3VjaCB0aGF0OiAxMDAwIDw9IGNvZGUgPD0gNDk5OScpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKGNvZGUsIG1lc3NhZ2UsIGRhdGEpO1xuICAgIH1cbn1cbi8vIEludGVybmFsXG5mdW5jdGlvbiBpc1ZhbGlkV2ViM1Byb3ZpZGVyQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA+PSAxMDAwICYmIGNvZGUgPD0gNDk5OTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeVJlcGxhY2VyKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAnW0NpcmN1bGFyXScpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0IGNvbnN0IGVycm9yQ29kZXMgPSB7XG4gICAgcnBjOiB7XG4gICAgICAgIGludmFsaWRJbnB1dDogLTMyMDAwLFxuICAgICAgICByZXNvdXJjZU5vdEZvdW5kOiAtMzIwMDEsXG4gICAgICAgIHJlc291cmNlVW5hdmFpbGFibGU6IC0zMjAwMixcbiAgICAgICAgdHJhbnNhY3Rpb25SZWplY3RlZDogLTMyMDAzLFxuICAgICAgICBtZXRob2ROb3RTdXBwb3J0ZWQ6IC0zMjAwNCxcbiAgICAgICAgbGltaXRFeGNlZWRlZDogLTMyMDA1LFxuICAgICAgICBwYXJzZTogLTMyNzAwLFxuICAgICAgICBpbnZhbGlkUmVxdWVzdDogLTMyNjAwLFxuICAgICAgICBtZXRob2ROb3RGb3VuZDogLTMyNjAxLFxuICAgICAgICBpbnZhbGlkUGFyYW1zOiAtMzI2MDIsXG4gICAgICAgIGludGVybmFsOiAtMzI2MDMsXG4gICAgfSxcbiAgICBwcm92aWRlcjoge1xuICAgICAgICB1c2VyUmVqZWN0ZWRSZXF1ZXN0OiA0MDAxLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IDQxMDAsXG4gICAgICAgIHVuc3VwcG9ydGVkTWV0aG9kOiA0MjAwLFxuICAgICAgICBkaXNjb25uZWN0ZWQ6IDQ5MDAsXG4gICAgICAgIGNoYWluRGlzY29ubmVjdGVkOiA0OTAxLFxuICAgICAgICByZXF1ZXN0VGltZW91dDogNDUwMCxcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBlcnJvclZhbHVlcyA9IHtcbiAgICAnLTMyNzAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LicsXG4gICAgfSxcbiAgICAnLTMyNjAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgSlNPTiBzZW50IGlzIG5vdCBhIHZhbGlkIFJlcXVlc3Qgb2JqZWN0LicsXG4gICAgfSxcbiAgICAnLTMyNjAxJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgbWV0aG9kIGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS4nLFxuICAgIH0sXG4gICAgJy0zMjYwMic6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdKU09OIFJQQyAyLjAnLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBtZXRob2QgcGFyYW1ldGVyKHMpLicsXG4gICAgfSxcbiAgICAnLTMyNjAzJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBKU09OLVJQQyBlcnJvci4nLFxuICAgIH0sXG4gICAgJy0zMjAwMCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGlucHV0LicsXG4gICAgfSxcbiAgICAnLTMyMDAxJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc291cmNlIG5vdCBmb3VuZC4nLFxuICAgIH0sXG4gICAgJy0zMjAwMic6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNvdXJjZSB1bmF2YWlsYWJsZS4nLFxuICAgIH0sXG4gICAgJy0zMjAwMyc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdUcmFuc2FjdGlvbiByZWplY3RlZC4nLFxuICAgIH0sXG4gICAgJy0zMjAwNCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdNZXRob2Qgbm90IHN1cHBvcnRlZC4nLFxuICAgIH0sXG4gICAgJy0zMjAwNSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXF1ZXN0IGxpbWl0IGV4Y2VlZGVkLicsXG4gICAgfSxcbiAgICAnNDAwMSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdVc2VyIHJlamVjdGVkIHRoZSByZXF1ZXN0LicsXG4gICAgfSxcbiAgICAnNDEwMCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIGFjY291bnQgYW5kL29yIG1ldGhvZCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4nLFxuICAgIH0sXG4gICAgJzQyMDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnRUlQLTExOTMnLFxuICAgICAgICBtZXNzYWdlOiAnVGhlIHJlcXVlc3RlZCBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIFdlYjMgcHJvdmlkZXIuJyxcbiAgICB9LFxuICAgICc0OTAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwcm92aWRlciBpcyBkaXNjb25uZWN0ZWQgZnJvbSBhbGwgY2hhaW5zLicsXG4gICAgfSxcbiAgICAnNDkwMSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcHJvdmlkZXIgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBjaGFpbi4nLFxuICAgIH0sXG4gICAgJzQ1MDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSByZXF1ZXN0IGJ5IHRoaXMgV2ViMyBwcm92aWRlciBpcyB0aW1lb3V0LicsXG4gICAgfSxcbn07XG4vLyBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTE0NzQjZXJyb3ItY29kZXNcbi8vIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMTE5MyNwcm92aWRlci1lcnJvcnNcbiIsImltcG9ydCB7IFdlYjNScGNFcnJvciwgV2ViM1Byb3ZpZGVyRXJyb3IgfSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZUZyb21Db2RlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBlcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvci1jb25zdGFudHMnO1xuZXhwb3J0IGNvbnN0IHdlYjNFcnJvcnMgPSB7XG4gICAgcnBjOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgUGFyc2UgKC0zMjcwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5wYXJzZSwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBJbnZhbGlkIFJlcXVlc3QgKC0zMjYwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBpbnZhbGlkUmVxdWVzdDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5pbnZhbGlkUmVxdWVzdCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBJbnZhbGlkIFBhcmFtcyAoLTMyNjAyKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludmFsaWRQYXJhbXM6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMuaW52YWxpZFBhcmFtcywgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBNZXRob2QgTm90IEZvdW5kICgtMzI2MDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgbWV0aG9kTm90Rm91bmQ6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMubWV0aG9kTm90Rm91bmQsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgSW50ZXJuYWwgKC0zMjYwMykgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBpbnRlcm5hbDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5pbnRlcm5hbCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBTZXJ2ZXIgZXJyb3IuXG4gICAgICAgICAqIFBlcm1pdHMgaW50ZWdlciBlcnJvciBjb2RlcyBpbiB0aGUgWyAtMzIwOTkgPD0gLTMyMDA1IF0gcmFuZ2UuXG4gICAgICAgICAqIENvZGVzIC0zMjAwMCB0aHJvdWdoIC0zMjAwNCBhcmUgcmVzZXJ2ZWQgYnkgRUlQLTE0NzQuXG4gICAgICAgICAqL1xuICAgICAgICBzZXJ2ZXI6IChvcHRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYjMgUlBDIFNlcnZlciBlcnJvcnMgbXVzdCBwcm92aWRlIHNpbmdsZSBvYmplY3QgYXJndW1lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IG9wdHM7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29kZSkgfHwgY29kZSA+IC0zMjAwNSB8fCBjb2RlIDwgLTMyMDk5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcImNvZGVcIiBtdXN0IGJlIGFuIGludGVnZXIgc3VjaCB0aGF0OiAtMzIwOTkgPD0gY29kZSA8PSAtMzIwMDUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzSnNvblJwY0Vycm9yKGNvZGUsIG9wdHMpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgSlNPTiBSUEMgSW52YWxpZCBJbnB1dCAoLTMyMDAwKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludmFsaWRJbnB1dDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5pbnZhbGlkSW5wdXQsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBKU09OIFJQQyBSZXNvdXJjZSBOb3QgRm91bmQgKC0zMjAwMSkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICByZXNvdXJjZU5vdEZvdW5kOiAoYXJnKSA9PiBnZXRXZWIzSnNvblJwY0Vycm9yKGVycm9yQ29kZXMucnBjLnJlc291cmNlTm90Rm91bmQsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBKU09OIFJQQyBSZXNvdXJjZSBVbmF2YWlsYWJsZSAoLTMyMDAyKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIHJlc291cmNlVW5hdmFpbGFibGU6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMucmVzb3VyY2VVbmF2YWlsYWJsZSwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBXZWIzIEpTT04gUlBDIFRyYW5zYWN0aW9uIFJlamVjdGVkICgtMzIwMDMpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdHJhbnNhY3Rpb25SZWplY3RlZDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy50cmFuc2FjdGlvblJlamVjdGVkLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgSlNPTiBSUEMgTWV0aG9kIE5vdCBTdXBwb3J0ZWQgKC0zMjAwNCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBtZXRob2ROb3RTdXBwb3J0ZWQ6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMubWV0aG9kTm90U3VwcG9ydGVkLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgSlNPTiBSUEMgTGltaXQgRXhjZWVkZWQgKC0zMjAwNSkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBsaW1pdEV4Y2VlZGVkOiAoYXJnKSA9PiBnZXRXZWIzSnNvblJwY0Vycm9yKGVycm9yQ29kZXMucnBjLmxpbWl0RXhjZWVkZWQsIGFyZyksXG4gICAgfSxcbiAgICBwcm92aWRlcjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgUHJvdmlkZXIgVXNlciBSZWplY3RlZCBSZXF1ZXN0ICg0MDAxKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIHVzZXJSZWplY3RlZFJlcXVlc3Q6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLnVzZXJSZWplY3RlZFJlcXVlc3QsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBQcm92aWRlciBVbmF1dGhvcml6ZWQgKDQxMDApIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdW5hdXRob3JpemVkOiAoYXJnKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0V2ViM1Byb3ZpZGVyRXJyb3IoZXJyb3JDb2Rlcy5wcm92aWRlci51bmF1dGhvcml6ZWQsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBQcm92aWRlciBVbnN1cHBvcnRlZCBNZXRob2QgKDQyMDApIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdW5zdXBwb3J0ZWRNZXRob2Q6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLnVuc3VwcG9ydGVkTWV0aG9kLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgUHJvdmlkZXIgTm90IENvbm5lY3RlZCAoNDkwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBkaXNjb25uZWN0ZWQ6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLmRpc2Nvbm5lY3RlZCwgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBXZWIzIFByb3ZpZGVyIENoYWluIE5vdCBDb25uZWN0ZWQgKDQ5MDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgY2hhaW5EaXNjb25uZWN0ZWQ6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLmNoYWluRGlzY29ubmVjdGVkLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0VGltZW91dDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldFdlYjNQcm92aWRlckVycm9yKGVycm9yQ29kZXMucHJvdmlkZXIucmVxdWVzdFRpbWVvdXQsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBjdXN0b20gV2ViMyBQcm92aWRlciBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGN1c3RvbTogKG9wdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViMyBQcm92aWRlciBjdXN0b20gZXJyb3JzIG11c3QgcHJvdmlkZSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBtZXNzYWdlLCBkYXRhIH0gPSBvcHRzO1xuICAgICAgICAgICAgaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJtZXNzYWdlXCIgbXVzdCBiZSBhIG5vbmVtcHR5IHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWIzUHJvdmlkZXJFcnJvcihjb2RlLCBtZXNzYWdlLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8vIEludGVybmFsXG5mdW5jdGlvbiBnZXRXZWIzSnNvblJwY0Vycm9yKGNvZGUsIGFyZykge1xuICAgIGNvbnN0IFttZXNzYWdlLCBkYXRhXSA9IHBhcnNlT3B0cyhhcmcpO1xuICAgIHJldHVybiBuZXcgV2ViM1JwY0Vycm9yKGNvZGUsIG1lc3NhZ2UgfHwgZ2V0TWVzc2FnZUZyb21Db2RlKGNvZGUpLCBkYXRhKTtcbn1cbmZ1bmN0aW9uIGdldFdlYjNQcm92aWRlckVycm9yKGNvZGUsIGFyZykge1xuICAgIGNvbnN0IFttZXNzYWdlLCBkYXRhXSA9IHBhcnNlT3B0cyhhcmcpO1xuICAgIHJldHVybiBuZXcgV2ViM1Byb3ZpZGVyRXJyb3IoY29kZSwgbWVzc2FnZSB8fCBnZXRNZXNzYWdlRnJvbUNvZGUoY29kZSksIGRhdGEpO1xufVxuZnVuY3Rpb24gcGFyc2VPcHRzKGFyZykge1xuICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gW2FyZ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBkYXRhIH0gPSBhcmc7XG4gICAgICAgICAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBzdHJpbmcgbWVzc2FnZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZSB8fCB1bmRlZmluZWQsIGRhdGFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbiIsImltcG9ydCB7IFdlYjNScGNFcnJvciwgV2ViM1Byb3ZpZGVyRXJyb3IgfSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IsIGdldE1lc3NhZ2VGcm9tQ29kZSwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHdlYjNFcnJvcnMgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBlcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvci1jb25zdGFudHMnO1xuZXhwb3J0IHsgZXJyb3JDb2Rlcywgd2ViM0Vycm9ycywgV2ViM1JwY0Vycm9yLCBXZWIzUHJvdmlkZXJFcnJvciwgc2VyaWFsaXplRXJyb3IsIGdldE1lc3NhZ2VGcm9tQ29kZSwgfTtcbiIsImltcG9ydCB7IGVycm9yQ29kZXMsIGVycm9yVmFsdWVzIH0gZnJvbSAnLi9lcnJvci1jb25zdGFudHMnO1xuaW1wb3J0IHsgV2ViM1JwY0Vycm9yIH0gZnJvbSAnLi9jbGFzc2VzJztcbmNvbnN0IEZBTExCQUNLX0VSUk9SX0NPREUgPSBlcnJvckNvZGVzLnJwYy5pbnRlcm5hbDtcbmNvbnN0IEZBTExCQUNLX01FU1NBR0UgPSAnVW5zcGVjaWZpZWQgZXJyb3IgbWVzc2FnZS4gVGhpcyBpcyBhIGJ1ZywgcGxlYXNlIHJlcG9ydCBpdC4nO1xuY29uc3QgRkFMTEJBQ0tfRVJST1IgPSB7XG4gICAgY29kZTogRkFMTEJBQ0tfRVJST1JfQ09ERSxcbiAgICBtZXNzYWdlOiBnZXRNZXNzYWdlRnJvbUNvZGUoRkFMTEJBQ0tfRVJST1JfQ09ERSksXG59O1xuZXhwb3J0IGNvbnN0IEpTT05fUlBDX1NFUlZFUl9FUlJPUl9NRVNTQUdFID0gJ1Vuc3BlY2lmaWVkIHNlcnZlciBlcnJvci4nO1xuLyoqXG4gKiBHZXRzIHRoZSBtZXNzYWdlIGZvciBhIGdpdmVuIGNvZGUsIG9yIGEgZmFsbGJhY2sgbWVzc2FnZSBpZiB0aGUgY29kZSBoYXNcbiAqIG5vIGNvcnJlc3BvbmRpbmcgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc3NhZ2VGcm9tQ29kZShjb2RlLCBmYWxsYmFja01lc3NhZ2UgPSBGQUxMQkFDS19NRVNTQUdFKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoY29kZSkpIHtcbiAgICAgICAgY29uc3QgY29kZVN0cmluZyA9IGNvZGUudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGhhc0tleShlcnJvclZhbHVlcywgY29kZVN0cmluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlc1tjb2RlU3RyaW5nXS5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0pzb25ScGNTZXJ2ZXJFcnJvcihjb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT05fUlBDX1NFUlZFUl9FUlJPUl9NRVNTQUdFO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxsYmFja01lc3NhZ2U7XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gY29kZSBpcyB2YWxpZC5cbiAqIEEgY29kZSBpcyBvbmx5IHZhbGlkIGlmIGl0IGhhcyBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29kZShjb2RlKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29kZVN0cmluZyA9IGNvZGUudG9TdHJpbmcoKTtcbiAgICBpZiAoZXJyb3JWYWx1ZXNbY29kZVN0cmluZ10pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpc0pzb25ScGNTZXJ2ZXJFcnJvcihjb2RlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBlcnJvciB0byBhbiBXZWIzIEpTT04gUlBDLWNvbXBhdGlibGUgZXJyb3Igb2JqZWN0LlxuICogTWVyZWx5IGNvcGllcyB0aGUgZ2l2ZW4gZXJyb3IncyB2YWx1ZXMgaWYgaXQgaXMgYWxyZWFkeSBjb21wYXRpYmxlLlxuICogSWYgdGhlIGdpdmVuIGVycm9yIGlzIG5vdCBmdWxseSBjb21wYXRpYmxlLCBpdCB3aWxsIGJlIHByZXNlcnZlZCBvbiB0aGVcbiAqIHJldHVybmVkIG9iamVjdCdzIGRhdGEub3JpZ2luYWxFcnJvciBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVycm9yKGVycm9yLCB7IGZhbGxiYWNrRXJyb3IgPSBGQUxMQkFDS19FUlJPUiwgc2hvdWxkSW5jbHVkZVN0YWNrID0gZmFsc2UsIH0gPSB7fSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFmYWxsYmFja0Vycm9yIHx8XG4gICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKGZhbGxiYWNrRXJyb3IuY29kZSkgfHxcbiAgICAgICAgdHlwZW9mIGZhbGxiYWNrRXJyb3IubWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgZmFsbGJhY2sgZXJyb3Igd2l0aCBpbnRlZ2VyIG51bWJlciBjb2RlIGFuZCBzdHJpbmcgbWVzc2FnZS4nKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV2ViM1JwY0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5zZXJpYWxpemUoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICAgIGlmIChlcnJvciAmJlxuICAgICAgICB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGVycm9yKSAmJlxuICAgICAgICBoYXNLZXkoZXJyb3IsICdjb2RlJykgJiZcbiAgICAgICAgaXNWYWxpZENvZGUoZXJyb3IuY29kZSkpIHtcbiAgICAgICAgY29uc3QgX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IF9lcnJvci5jb2RlO1xuICAgICAgICBpZiAoX2Vycm9yLm1lc3NhZ2UgJiYgdHlwZW9mIF9lcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gX2Vycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoaGFzS2V5KF9lcnJvciwgJ2RhdGEnKSkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQuZGF0YSA9IF9lcnJvci5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gZ2V0TWVzc2FnZUZyb21Db2RlKHNlcmlhbGl6ZWQuY29kZSk7XG4gICAgICAgICAgICBzZXJpYWxpemVkLmRhdGEgPSB7IG9yaWdpbmFsRXJyb3I6IGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IGZhbGxiYWNrRXJyb3IuY29kZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IChfYSA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZTtcbiAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gKG1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG1lc3NhZ2VcbiAgICAgICAgICAgIDogZmFsbGJhY2tFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgc2VyaWFsaXplZC5kYXRhID0geyBvcmlnaW5hbEVycm9yOiBhc3NpZ25PcmlnaW5hbEVycm9yKGVycm9yKSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IChfYiA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RhY2s7XG4gICAgaWYgKHNob3VsZEluY2x1ZGVTdGFjayAmJiBlcnJvciAmJiBzdGFjayAmJiB0eXBlb2Ygc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuc3RhY2sgPSBzdGFjaztcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59XG4vLyBJbnRlcm5hbFxuZnVuY3Rpb24gaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IC0zMjA5OSAmJiBjb2RlIDw9IC0zMjAwMDtcbn1cbmZ1bmN0aW9uIGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG4iLCJpbXBvcnQgeyBQcm92aWRlckV0aGVyZXVtIH0gZnJvbSAnQG9uZWtleWZlL29uZWtleS1ldGgtcHJvdmlkZXInO1xuaW1wb3J0IHsgUHJvdmlkZXJQcml2YXRlIH0gZnJvbSAnQG9uZWtleWZlL29uZWtleS1wcml2YXRlLXByb3ZpZGVyJztcbmZ1bmN0aW9uIGluamVjdFdlYjNQcm92aWRlcigpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghKChfYSA9IHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy4kb25la2V5KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuanNCcmlkZ2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25lS2V5IGpzQnJpZGdlIG5vdCBmb3VuZC4nKTtcbiAgICB9XG4gICAgY29uc3QgYnJpZGdlID0gKF9iID0gd2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LiRvbmVrZXkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5qc0JyaWRnZTtcbiAgICBjb25zdCBldGhlcmV1bSA9IG5ldyBQcm92aWRlckV0aGVyZXVtKHtcbiAgICAgICAgYnJpZGdlLFxuICAgIH0pO1xuICAgIGNvbnN0ICRwcml2YXRlID0gbmV3IFByb3ZpZGVyUHJpdmF0ZSh7XG4gICAgICAgIGJyaWRnZSxcbiAgICB9KTtcbiAgICAvLyBwcm92aWRlckh1YlxuICAgIGNvbnN0ICRvbmVrZXkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdpbmRvdy4kb25la2V5KSwgeyBqc0JyaWRnZTogYnJpZGdlLCBldGhlcmV1bSxcbiAgICAgICAgJHByaXZhdGUsIHNvbGFuYTogbnVsbCwgY29uZmx1eDogbnVsbCwgc29sbGV0OiBudWxsIH0pO1xuICAgIHdpbmRvdy4kb25la2V5ID0gJG9uZWtleTtcbiAgICAvLyBUT0RPIGNvbmZsaWN0IHdpdGggTWV0YU1hc2tcbiAgICB3aW5kb3cuZXRoZXJldW0gPSBldGhlcmV1bTtcbiAgICAvLyB3aW5kb3cud2ViMyA9IGV0aGVyZXVtOyAvLyBkYXBwIGNyZWF0ZSB3ZWIzLmpzIG9yIGV0aGVycy5qcyBpdHNlbGZcbiAgICAvLyBUT0RPIHVzZSBpbml0aWFsaXplSW5wYWdlUHJvdmlkZXIudHNcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2V0aGVyZXVtI2luaXRpYWxpemVkJykpO1xuICAgIHJldHVybiAkb25la2V5O1xufVxuZXhwb3J0IHsgaW5qZWN0V2ViM1Byb3ZpZGVyIH07XG4iLCJpbXBvcnQgeyBNZXRhTWFza0lucGFnZVByb3ZpZGVyIH0gZnJvbSAnLi9ldGhlcmV1bSc7XG5jbGFzcyBQcm92aWRlckV0aGVyZXVtIGV4dGVuZHMgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciB7XG59XG5leHBvcnQgeyBQcm92aWRlckV0aGVyZXVtIH07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGwsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG5pbXBvcnQgeyBFdGhlcmV1bVJwY0Vycm9yLCBldGhFcnJvcnMgfSBmcm9tICdldGgtcnBjLWVycm9ycyc7XG5pbXBvcnQgZGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBhcHBEZWJ1Z0xvZ2dlciBhcyBkZWJ1Z0xvZ2dlciwgUHJvdmlkZXJCYXNlLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItY29yZSc7XG5pbXBvcnQgeyBJSW5qZWN0ZWRQcm92aWRlck5hbWVzLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItdHlwZXMnO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgRU1JVFRFRF9OT1RJRklDQVRJT05TLCBsb2dTdHJlYW1EaXNjb25uZWN0V2FybmluZyB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcihjb25maWcpO1xuICAgICAgICB0aGlzLnByb3ZpZGVyTmFtZSA9IElJbmplY3RlZFByb3ZpZGVyTmFtZXMuZXRoZXJldW07XG4gICAgICAgIHRoaXMuaXNNZXRhTWFzayA9IHRydWU7XG4gICAgICAgIC8vIFRPRE8gdXNlIGRlYnVnTG9nZ2VyLmV0aGVyZXVtKClcbiAgICAgICAgdGhpcy5fbG9nID0gKF9hID0gY29uZmlnLmxvZ2dlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogd2luZG93LmNvbnNvbGU7XG4gICAgICAgIC8vIFRPRE8gcmVtb3ZlXG4gICAgICAgIC8vIHRoaXMuc2V0TWF4TGlzdGVuZXJzKGNvbmZpZy5tYXhFdmVudExpc3RlbmVycyA/PyAxMDApO1xuICAgICAgICAvLyBwcml2YXRlIHN0YXRlXG4gICAgICAgIHRoaXMuX3N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgQmFzZVByb3ZpZGVyLl9kZWZhdWx0U3RhdGUpO1xuICAgICAgICAvLyBwdWJsaWMgc3RhdGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgICB0aGlzLmNoYWluSWQgPSBudWxsO1xuICAgICAgICAvLyBiaW5kIGZ1bmN0aW9ucyAodG8gcHJldmVudCBjb25zdW1lcnMgZnJvbSBtYWtpbmcgdW5ib3VuZCBjYWxscylcbiAgICAgICAgdGhpcy5faGFuZGxlQWNjb3VudHNDaGFuZ2VkID0gdGhpcy5faGFuZGxlQWNjb3VudHNDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNvbm5lY3QgPSB0aGlzLl9oYW5kbGVDb25uZWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoYWluQ2hhbmdlZCA9IHRoaXMuX2hhbmRsZUNoYWluQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVEaXNjb25uZWN0ID0gdGhpcy5faGFuZGxlRGlzY29ubmVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVTdHJlYW1EaXNjb25uZWN0ID0gdGhpcy5faGFuZGxlU3RyZWFtRGlzY29ubmVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVVbmxvY2tTdGF0ZUNoYW5nZWQgPSB0aGlzLl9oYW5kbGVVbmxvY2tTdGF0ZUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fcnBjUmVxdWVzdCA9IHRoaXMuX3JwY1JlcXVlc3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0LmJpbmQodGhpcyk7XG4gICAgICAgIC8vIFRPRE8ganNCcmlkZ2UgZGlzY29ubmVjdCBldmVudFxuICAgICAgICBjb25zdCBkaXNjb25uZWN0SGFuZGxlciA9IHRoaXMuX2hhbmRsZVN0cmVhbURpc2Nvbm5lY3QuYmluZCh0aGlzLCAnT25lS2V5Jyk7XG4gICAgICAgIC8vIHNldHVwIG93biBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgLy8gRUlQLTExOTMgY29ubmVjdFxuICAgICAgICB0aGlzLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gc2V0dXAgUlBDIGNvbm5lY3Rpb25cbiAgICAgICAgLy8gVE9ETyBqc0JyaWRnZSBkaXNjb25uZWN0IGV2ZW50XG4gICAgICAgIGNvbnN0IGRpc2Nvbm5lY3RIYW5kbGVyUnBjID0gdGhpcy5faGFuZGxlU3RyZWFtRGlzY29ubmVjdC5iaW5kKHRoaXMsICdPbmVLZXkgUnBjUHJvdmlkZXInKTtcbiAgICAgICAgLy8gaGFuZGxlIFJQQyByZXF1ZXN0cyB2aWEgZGFwcC1zaWRlIHJwYyBlbmdpbmVcbiAgICAgICAgLy8gVE9ETyBtaWRkbGV3YXJlIGxpa2UgbWV0aG9kc1xuICAgICAgICAvLyBycGNFbmdpbmUucHVzaChjcmVhdGVJZFJlbWFwTWlkZGxld2FyZSgpKTtcbiAgICAgICAgLy8gcnBjRW5naW5lLnB1c2goY3JlYXRlRXJyb3JNaWRkbGV3YXJlKHRoaXMuX2xvZykpO1xuICAgICAgICB2b2lkIHRoaXMuX2luaXRpYWxpemVTdGF0ZSgpO1xuICAgICAgICAvLyBoYW5kbGUgSlNPTi1SUEMgbm90aWZpY2F0aW9uc1xuICAgICAgICB0aGlzLm9uKCdtZXNzYWdlX2xvd19sZXZlbCcsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zIH0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ21ldGFtYXNrX2FjY291bnRzQ2hhbmdlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVBY2NvdW50c0NoYW5nZWQocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gJ21ldGFtYXNrX3VubG9ja1N0YXRlQ2hhbmdlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVVbmxvY2tTdGF0ZUNoYW5nZWQocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gJ21ldGFtYXNrX2NoYWluQ2hhbmdlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDaGFpbkNoYW5nZWQocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEVNSVRURURfTk9USUZJQ0FUSU9OUy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gJ01FVEFNQVNLX1NUUkVBTV9GQUlMVVJFJykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gZGVzdHJveSBicmlkZ2UgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2VzLmVycm9ycy5wZXJtYW5lbnRseURpc2Nvbm5lY3RlZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUHVibGljIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZXIgY2FuIHByb2Nlc3MgUlBDIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdHMgYW4gUlBDIHJlcXVlc3QgZm9yIHRoZSBnaXZlbiBtZXRob2QsIHdpdGggdGhlIGdpdmVuIHBhcmFtcy5cbiAgICAgKiBSZXNvbHZlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCBjYWxsLCBvciByZWplY3RzIG9uIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFyZ3MgLSBUaGUgUlBDIHJlcXVlc3QgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSBhcmdzLm1ldGhvZCAtIFRoZSBSUEMgbWV0aG9kIG5hbWUuXG4gICAgICogQHBhcmFtIGFyZ3MucGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBSUEMgbWV0aG9kLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgUlBDIG1ldGhvZCxcbiAgICAgKiBvciByZWplY3RzIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLlxuICAgICAqL1xuICAgIHJlcXVlc3QoYXJncykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZGVidWdMb2dnZXIuZXRoZXJldW0oJ3JlcXVlc3QnLCBhcmdzKTtcbiAgICAgICAgICAgIGlmICghYXJncyB8fCB0eXBlb2YgYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuaW52YWxpZFJlcXVlc3RBcmdzKCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zIH0gPSBhcmdzO1xuICAgICAgICAgICAgaWYgKCFtZXRob2QgfHwgdHlwZW9mIG1ldGhvZCAhPT0gJ3N0cmluZycgfHwgbWV0aG9kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZUVycm9yTWlkZGxld2FyZVxuICAgICAgICAgICAgICAgIC8vIGBUaGUgcmVxdWVzdCAnbWV0aG9kJyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gLFxuICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuaW52YWxpZFJlcXVlc3RNZXRob2QoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhcmFtcykgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHBhcmFtcyAhPT0gJ29iamVjdCcgfHwgcGFyYW1zID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuaW52YWxpZFJlcXVlc3RQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE8gZXJyb3IgbG9nZ2VyXG4gICAgICAgICAgICAvLyAgICAgIGxvZy5lcnJvcihgTWV0YU1hc2sgLSBSUEMgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSAoeWllbGQgdGhpcy5fcnBjUmVxdWVzdCh7IG1ldGhvZCwgcGFyYW1zIH0pKTtcbiAgICAgICAgICAgIGRlYnVnTG9nZ2VyLmV0aGVyZXVtKCdyZXF1ZXN0LT5yZXNwb25zZScsICdcXG4nLCBhcmdzLCAnXFxuIC0tLT4gJywgcmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFByaXZhdGUgTWV0aG9kc1xuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3IgaGVscGVyLlxuICAgICAqIFBvcHVsYXRlcyBpbml0aWFsIHN0YXRlIGJ5IGNhbGxpbmcgJ21ldGFtYXNrX2dldFByb3ZpZGVyU3RhdGUnIGFuZCBlbWl0c1xuICAgICAqIG5lY2Vzc2FyeSBldmVudHMuXG4gICAgICovXG4gICAgX2luaXRpYWxpemVTdGF0ZSgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ21ldGFtYXNrX2dldFByb3ZpZGVyU3RhdGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWNjb3VudHMsIGNoYWluSWQsIGlzVW5sb2NrZWQsIG5ldHdvcmtWZXJzaW9uLCBkZWJ1Z0xvZ2dlclNldHRpbmdzIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgLy8gU3luYyBkZWJ1Z0xvZ2dlciBzZXR0aW5ncyB0byBpbmplY3RlZC5qc1xuICAgICAgICAgICAgICAgIGlmICgoX2MgPSAoX2IgPSAoX2EgPSB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuJG9uZWtleSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVidWcpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5lbmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LiRvbmVrZXkuZGVidWdMb2dnZXIuZGVidWcuZW5hYmxlKGRlYnVnTG9nZ2VyU2V0dGluZ3MgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IHdlJ3ZlIGNvbm5lY3RlZCwgZm9yIEVJUC0xMTkzIGNvbXBsaWFuY2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCB7IGNoYWluSWQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24gfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlVW5sb2NrU3RhdGVDaGFuZ2VkKHsgYWNjb3VudHMsIGlzVW5sb2NrZWQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQWNjb3VudHNDaGFuZ2VkKGFjY291bnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IEZhaWxlZCB0byBnZXQgaW5pdGlhbCBzdGF0ZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4nLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdfaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIFJQQyBtZXRob2QuIEZvcndhcmRzIHJlcXVlc3RzIHRvIGJhY2tncm91bmQgdmlhIHRoZSBSUEMgZW5naW5lLlxuICAgICAqIEFsc28gcmVtYXAgaWRzIGluYm91bmQgYW5kIG91dGJvdW5kLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgUlBDIHJlcXVlc3Qgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBjYWxsYmFja1xuICAgICAqL1xuICAgIF9ycGNSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuanNvbnJwYykge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmpzb25ycGMgPSAnMi4wJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgdGhpcy5icmlkZ2VSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5tZXRob2QgPT09ICdldGhfYWNjb3VudHMnIHx8IHBheWxvYWQubWV0aG9kID09PSAnZXRoX3JlcXVlc3RBY2NvdW50cycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGFjY291bnRzIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFjY291bnRzQ2hhbmdlZChyZXN1bHQgfHwgW10sIHBheWxvYWQubWV0aG9kID09PSAnZXRoX2FjY291bnRzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPIGFycmF5IHBheWxvYWQ/XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5icmlkZ2VSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIHByb3ZpZGVyIGJlY29tZXMgY29ubmVjdGVkLCB1cGRhdGVzIGludGVybmFsIHN0YXRlIGFuZCBlbWl0c1xuICAgICAqIHJlcXVpcmVkIGV2ZW50cy4gSWRlbXBvdGVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFpbklkIC0gVGhlIElEIG9mIHRoZSBuZXdseSBjb25uZWN0ZWQgY2hhaW4uXG4gICAgICogQGVtaXRzIE1ldGFNYXNrSW5wYWdlUHJvdmlkZXIjY29ubmVjdFxuICAgICAqL1xuICAgIF9oYW5kbGVDb25uZWN0KGNoYWluSWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZS5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgeyBjaGFpbklkIH0pO1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKG1lc3NhZ2VzLmluZm8uY29ubmVjdGVkKGNoYWluSWQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBwcm92aWRlciBiZWNvbWVzIGRpc2Nvbm5lY3RlZCwgdXBkYXRlcyBpbnRlcm5hbCBzdGF0ZSBhbmQgZW1pdHNcbiAgICAgKiByZXF1aXJlZCBldmVudHMuIElkZW1wb3RlbnQgd2l0aCByZXNwZWN0IHRvIHRoZSBpc1JlY292ZXJhYmxlIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEVycm9yIGNvZGVzIHBlciB0aGUgQ2xvc2VFdmVudCBzdGF0dXMgY29kZXMgYXMgcmVxdWlyZWQgYnkgRUlQLTExOTM6XG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Nsb3NlRXZlbnQjU3RhdHVzX2NvZGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNSZWNvdmVyYWJsZSAtIFdoZXRoZXIgdGhlIGRpc2Nvbm5lY3Rpb24gaXMgcmVjb3ZlcmFibGUuXG4gICAgICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQGVtaXRzIE1ldGFNYXNrSW5wYWdlUHJvdmlkZXIjZGlzY29ubmVjdFxuICAgICAqL1xuICAgIF9oYW5kbGVEaXNjb25uZWN0KGlzUmVjb3ZlcmFibGUsIGVycm9yTWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgfHwgKCF0aGlzLl9zdGF0ZS5pc1Blcm1hbmVudGx5RGlzY29ubmVjdGVkICYmICFpc1JlY292ZXJhYmxlKSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIGlmIChpc1JlY292ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEV0aGVyZXVtUnBjRXJyb3IoMTAxMywgLy8gVHJ5IGFnYWluIGxhdGVyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlIHx8IG1lc3NhZ2VzLmVycm9ycy5kaXNjb25uZWN0ZWQoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFdGhlcmV1bVJwY0Vycm9yKDEwMTEsIC8vIEludGVybmFsIGVycm9yXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlIHx8IG1lc3NhZ2VzLmVycm9ycy5wZXJtYW5lbnRseURpc2Nvbm5lY3RlZCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWNjb3VudHMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5pc1VubG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNQZXJtYW5lbnRseURpc2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gY29ubmVjdGlvbiBpcyBsb3N0IHRvIGNyaXRpY2FsIHN0cmVhbXMuXG4gICAgICpcbiAgICAgKiBAZW1pdHMgTWV0YW1hc2tJbnBhZ2VQcm92aWRlciNkaXNjb25uZWN0XG4gICAgICovXG4gICAgX2hhbmRsZVN0cmVhbURpc2Nvbm5lY3Qoc3RyZWFtTmFtZSwgZXJyb3IpIHtcbiAgICAgICAgbG9nU3RyZWFtRGlzY29ubmVjdFdhcm5pbmcodGhpcy5fbG9nLCBzdHJlYW1OYW1lLCBlcnJvciwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZURpc2Nvbm5lY3QoZmFsc2UsIGVycm9yID8gZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwb24gcmVjZWlwdCBvZiBhIG5ldyBjaGFpbklkIGFuZCBuZXR3b3JrVmVyc2lvbiwgZW1pdHMgY29ycmVzcG9uZGluZ1xuICAgICAqIGV2ZW50cyBhbmQgc2V0cyByZWxldmFudCBwdWJsaWMgc3RhdGUuXG4gICAgICogRG9lcyBub3RoaW5nIGlmIG5laXRoZXIgdGhlIGNoYWluSWQgbm9yIHRoZSBuZXR3b3JrVmVyc2lvbiBhcmUgZGlmZmVyZW50XG4gICAgICogZnJvbSBleGlzdGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAZW1pdHMgTWV0YW1hc2tJbnBhZ2VQcm92aWRlciNjaGFpbkNoYW5nZWRcbiAgICAgKiBAcGFyYW0gbmV0d29ya0luZm8gLSBBbiBvYmplY3Qgd2l0aCBuZXR3b3JrIGluZm8uXG4gICAgICogQHBhcmFtIG5ldHdvcmtJbmZvLmNoYWluSWQgLSBUaGUgbGF0ZXN0IGNoYWluIElELlxuICAgICAqIEBwYXJhbSBuZXR3b3JrSW5mby5uZXR3b3JrVmVyc2lvbiAtIFRoZSBsYXRlc3QgbmV0d29yayBJRC5cbiAgICAgKi9cbiAgICBfaGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24gfSA9IHt9KSB7XG4gICAgICAgIGlmICghY2hhaW5JZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGNoYWluSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAhY2hhaW5JZC5zdGFydHNXaXRoKCcweCcpIHx8XG4gICAgICAgICAgICAhbmV0d29ya1ZlcnNpb24gfHxcbiAgICAgICAgICAgIHR5cGVvZiBuZXR3b3JrVmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IFJlY2VpdmVkIGludmFsaWQgbmV0d29yayBwYXJhbWV0ZXJzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLicsIHtcbiAgICAgICAgICAgICAgICBjaGFpbklkLFxuICAgICAgICAgICAgICAgIG5ldHdvcmtWZXJzaW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ldHdvcmtWZXJzaW9uID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZURpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDb25uZWN0KGNoYWluSWQpO1xuICAgICAgICAgICAgaWYgKGNoYWluSWQgIT09IHRoaXMuY2hhaW5JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5JZCA9IGNoYWluSWQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2hhaW5DaGFuZ2VkJywgdGhpcy5jaGFpbklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gYWNjb3VudHMgbWF5IGhhdmUgY2hhbmdlZC4gRGlmZnMgdGhlIG5ldyBhY2NvdW50cyB2YWx1ZSB3aXRoXG4gICAgICogdGhlIGN1cnJlbnQgb25lLCB1cGRhdGVzIGFsbCBzdGF0ZSBhcyBuZWNlc3NhcnksIGFuZCBlbWl0cyB0aGVcbiAgICAgKiBhY2NvdW50c0NoYW5nZWQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWNjb3VudHMgLSBUaGUgbmV3IGFjY291bnRzIHZhbHVlLlxuICAgICAqIEBwYXJhbSBpc0V0aEFjY291bnRzIC0gV2hldGhlciB0aGUgYWNjb3VudHMgdmFsdWUgd2FzIHJldHVybmVkIGJ5XG4gICAgICogYSBjYWxsIHRvIGV0aF9hY2NvdW50cy5cbiAgICAgKi9cbiAgICBfaGFuZGxlQWNjb3VudHNDaGFuZ2VkKGFjY291bnRzLCBpc0V0aEFjY291bnRzID0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICBsZXQgX2FjY291bnRzID0gYWNjb3VudHM7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IFJlY2VpdmVkIGludmFsaWQgYWNjb3VudHMgcGFyYW1ldGVyLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLicsIGFjY291bnRzKTtcbiAgICAgICAgICAgIF9hY2NvdW50cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYWNjb3VudCBvZiBhY2NvdW50cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY2NvdW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IFJlY2VpdmVkIG5vbi1zdHJpbmcgYWNjb3VudC4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4nLCBhY2NvdW50cyk7XG4gICAgICAgICAgICAgICAgX2FjY291bnRzID0gW107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW1pdCBhY2NvdW50c0NoYW5nZWQgaWYgYW55dGhpbmcgYWJvdXQgdGhlIGFjY291bnRzIGFycmF5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGlmICghZGVxdWFsKHRoaXMuX3N0YXRlLmFjY291bnRzLCBfYWNjb3VudHMpKSB7XG4gICAgICAgICAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgdGhlIGNvcnJlY3QgYWNjb3VudHMgZXZlbiBiZWZvcmUgZXRoX2FjY291bnRzXG4gICAgICAgICAgICAvLyByZXR1cm5zXG4gICAgICAgICAgICBpZiAoaXNFdGhBY2NvdW50cyAmJiB0aGlzLl9zdGF0ZS5hY2NvdW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgTWV0YU1hc2s6ICdldGhfYWNjb3VudHMnIHVuZXhwZWN0ZWRseSB1cGRhdGVkIGFjY291bnRzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLmAsIF9hY2NvdW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZS5hY2NvdW50cyA9IF9hY2NvdW50cztcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzZWxlY3RlZEFkZHJlc3NcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQWRkcmVzcyAhPT0gX2FjY291bnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBfYWNjb3VudHNbMF0gfHwgbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmFsbHksIGFmdGVyIGFsbCBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkLCBlbWl0IHRoZSBldmVudFxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdhY2NvdW50c0NoYW5nZWQnLCBfYWNjb3VudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwb24gcmVjZWlwdCBvZiBhIG5ldyBpc1VubG9ja2VkIHN0YXRlLCBzZXRzIHJlbGV2YW50IHB1YmxpYyBzdGF0ZS5cbiAgICAgKiBDYWxscyB0aGUgYWNjb3VudHMgY2hhbmdlZCBoYW5kbGVyIHdpdGggdGhlIHJlY2VpdmVkIGFjY291bnRzLCBvciBhbiBlbXB0eVxuICAgICAqIGFycmF5LlxuICAgICAqXG4gICAgICogRG9lcyBub3RoaW5nIGlmIHRoZSByZWNlaXZlZCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgZXhpc3RpbmcgdmFsdWUuXG4gICAgICogVGhlcmUgYXJlIG5vIGxvY2svdW5sb2NrIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRzIC0gT3B0aW9ucyBiYWcuXG4gICAgICogQHBhcmFtIG9wdHMuYWNjb3VudHMgLSBUaGUgZXhwb3NlZCBhY2NvdW50cywgaWYgYW55LlxuICAgICAqIEBwYXJhbSBvcHRzLmlzVW5sb2NrZWQgLSBUaGUgbGF0ZXN0IGlzVW5sb2NrZWQgdmFsdWUuXG4gICAgICovXG4gICAgX2hhbmRsZVVubG9ja1N0YXRlQ2hhbmdlZCh7IGFjY291bnRzLCBpc1VubG9ja2VkIH0gPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGlzVW5sb2NrZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdNZXRhTWFzazogUmVjZWl2ZWQgaW52YWxpZCBpc1VubG9ja2VkIHBhcmFtZXRlci4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmxvY2tlZCAhPT0gdGhpcy5fc3RhdGUuaXNVbmxvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNVbmxvY2tlZCA9IGlzVW5sb2NrZWQ7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBY2NvdW50c0NoYW5nZWQoYWNjb3VudHMgfHwgW10pO1xuICAgICAgICB9XG4gICAgfVxufVxuQmFzZVByb3ZpZGVyLl9kZWZhdWx0U3RhdGUgPSB7XG4gICAgYWNjb3VudHM6IG51bGwsXG4gICAgaXNDb25uZWN0ZWQ6IGZhbHNlLFxuICAgIGlzVW5sb2NrZWQ6IGZhbHNlLFxuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICBpc1Blcm1hbmVudGx5RGlzY29ubmVjdGVkOiBmYWxzZSxcbn07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLWR1cGUtY2xhc3MtbWVtYmVycyxAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbmltcG9ydCB7IGV0aEVycm9ycyB9IGZyb20gJ2V0aC1ycGMtZXJyb3JzJztcbmltcG9ydCBCYXNlUHJvdmlkZXIgZnJvbSAnLi9CYXNlUHJvdmlkZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IHNlbmRTaXRlTWV0YWRhdGEgZnJvbSAnLi9zaXRlTWV0YWRhdGEnO1xuaW1wb3J0IHsgRU1JVFRFRF9OT1RJRklDQVRJT05TLCBOT09QIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhTWFza0lucGFnZVByb3ZpZGVyIGV4dGVuZHMgQmFzZVByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvblN0cmVhbSAtIEEgTm9kZS5qcyBkdXBsZXggc3RyZWFtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25zIGJhZ1xuICAgICAqIEBwYXJhbSBvcHRpb25zLmpzb25ScGNTdHJlYW1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIEpTT04tUlBDIHN0cmVhbS5cbiAgICAgKiBEZWZhdWx0OiBtZXRhbWFzay1wcm92aWRlclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmxvZ2dlciAtIFRoZSBsb2dnaW5nIEFQSSB0byB1c2UuIERlZmF1bHQ6IGNvbnNvbGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhFdmVudExpc3RlbmVycyAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBldmVudFxuICAgICAqIGxpc3RlbmVycy4gRGVmYXVsdDogMTAwXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc2hvdWxkU2VuZE1ldGFkYXRhIC0gV2hldGhlciB0aGUgcHJvdmlkZXIgc2hvdWxkXG4gICAgICogc2VuZCBwYWdlIG1ldGFkYXRhLiBEZWZhdWx0OiB0cnVlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2VudFdhcm5pbmdzID0ge1xuICAgICAgICAgICAgLy8gbWV0aG9kc1xuICAgICAgICAgICAgZW5hYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbE1ldGhvZHM6IGZhbHNlLFxuICAgICAgICAgICAgc2VuZDogZmFsc2UsXG4gICAgICAgICAgICAvLyBldmVudHNcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBuZXR3b3JrQ2hhbmdlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNob3VsZFNlbmRNZXRhZGF0YSA9IChfYSA9IGNvbmZpZy5zaG91bGRTZW5kTWV0YWRhdGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgICAgIHRoaXMubmV0d29ya1ZlcnNpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmlzTWV0YU1hc2sgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZW5kU3luYyA9IHRoaXMuX3NlbmRTeW5jLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZW5hYmxlID0gdGhpcy5lbmFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZW5kID0gdGhpcy5zZW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VuZEFzeW5jID0gdGhpcy5zZW5kQXN5bmMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fd2Fybk9mRGVwcmVjYXRpb24gPSB0aGlzLl93YXJuT2ZEZXByZWNhdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9tZXRhbWFzayA9IHRoaXMuX2dldEV4cGVyaW1lbnRhbEFwaSgpO1xuICAgICAgICAvLyBoYW5kbGUgSlNPTi1SUEMgbm90aWZpY2F0aW9uc1xuICAgICAgICB0aGlzLmJyaWRnZS5vbignbm90aWZpY2F0aW9uJywgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgaWYgKEVNSVRURURfTk9USUZJQ0FUSU9OUy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICAgICAgICAgIC8vIGVtaXR0ZWQgaGVyZSBiZWNhdXNlIHRoYXQgd2FzIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkUGFyYW1zID0gcGF5bG9hZC5wYXJhbXM7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdub3RpZmljYXRpb24nLCBwYXlsb2FkUGFyYW1zLnJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBzZW5kIHdlYnNpdGUgbWV0YWRhdGFcbiAgICAgICAgaWYgKHNob3VsZFNlbmRNZXRhZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB2b2lkIHNlbmRTaXRlTWV0YWRhdGEodGhpcy5icmlkZ2UsIHRoaXMuX2xvZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50TG9hZGVkSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCBzZW5kU2l0ZU1ldGFkYXRhKHRoaXMuYnJpZGdlLCB0aGlzLl9sb2cpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbUNvbnRlbnRMb2FkZWRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tQ29udGVudExvYWRlZEhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUHVibGljIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdHMgYW4gUlBDIHJlcXVlc3QgcGVyIHRoZSBnaXZlbiBKU09OLVJQQyByZXF1ZXN0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIFJQQyByZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBzZW5kQXN5bmMocGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdm9pZCB0aGlzLl9ycGNSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2Ugb3ZlcnJpZGUgdGhlIGZvbGxvd2luZyBldmVudCBtZXRob2RzIHNvIHRoYXQgd2UgY2FuIHdhcm4gY29uc3VtZXJzXG4gICAgICogYWJvdXQgZGVwcmVjYXRlZCBldmVudHM6XG4gICAgICogICBhZGRMaXN0ZW5lciwgb24sIG9uY2UsIHByZXBlbmRMaXN0ZW5lciwgcHJlcGVuZE9uY2VMaXN0ZW5lclxuICAgICAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhZGRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX3dhcm5PZkRlcHJlY2F0aW9uKGV2ZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBzdXBlci5hZGRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fd2Fybk9mRGVwcmVjYXRpb24oZXZlbnROYW1lKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25jZShldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX3dhcm5PZkRlcHJlY2F0aW9uKGV2ZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBzdXBlci5vbmNlKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgICBwcmVwZW5kTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl93YXJuT2ZEZXByZWNhdGlvbihldmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gc3VwZXIuYWRkTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl93YXJuT2ZEZXByZWNhdGlvbihldmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gc3VwZXIub25jZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgLy89ID09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQcml2YXRlIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIHByb3ZpZGVyIGJlY29tZXMgZGlzY29ubmVjdGVkLCB1cGRhdGVzIGludGVybmFsIHN0YXRlIGFuZCBlbWl0c1xuICAgICAqIHJlcXVpcmVkIGV2ZW50cy4gSWRlbXBvdGVudCB3aXRoIHJlc3BlY3QgdG8gdGhlIGlzUmVjb3ZlcmFibGUgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogRXJyb3IgY29kZXMgcGVyIHRoZSBDbG9zZUV2ZW50IHN0YXR1cyBjb2RlcyBhcyByZXF1aXJlZCBieSBFSVAtMTE5MzpcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2xvc2VFdmVudCNTdGF0dXNfY29kZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc1JlY292ZXJhYmxlIC0gV2hldGhlciB0aGUgZGlzY29ubmVjdGlvbiBpcyByZWNvdmVyYWJsZS5cbiAgICAgKiBAcGFyYW0gZXJyb3JNZXNzYWdlIC0gQSBjdXN0b20gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAZW1pdHMgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciNkaXNjb25uZWN0XG4gICAgICovXG4gICAgX2hhbmRsZURpc2Nvbm5lY3QoaXNSZWNvdmVyYWJsZSwgZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyLl9oYW5kbGVEaXNjb25uZWN0KGlzUmVjb3ZlcmFibGUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIGlmICh0aGlzLm5ldHdvcmtWZXJzaW9uICYmICFpc1JlY292ZXJhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5ldHdvcmtWZXJzaW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXYXJucyBvZiBkZXByZWNhdGlvbiBmb3IgdGhlIGdpdmVuIGV2ZW50LCBpZiBhcHBsaWNhYmxlLlxuICAgICAqL1xuICAgIF93YXJuT2ZEZXByZWNhdGlvbihldmVudE5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKChfYSA9IHRoaXMuX3NlbnRXYXJuaW5ncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2ZW50c1tldmVudE5hbWVdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy53YXJuKG1lc3NhZ2VzLndhcm5pbmdzLmV2ZW50c1tldmVudE5hbWVdKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbnRXYXJuaW5ncy5ldmVudHNbZXZlbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy89ID09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEZXByZWNhdGVkIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIEVxdWl2YWxlbnQgdG86IGV0aGVyZXVtLnJlcXVlc3QoJ2V0aF9yZXF1ZXN0QWNjb3VudHMnKVxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHJlcXVlc3QoeyBtZXRob2Q6ICdldGhfcmVxdWVzdEFjY291bnRzJyB9KSBpbnN0ZWFkLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFkZHJlc3Nlcy5cbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NlbnRXYXJuaW5ncy5lbmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cud2FybihtZXNzYWdlcy53YXJuaW5ncy5lbmFibGVEZXByZWNhdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VudFdhcm5pbmdzLmVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKHlpZWxkIHRoaXMuX3JwY1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ2V0aF9yZXF1ZXN0QWNjb3VudHMnLFxuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kKG1ldGhvZE9yUGF5bG9hZCwgY2FsbGJhY2tPckFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZW50V2FybmluZ3Muc2VuZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLndhcm4obWVzc2FnZXMud2FybmluZ3Muc2VuZERlcHJlY2F0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbnRXYXJuaW5ncy5zZW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZE9yUGF5bG9hZCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICghY2FsbGJhY2tPckFyZ3MgfHwgQXJyYXkuaXNBcnJheShjYWxsYmFja09yQXJncykpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcnBjUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2RPclBheWxvYWQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBjYWxsYmFja09yQXJncyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2RPclBheWxvYWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtZXRob2RPclBheWxvYWQgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICB0eXBlb2YgY2FsbGJhY2tPckFyZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ycGNSZXF1ZXN0KG1ldGhvZE9yUGF5bG9hZCwgY2FsbGJhY2tPckFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kU3luYyhtZXRob2RPclBheWxvYWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtZXRob2QsIHVzZWQgaW4gc2VuZC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgX3NlbmRTeW5jKHBheWxvYWQpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgc3dpdGNoIChwYXlsb2FkLm1ldGhvZCkge1xuICAgICAgICAgICAgY2FzZSAnZXRoX2FjY291bnRzJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcyA/IFt0aGlzLnNlbGVjdGVkQWRkcmVzc10gOiBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V0aF9jb2luYmFzZSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3MgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V0aF91bmluc3RhbGxGaWx0ZXInOlxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5fcnBjUmVxdWVzdChwYXlsb2FkLCBOT09QKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV0X3ZlcnNpb24nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubmV0d29ya1ZlcnNpb24gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLmVycm9ycy51bnN1cHBvcnRlZFN5bmMocGF5bG9hZC5tZXRob2QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgICAgICAgICBqc29ucnBjOiBwYXlsb2FkLmpzb25ycGMsXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yIGhlbHBlci5cbiAgICAgKiBHZXRzIGV4cGVyaW1lbnRhbCBfbWV0YW1hc2sgQVBJIGFzIFByb3h5LCBzbyB0aGF0IHdlIGNhbiB3YXJuIGNvbnN1bWVyc1xuICAgICAqIGFib3V0IGl0cyBleHBlcmltZW50IG5hdHVyZS5cbiAgICAgKi9cbiAgICBfZ2V0RXhwZXJpbWVudGFsQXBpKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRGV0ZXJtaW5lcyBpZiBNZXRhTWFzayBpcyB1bmxvY2tlZCBieSB0aGUgdXNlci5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0cnVlIGlmIE1ldGFNYXNrIGlzIGN1cnJlbnRseSB1bmxvY2tlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpc1VubG9ja2VkOiAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignX2luaXRpYWxpemVkJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5pc1VubG9ja2VkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1ha2UgYSBiYXRjaCBSUEMgcmVxdWVzdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmVxdWVzdEJhdGNoOiAocmVxdWVzdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWVzdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0JhdGNoIHJlcXVlc3RzIG11c3QgYmUgbWFkZSB3aXRoIGFuIGFycmF5IG9mIHJlcXVlc3Qgb2JqZWN0cy4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVxdWVzdHMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnBjUmVxdWVzdChyZXF1ZXN0cyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZ2V0OiAob2JqLCBwcm9wLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zZW50V2FybmluZ3MuZXhwZXJpbWVudGFsTWV0aG9kcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cud2FybihtZXNzYWdlcy53YXJuaW5ncy5leHBlcmltZW50YWxNZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VudFdhcm5pbmdzLmV4cGVyaW1lbnRhbE1ldGhvZHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQob2JqLCBwcm9wLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcG9uIHJlY2VpcHQgb2YgYSBuZXcgY2hhaW5JZCBhbmQgbmV0d29ya1ZlcnNpb24sIGVtaXRzIGNvcnJlc3BvbmRpbmdcbiAgICAgKiBldmVudHMgYW5kIHNldHMgcmVsZXZhbnQgcHVibGljIHN0YXRlLlxuICAgICAqIERvZXMgbm90aGluZyBpZiBuZWl0aGVyIHRoZSBjaGFpbklkIG5vciB0aGUgbmV0d29ya1ZlcnNpb24gYXJlIGRpZmZlcmVudFxuICAgICAqIGZyb20gZXhpc3RpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQGVtaXRzIE1ldGFtYXNrSW5wYWdlUHJvdmlkZXIjY2hhaW5DaGFuZ2VkXG4gICAgICogQGVtaXRzIE1ldGFtYXNrSW5wYWdlUHJvdmlkZXIjbmV0d29ya0NoYW5nZWRcbiAgICAgKiBAcGFyYW0gbmV0d29ya0luZm8gLSBBbiBvYmplY3Qgd2l0aCBuZXR3b3JrIGluZm8uXG4gICAgICogQHBhcmFtIG5ldHdvcmtJbmZvLmNoYWluSWQgLSBUaGUgbGF0ZXN0IGNoYWluIElELlxuICAgICAqIEBwYXJhbSBuZXR3b3JrSW5mby5uZXR3b3JrVmVyc2lvbiAtIFRoZSBsYXRlc3QgbmV0d29yayBJRC5cbiAgICAgKi9cbiAgICBfaGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24sIH0gPSB7fSkge1xuICAgICAgICBzdXBlci5faGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24gfSk7XG4gICAgICAgIGlmIChuZXR3b3JrVmVyc2lvbiAmJlxuICAgICAgICAgICAgbmV0d29ya1ZlcnNpb24gIT09ICdsb2FkaW5nJyAmJlxuICAgICAgICAgICAgbmV0d29ya1ZlcnNpb24gIT09IHRoaXMubmV0d29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMubmV0d29ya1ZlcnNpb24gPSBuZXR3b3JrVmVyc2lvbjtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbmV0d29ya0NoYW5nZWQnLCB0aGlzLm5ldHdvcmtWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBCYXNlUHJvdmlkZXIgZnJvbSAnLi9CYXNlUHJvdmlkZXInO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVByb3ZpZGVyLCBzZXRHbG9iYWxQcm92aWRlciwgfSBmcm9tICcuL2luaXRpYWxpemVJbnBhZ2VQcm92aWRlcic7XG5pbXBvcnQgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciBmcm9tICcuL01ldGFNYXNrSW5wYWdlUHJvdmlkZXInO1xuaW1wb3J0IHNoaW1XZWIzIGZyb20gJy4vc2hpbVdlYjMnO1xuZXhwb3J0IHsgaW5pdGlhbGl6ZVByb3ZpZGVyLCBNZXRhTWFza0lucGFnZVByb3ZpZGVyLCBCYXNlUHJvdmlkZXIsIHNldEdsb2JhbFByb3ZpZGVyLCBzaGltV2ViMywgfTtcbiIsImltcG9ydCBNZXRhTWFza0lucGFnZVByb3ZpZGVyIGZyb20gJy4vTWV0YU1hc2tJbnBhZ2VQcm92aWRlcic7XG5pbXBvcnQgc2hpbVdlYjMgZnJvbSAnLi9zaGltV2ViMyc7XG4vKipcbiAqIEluaXRpYWxpemVzIGEgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciBhbmQgKG9wdGlvbmFsbHkpIGFzc2lnbnMgaXQgYXMgd2luZG93LmV0aGVyZXVtLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9ucyBiYWcuXG4gKiBAcGFyYW0gb3B0aW9ucy5jb25uZWN0aW9uU3RyZWFtIC0gQSBOb2RlLmpzIHN0cmVhbS5cbiAqIEBwYXJhbSBvcHRpb25zLmpzb25ScGNTdHJlYW1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIEpTT04tUlBDIHN0cmVhbS5cbiAqIEBwYXJhbSBvcHRpb25zLm1heEV2ZW50TGlzdGVuZXJzIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50IGxpc3RlbmVycy5cbiAqIEBwYXJhbSBvcHRpb25zLnNob3VsZFNlbmRNZXRhZGF0YSAtIFdoZXRoZXIgdGhlIHByb3ZpZGVyIHNob3VsZCBzZW5kIHBhZ2UgbWV0YWRhdGEuXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG91bGRTZXRPbldpbmRvdyAtIFdoZXRoZXIgdGhlIHByb3ZpZGVyIHNob3VsZCBiZSBzZXQgYXMgd2luZG93LmV0aGVyZXVtLlxuICogQHBhcmFtIG9wdGlvbnMuc2hvdWxkU2hpbVdlYjMgLSBXaGV0aGVyIGEgd2luZG93LndlYjMgc2hpbSBzaG91bGQgYmUgaW5qZWN0ZWQuXG4gKiBAcmV0dXJucyBUaGUgaW5pdGlhbGl6ZWQgcHJvdmlkZXIgKHdoZXRoZXIgc2V0IG9yIG5vdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplUHJvdmlkZXIoeyBicmlkZ2UsIGxvZ2dlciA9IGNvbnNvbGUsIG1heEV2ZW50TGlzdGVuZXJzID0gMTAwLCBzaG91bGRTZW5kTWV0YWRhdGEgPSB0cnVlLCBzaG91bGRTZXRPbldpbmRvdyA9IHRydWUsIHNob3VsZFNoaW1XZWIzID0gZmFsc2UsIH0pIHtcbiAgICBsZXQgcHJvdmlkZXIgPSBuZXcgTWV0YU1hc2tJbnBhZ2VQcm92aWRlcih7XG4gICAgICAgIGJyaWRnZSxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICBtYXhFdmVudExpc3RlbmVycyxcbiAgICAgICAgc2hvdWxkU2VuZE1ldGFkYXRhLFxuICAgIH0pO1xuICAgIHByb3ZpZGVyID0gbmV3IFByb3h5KHByb3ZpZGVyLCB7XG4gICAgICAgIC8vIHNvbWUgY29tbW9uIGxpYnJhcmllcywgZS5nLiB3ZWIzQDEueCwgbWVzcyB3aXRoIG91ciBBUElcbiAgICAgICAgZGVsZXRlUHJvcGVydHk6ICgpID0+IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKHNob3VsZFNldE9uV2luZG93KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgc2V0R2xvYmFsUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hpbVdlYjMpIHtcbiAgICAgICAgc2hpbVdlYjMocHJvdmlkZXIsIGxvZ2dlcik7XG4gICAgfVxuICAgIHJldHVybiBwcm92aWRlcjtcbn1cbi8qKlxuICogU2V0cyB0aGUgZ2l2ZW4gcHJvdmlkZXIgaW5zdGFuY2UgYXMgd2luZG93LmV0aGVyZXVtIGFuZCBkaXNwYXRjaGVzIHRoZVxuICogJ2V0aGVyZXVtI2luaXRpYWxpemVkJyBldmVudCBvbiB3aW5kb3cuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySW5zdGFuY2UgLSBUaGUgcHJvdmlkZXIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxQcm92aWRlcihwcm92aWRlckluc3RhbmNlKSB7XG4gICAgd2luZG93LmV0aGVyZXVtID0gcHJvdmlkZXJJbnN0YW5jZTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2V0aGVyZXVtI2luaXRpYWxpemVkJykpO1xufVxuIiwiY29uc3QgbWVzc2FnZXMgPSB7XG4gICAgZXJyb3JzOiB7XG4gICAgICAgIGRpc2Nvbm5lY3RlZDogKCkgPT4gJ01ldGFNYXNrOiBEaXNjb25uZWN0ZWQgZnJvbSBjaGFpbi4gQXR0ZW1wdGluZyB0byBjb25uZWN0LicsXG4gICAgICAgIHBlcm1hbmVudGx5RGlzY29ubmVjdGVkOiAoKSA9PiAnTWV0YU1hc2s6IERpc2Nvbm5lY3RlZCBmcm9tIE1ldGFNYXNrIGJhY2tncm91bmQuIFBhZ2UgcmVsb2FkIHJlcXVpcmVkLicsXG4gICAgICAgIHNlbmRTaXRlTWV0YWRhdGE6ICgpID0+IGBNZXRhTWFzazogRmFpbGVkIHRvIHNlbmQgc2l0ZSBtZXRhZGF0YS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBlcnJvciwgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy5gLFxuICAgICAgICB1bnN1cHBvcnRlZFN5bmM6IChtZXRob2QpID0+IGBNZXRhTWFzazogVGhlIE1ldGFNYXNrIEV0aGVyZXVtIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQgc3luY2hyb25vdXMgbWV0aG9kcyBsaWtlICR7bWV0aG9kfSB3aXRob3V0IGEgY2FsbGJhY2sgcGFyYW1ldGVyLmAsXG4gICAgICAgIGludmFsaWREdXBsZXhTdHJlYW06ICgpID0+ICdNdXN0IHByb3ZpZGUgYSBOb2RlLmpzLXN0eWxlIGR1cGxleCBzdHJlYW0uJyxcbiAgICAgICAgaW52YWxpZFJlcXVlc3RBcmdzOiAoKSA9PiBgRXhwZWN0ZWQgYSBzaW5nbGUsIG5vbi1hcnJheSwgb2JqZWN0IGFyZ3VtZW50LmAsXG4gICAgICAgIGludmFsaWRSZXF1ZXN0TWV0aG9kOiAoKSA9PiBgJ2FyZ3MubWV0aG9kJyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gLFxuICAgICAgICBpbnZhbGlkUmVxdWVzdFBhcmFtczogKCkgPT4gYCdhcmdzLnBhcmFtcycgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYXJyYXkgaWYgcHJvdmlkZWQuYCxcbiAgICAgICAgaW52YWxpZExvZ2dlck9iamVjdDogKCkgPT4gYCdhcmdzLmxvZ2dlcicgbXVzdCBiZSBhbiBvYmplY3QgaWYgcHJvdmlkZWQuYCxcbiAgICAgICAgaW52YWxpZExvZ2dlck1ldGhvZDogKG1ldGhvZCkgPT4gYCdhcmdzLmxvZ2dlcicgbXVzdCBpbmNsdWRlIHJlcXVpcmVkIG1ldGhvZCAnJHttZXRob2R9Jy5gLFxuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgICBjb25uZWN0ZWQ6IChjaGFpbklkKSA9PiBgTWV0YU1hc2s6IENvbm5lY3RlZCB0byBjaGFpbiB3aXRoIElEIFwiJHtjaGFpbklkfVwiLmAsXG4gICAgfSxcbiAgICB3YXJuaW5nczoge1xuICAgICAgICAvLyBkZXByZWNhdGVkIG1ldGhvZHNcbiAgICAgICAgZW5hYmxlRGVwcmVjYXRpb246IGBNZXRhTWFzazogJ2V0aGVyZXVtLmVuYWJsZSgpJyBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlIHRoZSAnZXRoX3JlcXVlc3RBY2NvdW50cycgUlBDIG1ldGhvZCBpbnN0ZWFkLlxcbkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6IGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMTEwMmAsXG4gICAgICAgIHNlbmREZXByZWNhdGlvbjogYE1ldGFNYXNrOiAnZXRoZXJldW0uc2VuZCguLi4pJyBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlICdldGhlcmV1bS5zZW5kQXN5bmMoLi4uKScgb3IgJ2V0aGVyZXVtLnJlcXVlc3QoLi4uKScgaW5zdGVhZC5cXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTExOTNgLFxuICAgICAgICAvLyBkZXByZWNhdGVkIGV2ZW50c1xuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIGNsb3NlOiBgTWV0YU1hc2s6IFRoZSBldmVudCAnY2xvc2UnIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgJ2Rpc2Nvbm5lY3QnIGluc3RlYWQuXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMTkzI2Rpc2Nvbm5lY3RgLFxuICAgICAgICAgICAgZGF0YTogYE1ldGFNYXNrOiBUaGUgZXZlbnQgJ2RhdGEnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBVc2UgJ21lc3NhZ2UnIGluc3RlYWQuXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMTkzI21lc3NhZ2VgLFxuICAgICAgICAgICAgbmV0d29ya0NoYW5nZWQ6IGBNZXRhTWFzazogVGhlIGV2ZW50ICduZXR3b3JrQ2hhbmdlZCcgaXMgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVXNlICdjaGFpbkNoYW5nZWQnIGluc3RlYWQuXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMTkzI2NoYWluY2hhbmdlZGAsXG4gICAgICAgICAgICBub3RpZmljYXRpb246IGBNZXRhTWFzazogVGhlIGV2ZW50ICdub3RpZmljYXRpb24nIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFVzZSAnbWVzc2FnZScgaW5zdGVhZC5cXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTExOTMjbWVzc2FnZWAsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIG1pc2NcbiAgICAgICAgZXhwZXJpbWVudGFsTWV0aG9kczogYE1ldGFNYXNrOiAnZXRoZXJldW0uX21ldGFtYXNrJyBleHBvc2VzIG5vbi1zdGFuZGFyZCwgZXhwZXJpbWVudGFsIG1ldGhvZHMuIFRoZXkgbWF5IGJlIHJlbW92ZWQgb3IgY2hhbmdlZCB3aXRob3V0IHdhcm5pbmcuYCxcbiAgICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VzO1xuIiwiLyoqXG4gKiBJZiBubyBleGlzdGluZyB3aW5kb3cud2ViMyBpcyBmb3VuZCwgdGhpcyBmdW5jdGlvbiBpbmplY3RzIGEgd2ViMyBcInNoaW1cIiB0b1xuICogbm90IGJyZWFrIGRhcHBzIHRoYXQgcmVseSBvbiB3aW5kb3cud2ViMy5jdXJyZW50UHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVyIC0gVGhlIHByb3ZpZGVyIHRvIHNldCBhcyB3aW5kb3cud2ViMy5jdXJyZW50UHJvdmlkZXIuXG4gKiBAcGFyYW0gbG9nIC0gVGhlIGxvZ2dpbmcgQVBJIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hpbVdlYjMocHJvdmlkZXIsIGxvZyA9IGNvbnNvbGUpIHtcbiAgICBsZXQgbG9nZ2VkQ3VycmVudFByb3ZpZGVyID0gZmFsc2U7XG4gICAgbGV0IGxvZ2dlZE1pc3NpbmdQcm9wZXJ0eSA9IGZhbHNlO1xuICAgIGlmICghd2luZG93LndlYjMpIHtcbiAgICAgICAgY29uc3QgU0hJTV9JREVOVElGSUVSID0gJ19faXNNZXRhTWFza1NoaW1fXyc7XG4gICAgICAgIGxldCB3ZWIzU2hpbSA9IHsgY3VycmVudFByb3ZpZGVyOiBwcm92aWRlciB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2ViM1NoaW0sIFNISU1fSURFTlRJRklFUiwge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHdlYjNTaGltID0gbmV3IFByb3h5KHdlYjNTaGltLCB7XG4gICAgICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3BlcnR5LCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSAnY3VycmVudFByb3ZpZGVyJyAmJiAhbG9nZ2VkQ3VycmVudFByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlZEN1cnJlbnRQcm92aWRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCdZb3UgYXJlIGFjY2Vzc2luZyB0aGUgTWV0YU1hc2sgd2luZG93LndlYjMuY3VycmVudFByb3ZpZGVyIHNoaW0uIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZDsgdXNlIHdpbmRvdy5ldGhlcmV1bSBpbnN0ZWFkLiBGb3IgZGV0YWlscywgc2VlOiBodHRwczovL2RvY3MubWV0YW1hc2suaW8vZ3VpZGUvcHJvdmlkZXItbWlncmF0aW9uLmh0bWwjcmVwbGFjaW5nLXdpbmRvdy13ZWIzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ICE9PSAnY3VycmVudFByb3ZpZGVyJyAmJlxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSAhPT0gU0hJTV9JREVOVElGSUVSICYmXG4gICAgICAgICAgICAgICAgICAgICFsb2dnZWRNaXNzaW5nUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VkTWlzc2luZ1Byb3BlcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGBNZXRhTWFzayBubyBsb25nZXIgaW5qZWN0cyB3ZWIzLiBGb3IgZGV0YWlscywgc2VlOiBodHRwczovL2RvY3MubWV0YW1hc2suaW8vZ3VpZGUvcHJvdmlkZXItbWlncmF0aW9uLmh0bWwjcmVwbGFjaW5nLXdpbmRvdy13ZWIzYCk7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVxdWVzdCh7IG1ldGhvZDogJ21ldGFtYXNrX2xvZ1dlYjNTaGltVXNhZ2UnIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ01ldGFNYXNrOiBGYWlsZWQgdG8gbG9nIHdlYjMgc2hpbSB1c2FnZS4nLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgLi4uYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKCdZb3UgYXJlIGFjY2Vzc2luZyB0aGUgTWV0YU1hc2sgd2luZG93LndlYjMgc2hpbS4gVGhpcyBvYmplY3QgaXMgZGVwcmVjYXRlZDsgdXNlIHdpbmRvdy5ldGhlcmV1bSBpbnN0ZWFkLiBGb3IgZGV0YWlscywgc2VlOiBodHRwczovL2RvY3MubWV0YW1hc2suaW8vZ3VpZGUvcHJvdmlkZXItbWlncmF0aW9uLmh0bWwjcmVwbGFjaW5nLXdpbmRvdy13ZWIzJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICd3ZWIzJywge1xuICAgICAgICAgICAgdmFsdWU6IHdlYjNTaGltLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBJSW5qZWN0ZWRQcm92aWRlck5hbWVzIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci10eXBlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG4vKipcbiAqIFNlbmRzIHNpdGUgbWV0YWRhdGEgb3ZlciBhbiBSUEMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZW5naW5lIC0gVGhlIEpTT04gUlBDIEVuZ2luZSB0byBzZW5kIG1ldGFkYXRhIG92ZXIuXG4gKiBAcGFyYW0gbG9nIC0gVGhlIGxvZ2dpbmcgQVBJIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VuZFNpdGVNZXRhZGF0YShlbmdpbmUsIGxvZykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb21haW5NZXRhZGF0YSA9IHlpZWxkIGdldFNpdGVNZXRhZGF0YSgpO1xuICAgICAgICAgICAgLy8gY2FsbCBlbmdpbmUuaGFuZGxlIGRpcmVjdGx5IHRvIGF2b2lkIG5vcm1hbCBSUEMgcmVxdWVzdCBoYW5kbGluZ1xuICAgICAgICAgICAgdm9pZCBlbmdpbmUucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgc2NvcGU6IElJbmplY3RlZFByb3ZpZGVyTmFtZXMuZXRoZXJldW0sXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ21ldGFtYXNrX3NlbmREb21haW5NZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogZG9tYWluTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nLmVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuc2VuZFNpdGVNZXRhZGF0YSgpLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogR2V0cyBzaXRlIG1ldGFkYXRhIGFuZCByZXR1cm5zIGl0XG4gKlxuICovXG5mdW5jdGlvbiBnZXRTaXRlTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGdldFNpdGVOYW1lKHdpbmRvdyksXG4gICAgICAgICAgICBpY29uOiB5aWVsZCBnZXRTaXRlSWNvbih3aW5kb3cpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhIG5hbWUgZm9yIHRoZSBzaXRlIGZyb20gdGhlIERPTVxuICovXG5mdW5jdGlvbiBnZXRTaXRlTmFtZSh3aW5kb3dPYmplY3QpIHtcbiAgICBjb25zdCB7IGRvY3VtZW50IH0gPSB3aW5kb3dPYmplY3Q7XG4gICAgY29uc3Qgc2l0ZU5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkID4gbWV0YVtwcm9wZXJ0eT1cIm9nOnNpdGVfbmFtZVwiXScpO1xuICAgIGlmIChzaXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gc2l0ZU5hbWUuY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgbWV0YVRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCA+IG1ldGFbbmFtZT1cInRpdGxlXCJdJyk7XG4gICAgaWYgKG1ldGFUaXRsZSkge1xuICAgICAgICByZXR1cm4gbWV0YVRpdGxlLmNvbnRlbnQ7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC50aXRsZTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYW4gaWNvbiBmb3IgdGhlIHNpdGUgZnJvbSB0aGUgRE9NXG4gKiBAcmV0dXJucyBhbiBpY29uIFVSTFxuICovXG5mdW5jdGlvbiBnZXRTaXRlSWNvbih3aW5kb3dPYmplY3QpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50IH0gPSB3aW5kb3dPYmplY3Q7XG4gICAgICAgIGNvbnN0IGljb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaGVhZCA+IGxpbmtbcmVsfj1cImljb25cIl0nKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGljb25zQXJyID0gaWNvbnM7XG4gICAgICAgIGZvciAoY29uc3QgaWNvbiBvZiBpY29uc0Fycikge1xuICAgICAgICAgICAgaWYgKGljb24gJiYgKHlpZWxkIGltZ0V4aXN0cyhpY29uLmhyZWYpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpY29uLmhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gaW1hZ2UgVVJMIGV4aXN0c1xuICogQHBhcmFtIHVybCAtIHRoZSB1cmwgb2YgdGhlIGltYWdlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbWFnZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGltZ0V4aXN0cyh1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICBpbWcuc3JjID0gdXJsO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsIi8vIHV0aWxpdHkgZnVuY3Rpb25zXG4vKipcbiAqIExvZ3MgYSBzdHJlYW0gZGlzY29ubmVjdGlvbiBlcnJvci4gRW1pdHMgYW4gJ2Vycm9yJyBpZiBnaXZlbiBhblxuICogRXZlbnRFbWl0dGVyIHRoYXQgaGFzIGxpc3RlbmVycyBmb3IgdGhlICdlcnJvcicgZXZlbnQuXG4gKlxuICogQHBhcmFtIGxvZyAtIFRoZSBsb2dnaW5nIEFQSSB0byB1c2UuXG4gKiBAcGFyYW0gcmVtb3RlTGFiZWwgLSBUaGUgbGFiZWwgb2YgdGhlIGRpc2Nvbm5lY3RlZCBzdHJlYW0uXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgYXNzb2NpYXRlZCBlcnJvciB0byBsb2cuXG4gKiBAcGFyYW0gZW1pdHRlciAtIFRoZSBsb2dnaW5nIEFQSSB0byB1c2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dTdHJlYW1EaXNjb25uZWN0V2FybmluZyhsb2csIHJlbW90ZUxhYmVsLCBlcnJvciwgZW1pdHRlcikge1xuICAgIGxldCB3YXJuaW5nTXNnID0gYE1ldGFNYXNrOiBMb3N0IGNvbm5lY3Rpb24gdG8gXCIke3JlbW90ZUxhYmVsfVwiLmA7XG4gICAgaWYgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5zdGFjaykge1xuICAgICAgICB3YXJuaW5nTXNnICs9IGBcXG4ke2Vycm9yLnN0YWNrfWA7XG4gICAgfVxuICAgIGxvZy53YXJuKHdhcm5pbmdNc2cpO1xuICAgIGlmIChlbWl0dGVyICYmIGVtaXR0ZXIubGlzdGVuZXJDb3VudCgnZXJyb3InKSA+IDApIHtcbiAgICAgICAgZW1pdHRlci5lbWl0KCdlcnJvcicsIHdhcm5pbmdNc2cpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBOT09QID0gKCkgPT4gdW5kZWZpbmVkO1xuLy8gY29uc3RhbnRzXG5leHBvcnQgY29uc3QgRU1JVFRFRF9OT1RJRklDQVRJT05TID0gW1xuICAgICdldGhfc3Vic2NyaXB0aW9uJywgLy8gcGVyIGV0aC1qc29uLXJwYy1maWx0ZXJzL3N1YnNjcmlwdGlvbk1hbmFnZXJcbl07XG4iLCJpbXBvcnQgeyBJSW5qZWN0ZWRQcm92aWRlck5hbWVzLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItdHlwZXMnO1xuaW1wb3J0IHsgUHJvdmlkZXJCYXNlIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1jb3JlJztcbmNsYXNzIFByb3ZpZGVyUHJpdmF0ZSBleHRlbmRzIFByb3ZpZGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJOYW1lID0gSUluamVjdGVkUHJvdmlkZXJOYW1lcy4kcHJpdmF0ZTtcbiAgICB9XG4gICAgcmVxdWVzdChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyaWRnZVJlcXVlc3QoZGF0YSk7XG4gICAgfVxufVxuZXhwb3J0IHsgUHJvdmlkZXJQcml2YXRlIH07XG4iLCJleHBvcnQgdmFyIElKc0JyaWRnZU1lc3NhZ2VUeXBlcztcbihmdW5jdGlvbiAoSUpzQnJpZGdlTWVzc2FnZVR5cGVzKSB7XG4gICAgSUpzQnJpZGdlTWVzc2FnZVR5cGVzW1wiUkVTUE9OU0VcIl0gPSBcIlJFU1BPTlNFXCI7XG4gICAgSUpzQnJpZGdlTWVzc2FnZVR5cGVzW1wiUkVRVUVTVFwiXSA9IFwiUkVRVUVTVFwiO1xufSkoSUpzQnJpZGdlTWVzc2FnZVR5cGVzIHx8IChJSnNCcmlkZ2VNZXNzYWdlVHlwZXMgPSB7fSkpO1xuZXhwb3J0IHZhciBJSW5qZWN0ZWRQcm92aWRlck5hbWVzO1xuKGZ1bmN0aW9uIChJSW5qZWN0ZWRQcm92aWRlck5hbWVzKSB7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcImV0aGVyZXVtXCJdID0gXCJldGhlcmV1bVwiO1xuICAgIElJbmplY3RlZFByb3ZpZGVyTmFtZXNbXCJjb25mbHV4XCJdID0gXCJjb25mbHV4XCI7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcInNvbGFuYVwiXSA9IFwic29sYW5hXCI7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcInNvbGxldFwiXSA9IFwic29sbGV0XCI7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcIm5lYXJcIl0gPSBcIm5lYXJcIjtcbiAgICBJSW5qZWN0ZWRQcm92aWRlck5hbWVzW1wiJHByaXZhdGVcIl0gPSBcIiRwcml2YXRlXCI7XG59KShJSW5qZWN0ZWRQcm92aWRlck5hbWVzIHx8IChJSW5qZWN0ZWRQcm92aWRlck5hbWVzID0ge30pKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgSnNCcmlkZ2VEZXNrdG9wSW5qZWN0ZWQgfSBmcm9tICdAb25la2V5ZmUvZGVza3RvcC1icmlkZ2UtaW5qZWN0ZWQnO1xuaW1wb3J0IHsgaW5qZWN0ZWRQcm92aWRlclJlY2VpdmVIYW5kbGVyLCBpbmplY3RKc0JyaWRnZSwgfSBmcm9tICdAb25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWNvcmUnO1xuaW1wb3J0IHsgaW5qZWN0V2ViM1Byb3ZpZGVyIH0gZnJvbSAnQG9uZWtleWZlL2lucGFnZS1wcm92aWRlcnMtaHViJztcbmNvbnN0IGJyaWRnZSA9ICgpID0+IG5ldyBKc0JyaWRnZURlc2t0b3BJbmplY3RlZCh7XG4gICAgcmVjZWl2ZUhhbmRsZXI6IGluamVjdGVkUHJvdmlkZXJSZWNlaXZlSGFuZGxlcixcbn0pO1xuaW5qZWN0SnNCcmlkZ2UoYnJpZGdlKTtcbmluamVjdFdlYjNQcm92aWRlcigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbnZvaWQgMDtcbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJFdmVudEVtaXR0ZXIiLCJpc1BsYWluT2JqZWN0IiwiaXNTdHJpbmciLCJhcHBEZWJ1Z0xvZ2dlciIsImNvbnNvbGVFcnJvckluRGV2IiwiSUpzQnJpZGdlTWVzc2FnZVR5cGVzIiwid2ViM0Vycm9ycyIsInZlcnNpb25JbmZvIiwiaXNMZWdhY3lFeHRNZXNzYWdlIiwicGF5bG9hZCIsInBheWxvYWRPYmoiLCJCb29sZWFuIiwibmFtZSIsImluY2x1ZGVzIiwiQlJJREdFX0VWRU5UUyIsIm1lc3NhZ2UiLCJlcnJvciIsIkpzQnJpZGdlQmFzZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiX2EiLCJfYiIsImlzRXh0VWkiLCJpc0luamVjdGVkIiwic2VuZEFzU3RyaW5nIiwiZ2xvYmFsT25NZXNzYWdlRW5hYmxlZCIsInByb3ZpZGVyc0h1YiIsImdsb2JhbE9uTWVzc2FnZSIsInJlY2VpdmVIYW5kbGVyIiwicmV0dXJuVmFsdWUiLCJpZCIsInJlc3BvbnNlIiwic2NvcGUiLCJyZW1vdGVJZCIsImRhdGEiLCJ0eXBlIiwiUkVRVUVTVCIsInJlc3BvbnNlRXJyb3IiLCJlbWl0IiwidmVyc2lvbiIsInJlbW90ZUluZm8iLCJvcmlnaW4iLCJkZWJ1Z0xvZ2dlciIsImNhbGxiYWNrcyIsImNhbGxiYWNrSWQiLCJjYWxsYmFja3NFeHBpcmVUaW1lb3V0IiwidGltZW91dCIsIm9uIiwiY29kZSIsInJlamVjdEV4cGlyZWRDYWxsYmFja3MiLCJhdHRhY2hQcm92aWRlckluc3RhbmNlIiwicHJvdmlkZXIiLCJwcm92aWRlck5hbWUiLCJwdXNoIiwiY3JlYXRlQ2FsbGJhY2tJZCIsImNyZWF0ZVBheWxvYWQiLCJFcnJvciIsImNyZWF0ZWQiLCJEYXRlIiwibm93IiwiZXJyb3JJbmZvIiwic3RhY2siLCJzZW5kIiwic3luYyIsImV4ZWN1dG9yIiwiX2lkIiwiZ2xvYmFsIiwibG9jYXRpb24iLCJwYXlsb2FkVG9TZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzQnJpZGdlIiwic2VuZFBheWxvYWQiLCJyZWplY3RDYWxsYmFjayIsInByb2Nlc3NDYWxsYmFjayIsIm1ldGhvZCIsInJlc29sdmVDYWxsYmFjayIsImNhbGxiYWNrSW5mbyIsImNsZWFyQ2FsbGJhY2tDYWNoZSIsInJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsInJlY2VpdmUiLCJwYXlsb2FkUmVjZWl2ZWQiLCJzZW5kZXIiLCJwYXJzZSIsImludGVybmFsIiwiUkVTUE9OU0UiLCJ1bmRlZmluZWQiLCJlcnJvcjAiLCJldmVudE1lc3NhZ2VQYXlsb2FkIiwiT2JqZWN0IiwiYXNzaWduIiwicmVxdWVzdFN5bmMiLCJyZXF1ZXN0IiwiaW5mbyIsImNvbnNvbGUiLCJ3YXJuIiwiSnNCcmlkZ2VTaW1wbGUiLCJhcmd1bWVudHMiLCJyZW1vdGUiLCJzZXRSZW1vdGUiLCJpc0Z1bmN0aW9uIiwic2l0ZU1ldGFkYXRhIiwiZmFrZUxvZ2dlciIsImZha2VEZWJ1Z0xvZ2dlciIsIk1FVEhPRFMiLCJ3YWxsZXRfZ2V0Q29ubmVjdFdhbGxldEluZm8iLCJ3YWxsZXRfc2VuZFNpdGVNZXRhZGF0YSIsIlByb3ZpZGVyQmFzZSIsIl9jIiwiaXNPbmVLZXkiLCJsb2dnZXIiLCJicmlkZ2UiLCJfYXR0YWNoRXh0ZXJuYWxMb2dnZXIiLCJzaG91bGRTZW5kTWV0YWRhdGEiLCJzZW5kU2l0ZU1ldGFkYXRhIiwiY29uZmlnRGVidWdMb2dnZXIiLCJlbmFibGVkS2V5cyIsImZvckVhY2giLCJrZXkiLCJfY3JlYXRlRGVidWdJbnN0YW5jZSIsIl9kZWJ1ZyIsImVuYWJsZSIsIndpbmRvdyIsIiRvbmVrZXkiLCIkZGVidWdMb2dnZXIiLCJnZXRDb25uZWN0V2FsbGV0SW5mbyIsInRpbWVyIiwiYnJpZGdlUmVxdWVzdCIsInBhcmFtcyIsInRpbWUiLCJwcm92aWRlclN0YXRlIiwiZGVidWdMb2dnZXJDb25maWciLCJ3YWxsZXRJbmZvIiwiJHdhbGxldEluZm8iLCJlcnIiLCJjbGVhclRpbWVvdXQiLCJjYWxsYmFjayIsImhhc0NhbGxiYWNrIiwicHJvdmlkZXJCYXNlIiwicmVzRGF0YSIsInJlcSIsInJlcyIsIm1ldGFkYXRhIiwiZ2V0U2l0ZU1ldGFkYXRhIiwiSlNfQlJJREdFX01FU1NBR0VfSVBDX0NIQU5ORUwiLCJKU19CUklER0VfTUVTU0FHRV9FWFRfQ0hBTk5FTCIsIkpTX0JSSURHRV9NRVNTQUdFX0VYVF9QSU5HIiwiSlNfQlJJREdFX01FU1NBR0VfRElSRUNUSU9OIiwiRVhUX1BPUlRfQ1NfVE9fQkciLCJFWFRfUE9SVF9VSV9UT19CRyIsIkRFQlVHX0xPR0dFUl9TVE9SQUdFX0tFWSIsImh1bWFuaXplIiwic3RvcmFnZUtleSIsImV4cG9ydHNCcm93c2VyIiwiZm9ybWF0QXJncyIsInNhdmUiLCJsb2FkIiwidXNlQ29sb3JzIiwic3RvcmFnZSIsImN1c3RvbUxvY2FsU3RvcmFnZSIsImRlc3Ryb3kiLCJ3YXJuZWQiLCJjb2xvcnMiLCJwcm9jZXNzIiwiX19ud2pzIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJXZWJraXRBcHBlYXJhbmNlIiwiZmlyZWJ1ZyIsImV4Y2VwdGlvbiIsInRhYmxlIiwicGFyc2VJbnQiLCJSZWdFeHAiLCIkMSIsImFyZ3MiLCJuYW1lc3BhY2UiLCJkaWZmIiwiYyIsImNvbG9yIiwic3BsaWNlIiwiaW5kZXgiLCJsYXN0QyIsInJlcGxhY2UiLCJsb2ciLCJkZWJ1ZyIsIm5hbWVzcGFjZXMiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsInIiLCJnZXRJdGVtIiwiZW52IiwiREVCVUciLCIkJG9uZWtleUFwcFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJzZXR1cCIsImNyZWF0ZURlYnVnIiwiZGVmYXVsdCIsImNvZXJjZSIsImRpc2FibGUiLCJlbmFibGVkIiwia2V5cyIsIm5hbWVzIiwic2tpcHMiLCJmb3JtYXR0ZXJzIiwiaiIsInYiLCJzZWxlY3RDb2xvciIsImhhc2giLCJpIiwibGVuZ3RoIiwiY2hhckNvZGVBdCIsIk1hdGgiLCJhYnMiLCJwcmV2VGltZSIsImVuYWJsZU92ZXJyaWRlIiwibmFtZXNwYWNlc0NhY2hlIiwiZW5hYmxlZENhY2hlIiwic2VsZiIsImN1cnIiLCJOdW1iZXIiLCJtcyIsInByZXYiLCJ1bnNoaWZ0IiwiZm9ybWF0IiwiZm9ybWF0dGVyIiwidmFsIiwiY2FsbCIsImxvZ0ZuIiwiZXh0ZW5kIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiZ2V0Iiwic2V0IiwiaW5pdCIsImRlbGltaXRlciIsIm5ld0RlYnVnIiwic3BsaXQiLCJsZW4iLCJzdWJzdHIiLCJtYXAiLCJ0b05hbWVzcGFjZSIsImpvaW4iLCJ0ZXN0IiwicmVnZXhwIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJicm93c2VyIiwiY3JlYXRlRGVidWdBc3luYyIsImNvbnN0cyIsImluamVjdGVkRmFjdG9yeSIsImZpeEdsb2JhbFNoaW0iLCJnbG9iYWxUaGlzIiwiaW5qZWN0SnNCcmlkZ2UiLCJicmlkZ2VDcmVhdG9yIiwicGVyZm9ybWFuY2UiLCJjcmVhdGVDb2RlV2l0aFNjcmlwdFRhZyIsImluamVjdENvZGVXaXRoU2NyaXB0VGFnIiwiZmlsZSIsInJlbW92ZSIsInMiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwidGV4dENvbnRlbnQiLCJzcmMiLCJvbmxvYWQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVDb2RlSnNCcmlkZ2VSZWNlaXZlIiwicGF5bG9hZFN0ciIsImluamVjdGVkUHJvdmlkZXJSZWNlaXZlSGFuZGxlciIsInByb3ZpZGVySHViIiwicGF5bG9hZERhdGEiLCJwcm92aWRlcnMiLCJjb25jYXQiLCJmaWx0ZXIiLCJsb2dnZXJDb25maWciLCJOT0RFX0VOViIsIl9pc0Zha2VMb2dnZXIiLCJ0cmFjZSIsIkZha2VEZWJ1Z0xvZ2dlciIsIl9leHRlcm5hbExvZ2dlciIsIl9jcmVhdGVFeHRlcm5hbExvZyIsIl9sb2dnZXIiLCJleHRJbmplY3RlZCIsImV4dENvbnRlbnRTY3JpcHRzIiwid2VidmlldyIsImRlc2t0b3BJbmplY3RlZCIsImV0aGVyZXVtIiwiQXBwRGVidWdMb2dnZXIiLCJfZGVidWdJbnN0YW5jZUNyZWF0ZWRNYXAiLCJfZGVidWdMb2ciLCJfb3JpZ2luTG9nIiwiaW1nRXhpc3RzIiwidXJsIiwiaW1nIiwib25lcnJvciIsImdldFNpdGVOYW1lIiwiaWNvbiIsImdldFNpdGVJY29uIiwid2luZG93T2JqZWN0Iiwic2l0ZU5hbWUiLCJxdWVyeVNlbGVjdG9yIiwiY29udGVudCIsIm1ldGFUaXRsZSIsInRpdGxlIiwiaG9zdG5hbWUiLCJpY29ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpY29uc0FyciIsImhyZWYiLCJ2ZXJzaW9uQnVpbGQiLCJpcGNSZW5kZXJlciIsIkpzQnJpZGdlRGVza3RvcEluamVjdGVkIiwic2VuZFRvSG9zdCIsInNhZmVTdHJpbmdpZnkiLCJXZWIzUnBjRXJyb3IiLCJpc0ludGVnZXIiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkIiwic3RyaW5naWZ5UmVwbGFjZXIiLCJXZWIzUHJvdmlkZXJFcnJvciIsImlzVmFsaWRXZWIzUHJvdmlkZXJDb2RlIiwiXyIsImVycm9yQ29kZXMiLCJycGMiLCJpbnZhbGlkSW5wdXQiLCJyZXNvdXJjZU5vdEZvdW5kIiwicmVzb3VyY2VVbmF2YWlsYWJsZSIsInRyYW5zYWN0aW9uUmVqZWN0ZWQiLCJtZXRob2ROb3RTdXBwb3J0ZWQiLCJsaW1pdEV4Y2VlZGVkIiwiaW52YWxpZFJlcXVlc3QiLCJtZXRob2ROb3RGb3VuZCIsImludmFsaWRQYXJhbXMiLCJ1c2VyUmVqZWN0ZWRSZXF1ZXN0IiwidW5hdXRob3JpemVkIiwidW5zdXBwb3J0ZWRNZXRob2QiLCJkaXNjb25uZWN0ZWQiLCJjaGFpbkRpc2Nvbm5lY3RlZCIsImVycm9yVmFsdWVzIiwic3RhbmRhcmQiLCJnZXRNZXNzYWdlRnJvbUNvZGUiLCJhcmciLCJnZXRXZWIzSnNvblJwY0Vycm9yIiwic2VydmVyIiwib3B0cyIsIkFycmF5IiwiaXNBcnJheSIsImdldFdlYjNQcm92aWRlckVycm9yIiwiY3VzdG9tIiwicGFyc2VPcHRzIiwic2VyaWFsaXplRXJyb3IiLCJGQUxMQkFDS19FUlJPUl9DT0RFIiwiRkFMTEJBQ0tfTUVTU0FHRSIsIkZBTExCQUNLX0VSUk9SIiwiSlNPTl9SUENfU0VSVkVSX0VSUk9SX01FU1NBR0UiLCJmYWxsYmFja01lc3NhZ2UiLCJjb2RlU3RyaW5nIiwiaGFzS2V5IiwiaXNKc29uUnBjU2VydmVyRXJyb3IiLCJpc1ZhbGlkQ29kZSIsImZhbGxiYWNrRXJyb3IiLCJzaG91bGRJbmNsdWRlU3RhY2siLCJfZXJyb3IiLCJvcmlnaW5hbEVycm9yIiwiYXNzaWduT3JpZ2luYWxFcnJvciIsIm9iaiIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiUHJvdmlkZXJFdGhlcmV1bSIsIlByb3ZpZGVyUHJpdmF0ZSIsImluamVjdFdlYjNQcm92aWRlciIsIiRwcml2YXRlIiwic29sYW5hIiwiY29uZmx1eCIsInNvbGxldCIsImRpc3BhdGNoRXZlbnQiLCJFdmVudCIsIk1ldGFNYXNrSW5wYWdlUHJvdmlkZXIiLCJFdGhlcmV1bVJwY0Vycm9yIiwiZXRoRXJyb3JzIiwiZGVxdWFsIiwiSUluamVjdGVkUHJvdmlkZXJOYW1lcyIsIm1lc3NhZ2VzIiwiRU1JVFRFRF9OT1RJRklDQVRJT05TIiwibG9nU3RyZWFtRGlzY29ubmVjdFdhcm5pbmciLCJCYXNlUHJvdmlkZXIiLCJpc01ldGFNYXNrIiwiX2xvZyIsIl9zdGF0ZSIsIl9kZWZhdWx0U3RhdGUiLCJzZWxlY3RlZEFkZHJlc3MiLCJjaGFpbklkIiwiX2hhbmRsZUFjY291bnRzQ2hhbmdlZCIsImJpbmQiLCJfaGFuZGxlQ29ubmVjdCIsIl9oYW5kbGVDaGFpbkNoYW5nZWQiLCJfaGFuZGxlRGlzY29ubmVjdCIsIl9oYW5kbGVTdHJlYW1EaXNjb25uZWN0IiwiX2hhbmRsZVVubG9ja1N0YXRlQ2hhbmdlZCIsIl9ycGNSZXF1ZXN0IiwiZGlzY29ubmVjdEhhbmRsZXIiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3RIYW5kbGVyUnBjIiwiX2luaXRpYWxpemVTdGF0ZSIsImVycm9ycyIsInBlcm1hbmVudGx5RGlzY29ubmVjdGVkIiwiaW52YWxpZFJlcXVlc3RBcmdzIiwiaW52YWxpZFJlcXVlc3RNZXRob2QiLCJpbnZhbGlkUmVxdWVzdFBhcmFtcyIsImFjY291bnRzIiwiaXNVbmxvY2tlZCIsIm5ldHdvcmtWZXJzaW9uIiwiZGVidWdMb2dnZXJTZXR0aW5ncyIsImluaXRpYWxpemVkIiwianNvbnJwYyIsImNvbm5lY3RlZCIsImlzUmVjb3ZlcmFibGUiLCJlcnJvck1lc3NhZ2UiLCJpc1Blcm1hbmVudGx5RGlzY29ubmVjdGVkIiwic3RyZWFtTmFtZSIsInN0YXJ0c1dpdGgiLCJpc0V0aEFjY291bnRzIiwiX2FjY291bnRzIiwiYWNjb3VudCIsIk5PT1AiLCJfc2VudFdhcm5pbmdzIiwiZXhwZXJpbWVudGFsTWV0aG9kcyIsImV2ZW50cyIsImNsb3NlIiwibmV0d29ya0NoYW5nZWQiLCJub3RpZmljYXRpb24iLCJfc2VuZFN5bmMiLCJzZW5kQXN5bmMiLCJfd2Fybk9mRGVwcmVjYXRpb24iLCJfbWV0YW1hc2siLCJfZ2V0RXhwZXJpbWVudGFsQXBpIiwicGF5bG9hZFBhcmFtcyIsInJlYWR5U3RhdGUiLCJkb21Db250ZW50TG9hZGVkSGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkTGlzdGVuZXIiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwid2FybmluZ3MiLCJlbmFibGVEZXByZWNhdGlvbiIsIm1ldGhvZE9yUGF5bG9hZCIsImNhbGxiYWNrT3JBcmdzIiwic2VuZERlcHJlY2F0aW9uIiwidW5zdXBwb3J0ZWRTeW5jIiwiUHJveHkiLCJyZXF1ZXN0QmF0Y2giLCJyZXF1ZXN0cyIsInByb3AiLCJSZWZsZWN0IiwiaW5pdGlhbGl6ZVByb3ZpZGVyIiwic2V0R2xvYmFsUHJvdmlkZXIiLCJzaGltV2ViMyIsIm1heEV2ZW50TGlzdGVuZXJzIiwic2hvdWxkU2V0T25XaW5kb3ciLCJzaG91bGRTaGltV2ViMyIsImRlbGV0ZVByb3BlcnR5IiwicHJvdmlkZXJJbnN0YW5jZSIsImludmFsaWREdXBsZXhTdHJlYW0iLCJpbnZhbGlkTG9nZ2VyT2JqZWN0IiwiaW52YWxpZExvZ2dlck1ldGhvZCIsImxvZ2dlZEN1cnJlbnRQcm92aWRlciIsImxvZ2dlZE1pc3NpbmdQcm9wZXJ0eSIsIndlYjMiLCJTSElNX0lERU5USUZJRVIiLCJ3ZWIzU2hpbSIsImN1cnJlbnRQcm92aWRlciIsIndyaXRhYmxlIiwidGFyZ2V0IiwicHJvcGVydHkiLCJjYXRjaCIsImVuZ2luZSIsImRvbWFpbk1ldGFkYXRhIiwicmVtb3RlTGFiZWwiLCJlbWl0dGVyIiwid2FybmluZ01zZyIsImxpc3RlbmVyQ291bnQiXSwic291cmNlUm9vdCI6IiJ9
|
|
6145
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxRQUFuQztBQUNBQSxFQUFBQSxzQkFBc0IsQ0FBQyxRQUFELENBQXRCLEdBQW1DLFFBQW5DO0FBQ0FBLEVBQUFBLHNCQUFzQixDQUFDLE1BQUQsQ0FBdEIsR0FBaUMsTUFBakM7QUFDQUEsRUFBQUEsc0JBQXNCLENBQUMsVUFBRCxDQUF0QixHQUFxQyxVQUFyQztBQUNILENBUEQsRUFPR0Esc0JBQXNCLEtBQUtBLHNCQUFzQixHQUFHLEVBQTlCLENBUHpCOzs7Ozs7VUNOQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7O0FDTjRFO0FBQzJCO0FBQ25DO0FBQ3BFLHlCQUF5QixzRkFBdUI7QUFDaEQsb0JBQW9CLGdHQUE4QjtBQUNsRCxDQUFDO0FBQ0Qsb0ZBQWM7QUFDZCxrRkFBa0I7QUFDbEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL25vZGVfbW9kdWxlcy9mYXN0LXNhZmUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvbm9kZV9tb2R1bGVzL2V0aC1ycGMtZXJyb3JzL2Rpc3QvY2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL25vZGVfbW9kdWxlcy9ldGgtcnBjLWVycm9ycy9kaXN0L2Vycm9yLWNvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL25vZGVfbW9kdWxlcy9ldGgtcnBjLWVycm9ycy9kaXN0L2Vycm9ycy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL25vZGVfbW9kdWxlcy9ldGgtcnBjLWVycm9ycy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvbm9kZV9tb2R1bGVzL2V0aC1ycGMtZXJyb3JzL2Rpc3QvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9wcm92aWRlcnMvb25la2V5LWV0aC1wcm92aWRlci9ub2RlX21vZHVsZXMvZmFzdC1zYWZlLXN0cmluZ2lmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJlbGVjdHJvblwiIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L0pzQnJpZGdlQmFzZS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9Kc0JyaWRnZVNpbXBsZS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9Qcm92aWRlckJhc2UuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvY29uc3RzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2RlYnVnL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvZGVidWcvY29tbW9uLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2RlYnVnL2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2luamVjdEpzQnJpZGdlLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vY29yZS9kaXN0L2luamVjdGVkRmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9pbmplY3RlZFByb3ZpZGVyUmVjZWl2ZUhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvbG9nZ2Vycy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL2NvcmUvZGlzdC9zaXRlTWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9jb3JlL2Rpc3QvdmVyc2lvbkluZm8uanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9kZXNrdG9wL2Rlc2t0b3AtYnJpZGdlLWluamVjdGVkL2Rpc3QvSnNCcmlkZ2VEZXNrdG9wSW5qZWN0ZWQuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9kZXNrdG9wL2Rlc2t0b3AtYnJpZGdlLWluamVjdGVkL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9lcnJvcnMvZGlzdC9jbGFzc2VzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL2Rpc3QvZXJyb3ItY29uc3RhbnRzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL2Rpc3QvZXJyb3JzLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vZXJyb3JzL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9lcnJvcnMvZGlzdC91dGlscy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9pbnBhZ2UtcHJvdmlkZXJzLWh1Yi9kaXN0L2luamVjdFdlYjNQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvUHJvdmlkZXJFdGhlcmV1bS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vQmFzZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvZGlzdC9ldGhlcmV1bS9NZXRhTWFza0lucGFnZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvZGlzdC9ldGhlcmV1bS9pbmRleC5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vaW5pdGlhbGl6ZUlucGFnZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvLi4vcHJvdmlkZXJzL29uZWtleS1ldGgtcHJvdmlkZXIvZGlzdC9ldGhlcmV1bS9tZXNzYWdlcy5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vc2hpbVdlYjMuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9wcm92aWRlcnMvb25la2V5LWV0aC1wcm92aWRlci9kaXN0L2V0aGVyZXVtL3NpdGVNZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4uL3Byb3ZpZGVycy9vbmVrZXktZXRoLXByb3ZpZGVyL2Rpc3QvZXRoZXJldW0vdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi9wcm92aWRlcnMvb25la2V5LXByaXZhdGUtcHJvdmlkZXIvZGlzdC9Qcm92aWRlclByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC8uLi90eXBlcy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1pbmplY3RlZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItaW5qZWN0ZWQvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9Ab25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWluamVjdGVkLy4vc3JjL2luamVjdGVkRGVza3RvcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkod2luZG93LCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIndXNlIHN0cmljdCc7XG5cbi8vIGRvIG5vdCBlZGl0IC5qcyBmaWxlcyBkaXJlY3RseSAtIGVkaXQgc3JjL2luZGV4LmpzdFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09ICdvYmplY3QnICYmIHR5cGVvZiBiID09ICdvYmplY3QnKSB7XG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW5ndGgsIGksIGtleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0cnVlIGlmIGJvdGggTmFOLCBmYWxzZSBvdGhlcndpc2VcbiAgcmV0dXJuIGEhPT1hICYmIGIhPT1iO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuZGVmYXVsdCA9IHN0cmluZ2lmeVxuc3RyaW5naWZ5LnN0YWJsZSA9IGRldGVybWluaXN0aWNTdHJpbmdpZnlcbnN0cmluZ2lmeS5zdGFibGVTdHJpbmdpZnkgPSBkZXRlcm1pbmlzdGljU3RyaW5naWZ5XG5cbnZhciBMSU1JVF9SRVBMQUNFX05PREUgPSAnWy4uLl0nXG52YXIgQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFID0gJ1tDaXJjdWxhcl0nXG5cbnZhciBhcnIgPSBbXVxudmFyIHJlcGxhY2VyU3RhY2sgPSBbXVxuXG5mdW5jdGlvbiBkZWZhdWx0T3B0aW9ucyAoKSB7XG4gIHJldHVybiB7XG4gICAgZGVwdGhMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgZWRnZXNMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgfVxufVxuXG4vLyBSZWd1bGFyIHN0cmluZ2lmeVxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmosIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucygpXG4gIH1cblxuICBkZWNpcmMob2JqLCAnJywgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucylcbiAgdmFyIHJlc1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdbdW5hYmxlIHRvIHNlcmlhbGl6ZSwgY2lyY3VsYXIgcmVmZXJlbmNlIGlzIHRvbyBjb21wbGV4IHRvIGFuYWx5emVdJylcbiAgfSBmaW5hbGx5IHtcbiAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKClcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc2V0UmVwbGFjZSAocmVwbGFjZSwgdmFsLCBrLCBwYXJlbnQpIHtcbiAgdmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBrKVxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGssIHsgdmFsdWU6IHJlcGxhY2UgfSlcbiAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbCwgcHJvcGVydHlEZXNjcmlwdG9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZXJTdGFjay5wdXNoKFt2YWwsIGssIHJlcGxhY2VdKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJlbnRba10gPSByZXBsYWNlXG4gICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsXSlcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNpcmMgKHZhbCwgaywgZWRnZUluZGV4LCBzdGFjaywgcGFyZW50LCBkZXB0aCwgb3B0aW9ucykge1xuICBkZXB0aCArPSAxXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdGFja1tpXSA9PT0gdmFsKSB7XG4gICAgICAgIHNldFJlcGxhY2UoQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuZGVwdGhMaW1pdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGRlcHRoID4gb3B0aW9ucy5kZXB0aExpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5lZGdlc0xpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZWRnZUluZGV4ICsgMSA+IG9wdGlvbnMuZWRnZXNMaW1pdFxuICAgICkge1xuICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWwpXG4gICAgLy8gT3B0aW1pemUgZm9yIEFycmF5cy4gQmlnIGFycmF5cyBjb3VsZCBraWxsIHRoZSBwZXJmb3JtYW5jZSBvdGhlcndpc2UhXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZWNpcmModmFsW2ldLCBpLCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpXG4gICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgICBkZWNpcmModmFsW2tleV0sIGtleSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICAgIHN0YWNrLnBvcCgpXG4gIH1cbn1cblxuLy8gU3RhYmxlLXN0cmluZ2lmeVxuZnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uIChhLCBiKSB7XG4gIGlmIChhIDwgYikge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChhID4gYikge1xuICAgIHJldHVybiAxXG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY1N0cmluZ2lmeSAob2JqLCByZXBsYWNlciwgc3BhY2VyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMoKVxuICB9XG5cbiAgdmFyIHRtcCA9IGRldGVybWluaXN0aWNEZWNpcmMob2JqLCAnJywgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucykgfHwgb2JqXG4gIHZhciByZXNcbiAgdHJ5IHtcbiAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KHRtcCwgcmVwbGFjZXIsIHNwYWNlcilcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkodG1wLCByZXBsYWNlR2V0dGVyVmFsdWVzKHJlcGxhY2VyKSwgc3BhY2VyKVxuICAgIH1cbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgnW3VuYWJsZSB0byBzZXJpYWxpemUsIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyB0b28gY29tcGxleCB0byBhbmFseXplXScpXG4gIH0gZmluYWxseSB7XG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgcmVzdG9yZSB0aGUgb2JqZWN0IGFzIGl0IHdhcy5cbiAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKClcbiAgICAgIGlmIChwYXJ0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY0RlY2lyYyAodmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gIGRlcHRoICs9IDFcbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWwpIHtcbiAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZGVwdGggPiBvcHRpb25zLmRlcHRoTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmVkZ2VzTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbClcbiAgICAvLyBPcHRpbWl6ZSBmb3IgQXJyYXlzLiBCaWcgYXJyYXlzIGNvdWxkIGtpbGwgdGhlIHBlcmZvcm1hbmNlIG90aGVyd2lzZSFcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRldGVybWluaXN0aWNEZWNpcmModmFsW2ldLCBpLCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IG9iamVjdCBpbiB0aGUgcmVxdWlyZWQgd2F5XG4gICAgICB2YXIgdG1wID0ge31cbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsKS5zb3J0KGNvbXBhcmVGdW5jdGlvbilcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICAgIGRldGVybWluaXN0aWNEZWNpcmModmFsW2tleV0sIGtleSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpXG4gICAgICAgIHRtcFtrZXldID0gdmFsW2tleV1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGFyZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKVxuICAgICAgICBwYXJlbnRba10gPSB0bXBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0bXBcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxufVxuXG4vLyB3cmFwcyByZXBsYWNlciBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWVzIHdlIGNvdWxkbid0IHJlcGxhY2Vcbi8vIGFuZCBtYXJrIHRoZW0gYXMgcmVwbGFjZWQgdmFsdWVcbmZ1bmN0aW9uIHJlcGxhY2VHZXR0ZXJWYWx1ZXMgKHJlcGxhY2VyKSB7XG4gIHJlcGxhY2VyID1cbiAgICB0eXBlb2YgcmVwbGFjZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IHJlcGxhY2VyXG4gICAgICA6IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICAgIHJldHVybiB2XG4gICAgICB9XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGxhY2VyU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSByZXBsYWNlclN0YWNrW2ldXG4gICAgICAgIGlmIChwYXJ0WzFdID09PSBrZXkgJiYgcGFydFswXSA9PT0gdmFsKSB7XG4gICAgICAgICAgdmFsID0gcGFydFsyXVxuICAgICAgICAgIHJlcGxhY2VyU3RhY2suc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbClcbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV0aGVyZXVtUHJvdmlkZXJFcnJvciA9IGV4cG9ydHMuRXRoZXJldW1ScGNFcnJvciA9IHZvaWQgMDtcbmNvbnN0IGZhc3Rfc2FmZV9zdHJpbmdpZnlfMSA9IHJlcXVpcmUoXCJmYXN0LXNhZmUtc3RyaW5naWZ5XCIpO1xuLyoqXG4gKiBFcnJvciBzdWJjbGFzcyBpbXBsZW1lbnRpbmcgSlNPTiBSUEMgMi4wIGVycm9ycyBhbmQgRXRoZXJldW0gUlBDIGVycm9yc1xuICogcGVyIEVJUC0xNDc0LlxuICogUGVybWl0cyBhbnkgaW50ZWdlciBlcnJvciBjb2RlLlxuICovXG5jbGFzcyBFdGhlcmV1bVJwY0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiY29kZVwiIG11c3QgYmUgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibWVzc2FnZVwiIG11c3QgYmUgYSBub25lbXB0eSBzdHJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHBsYWluIG9iamVjdCB3aXRoIGFsbCBwdWJsaWMgY2xhc3MgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB7XG4gICAgICAgICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YWNrKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnN0YWNrID0gdGhpcy5zdGFjaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZXJpYWxpemVkIGVycm9yLCBvbWl0dGluZ1xuICAgICAqIGFueSBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFzdF9zYWZlX3N0cmluZ2lmeV8xLmRlZmF1bHQodGhpcy5zZXJpYWxpemUoKSwgc3RyaW5naWZ5UmVwbGFjZXIsIDIpO1xuICAgIH1cbn1cbmV4cG9ydHMuRXRoZXJldW1ScGNFcnJvciA9IEV0aGVyZXVtUnBjRXJyb3I7XG4vKipcbiAqIEVycm9yIHN1YmNsYXNzIGltcGxlbWVudGluZyBFdGhlcmV1bSBQcm92aWRlciBlcnJvcnMgcGVyIEVJUC0xMTkzLlxuICogUGVybWl0cyBpbnRlZ2VyIGVycm9yIGNvZGVzIGluIHRoZSBbIDEwMDAgPD0gNDk5OSBdIHJhbmdlLlxuICovXG5jbGFzcyBFdGhlcmV1bVByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBFdGhlcmV1bVJwY0Vycm9yIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gRXRoZXJldW0gUHJvdmlkZXIgSlNPTi1SUEMgZXJyb3IuXG4gICAgICogYGNvZGVgIG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgMTAwMCA8PSA0OTk5IHJhbmdlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRXRoUHJvdmlkZXJDb2RlKGNvZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiY29kZVwiIG11c3QgYmUgYW4gaW50ZWdlciBzdWNoIHRoYXQ6IDEwMDAgPD0gY29kZSA8PSA0OTk5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoY29kZSwgbWVzc2FnZSwgZGF0YSk7XG4gICAgfVxufVxuZXhwb3J0cy5FdGhlcmV1bVByb3ZpZGVyRXJyb3IgPSBFdGhlcmV1bVByb3ZpZGVyRXJyb3I7XG4vLyBJbnRlcm5hbFxuZnVuY3Rpb24gaXNWYWxpZEV0aFByb3ZpZGVyQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA+PSAxMDAwICYmIGNvZGUgPD0gNDk5OTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeVJlcGxhY2VyKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAnW0NpcmN1bGFyXScpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJ4aGMzTmxjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5amJHRnpjMlZ6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096dEJRVUZCTERaRVFVRm5SRHRCUVZOb1JEczdPenRIUVVsSE8wRkJRMGdzVFVGQllTeG5Ra0ZCYjBJc1UwRkJVU3hMUVVGTE8wbEJUVFZETEZsQlFWa3NTVUZCV1N4RlFVRkZMRTlCUVdVc1JVRkJSU3hKUVVGUk8xRkJSV3BFTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzFsQlF6TkNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzTkVKQlFUUkNMRU5CUXpkQ0xFTkJRVU03VTBGRFNEdFJRVU5FTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhQUVVGUExFdEJRVXNzVVVGQlVTeEZRVUZGTzFsQlF6TkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzYzBOQlFYTkRMRU5CUTNaRExFTkJRVU03VTBGRFNEdFJRVVZFTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVObUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFbEJRVWtzU1VGQlNTeExRVUZMTEZOQlFWTXNSVUZCUlR0WlFVTjBRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0VFFVTnNRanRKUVVOSUxFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTklMRk5CUVZNN1VVRkRVQ3hOUVVGTkxGVkJRVlVzUjBGQkswSTdXVUZETjBNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTzFsQlEyWXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUE8xTkJRM1JDTEVOQlFVTTdVVUZEUml4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVXNzVTBGQlV5eEZRVUZGTzFsQlF6TkNMRlZCUVZVc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0VFFVTTNRanRSUVVORUxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlR0WlFVTmtMRlZCUVZVc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0VFFVTXZRanRSUVVORUxFOUJRVThzVlVGQlZTeERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRkZSRHM3TzA5QlIwYzdTVUZEU0N4UlFVRlJPMUZCUTA0c1QwRkJUeXcyUWtGQllTeERRVU5zUWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRMmhDTEdsQ1FVRnBRaXhGUVVOcVFpeERRVUZETEVOQlEwWXNRMEZCUXp0SlFVTktMRU5CUVVNN1EwRkRSanRCUVhSRVJDdzBRMEZ6UkVNN1FVRkZSRHM3TzBkQlIwYzdRVUZEU0N4TlFVRmhMSEZDUVVGNVFpeFRRVUZSTEdkQ1FVRnRRanRKUVVVdlJEczdPMDlCUjBjN1NVRkRTQ3haUVVGWkxFbEJRVmtzUlVGQlJTeFBRVUZsTEVWQlFVVXNTVUZCVVR0UlFVVnFSQ3hKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3V1VGRGFrTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkRZaXd5UkVGQk1rUXNRMEZETlVRc1EwRkJRenRUUVVOSU8xRkJSVVFzUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE4wSXNRMEZCUXp0RFFVTkdPMEZCYUVKRUxITkVRV2RDUXp0QlFVVkVMRmRCUVZjN1FVRkZXQ3hUUVVGVExITkNRVUZ6UWl4RFFVRkRMRWxCUVZrN1NVRkRNVU1zVDBGQlR5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeEpRVUZKTEVsQlFVa3NTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJRenRCUVVOb1JTeERRVUZETzBGQlJVUXNVMEZCVXl4cFFrRkJhVUlzUTBGQlF5eERRVUZWTEVWQlFVVXNTMEZCWXp0SlFVTnVSQ3hKUVVGSkxFdEJRVXNzUzBGQlN5eFpRVUZaTEVWQlFVVTdVVUZETVVJc1QwRkJUeXhUUVVGVExFTkJRVU03UzBGRGJFSTdTVUZEUkN4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVObUxFTkJRVU1pZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lcnJvclZhbHVlcyA9IGV4cG9ydHMuZXJyb3JDb2RlcyA9IHZvaWQgMDtcbmV4cG9ydHMuZXJyb3JDb2RlcyA9IHtcbiAgICBycGM6IHtcbiAgICAgICAgaW52YWxpZElucHV0OiAtMzIwMDAsXG4gICAgICAgIHJlc291cmNlTm90Rm91bmQ6IC0zMjAwMSxcbiAgICAgICAgcmVzb3VyY2VVbmF2YWlsYWJsZTogLTMyMDAyLFxuICAgICAgICB0cmFuc2FjdGlvblJlamVjdGVkOiAtMzIwMDMsXG4gICAgICAgIG1ldGhvZE5vdFN1cHBvcnRlZDogLTMyMDA0LFxuICAgICAgICBsaW1pdEV4Y2VlZGVkOiAtMzIwMDUsXG4gICAgICAgIHBhcnNlOiAtMzI3MDAsXG4gICAgICAgIGludmFsaWRSZXF1ZXN0OiAtMzI2MDAsXG4gICAgICAgIG1ldGhvZE5vdEZvdW5kOiAtMzI2MDEsXG4gICAgICAgIGludmFsaWRQYXJhbXM6IC0zMjYwMixcbiAgICAgICAgaW50ZXJuYWw6IC0zMjYwMyxcbiAgICB9LFxuICAgIHByb3ZpZGVyOiB7XG4gICAgICAgIHVzZXJSZWplY3RlZFJlcXVlc3Q6IDQwMDEsXG4gICAgICAgIHVuYXV0aG9yaXplZDogNDEwMCxcbiAgICAgICAgdW5zdXBwb3J0ZWRNZXRob2Q6IDQyMDAsXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogNDkwMCxcbiAgICAgICAgY2hhaW5EaXNjb25uZWN0ZWQ6IDQ5MDEsXG4gICAgfSxcbn07XG5leHBvcnRzLmVycm9yVmFsdWVzID0ge1xuICAgICctMzI3MDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgSlNPTiB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci4gQW4gZXJyb3Igb2NjdXJyZWQgb24gdGhlIHNlcnZlciB3aGlsZSBwYXJzaW5nIHRoZSBKU09OIHRleHQuJyxcbiAgICB9LFxuICAgICctMzI2MDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBKU09OIHNlbnQgaXMgbm90IGEgdmFsaWQgUmVxdWVzdCBvYmplY3QuJyxcbiAgICB9LFxuICAgICctMzI2MDEnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBtZXRob2QgZG9lcyBub3QgZXhpc3QgLyBpcyBub3QgYXZhaWxhYmxlLicsXG4gICAgfSxcbiAgICAnLTMyNjAyJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIG1ldGhvZCBwYXJhbWV0ZXIocykuJyxcbiAgICB9LFxuICAgICctMzI2MDMnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnSlNPTiBSUEMgMi4wJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludGVybmFsIEpTT04tUlBDIGVycm9yLicsXG4gICAgfSxcbiAgICAnLTMyMDAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQuJyxcbiAgICB9LFxuICAgICctMzIwMDEnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnRUlQLTE0NzQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzb3VyY2Ugbm90IGZvdW5kLicsXG4gICAgfSxcbiAgICAnLTMyMDAyJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc291cmNlIHVuYXZhaWxhYmxlLicsXG4gICAgfSxcbiAgICAnLTMyMDAzJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1RyYW5zYWN0aW9uIHJlamVjdGVkLicsXG4gICAgfSxcbiAgICAnLTMyMDA0Jzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ01ldGhvZCBub3Qgc3VwcG9ydGVkLicsXG4gICAgfSxcbiAgICAnLTMyMDA1Jzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgbGltaXQgZXhjZWVkZWQuJyxcbiAgICB9LFxuICAgICc0MDAxJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1VzZXIgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuJyxcbiAgICB9LFxuICAgICc0MTAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSByZXF1ZXN0ZWQgYWNjb3VudCBhbmQvb3IgbWV0aG9kIGhhcyBub3QgYmVlbiBhdXRob3JpemVkIGJ5IHRoZSB1c2VyLicsXG4gICAgfSxcbiAgICAnNDIwMCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgRXRoZXJldW0gcHJvdmlkZXIuJyxcbiAgICB9LFxuICAgICc0OTAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwcm92aWRlciBpcyBkaXNjb25uZWN0ZWQgZnJvbSBhbGwgY2hhaW5zLicsXG4gICAgfSxcbiAgICAnNDkwMSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcHJvdmlkZXIgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBjaGFpbi4nLFxuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSXRZMjl1YzNSaGJuUnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZjM0pqTDJWeWNtOXlMV052Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN1FVRjFRbUVzVVVGQlFTeFZRVUZWTEVkQlFXVTdTVUZEY0VNc1IwRkJSeXhGUVVGRk8xRkJRMGdzV1VGQldTeEZRVUZGTEVOQlFVTXNTMEZCU3p0UlFVTndRaXhuUWtGQlowSXNSVUZCUlN4RFFVRkRMRXRCUVVzN1VVRkRlRUlzYlVKQlFXMUNMRVZCUVVVc1EwRkJReXhMUVVGTE8xRkJRek5DTEcxQ1FVRnRRaXhGUVVGRkxFTkJRVU1zUzBGQlN6dFJRVU16UWl4clFrRkJhMElzUlVGQlJTeERRVUZETEV0QlFVczdVVUZETVVJc1lVRkJZU3hGUVVGRkxFTkJRVU1zUzBGQlN6dFJRVU55UWl4TFFVRkxMRVZCUVVVc1EwRkJReXhMUVVGTE8xRkJRMklzWTBGQll5eEZRVUZGTEVOQlFVTXNTMEZCU3p0UlFVTjBRaXhqUVVGakxFVkJRVVVzUTBGQlF5eExRVUZMTzFGQlEzUkNMR0ZCUVdFc1JVRkJSU3hEUVVGRExFdEJRVXM3VVVGRGNrSXNVVUZCVVN4RlFVRkZMRU5CUVVNc1MwRkJTenRMUVVOcVFqdEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMRzFDUVVGdFFpeEZRVUZGTEVsQlFVazdVVUZEZWtJc1dVRkJXU3hGUVVGRkxFbEJRVWs3VVVGRGJFSXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNUdFJRVU4yUWl4WlFVRlpMRVZCUVVVc1NVRkJTVHRSUVVOc1FpeHBRa0ZCYVVJc1JVRkJSU3hKUVVGSk8wdEJRM2hDTzBOQlEwWXNRMEZCUXp0QlFVVlhMRkZCUVVFc1YwRkJWeXhIUVVGSE8wbEJRM3BDTEZGQlFWRXNSVUZCUlR0UlFVTlNMRkZCUVZFc1JVRkJSU3hqUVVGak8xRkJRM2hDTEU5QlFVOHNSVUZCUlN4MVIwRkJkVWM3UzBGRGFrZzdTVUZEUkN4UlFVRlJMRVZCUVVVN1VVRkRVaXhSUVVGUkxFVkJRVVVzWTBGQll6dFJRVU40UWl4UFFVRlBMRVZCUVVVc09FTkJRVGhETzB0QlEzaEVPMGxCUTBRc1VVRkJVU3hGUVVGRk8xRkJRMUlzVVVGQlVTeEZRVUZGTEdOQlFXTTdVVUZEZUVJc1QwRkJUeXhGUVVGRkxDdERRVUVyUXp0TFFVTjZSRHRKUVVORUxGRkJRVkVzUlVGQlJUdFJRVU5TTEZGQlFWRXNSVUZCUlN4alFVRmpPMUZCUTNoQ0xFOUJRVThzUlVGQlJTdzRRa0ZCT0VJN1MwRkRlRU03U1VGRFJDeFJRVUZSTEVWQlFVVTdVVUZEVWl4UlFVRlJMRVZCUVVVc1kwRkJZenRSUVVONFFpeFBRVUZQTEVWQlFVVXNNRUpCUVRCQ08wdEJRM0JETzBsQlEwUXNVVUZCVVN4RlFVRkZPMUZCUTFJc1VVRkJVU3hGUVVGRkxGVkJRVlU3VVVGRGNFSXNUMEZCVHl4RlFVRkZMR2RDUVVGblFqdExRVU14UWp0SlFVTkVMRkZCUVZFc1JVRkJSVHRSUVVOU0xGRkJRVkVzUlVGQlJTeFZRVUZWTzFGQlEzQkNMRTlCUVU4c1JVRkJSU3h4UWtGQmNVSTdTMEZETDBJN1NVRkRSQ3hSUVVGUkxFVkJRVVU3VVVGRFVpeFJRVUZSTEVWQlFVVXNWVUZCVlR0UlFVTndRaXhQUVVGUExFVkJRVVVzZFVKQlFYVkNPMHRCUTJwRE8wbEJRMFFzVVVGQlVTeEZRVUZGTzFGQlExSXNVVUZCVVN4RlFVRkZMRlZCUVZVN1VVRkRjRUlzVDBGQlR5eEZRVUZGTEhWQ1FVRjFRanRMUVVOcVF6dEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMRkZCUVZFc1JVRkJSU3hWUVVGVk8xRkJRM0JDTEU5QlFVOHNSVUZCUlN4MVFrRkJkVUk3UzBGRGFrTTdTVUZEUkN4UlFVRlJMRVZCUVVVN1VVRkRVaXhSUVVGUkxFVkJRVVVzVlVGQlZUdFJRVU53UWl4UFFVRlBMRVZCUVVVc2VVSkJRWGxDTzB0QlEyNURPMGxCUTBRc1RVRkJUU3hGUVVGRk8xRkJRMDRzVVVGQlVTeEZRVUZGTEZWQlFWVTdVVUZEY0VJc1QwRkJUeXhGUVVGRkxEUkNRVUUwUWp0TFFVTjBRenRKUVVORUxFMUJRVTBzUlVGQlJUdFJRVU5PTEZGQlFWRXNSVUZCUlN4VlFVRlZPMUZCUTNCQ0xFOUJRVThzUlVGQlJTd3dSVUZCTUVVN1MwRkRjRVk3U1VGRFJDeE5RVUZOTEVWQlFVVTdVVUZEVGl4UlFVRlJMRVZCUVVVc1ZVRkJWVHRSUVVOd1FpeFBRVUZQTEVWQlFVVXNhMFZCUVd0Rk8wdEJRelZGTzBsQlEwUXNUVUZCVFN4RlFVRkZPMUZCUTA0c1VVRkJVU3hGUVVGRkxGVkJRVlU3VVVGRGNFSXNUMEZCVHl4RlFVRkZMQ3REUVVFclF6dExRVU42UkR0SlFVTkVMRTFCUVUwc1JVRkJSVHRSUVVOT0xGRkJRVkVzUlVGQlJTeFZRVUZWTzFGQlEzQkNMRTlCUVU4c1JVRkJSU3gzUkVGQmQwUTdTMEZEYkVVN1EwRkRSaXhEUVVGREluMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXRoRXJyb3JzID0gdm9pZCAwO1xuY29uc3QgY2xhc3Nlc18xID0gcmVxdWlyZShcIi4vY2xhc3Nlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IGVycm9yX2NvbnN0YW50c18xID0gcmVxdWlyZShcIi4vZXJyb3ItY29uc3RhbnRzXCIpO1xuZXhwb3J0cy5ldGhFcnJvcnMgPSB7XG4gICAgcnBjOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgUGFyc2UgKC0zMjcwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogKGFyZykgPT4gZ2V0RXRoSnNvblJwY0Vycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucnBjLnBhcnNlLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgSlNPTiBSUEMgMi4wIEludmFsaWQgUmVxdWVzdCAoLTMyNjAwKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludmFsaWRSZXF1ZXN0OiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW52YWxpZFJlcXVlc3QsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgSW52YWxpZCBQYXJhbXMgKC0zMjYwMikgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBpbnZhbGlkUGFyYW1zOiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW52YWxpZFBhcmFtcywgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBNZXRob2QgTm90IEZvdW5kICgtMzI2MDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgbWV0aG9kTm90Rm91bmQ6IChhcmcpID0+IGdldEV0aEpzb25ScGNFcnJvcihlcnJvcl9jb25zdGFudHNfMS5lcnJvckNvZGVzLnJwYy5tZXRob2ROb3RGb3VuZCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBJbnRlcm5hbCAoLTMyNjAzKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludGVybmFsOiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW50ZXJuYWwsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgU2VydmVyIGVycm9yLlxuICAgICAgICAgKiBQZXJtaXRzIGludGVnZXIgZXJyb3IgY29kZXMgaW4gdGhlIFsgLTMyMDk5IDw9IC0zMjAwNSBdIHJhbmdlLlxuICAgICAgICAgKiBDb2RlcyAtMzIwMDAgdGhyb3VnaCAtMzIwMDQgYXJlIHJlc2VydmVkIGJ5IEVJUC0xNDc0LlxuICAgICAgICAgKi9cbiAgICAgICAgc2VydmVyOiAob3B0cykgPT4ge1xuICAgICAgICAgICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdGhlcmV1bSBSUEMgU2VydmVyIGVycm9ycyBtdXN0IHByb3ZpZGUgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gb3B0cztcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2RlKSB8fCBjb2RlID4gLTMyMDA1IHx8IGNvZGUgPCAtMzIwOTkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiY29kZVwiIG11c3QgYmUgYW4gaW50ZWdlciBzdWNoIHRoYXQ6IC0zMjA5OSA8PSBjb2RlIDw9IC0zMjAwNScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldEV0aEpzb25ScGNFcnJvcihjb2RlLCBvcHRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBKU09OIFJQQyBJbnZhbGlkIElucHV0ICgtMzIwMDApIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgaW52YWxpZElucHV0OiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW52YWxpZElucHV0LCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIEpTT04gUlBDIFJlc291cmNlIE5vdCBGb3VuZCAoLTMyMDAxKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIHJlc291cmNlTm90Rm91bmQ6IChhcmcpID0+IGdldEV0aEpzb25ScGNFcnJvcihlcnJvcl9jb25zdGFudHNfMS5lcnJvckNvZGVzLnJwYy5yZXNvdXJjZU5vdEZvdW5kLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIEpTT04gUlBDIFJlc291cmNlIFVuYXZhaWxhYmxlICgtMzIwMDIpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVzb3VyY2VVbmF2YWlsYWJsZTogKGFyZykgPT4gZ2V0RXRoSnNvblJwY0Vycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucnBjLnJlc291cmNlVW5hdmFpbGFibGUsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gRXRoZXJldW0gSlNPTiBSUEMgVHJhbnNhY3Rpb24gUmVqZWN0ZWQgKC0zMjAwMykgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc2FjdGlvblJlamVjdGVkOiAoYXJnKSA9PiBnZXRFdGhKc29uUnBjRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMudHJhbnNhY3Rpb25SZWplY3RlZCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBKU09OIFJQQyBNZXRob2QgTm90IFN1cHBvcnRlZCAoLTMyMDA0KSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIG1ldGhvZE5vdFN1cHBvcnRlZDogKGFyZykgPT4gZ2V0RXRoSnNvblJwY0Vycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucnBjLm1ldGhvZE5vdFN1cHBvcnRlZCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBKU09OIFJQQyBMaW1pdCBFeGNlZWRlZCAoLTMyMDA1KSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGxpbWl0RXhjZWVkZWQ6IChhcmcpID0+IGdldEV0aEpzb25ScGNFcnJvcihlcnJvcl9jb25zdGFudHNfMS5lcnJvckNvZGVzLnJwYy5saW1pdEV4Y2VlZGVkLCBhcmcpLFxuICAgIH0sXG4gICAgcHJvdmlkZXI6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBQcm92aWRlciBVc2VyIFJlamVjdGVkIFJlcXVlc3QgKDQwMDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdXNlclJlamVjdGVkUmVxdWVzdDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci51c2VyUmVqZWN0ZWRSZXF1ZXN0LCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIFByb3ZpZGVyIFVuYXV0aG9yaXplZCAoNDEwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRFdGhQcm92aWRlckVycm9yKGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXMucHJvdmlkZXIudW5hdXRob3JpemVkLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIEV0aGVyZXVtIFByb3ZpZGVyIFVuc3VwcG9ydGVkIE1ldGhvZCAoNDIwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICB1bnN1cHBvcnRlZE1ldGhvZDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci51bnN1cHBvcnRlZE1ldGhvZCwgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBFdGhlcmV1bSBQcm92aWRlciBOb3QgQ29ubmVjdGVkICg0OTAwKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci5kaXNjb25uZWN0ZWQsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gRXRoZXJldW0gUHJvdmlkZXIgQ2hhaW4gTm90IENvbm5lY3RlZCAoNDkwMSkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBjaGFpbkRpc2Nvbm5lY3RlZDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldEV0aFByb3ZpZGVyRXJyb3IoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5wcm92aWRlci5jaGFpbkRpc2Nvbm5lY3RlZCwgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGN1c3RvbSBFdGhlcmV1bSBQcm92aWRlciBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGN1c3RvbTogKG9wdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXRoZXJldW0gUHJvdmlkZXIgY3VzdG9tIGVycm9ycyBtdXN0IHByb3ZpZGUgc2luZ2xlIG9iamVjdCBhcmd1bWVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgbWVzc2FnZSwgZGF0YSB9ID0gb3B0cztcbiAgICAgICAgICAgIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibWVzc2FnZVwiIG11c3QgYmUgYSBub25lbXB0eSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgY2xhc3Nlc18xLkV0aGVyZXVtUHJvdmlkZXJFcnJvcihjb2RlLCBtZXNzYWdlLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8vIEludGVybmFsXG5mdW5jdGlvbiBnZXRFdGhKc29uUnBjRXJyb3IoY29kZSwgYXJnKSB7XG4gICAgY29uc3QgW21lc3NhZ2UsIGRhdGFdID0gcGFyc2VPcHRzKGFyZyk7XG4gICAgcmV0dXJuIG5ldyBjbGFzc2VzXzEuRXRoZXJldW1ScGNFcnJvcihjb2RlLCBtZXNzYWdlIHx8IHV0aWxzXzEuZ2V0TWVzc2FnZUZyb21Db2RlKGNvZGUpLCBkYXRhKTtcbn1cbmZ1bmN0aW9uIGdldEV0aFByb3ZpZGVyRXJyb3IoY29kZSwgYXJnKSB7XG4gICAgY29uc3QgW21lc3NhZ2UsIGRhdGFdID0gcGFyc2VPcHRzKGFyZyk7XG4gICAgcmV0dXJuIG5ldyBjbGFzc2VzXzEuRXRoZXJldW1Qcm92aWRlckVycm9yKGNvZGUsIG1lc3NhZ2UgfHwgdXRpbHNfMS5nZXRNZXNzYWdlRnJvbUNvZGUoY29kZSksIGRhdGEpO1xufVxuZnVuY3Rpb24gcGFyc2VPcHRzKGFyZykge1xuICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gW2FyZ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBkYXRhIH0gPSBhcmc7XG4gICAgICAgICAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBzdHJpbmcgbWVzc2FnZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZSB8fCB1bmRlZmluZWQsIGRhdGFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpYSnliM0p6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2YzNKakwyVnljbTl5Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdRVUZCUVN4MVEwRkJiMFU3UVVGRGNFVXNiVU5CUVRaRE8wRkJRemRETEhWRVFVRXJRenRCUVdWc1F5eFJRVUZCTEZOQlFWTXNSMEZCUnp0SlFVTjJRaXhIUVVGSExFVkJRVVU3VVVGRlNEczdWMEZGUnp0UlFVTklMRXRCUVVzc1JVRkJSU3hEUVVGSkxFZEJRWEZDTEVWQlFVVXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeERRVU55UkN3MFFrRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVTXhRanRSUVVWRU96dFhRVVZITzFGQlEwZ3NZMEZCWXl4RlFVRkZMRU5CUVVrc1IwRkJjVUlzUlVGQlJTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRemxFTERSQ1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExHTkJRV01zUlVGQlJTeEhRVUZITEVOQlEyNURPMUZCUlVRN08xZEJSVWM3VVVGRFNDeGhRVUZoTEVWQlFVVXNRMEZCU1N4SFFVRnhRaXhGUVVGRkxFVkJRVVVzUTBGQlF5eHJRa0ZCYTBJc1EwRkROMFFzTkVKQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1lVRkJZU3hGUVVGRkxFZEJRVWNzUTBGRGJFTTdVVUZGUkRzN1YwRkZSenRSUVVOSUxHTkJRV01zUlVGQlJTeERRVUZKTEVkQlFYRkNMRVZCUVVVc1JVRkJSU3hEUVVGRExHdENRVUZyUWl4RFFVTTVSQ3cwUWtGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4alFVRmpMRVZCUVVVc1IwRkJSeXhEUVVOdVF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc1VVRkJVU3hGUVVGRkxFTkJRVWtzUjBGQmNVSXNSVUZCUlN4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVOQlEzaEVMRFJDUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUXpkQ08xRkJSVVE3T3pzN1YwRkpSenRSUVVOSUxFMUJRVTBzUlVGQlJTeERRVUZKTEVsQlFUSkNMRVZCUVVVc1JVRkJSVHRaUVVONlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRTlCUVU4c1NVRkJTU3hMUVVGTExGRkJRVkVzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8yZENRVU0xUkN4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHbEZRVUZwUlN4RFFVRkRMRU5CUVVNN1lVRkRjRVk3V1VGRFJDeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVTdaMEpCUXpkRUxFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlEySXNLMFJCUVN0RUxFTkJRMmhGTEVOQlFVTTdZVUZEU0R0WlFVTkVMRTlCUVU4c2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRM2hETEVOQlFVTTdVVUZGUkRzN1YwRkZSenRSUVVOSUxGbEJRVmtzUlVGQlJTeERRVUZKTEVkQlFYRkNMRVZCUVVVc1JVRkJSU3hEUVVGRExHdENRVUZyUWl4RFFVTTFSQ3cwUWtGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRVZCUVVVc1IwRkJSeXhEUVVOcVF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc1owSkJRV2RDTEVWQlFVVXNRMEZCU1N4SFFVRnhRaXhGUVVGRkxFVkJRVVVzUTBGQlF5eHJRa0ZCYTBJc1EwRkRhRVVzTkVKQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVTnlRenRSUVVWRU96dFhRVVZITzFGQlEwZ3NiVUpCUVcxQ0xFVkJRVVVzUTBGQlNTeEhRVUZ4UWl4RlFVRkZMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNRMEZEYmtVc05FSkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUjBGQlJ5eERRVU40UXp0UlFVVkVPenRYUVVWSE8xRkJRMGdzYlVKQlFXMUNMRVZCUVVVc1EwRkJTU3hIUVVGeFFpeEZRVUZGTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGRGJrVXNORUpCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zYlVKQlFXMUNMRVZCUVVVc1IwRkJSeXhEUVVONFF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc2EwSkJRV3RDTEVWQlFVVXNRMEZCU1N4SFFVRnhRaXhGUVVGRkxFVkJRVVVzUTBGQlF5eHJRa0ZCYTBJc1EwRkRiRVVzTkVKQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNSMEZCUnl4RFFVTjJRenRSUVVWRU96dFhRVVZITzFGQlEwZ3NZVUZCWVN4RlFVRkZMRU5CUVVrc1IwRkJjVUlzUlVGQlJTeEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRemRFTERSQ1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExHRkJRV0VzUlVGQlJTeEhRVUZITEVOQlEyeERPMHRCUTBZN1NVRkZSQ3hSUVVGUkxFVkJRVVU3VVVGRlVqczdWMEZGUnp0UlFVTklMRzFDUVVGdFFpeEZRVUZGTEVOQlFVa3NSMEZCY1VJc1JVRkJSU3hGUVVGRk8xbEJRMmhFTEU5QlFVOHNiVUpCUVcxQ0xFTkJRM2hDTERSQ1FVRlZMRU5CUVVNc1VVRkJVU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZMRWRCUVVjc1EwRkROME1zUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkRzN1YwRkZSenRSUVVOSUxGbEJRVmtzUlVGQlJTeERRVUZKTEVkQlFYRkNMRVZCUVVVc1JVRkJSVHRaUVVONlF5eFBRVUZQTEcxQ1FVRnRRaXhEUVVONFFpdzBRa0ZCVlN4RFFVRkRMRkZCUVZFc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eERRVU4wUXl4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRU96dFhRVVZITzFGQlEwZ3NhVUpCUVdsQ0xFVkJRVVVzUTBGQlNTeEhRVUZ4UWl4RlFVRkZMRVZCUVVVN1dVRkRPVU1zVDBGQlR5eHRRa0ZCYlVJc1EwRkRlRUlzTkVKQlFWVXNRMEZCUXl4UlFVRlJMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNSMEZCUnl4RFFVTXpReXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFT3p0WFFVVkhPMUZCUTBnc1dVRkJXU3hGUVVGRkxFTkJRVWtzUjBGQmNVSXNSVUZCUlN4RlFVRkZPMWxCUTNwRExFOUJRVThzYlVKQlFXMUNMRU5CUTNoQ0xEUkNRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmxCUVZrc1JVRkJSU3hIUVVGSExFTkJRM1JETEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRN08xZEJSVWM3VVVGRFNDeHBRa0ZCYVVJc1JVRkJSU3hEUVVGSkxFZEJRWEZDTEVWQlFVVXNSVUZCUlR0WlFVTTVReXhQUVVGUExHMUNRVUZ0UWl4RFFVTjRRaXcwUWtGQlZTeERRVUZETEZGQlFWRXNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeEhRVUZITEVOQlF6TkRMRU5CUVVNN1VVRkRTaXhEUVVGRE8xRkJSVVE3TzFkQlJVYzdVVUZEU0N4TlFVRk5MRVZCUVVVc1EwRkJTU3hKUVVGMVFpeEZRVUZGTEVWQlFVVTdXVUZEY2tNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeFBRVUZQTEVsQlFVa3NTMEZCU3l4UlFVRlJMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0blFrRkROVVFzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4elJVRkJjMFVzUTBGQlF5eERRVUZETzJGQlEzcEdPMWxCUlVRc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJSWEpETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhQUVVGUExFdEJRVXNzVVVGQlVTeEZRVUZGTzJkQ1FVTXpReXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVU5pTEhGRFFVRnhReXhEUVVOMFF5eERRVUZETzJGQlEwZzdXVUZEUkN4UFFVRlBMRWxCUVVrc0swSkJRWEZDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU40UkN4RFFVRkRPMHRCUTBZN1EwRkRSaXhEUVVGRE8wRkJSVVlzVjBGQlZ6dEJRVVZZTEZOQlFWTXNhMEpCUVd0Q0xFTkJRVWtzU1VGQldTeEZRVUZGTEVkQlFYRkNPMGxCUTJoRkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzWkRMRTlCUVU4c1NVRkJTU3d3UWtGQlowSXNRMEZEZWtJc1NVRkJTU3hGUVVOS0xFOUJRVThzU1VGQlNTd3dRa0ZCYTBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGRGJrTXNTVUZCU1N4RFFVTk1MRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJSVVFzVTBGQlV5eHRRa0ZCYlVJc1EwRkJTU3hKUVVGWkxFVkJRVVVzUjBGQmNVSTdTVUZEYWtVc1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGRrTXNUMEZCVHl4SlFVRkpMQ3RDUVVGeFFpeERRVU01UWl4SlFVRkpMRVZCUTBvc1QwRkJUeXhKUVVGSkxEQkNRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVOdVF5eEpRVUZKTEVOQlEwd3NRMEZCUXp0QlFVTktMRU5CUVVNN1FVRkZSQ3hUUVVGVExGTkJRVk1zUTBGQlNTeEhRVUZ4UWp0SlFVTjZReXhKUVVGSkxFZEJRVWNzUlVGQlJUdFJRVU5RTEVsQlFVa3NUMEZCVHl4SFFVRkhMRXRCUVVzc1VVRkJVU3hGUVVGRk8xbEJRek5DTEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOa08yRkJRVTBzU1VGQlNTeFBRVUZQTEVkQlFVY3NTMEZCU3l4UlFVRlJMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZPMWxCUTNwRUxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1IwRkJSeXhEUVVGRE8xbEJSVGxDTEVsQlFVa3NUMEZCVHl4SlFVRkpMRTlCUVU4c1QwRkJUeXhMUVVGTExGRkJRVkVzUlVGQlJUdG5Ra0ZETVVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5dzRRa0ZCT0VJc1EwRkJReXhEUVVGRE8yRkJRMnBFTzFsQlEwUXNUMEZCVHl4RFFVRkRMRTlCUVU4c1NVRkJTU3hUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEY2tNN1MwRkRSanRKUVVORUxFOUJRVThzUlVGQlJTeERRVUZETzBGQlExb3NRMEZCUXlKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRNZXNzYWdlRnJvbUNvZGUgPSBleHBvcnRzLnNlcmlhbGl6ZUVycm9yID0gZXhwb3J0cy5FdGhlcmV1bVByb3ZpZGVyRXJyb3IgPSBleHBvcnRzLkV0aGVyZXVtUnBjRXJyb3IgPSBleHBvcnRzLmV0aEVycm9ycyA9IGV4cG9ydHMuZXJyb3JDb2RlcyA9IHZvaWQgMDtcbmNvbnN0IGNsYXNzZXNfMSA9IHJlcXVpcmUoXCIuL2NsYXNzZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFdGhlcmV1bVJwY0Vycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjbGFzc2VzXzEuRXRoZXJldW1ScGNFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV0aGVyZXVtUHJvdmlkZXJFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xhc3Nlc18xLkV0aGVyZXVtUHJvdmlkZXJFcnJvcjsgfSB9KTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcmlhbGl6ZUVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLnNlcmlhbGl6ZUVycm9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0TWVzc2FnZUZyb21Db2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLmdldE1lc3NhZ2VGcm9tQ29kZTsgfSB9KTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXRoRXJyb3JzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvcnNfMS5ldGhFcnJvcnM7IH0gfSk7XG5jb25zdCBlcnJvcl9jb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLWNvbnN0YW50c1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVycm9yQ29kZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yX2NvbnN0YW50c18xLmVycm9yQ29kZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPMEZCUVVFc2RVTkJRVzlGTzBGQlZXeEZMR2xIUVZaUExEQkNRVUZuUWl4UFFWVlFPMEZCUTJoQ0xITkhRVmg1UWl3clFrRkJjVUlzVDBGWGVrSTdRVUZXZGtJc2JVTkJSV2xDTzBGQlUyWXNLMFpCVmtFc2MwSkJRV01zVDBGVlFUdEJRVU5rTEcxSFFWaG5RaXd3UWtGQmEwSXNUMEZYYUVJN1FVRlVjRUlzY1VOQlFYRkRPMEZCUzI1RExEQkdRVXhQTEd0Q1FVRlRMRTlCUzFBN1FVRktXQ3gxUkVGQkswTTdRVUZITjBNc01rWkJTRThzTkVKQlFWVXNUMEZIVUNKOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXJpYWxpemVFcnJvciA9IGV4cG9ydHMuaXNWYWxpZENvZGUgPSBleHBvcnRzLmdldE1lc3NhZ2VGcm9tQ29kZSA9IGV4cG9ydHMuSlNPTl9SUENfU0VSVkVSX0VSUk9SX01FU1NBR0UgPSB2b2lkIDA7XG5jb25zdCBlcnJvcl9jb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2Vycm9yLWNvbnN0YW50c1wiKTtcbmNvbnN0IGNsYXNzZXNfMSA9IHJlcXVpcmUoXCIuL2NsYXNzZXNcIik7XG5jb25zdCBGQUxMQkFDS19FUlJPUl9DT0RFID0gZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JDb2Rlcy5ycGMuaW50ZXJuYWw7XG5jb25zdCBGQUxMQkFDS19NRVNTQUdFID0gJ1Vuc3BlY2lmaWVkIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgYSBidWcsIHBsZWFzZSByZXBvcnQgaXQuJztcbmNvbnN0IEZBTExCQUNLX0VSUk9SID0ge1xuICAgIGNvZGU6IEZBTExCQUNLX0VSUk9SX0NPREUsXG4gICAgbWVzc2FnZTogZ2V0TWVzc2FnZUZyb21Db2RlKEZBTExCQUNLX0VSUk9SX0NPREUpLFxufTtcbmV4cG9ydHMuSlNPTl9SUENfU0VSVkVSX0VSUk9SX01FU1NBR0UgPSAnVW5zcGVjaWZpZWQgc2VydmVyIGVycm9yLic7XG4vKipcbiAqIEdldHMgdGhlIG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gY29kZSwgb3IgYSBmYWxsYmFjayBtZXNzYWdlIGlmIHRoZSBjb2RlIGhhc1xuICogbm8gY29ycmVzcG9uZGluZyBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlRnJvbUNvZGUoY29kZSwgZmFsbGJhY2tNZXNzYWdlID0gRkFMTEJBQ0tfTUVTU0FHRSkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgIGNvbnN0IGNvZGVTdHJpbmcgPSBjb2RlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChoYXNLZXkoZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JWYWx1ZXMsIGNvZGVTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JfY29uc3RhbnRzXzEuZXJyb3JWYWx1ZXNbY29kZVN0cmluZ10ubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkpTT05fUlBDX1NFUlZFUl9FUlJPUl9NRVNTQUdFO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxsYmFja01lc3NhZ2U7XG59XG5leHBvcnRzLmdldE1lc3NhZ2VGcm9tQ29kZSA9IGdldE1lc3NhZ2VGcm9tQ29kZTtcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBjb2RlIGlzIHZhbGlkLlxuICogQSBjb2RlIGlzIG9ubHkgdmFsaWQgaWYgaXQgaGFzIGEgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvZGUoY29kZSkge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvZGVTdHJpbmcgPSBjb2RlLnRvU3RyaW5nKCk7XG4gICAgaWYgKGVycm9yX2NvbnN0YW50c18xLmVycm9yVmFsdWVzW2NvZGVTdHJpbmddKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuaXNWYWxpZENvZGUgPSBpc1ZhbGlkQ29kZTtcbi8qKlxuICogU2VyaWFsaXplcyB0aGUgZ2l2ZW4gZXJyb3IgdG8gYW4gRXRoZXJldW0gSlNPTiBSUEMtY29tcGF0aWJsZSBlcnJvciBvYmplY3QuXG4gKiBNZXJlbHkgY29waWVzIHRoZSBnaXZlbiBlcnJvcidzIHZhbHVlcyBpZiBpdCBpcyBhbHJlYWR5IGNvbXBhdGlibGUuXG4gKiBJZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgbm90IGZ1bGx5IGNvbXBhdGlibGUsIGl0IHdpbGwgYmUgcHJlc2VydmVkIG9uIHRoZVxuICogcmV0dXJuZWQgb2JqZWN0J3MgZGF0YS5vcmlnaW5hbEVycm9yIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFcnJvcihlcnJvciwgeyBmYWxsYmFja0Vycm9yID0gRkFMTEJBQ0tfRVJST1IsIHNob3VsZEluY2x1ZGVTdGFjayA9IGZhbHNlLCB9ID0ge30pIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghZmFsbGJhY2tFcnJvciB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihmYWxsYmFja0Vycm9yLmNvZGUpIHx8XG4gICAgICAgIHR5cGVvZiBmYWxsYmFja0Vycm9yLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGZhbGxiYWNrIGVycm9yIHdpdGggaW50ZWdlciBudW1iZXIgY29kZSBhbmQgc3RyaW5nIG1lc3NhZ2UuJyk7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGNsYXNzZXNfMS5FdGhlcmV1bVJwY0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5zZXJpYWxpemUoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICAgIGlmIChlcnJvciAmJlxuICAgICAgICB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGVycm9yKSAmJlxuICAgICAgICBoYXNLZXkoZXJyb3IsICdjb2RlJykgJiZcbiAgICAgICAgaXNWYWxpZENvZGUoZXJyb3IuY29kZSkpIHtcbiAgICAgICAgY29uc3QgX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IF9lcnJvci5jb2RlO1xuICAgICAgICBpZiAoX2Vycm9yLm1lc3NhZ2UgJiYgdHlwZW9mIF9lcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gX2Vycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoaGFzS2V5KF9lcnJvciwgJ2RhdGEnKSkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQuZGF0YSA9IF9lcnJvci5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gZ2V0TWVzc2FnZUZyb21Db2RlKHNlcmlhbGl6ZWQuY29kZSk7XG4gICAgICAgICAgICBzZXJpYWxpemVkLmRhdGEgPSB7IG9yaWdpbmFsRXJyb3I6IGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IGZhbGxiYWNrRXJyb3IuY29kZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IChfYSA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZTtcbiAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gKG1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG1lc3NhZ2VcbiAgICAgICAgICAgIDogZmFsbGJhY2tFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgc2VyaWFsaXplZC5kYXRhID0geyBvcmlnaW5hbEVycm9yOiBhc3NpZ25PcmlnaW5hbEVycm9yKGVycm9yKSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IChfYiA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RhY2s7XG4gICAgaWYgKHNob3VsZEluY2x1ZGVTdGFjayAmJiBlcnJvciAmJiBzdGFjayAmJiB0eXBlb2Ygc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuc3RhY2sgPSBzdGFjaztcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59XG5leHBvcnRzLnNlcmlhbGl6ZUVycm9yID0gc2VyaWFsaXplRXJyb3I7XG4vLyBJbnRlcm5hbFxuZnVuY3Rpb24gaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IC0zMjA5OSAmJiBjb2RlIDw9IC0zMjAwMDtcbn1cbmZ1bmN0aW9uIGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZkWFJwYkhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPMEZCUVVFc2RVUkJRVFJFTzBGQlF6VkVMSFZEUVVGNVJUdEJRVVY2UlN4TlFVRk5MRzFDUVVGdFFpeEhRVUZITERSQ1FVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF6dEJRVU53UkN4TlFVRk5MR2RDUVVGblFpeEhRVUZITERaRVFVRTJSQ3hEUVVGRE8wRkJRM1pHTEUxQlFVMHNZMEZCWXl4SFFVRXJRanRKUVVOcVJDeEpRVUZKTEVWQlFVVXNiVUpCUVcxQ08wbEJRM3BDTEU5QlFVOHNSVUZCUlN4clFrRkJhMElzUTBGQlF5eHRRa0ZCYlVJc1EwRkJRenREUVVOcVJDeERRVUZETzBGQlJWY3NVVUZCUVN3MlFrRkJOa0lzUjBGQlJ5d3lRa0ZCTWtJc1EwRkJRenRCUVVsNlJUczdPMGRCUjBjN1FVRkRTQ3hUUVVGblFpeHJRa0ZCYTBJc1EwRkRhRU1zU1VGQldTeEZRVU5hTEd0Q1FVRXdRaXhuUWtGQlowSTdTVUZGTVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMUZCUXpGQ0xFMUJRVTBzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRSUVVWdVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl3MlFrRkJWeXhGUVVGRkxGVkJRVlVzUTBGQlF5eEZRVUZGTzFsQlEyNURMRTlCUVU4c05rSkJRVmNzUTBGQlF5eFZRVUV5UWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRE8xTkJRM3BFTzFGQlEwUXNTVUZCU1N4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0WlFVTTVRaXhQUVVGUExIRkRRVUUyUWl4RFFVRkRPMU5CUTNSRE8wdEJRMFk3U1VGRFJDeFBRVUZQTEdWQlFXVXNRMEZCUXp0QlFVTjZRaXhEUVVGRE8wRkJaa1FzWjBSQlpVTTdRVUZGUkRzN08wZEJSMGM3UVVGRFNDeFRRVUZuUWl4WFFVRlhMRU5CUVVNc1NVRkJXVHRKUVVOMFF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFJRVU16UWl4UFFVRlBMRXRCUVVzc1EwRkJRenRMUVVOa08wbEJSVVFzVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMjVETEVsQlFVa3NOa0pCUVZjc1EwRkJReXhWUVVFeVFpeERRVUZETEVWQlFVVTdVVUZETlVNc1QwRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlqdEpRVVZFTEVsQlFVa3NiMEpCUVc5Q0xFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlqdEpRVU5FTEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVdSRUxHdERRV05ETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4VFFVRm5RaXhqUVVGakxFTkJRelZDTEV0QlFXTXNSVUZEWkN4RlFVTkZMR0ZCUVdFc1IwRkJSeXhqUVVGakxFVkJRemxDTEd0Q1FVRnJRaXhIUVVGSExFdEJRVXNzUjBGRE0wSXNSMEZCUnl4RlFVRkZPenRKUVVkT0xFbEJRMFVzUTBGQlF5eGhRVUZoTzFGQlEyUXNRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEY2tNc1QwRkJUeXhoUVVGaExFTkJRVU1zVDBGQlR5eExRVUZMTEZGQlFWRXNSVUZEZWtNN1VVRkRRU3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVU5pTERCRlFVRXdSU3hEUVVNelJTeERRVUZETzB0QlEwZzdTVUZGUkN4SlFVRkpMRXRCUVVzc1dVRkJXU3d3UWtGQlowSXNSVUZCUlR0UlFVTnlReXhQUVVGUExFdEJRVXNzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0TFFVTXhRanRKUVVWRUxFMUJRVTBzVlVGQlZTeEhRVUYzUXl4RlFVRkZMRU5CUVVNN1NVRkZNMFFzU1VGRFJTeExRVUZMTzFGQlEwd3NUMEZCVHl4TFFVRkxMRXRCUVVzc1VVRkJVVHRSUVVONlFpeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM0pDTEUxQlFVMHNRMEZCUXl4TFFVRm5ReXhGUVVGRkxFMUJRVTBzUTBGQlF6dFJRVU5vUkN4WFFVRlhMRU5CUVVVc1MwRkJiME1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZEZGtRN1VVRkRRU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eExRVUUwUXl4RFFVRkRPMUZCUXpWRUxGVkJRVlVzUTBGQlF5eEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRSUVVVNVFpeEpRVUZKTEUxQlFVMHNRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhOUVVGTkxFTkJRVU1zVDBGQlR5eExRVUZMTEZGQlFWRXNSVUZCUlR0WlFVTjRSQ3hWUVVGVkxFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNN1dVRkZjRU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTFCUVUwc1EwRkJReXhGUVVGRk8yZENRVU14UWl4VlFVRlZMRU5CUVVNc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZETDBJN1UwRkRSanRoUVVGTk8xbEJRMHdzVlVGQlZTeERRVUZETEU5QlFVOHNSMEZCUnl4clFrRkJhMElzUTBGRGNFTXNWVUZCZVVNc1EwRkJReXhKUVVGSkxFTkJRMmhFTEVOQlFVTTdXVUZGUml4VlFVRlZMRU5CUVVNc1NVRkJTU3hIUVVGSExFVkJRVVVzWVVGQllTeEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTTdVMEZEYWtVN1MwRkRSanRUUVVGTk8xRkJRMHdzVlVGQlZTeERRVUZETEVsQlFVa3NSMEZCUnl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJSWEpETEUxQlFVMHNUMEZCVHl4VFFVRkpMRXRCUVdFc01FTkJRVVVzVDBGQlR5eERRVUZETzFGQlJYaERMRlZCUVZVc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGRGJrSXNUMEZCVHl4SlFVRkpMRTlCUVU4c1QwRkJUeXhMUVVGTExGRkJRVkU3V1VGRGNFTXNRMEZCUXl4RFFVRkRMRTlCUVU4N1dVRkRWQ3hEUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZETVVJc1EwRkJRenRSUVVOR0xGVkJRVlVzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4aFFVRmhMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJRenRMUVVOcVJUdEpRVVZFTEUxQlFVMHNTMEZCU3l4VFFVRkpMRXRCUVdFc01FTkJRVVVzUzBGQlN5eERRVUZETzBsQlJYQkRMRWxCUVVrc2EwSkJRV3RDTEVsQlFVa3NTMEZCU3l4SlFVRkpMRXRCUVVzc1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZEY2tVc1ZVRkJWU3hEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdTMEZETVVJN1NVRkRSQ3hQUVVGUExGVkJRWGRETEVOQlFVTTdRVUZEYkVRc1EwRkJRenRCUVd4RlJDeDNRMEZyUlVNN1FVRkZSQ3hYUVVGWE8wRkJSVmdzVTBGQlV5eHZRa0ZCYjBJc1EwRkJReXhKUVVGWk8wbEJRM2hETEU5QlFVOHNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0QlFVTXhReXhEUVVGRE8wRkJSVVFzVTBGQlV5eHRRa0ZCYlVJc1EwRkJReXhMUVVGak8wbEJRM3BETEVsQlFVa3NTMEZCU3l4SlFVRkpMRTlCUVU4c1MwRkJTeXhMUVVGTExGRkJRVkVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3VVVGREwwUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0TFFVTnFRenRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFZEJRVFJDTEVWQlFVVXNSMEZCVnp0SlFVTjJSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEZUVRc1EwRkJReUo5IiwibW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnlcbnN0cmluZ2lmeS5kZWZhdWx0ID0gc3RyaW5naWZ5XG5zdHJpbmdpZnkuc3RhYmxlID0gZGV0ZXJtaW5pc3RpY1N0cmluZ2lmeVxuc3RyaW5naWZ5LnN0YWJsZVN0cmluZ2lmeSA9IGRldGVybWluaXN0aWNTdHJpbmdpZnlcblxudmFyIExJTUlUX1JFUExBQ0VfTk9ERSA9ICdbLi4uXSdcbnZhciBDSVJDVUxBUl9SRVBMQUNFX05PREUgPSAnW0NpcmN1bGFyXSdcblxudmFyIGFyciA9IFtdXG52YXIgcmVwbGFjZXJTdGFjayA9IFtdXG5cbmZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zICgpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXB0aExpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICBlZGdlc0xpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICB9XG59XG5cbi8vIFJlZ3VsYXIgc3RyaW5naWZ5XG5mdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgcmVwbGFjZXIsIHNwYWNlciwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKClcbiAgfVxuXG4gIGRlY2lyYyhvYmosICcnLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKVxuICB2YXIgcmVzXG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2VyU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZUdldHRlclZhbHVlcyhyZXBsYWNlciksIHNwYWNlcilcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJ1t1bmFibGUgdG8gc2VyaWFsaXplLCBjaXJjdWxhciByZWZlcmVuY2UgaXMgdG9vIGNvbXBsZXggdG8gYW5hbHl6ZV0nKVxuICB9IGZpbmFsbHkge1xuICAgIHdoaWxlIChhcnIubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgcGFydCA9IGFyci5wb3AoKVxuICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydFswXVtwYXJ0WzFdXSA9IHBhcnRbMl1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzZXRSZXBsYWNlIChyZXBsYWNlLCB2YWwsIGssIHBhcmVudCkge1xuICB2YXIgcHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGspXG4gIGlmIChwcm9wZXJ0eURlc2NyaXB0b3IuZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwgaywgeyB2YWx1ZTogcmVwbGFjZSB9KVxuICAgICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsLCBwcm9wZXJ0eURlc2NyaXB0b3JdKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXBsYWNlclN0YWNrLnB1c2goW3ZhbCwgaywgcmVwbGFjZV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcmVudFtrXSA9IHJlcGxhY2VcbiAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY2lyYyAodmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gIGRlcHRoICs9IDFcbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWwpIHtcbiAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZGVwdGggPiBvcHRpb25zLmRlcHRoTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmVkZ2VzTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0XG4gICAgKSB7XG4gICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbClcbiAgICAvLyBPcHRpbWl6ZSBmb3IgQXJyYXlzLiBCaWcgYXJyYXlzIGNvdWxkIGtpbGwgdGhlIHBlcmZvcm1hbmNlIG90aGVyd2lzZSFcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlY2lyYyh2YWxbaV0sIGksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbClcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICAgIGRlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhY2sucG9wKClcbiAgfVxufVxuXG4vLyBTdGFibGUtc3RyaW5naWZ5XG5mdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24gKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljU3RyaW5naWZ5IChvYmosIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucygpXG4gIH1cblxuICB2YXIgdG1wID0gZGV0ZXJtaW5pc3RpY0RlY2lyYyhvYmosICcnLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKSB8fCBvYmpcbiAgdmFyIHJlc1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkodG1wLCByZXBsYWNlciwgc3BhY2VyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBKU09OLnN0cmluZ2lmeSh0bXAsIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdbdW5hYmxlIHRvIHNlcmlhbGl6ZSwgY2lyY3VsYXIgcmVmZXJlbmNlIGlzIHRvbyBjb21wbGV4IHRvIGFuYWx5emVdJylcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSByZXN0b3JlIHRoZSBvYmplY3QgYXMgaXQgd2FzLlxuICAgIHdoaWxlIChhcnIubGVuZ3RoICE9PSAwKSB7XG4gICAgICB2YXIgcGFydCA9IGFyci5wb3AoKVxuICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydFswXVtwYXJ0WzFdXSA9IHBhcnRbMl1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljRGVjaXJjICh2YWwsIGssIGVkZ2VJbmRleCwgc3RhY2ssIHBhcmVudCwgZGVwdGgsIG9wdGlvbnMpIHtcbiAgZGVwdGggKz0gMVxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc3RhY2tbaV0gPT09IHZhbCkge1xuICAgICAgICBzZXRSZXBsYWNlKENJUkNVTEFSX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRpb25zLmRlcHRoTGltaXQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBkZXB0aCA+IG9wdGlvbnMuZGVwdGhMaW1pdFxuICAgICkge1xuICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuZWRnZXNMaW1pdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGVkZ2VJbmRleCArIDEgPiBvcHRpb25zLmVkZ2VzTGltaXRcbiAgICApIHtcbiAgICAgIHNldFJlcGxhY2UoTElNSVRfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsKVxuICAgIC8vIE9wdGltaXplIGZvciBBcnJheXMuIEJpZyBhcnJheXMgY291bGQga2lsbCB0aGUgcGVyZm9ybWFuY2Ugb3RoZXJ3aXNlIVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxbaV0sIGksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2JqZWN0IGluIHRoZSByZXF1aXJlZCB3YXlcbiAgICAgIHZhciB0bXAgPSB7fVxuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpLnNvcnQoY29tcGFyZUZ1bmN0aW9uKVxuICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV1cbiAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucylcbiAgICAgICAgdG1wW2tleV0gPSB2YWxba2V5XVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbF0pXG4gICAgICAgIHBhcmVudFtrXSA9IHRtcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRtcFxuICAgICAgfVxuICAgIH1cbiAgICBzdGFjay5wb3AoKVxuICB9XG59XG5cbi8vIHdyYXBzIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZXMgd2UgY291bGRuJ3QgcmVwbGFjZVxuLy8gYW5kIG1hcmsgdGhlbSBhcyByZXBsYWNlZCB2YWx1ZVxuZnVuY3Rpb24gcmVwbGFjZUdldHRlclZhbHVlcyAocmVwbGFjZXIpIHtcbiAgcmVwbGFjZXIgPVxuICAgIHR5cGVvZiByZXBsYWNlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gcmVwbGFjZXJcbiAgICAgIDogZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgcmV0dXJuIHZcbiAgICAgIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwbGFjZXJTdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IHJlcGxhY2VyU3RhY2tbaV1cbiAgICAgICAgaWYgKHBhcnRbMV0gPT09IGtleSAmJiBwYXJ0WzBdID09PSB2YWwpIHtcbiAgICAgICAgICB2YWwgPSBwYXJ0WzJdXG4gICAgICAgICAgcmVwbGFjZXJTdGFjay5zcGxpY2UoaSwgMSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsKVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICdsb2Rhc2gvaXNQbGFpbk9iamVjdCc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCB7IGFwcERlYnVnTG9nZ2VyLCBjb25zb2xlRXJyb3JJbkRldiB9IGZyb20gJy4vbG9nZ2Vycyc7XG5pbXBvcnQgeyBJSnNCcmlkZ2VNZXNzYWdlVHlwZXMsIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci10eXBlcyc7XG5pbXBvcnQgeyB3ZWIzRXJyb3JzIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1lcnJvcnMnO1xuaW1wb3J0IHZlcnNpb25JbmZvIGZyb20gJy4vdmVyc2lvbkluZm8nO1xuZnVuY3Rpb24gaXNMZWdhY3lFeHRNZXNzYWdlKHBheWxvYWQpIHtcbiAgICBjb25zdCBwYXlsb2FkT2JqID0gcGF5bG9hZDtcbiAgICByZXR1cm4gKEJvb2xlYW4ocGF5bG9hZE9iai5uYW1lKSAmJlxuICAgICAgICBbJ29uZWtleS1wcm92aWRlci1ldGgnLCAnb25la2V5LXByb3ZpZGVyLWNmeCcsICdwdWJsaWNDb25maWcnXS5pbmNsdWRlcyhwYXlsb2FkT2JqLm5hbWUpKTtcbn1cbmNvbnN0IEJSSURHRV9FVkVOVFMgPSB7XG4gICAgbWVzc2FnZTogJ21lc3NhZ2UnLFxuICAgIGVycm9yOiAnZXJyb3InLFxufTtcbmNsYXNzIEpzQnJpZGdlQmFzZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc0V4dFVpID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNJbmplY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbmRBc1N0cmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2xvYmFsT25NZXNzYWdlRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzSHViID0ge1xuICAgICAgICAvLyBuYW1lOiBbXVxuICAgICAgICB9O1xuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0eXBlPVJFUVVFU1QgbWVzc2FnZXMsIHR5cGU9UkVTUE9OU0UgbWVzc2FnZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgICAgdGhpcy5nbG9iYWxPbk1lc3NhZ2UgPSAobWVzc2FnZSkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcucmVjZWl2ZUhhbmRsZXIgJiYgdGhpcy5nbG9iYWxPbk1lc3NhZ2VFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0geWllbGQgdGhpcy5jb25maWcucmVjZWl2ZUhhbmRsZXIobWVzc2FnZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogbWVzc2FnZS5zY29wZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVJZDogbWVzc2FnZS5yZW1vdGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaWQgJiYgbWVzc2FnZS50eXBlID09PSBJSnNCcmlkZ2VNZXNzYWdlVHlwZXMuUkVRVUVTVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogbWVzc2FnZS5zY29wZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUlkOiBtZXNzYWdlLnJlbW90ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoQlJJREdFX0VWRU5UUy5lcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbkluZm8udmVyc2lvbjtcbiAgICAgICAgdGhpcy5yZW1vdGVJbmZvID0ge1xuICAgICAgICAgICAgb3JpZ2luOiAnJyxcbiAgICAgICAgICAgIHJlbW90ZUlkOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IGFwcERlYnVnTG9nZ2VyO1xuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICAgICAgICB0aGlzLmNhbGxiYWNrSWQgPSAxO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5jYWxsYmFja3NFeHBpcmVUaW1lb3V0ID0gKF9hID0gY29uZmlnLnRpbWVvdXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDYwICogMTAwMDtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IGNvbmZpZy5kZWJ1Z0xvZ2dlciB8fCBhcHBEZWJ1Z0xvZ2dlcjtcbiAgICAgICAgdGhpcy5zZW5kQXNTdHJpbmcgPSAoX2IgPSBjb25maWcuc2VuZEFzU3RyaW5nKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0aGlzLnNlbmRBc1N0cmluZztcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlY2VpdmVIYW5kbGVyKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgICAgICAgIHRoaXMub24oQlJJREdFX0VWRU5UUy5tZXNzYWdlLCB0aGlzLmdsb2JhbE9uTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbihCUklER0VfRVZFTlRTLmVycm9yLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnNvbGVFcnJvckluRGV2KCdKc0JyaWRnZSBFUlJPUjogJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiAoX2EgPSBlcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvZGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVqZWN0RXhwaXJlZENhbGxiYWNrcygpO1xuICAgIH1cbiAgICBhdHRhY2hQcm92aWRlckluc3RhbmNlKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHByb3ZpZGVyLnByb3ZpZGVyTmFtZTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzSHViW25hbWVdID0gKF9hID0gdGhpcy5wcm92aWRlcnNIdWJbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnNIdWJbbmFtZV0ucHVzaChwcm92aWRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlQ2FsbGJhY2tJZCgpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja0lkICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxiYWNrSWQ7XG4gICAgfVxuICAgIGNyZWF0ZVBheWxvYWQocGF5bG9hZCwgeyByZXNvbHZlLCByZWplY3QsIH0pIHtcbiAgICAgICAgY29uc3QgeyBpZCwgdHlwZSB9ID0gcGF5bG9hZDtcbiAgICAgICAgaWYgKHJlc29sdmUgJiYgcmVqZWN0ICYmIGlkICYmIHR5cGUgPT09IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVFVRVNUKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3NbaWRdKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjdXN0b20gZXJyb3JcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEpzQnJpZGdlIEVSUk9SOiBjYWxsYmFjayBleGlzdHMsIGlkPSR7aWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tpZF0gPSB7IGlkLCByZXNvbHZlLCByZWplY3QsIGNyZWF0ZWQ6IERhdGUubm93KCkgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb252ZXJ0IHRvIHBsYWluIGVycm9yIG9iamVjdCB3aGljaCBjYW4gYmUgc3RyaW5naWZ5XG4gICAgICAgIGlmIChwYXlsb2FkLmVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckluZm8gPSBwYXlsb2FkLmVycm9yO1xuICAgICAgICAgICAgcGF5bG9hZC5lcnJvciA9IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvckluZm8uY29kZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvckluZm8ubWVzc2FnZSxcbiAgICAgICAgICAgICAgICBkYXRhOiBlcnJvckluZm8uZGF0YSxcbiAgICAgICAgICAgICAgICBzdGFjazogZXJyb3JJbmZvLnN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGUgcmVzb2x2ZSwgcmVqZWN0IGZ1bmN0aW9uIHdoaWNoIGNhbiBub3QgYmUgc2VuZCBhcyBzdHJpbmdcbiAgICAgICAgcGF5bG9hZCA9PT0gbnVsbCB8fCBwYXlsb2FkID09PSB2b2lkIDAgPyB0cnVlIDogZGVsZXRlIHBheWxvYWQucmVzb2x2ZTtcbiAgICAgICAgcGF5bG9hZCA9PT0gbnVsbCB8fCBwYXlsb2FkID09PSB2b2lkIDAgPyB0cnVlIDogZGVsZXRlIHBheWxvYWQucmVqZWN0O1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgc2VuZCh7IHR5cGUsIGRhdGEsIGVycm9yLCBpZCwgcmVtb3RlSWQsIHN5bmMgPSBmYWxzZSwgc2NvcGUgfSkge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIC8vIFRPRE8gY2hlY2sgcmVzb2x2ZSB3aGVuIGNhbGxpbmcgd2l0aG91dCBhd2FpdFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICAgICAgbGV0IF9pZCA9IGlkO1xuICAgICAgICAgICAgLy8gc2VuZFN5bmMgd2l0aG91dCBQcm9taXNlIGNhY2hlXG4gICAgICAgICAgICBpZiAoIXN5bmMgJiYgdHlwZSA9PT0gSUpzQnJpZGdlTWVzc2FnZVR5cGVzLlJFUVVFU1QpIHtcbiAgICAgICAgICAgICAgICBfaWQgPSB0aGlzLmNyZWF0ZUNhbGxiYWNrSWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY3JlYXRlUGF5bG9hZCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBfaWQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46ICgoX2EgPSBnbG9iYWwgPT09IG51bGwgfHwgZ2xvYmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWwubG9jYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcmlnaW4pIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgfSwgeyByZXNvbHZlLCByZWplY3QgfSk7XG4gICAgICAgICAgICAgICAgbGV0IHBheWxvYWRUb1NlbmQgPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbmRBc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkVG9TZW5kID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIuanNCcmlkZ2UoJ3NlbmQnLCBwYXlsb2FkLCAnXFxyXFxuIC0tLS0tLT4gJywgcGF5bG9hZC5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRQYXlsb2FkKHBheWxvYWRUb1NlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdENhbGxiYWNrKF9pZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMuZXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICBleGVjdXRvcigpO1xuICAgICAgICAgICAgdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGV4ZWN1dG9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWplY3RDYWxsYmFjayhpZCwgZXJyb3IpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2FsbGJhY2soe1xuICAgICAgICAgICAgbWV0aG9kOiAncmVqZWN0JyxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNvbHZlQ2FsbGJhY2soaWQsIGRhdGEpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2FsbGJhY2soe1xuICAgICAgICAgICAgbWV0aG9kOiAncmVzb2x2ZScsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm9jZXNzQ2FsbGJhY2soeyBtZXRob2QsIGlkLCBkYXRhLCBlcnJvciwgfSkge1xuICAgICAgICBjb25zdCBjYWxsYmFja0luZm8gPSB0aGlzLmNhbGxiYWNrc1tpZF07XG4gICAgICAgIGlmIChjYWxsYmFja0luZm8pIHtcbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdyZWplY3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrSW5mby5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmZvLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChCUklER0VfRVZFTlRTLmVycm9yLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSAncmVzb2x2ZScpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tJbmZvLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmZvLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGVhckNhbGxiYWNrQ2FjaGUoaWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlamVjdEV4cGlyZWRDYWxsYmFja3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsYmFja3NFeHBpcmVUaW1lb3V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mb3ItaW4tYXJyYXlcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tJbmZvID0gdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrSW5mbyAmJiBjYWxsYmFja0luZm8uY3JlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmIChub3cgLSBjYWxsYmFja0luZm8uY3JlYXRlZCA+IHRoaXMuY2FsbGJhY2tzRXhwaXJlVGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHdlYjNFcnJvcnMucHJvdmlkZXIucmVxdWVzdFRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3RDYWxsYmFjayhpZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0RXhwaXJlZENhbGxiYWNrcygpO1xuICAgICAgICB9LCB0aGlzLmNhbGxiYWNrc0V4cGlyZVRpbWVvdXQpO1xuICAgIH1cbiAgICBjbGVhckNhbGxiYWNrQ2FjaGUoaWQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICB9XG4gICAgcmVjZWl2ZShwYXlsb2FkUmVjZWl2ZWQgPSAnJywgc2VuZGVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QocGF5bG9hZFJlY2VpdmVkKSkge1xuICAgICAgICAgICAgcGF5bG9hZCA9IHBheWxvYWRSZWNlaXZlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcocGF5bG9hZFJlY2VpdmVkKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShwYXlsb2FkUmVjZWl2ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMuZXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pzQnJpZGdlIEVSUk9SOiBKU09OLnBhcnNlIHBheWxvYWRSZWNlaXZlZCBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyAhSU1QT1JUQU5UOiBmb3JjZSBvdmVyd3JpdGUgb3JpZ2luIGFuZCBpbnRlcm5hbCBmaWVsZFxuICAgICAgICAvLyAgICBETyBOT1QgdHJ1c3QgZGFwcCBwYXJhbXNcbiAgICAgICAgcGF5bG9hZC5vcmlnaW4gPSBzZW5kZXIgPT09IG51bGwgfHwgc2VuZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kZXIub3JpZ2luO1xuICAgICAgICBwYXlsb2FkLmludGVybmFsID0gQm9vbGVhbihzZW5kZXIgPT09IG51bGwgfHwgc2VuZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZW5kZXIuaW50ZXJuYWwpO1xuICAgICAgICAvLyBpZ25vcmUgbGVnYWN5IEV4dCBwdWJsaWNDb25maWcgbWVzc2FnZVxuICAgICAgICBpZiAoKHNlbmRlciA9PT0gbnVsbCB8fCBzZW5kZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbmRlci5pbnRlcm5hbCkgJiYgdGhpcy5pc0V4dFVpICYmIGlzTGVnYWN5RXh0TWVzc2FnZShwYXlsb2FkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZC5vcmlnaW4gJiYgIXRoaXMuaXNJbmplY3RlZCkge1xuICAgICAgICAgICAgY29uc29sZUVycm9ySW5EZXYoKF9hID0gdGhpcyA9PT0gbnVsbCB8fCB0aGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aGlzLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSwgJ1twYXlsb2FkLm9yaWdpbl0gaXMgbWlzc2luZy4nLCB0aGlzKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSnNCcmlkZ2UgRVJST1I6IHJlY2VpdmUgbWVzc2FnZSBbcGF5bG9hZC5vcmlnaW5dIGlzIHJlcXVpcmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZC5pbnRlcm5hbCAmJiAhcGF5bG9hZC5zY29wZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKc0JyaWRnZSBFUlJPUjogcmVjZWl2ZSBtZXNzYWdlIFtwYXlsb2FkLnNjb3BlXSBpcyByZXF1aXJlZCBmb3Igbm9uLWludGVybmFsIG1ldGhvZCBjYWxsLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIuanNCcmlkZ2UoJ3JlY2VpdmUnLCBwYXlsb2FkLCB7IHNlbmRlciB9LCAnXFxyXFxuIC0tLS0tPiAnLCAoX2IgPSBwYXlsb2FkLmRhdGEpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZXN1bHQsICdcXHJcXG4gLS0tLS0+ICcsIHBheWxvYWQuZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgaWQsIGRhdGEsIGVycm9yLCBvcmlnaW4sIHJlbW90ZUlkIH0gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLnJlbW90ZUluZm8gPSB7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT09IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVNQT05TRSkge1xuICAgICAgICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pzQnJpZGdlIEVSUk9SOiBwYXJhbWV0ZXIgW2lkXSBpcyByZXF1aXJlZCBpbiBKc0JyaWRnZS5yZWNlaXZlKCkgd2hlbiBSRVFVRVNUIHR5cGUgbWVzc2FnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tJbmZvID0gdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrSW5mbykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3RDYWxsYmFjayhpZCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ2FsbGJhY2soaWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcjApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMuZXJyb3IsIGVycm9yMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVFVRVNUKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudE1lc3NhZ2VQYXlsb2FkID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXlsb2FkKSwgeyBjcmVhdGVkOiBEYXRlLm5vdygpIH0pO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9ldmVudHMuaHRtbCNjYXB0dXJlLXJlamVjdGlvbnMtb2YtcHJvbWlzZXNcbiAgICAgICAgICAgIC8vIG9ubHkgdHlwZT1SRVFVRVNUIG1lc3NhZ2Ugd2lsbCBiZSBoYW5kbGVkIGJ5IGdsb2JhbE9uTWVzc2FnZVxuICAgICAgICAgICAgdGhpcy5lbWl0KEJSSURHRV9FVkVOVFMubWVzc2FnZSwgZXZlbnRNZXNzYWdlUGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEpzQnJpZGdlIEVSUk9SOiBwYXlsb2FkIHR5cGUgbm90IHN1cHBvcnQgeWV0ICh0eXBlPSR7dHlwZSB8fCAndW5kZWZpbmVkJ30pYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdFN5bmMoeyBkYXRhLCBzY29wZSwgcmVtb3RlSWQsIH0pIHtcbiAgICAgICAgdm9pZCB0aGlzLnNlbmQoe1xuICAgICAgICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHR5cGU6IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVFVRVNULFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcmVtb3RlSWQsXG4gICAgICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdChpbmZvKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgcmVtb3RlSWQsIHNjb3BlIH0gPSBpbmZvO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0pzQnJpZGdlIEVSUk9SOiBkYXRhIHJlcXVpcmVkLiBDYWxsIGxpa2UgYGJyaWRnZS5yZXF1ZXN0KHsgZGF0YTogey4uLn0gfSk7YCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmQoe1xuICAgICAgICAgICAgdHlwZTogSUpzQnJpZGdlTWVzc2FnZVR5cGVzLlJFUVVFU1QsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcmVtb3RlSWQsXG4gICAgICAgICAgICBzeW5jOiBmYWxzZSxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gc2VuZCByZXNwb25zZSBEQVRBIHRvIHJlbW90ZVxuICAgIHJlc3BvbnNlKHsgaWQsIGRhdGEsIHJlbW90ZUlkLCBzY29wZSwgfSkge1xuICAgICAgICB2b2lkIHRoaXMuc2VuZCh7XG4gICAgICAgICAgICB0eXBlOiBJSnNCcmlkZ2VNZXNzYWdlVHlwZXMuUkVTUE9OU0UsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgc3luYzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHNlbmQgcmVzcG9uc2UgRVJST1IgdG8gcmVtb3RlXG4gICAgcmVzcG9uc2VFcnJvcih7IGlkLCBlcnJvciwgc2NvcGUsIHJlbW90ZUlkLCB9KSB7XG4gICAgICAgIHZvaWQgdGhpcy5zZW5kKHtcbiAgICAgICAgICAgIHR5cGU6IElKc0JyaWRnZU1lc3NhZ2VUeXBlcy5SRVNQT05TRSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICByZW1vdGVJZCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgc3luYzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IHsgSnNCcmlkZ2VCYXNlLCBpc0xlZ2FjeUV4dE1lc3NhZ2UgfTtcbiIsImltcG9ydCB7IEpzQnJpZGdlQmFzZSB9IGZyb20gJy4vSnNCcmlkZ2VCYXNlJztcbmNsYXNzIEpzQnJpZGdlU2ltcGxlIGV4dGVuZHMgSnNCcmlkZ2VCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zZW5kQXNTdHJpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG4gICAgfVxuICAgIHNlbmRQYXlsb2FkKHBheWxvYWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKc0JyaWRnZVNpbXBsZSBFUlJPUjogcmVtb3RlIG5vdCBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdGUucmVjZWl2ZShwYXlsb2FkKTtcbiAgICB9XG4gICAgc2V0UmVtb3RlKHJlbW90ZSkge1xuICAgICAgICB0aGlzLnJlbW90ZSA9IHJlbW90ZTtcbiAgICB9XG59XG5leHBvcnQgeyBKc0JyaWRnZVNpbXBsZSB9O1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnbG9kYXNoL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHNpdGVNZXRhZGF0YSBmcm9tICcuL3NpdGVNZXRhZGF0YSc7XG5pbXBvcnQgeyBmYWtlTG9nZ2VyLCBmYWtlRGVidWdMb2dnZXIsIGNvbnNvbGVFcnJvckluRGV2IH0gZnJvbSAnLi9sb2dnZXJzJztcbmltcG9ydCB2ZXJzaW9uSW5mbyBmcm9tICcuL3ZlcnNpb25JbmZvJztcbmNvbnN0IE1FVEhPRFMgPSB7XG4gICAgd2FsbGV0X2dldENvbm5lY3RXYWxsZXRJbmZvOiAnd2FsbGV0X2dldENvbm5lY3RXYWxsZXRJbmZvJyxcbiAgICB3YWxsZXRfc2VuZFNpdGVNZXRhZGF0YTogJ3dhbGxldF9zZW5kU2l0ZU1ldGFkYXRhJyxcbn07XG5jbGFzcyBQcm92aWRlckJhc2UgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbkluZm8udmVyc2lvbjtcbiAgICAgICAgdGhpcy5pc09uZUtleSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgPSBmYWtlRGVidWdMb2dnZXI7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gZmFrZUxvZ2dlcjtcbiAgICAgICAgaWYgKCFjb25maWcuYnJpZGdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVyQmFzZSBpbml0IGVycm9yOiBicmlkZ2UgcmVxdWlyZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuYnJpZGdlID0gY29uZmlnLmJyaWRnZTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBjb25maWcubG9nZ2VyIHx8IGZha2VMb2dnZXI7XG4gICAgICAgIC8vIFRPRE8gaW5pdCB0aGlzLmRlYnVnTG9nZ2VyIGZpcnN0LCBhbmQgZW5hYmxlIGRlYnVnIGNvbmZpZyBhZnRlciBleHRlbnNpb24gY29ubmVjdFxuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyID0gKChfYSA9IHRoaXMuYnJpZGdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVidWdMb2dnZXIpIHx8IGZha2VEZWJ1Z0xvZ2dlcjtcbiAgICAgICAgKF9jID0gKF9iID0gdGhpcy5icmlkZ2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kZWJ1Z0xvZ2dlcikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLl9hdHRhY2hFeHRlcm5hbExvZ2dlcih0aGlzLmxvZ2dlcik7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXMuYnJpZGdlLmF0dGFjaFByb3ZpZGVySW5zdGFuY2UodGhpcyk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBpZiAoY29uZmlnLnNob3VsZFNlbmRNZXRhZGF0YSkge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnNlbmRTaXRlTWV0YWRhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25maWdEZWJ1Z0xvZ2dlcihjb25maWcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghY29uZmlnIHx8ICF0aGlzLmJyaWRnZS5kZWJ1Z0xvZ2dlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlYnVnTG9nZ2VyID0gdGhpcy5icmlkZ2UuZGVidWdMb2dnZXI7XG4gICAgICAgICAgICAoY29uZmlnLmVuYWJsZWRLZXlzIHx8IFtdKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZ2dlci5fY3JlYXRlRGVidWdJbnN0YW5jZShrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nZ2VyLl9kZWJ1Zy5lbmFibGUoY29uZmlnLmNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICB3aW5kb3cuJG9uZWtleSA9IHdpbmRvdy4kb25la2V5IHx8IHt9O1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgd2luZG93LiRvbmVrZXkuJGRlYnVnTG9nZ2VyID0gZGVidWdMb2dnZXI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlRXJyb3JJbkRldignY29uZmlnRGVidWdMb2dnZXIgRVJST1I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbm5lY3RXYWxsZXRJbmZvKHsgdGltZW91dCA9IDMwMDAgfSA9IHt9KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvcixAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICh5aWVsZCB0aGlzLmJyaWRnZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBNRVRIT0RTLndhbGxldF9nZXRDb25uZWN0V2FsbGV0SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3sgdGltZTogRGF0ZS5ub3coKSB9XSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHJvdmlkZXJTdGF0ZSA9IHJlc3VsdC5wcm92aWRlclN0YXRlIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmRlYnVnTG9nZ2VyQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RlYnVnTG9nZ2VyKHJlc3VsdC5kZWJ1Z0xvZ2dlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQud2FsbGV0SW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiRvbmVrZXkgPSB3aW5kb3cuJG9uZWtleSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy4kb25la2V5LiR3YWxsZXRJbmZvID0gcmVzdWx0LndhbGxldEluZm87XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gd2FsbGV0IG5vdCBpbnN0YWxsZWQsIHRpbWVvdXQgRVJST1JcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZUVycm9ySW5EZXYoJ2dldENvbm5lY3RXYWxsZXRJbmZvOiBFUlJPUicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGJyaWRnZVJlcXVlc3QoZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGxldCBoYXNDYWxsYmFjayA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgaGFzQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHZvaWQgMCA/IGRhdGEgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMucHJvdmlkZXJOYW1lLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlci5wcm92aWRlckJhc2UoJ2JyaWRnZVJlcXVlc3Q6JywgcGF5bG9hZCwgJ1xcclxcbiAtLS0tLT4gJywgcGF5bG9hZC5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNEYXRhID0geWllbGQgdGhpcy5icmlkZ2UucmVxdWVzdChwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNEYXRhID8gcmVzRGF0YS5yZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGhhc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIucHJvdmlkZXJCYXNlKCdicmlkZ2VSZXF1ZXN0IFJFVFVSTjonLCB7IHJlcTogcGF5bG9hZCwgcmVzOiByZXNEYXRhIH0sICdcXHJcXG4gLS0tLS0+ICcsIHBheWxvYWQuZGF0YSwgJ1xcclxcbiAtLS0tLT4gJywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICYmIGhhc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU2l0ZU1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB5aWVsZCBzaXRlTWV0YWRhdGEuZ2V0U2l0ZU1ldGFkYXRhKCk7XG4gICAgICAgICAgICByZXR1cm4geWllbGQgdGhpcy5icmlkZ2VSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IE1FVEhPRFMud2FsbGV0X3NlbmRTaXRlTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBtZXRhZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgeyBQcm92aWRlckJhc2UgfTtcbiIsImV4cG9ydCBjb25zdCBKU19CUklER0VfTUVTU0FHRV9JUENfQ0hBTk5FTCA9ICdvbmVrZXlASlNfQlJJREdFX01FU1NBR0VfSVBDX0NIQU5ORUwnO1xuZXhwb3J0IGNvbnN0IEpTX0JSSURHRV9NRVNTQUdFX0VYVF9DSEFOTkVMID0gJ29uZWtleUBKU19CUklER0VfTUVTU0FHRV9FWFRfQ0hBTk5FTCc7XG5leHBvcnQgY29uc3QgSlNfQlJJREdFX01FU1NBR0VfRVhUX1BJTkcgPSAnb25la2V5QEpTX0JSSURHRV9NRVNTQUdFX0VYVF9QSU5HJztcbmV4cG9ydCBjb25zdCBKU19CUklER0VfTUVTU0FHRV9ESVJFQ1RJT04gPSB7XG4gICAgJ0hPU1RfVE9fSU5QQUdFJzogJ29uZWtleUBKU19CUklER0VfTUVTU0FHRV9ESVJFQ1RJT04tSE9TVF9UT19JTlBBR0UnLFxuICAgICdJTlBBR0VfVE9fSE9TVCc6ICdvbmVrZXlASlNfQlJJREdFX01FU1NBR0VfRElSRUNUSU9OLUlOUEFHRV9UT19IT1NUJyxcbn07XG5leHBvcnQgY29uc3QgRVhUX1BPUlRfQ1NfVE9fQkcgPSAnb25la2V5QEVYVF9QT1JUX0NTX1RPX0JHJztcbmV4cG9ydCBjb25zdCBFWFRfUE9SVF9VSV9UT19CRyA9ICdvbmVrZXlARVhUX1BPUlRfVUlfVE9fQkcnO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xPR0dFUl9TVE9SQUdFX0tFWSA9ICckJE9ORUtFWV9ERUJVR19MT0dHRVInO1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5pbXBvcnQgeyBERUJVR19MT0dHRVJfU1RPUkFHRV9LRVkgfSBmcm9tICcuLi9jb25zdHMnO1xuaW1wb3J0IGh1bWFuaXplIGZyb20gJ21zJztcbmNvbnN0IHN0b3JhZ2VLZXkgPSBERUJVR19MT0dHRVJfU1RPUkFHRV9LRVk7XG5jb25zdCBleHBvcnRzQnJvd3NlciA9IHt9O1xuZXhwb3J0c0Jyb3dzZXIuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzQnJvd3Nlci5zYXZlID0gc2F2ZTtcbmV4cG9ydHNCcm93c2VyLmxvYWQgPSBsb2FkO1xuZXhwb3J0c0Jyb3dzZXIudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0c0Jyb3dzZXIuc3RvcmFnZSA9IGN1c3RvbUxvY2FsU3RvcmFnZSgpO1xuZXhwb3J0c0Jyb3dzZXIuaHVtYW5pemUgPSBodW1hbml6ZTtcbmV4cG9ydHNCcm93c2VyLmRlc3Ryb3kgPSAoKCkgPT4ge1xuICAgIGxldCB3YXJuZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG4vKipcbiAqIENvbG9ycy5cbiAqL1xuZXhwb3J0c0Jyb3dzZXIuY29sb3JzID0gW1xuICAgICcjMDAwMENDJyxcbiAgICAnIzAwMDBGRicsXG4gICAgJyMwMDMzQ0MnLFxuICAgICcjMDAzM0ZGJyxcbiAgICAnIzAwNjZDQycsXG4gICAgJyMwMDY2RkYnLFxuICAgICcjMDA5OUNDJyxcbiAgICAnIzAwOTlGRicsXG4gICAgJyMwMENDMDAnLFxuICAgICcjMDBDQzMzJyxcbiAgICAnIzAwQ0M2NicsXG4gICAgJyMwMENDOTknLFxuICAgICcjMDBDQ0NDJyxcbiAgICAnIzAwQ0NGRicsXG4gICAgJyMzMzAwQ0MnLFxuICAgICcjMzMwMEZGJyxcbiAgICAnIzMzMzNDQycsXG4gICAgJyMzMzMzRkYnLFxuICAgICcjMzM2NkNDJyxcbiAgICAnIzMzNjZGRicsXG4gICAgJyMzMzk5Q0MnLFxuICAgICcjMzM5OUZGJyxcbiAgICAnIzMzQ0MwMCcsXG4gICAgJyMzM0NDMzMnLFxuICAgICcjMzNDQzY2JyxcbiAgICAnIzMzQ0M5OScsXG4gICAgJyMzM0NDQ0MnLFxuICAgICcjMzNDQ0ZGJyxcbiAgICAnIzY2MDBDQycsXG4gICAgJyM2NjAwRkYnLFxuICAgICcjNjYzM0NDJyxcbiAgICAnIzY2MzNGRicsXG4gICAgJyM2NkNDMDAnLFxuICAgICcjNjZDQzMzJyxcbiAgICAnIzk5MDBDQycsXG4gICAgJyM5OTAwRkYnLFxuICAgICcjOTkzM0NDJyxcbiAgICAnIzk5MzNGRicsXG4gICAgJyM5OUNDMDAnLFxuICAgICcjOTlDQzMzJyxcbiAgICAnI0NDMDAwMCcsXG4gICAgJyNDQzAwMzMnLFxuICAgICcjQ0MwMDY2JyxcbiAgICAnI0NDMDA5OScsXG4gICAgJyNDQzAwQ0MnLFxuICAgICcjQ0MwMEZGJyxcbiAgICAnI0NDMzMwMCcsXG4gICAgJyNDQzMzMzMnLFxuICAgICcjQ0MzMzY2JyxcbiAgICAnI0NDMzM5OScsXG4gICAgJyNDQzMzQ0MnLFxuICAgICcjQ0MzM0ZGJyxcbiAgICAnI0NDNjYwMCcsXG4gICAgJyNDQzY2MzMnLFxuICAgICcjQ0M5OTAwJyxcbiAgICAnI0NDOTkzMycsXG4gICAgJyNDQ0NDMDAnLFxuICAgICcjQ0NDQzMzJyxcbiAgICAnI0ZGMDAwMCcsXG4gICAgJyNGRjAwMzMnLFxuICAgICcjRkYwMDY2JyxcbiAgICAnI0ZGMDA5OScsXG4gICAgJyNGRjAwQ0MnLFxuICAgICcjRkYwMEZGJyxcbiAgICAnI0ZGMzMwMCcsXG4gICAgJyNGRjMzMzMnLFxuICAgICcjRkYzMzY2JyxcbiAgICAnI0ZGMzM5OScsXG4gICAgJyNGRjMzQ0MnLFxuICAgICcjRkYzM0ZGJyxcbiAgICAnI0ZGNjYwMCcsXG4gICAgJyNGRjY2MzMnLFxuICAgICcjRkY5OTAwJyxcbiAgICAnI0ZGOTkzMycsXG4gICAgJyNGRkNDMDAnLFxuICAgICcjRkZDQzMzJyxcbl07XG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gICAgLy8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2VcbiAgICAvLyBleHBsaWNpdGx5XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzICYmXG4gICAgICAgICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJlxuICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICAgIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gICAgcmV0dXJuICgodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgICAgICAvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG4gICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUgJiZcbiAgICAgICAgICAgICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcbiAgICAgICAgLy8gSXMgZmlyZWZveCA+PSB2MzE/XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmXG4gICAgICAgICAgICBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcbiAgICAgICAgLy8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuICAgICAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQgJiZcbiAgICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSkpO1xufVxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG4gICAgYXJnc1swXSA9IGAkeyh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuICAgICAgICB0aGlzLm5hbWVzcGFjZSArXG4gICAgICAgICh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG4gICAgICAgIGFyZ3NbMF0gK1xuICAgICAgICAodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJyl9KyR7ZXhwb3J0c0Jyb3dzZXIuaHVtYW5pemUodGhpcy5kaWZmKX1gO1xuICAgIGlmICghdGhpcy51c2VDb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjID0gYGNvbG9yOiAke3RoaXMuY29sb3J9YDtcbiAgICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcbiAgICAvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuICAgIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBsYXN0QyA9IDA7XG4gICAgYXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIChtYXRjaCkgPT4ge1xuICAgICAgICBpZiAobWF0Y2ggPT09ICclJScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICBpZiAobWF0Y2ggPT09ICclYycpIHtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgICAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzQnJvd3Nlci5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGlmIChjb25zb2xlLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoLi4uYXJncyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgIH1cbn07XG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChuYW1lc3BhY2VzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZXhwb3J0c0Jyb3dzZXIuc3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIG5hbWVzcGFjZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQgZXhwb3J0c0Jyb3dzZXIuc3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gU3dhbGxvd1xuICAgICAgICAgICAgLy8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdkZWJ1ZyBsb2dnZXIgc3RvcmFnZSBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIgPSB5aWVsZCBleHBvcnRzQnJvd3Nlci5zdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBTd2FsbG93XG4gICAgICAgICAgICAvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2RlYnVnIGxvZ2dlciBzdG9yYWdlIGVycm9yJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcbiAgICAgICAgaWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG4gICAgICAgICAgICByID0gcHJvY2Vzcy5lbnYuREVCVUc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG59XG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjdXN0b21Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC4kJG9uZWtleUFwcFN0b3JhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWwuJCRvbmVrZXlBcHBTdG9yYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcbiAgICAgICAgLy8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignZGVidWdMb2dnZXIgaW5pdCB3YXJuaW5nLCBuZWl0aGVyIGBnbG9iYWwuJCRvbmVrZXlBcHBTdG9yYWdlYCBub3IgYHdpbmRvdy5sb2NhbFN0b3JhZ2VgIGZvdW5kLicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0SXRlbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0SXRlbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlSXRlbSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gU3dhbGxvd1xuICAgICAgICAvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cbiAgICAgICAgY29uc29sZS5lcnJvcignZGVidWcgbG9nZ2VyIHN0b3JhZ2UgZXJyb3InLCBlcnJvcik7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0c0Jyb3dzZXI7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5pbXBvcnQgaHVtYW5pemUgZnJvbSAnbXMnO1xuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1ZztcbiAgICAgICAgY3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG4gICAgICAgIGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG4gICAgICAgIGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgICAgICBjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcbiAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNyZWF0ZURlYnVnW2tleV0gPSBlbnZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG4gICAgICAgIGNyZWF0ZURlYnVnLnNraXBzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZURlYnVnLmZvcm1hdHRlcnMgPSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaih2KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2VcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG4gICAgICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBsZXQgaGFzaCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICAgICAgICogQGFwaSBwdWJsaWNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgbGV0IHByZXZUaW1lO1xuICAgICAgICAgICAgbGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBuYW1lc3BhY2VzQ2FjaGU7XG4gICAgICAgICAgICBsZXQgZW5hYmxlZENhY2hlO1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIERpc2FibGVkP1xuICAgICAgICAgICAgICAgIGlmICghZGVidWcuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSBkZWJ1ZztcbiAgICAgICAgICAgICAgICAvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuZGlmZiA9IG1zO1xuICAgICAgICAgICAgICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgICAgICAgICAgICAgcHJldlRpbWUgPSBjdXJyO1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoJyVPJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPT09ICclJScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcbiAgICAgICAgICAgICAgICBsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICAgICAgICAgIGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuICAgICAgICAgICAgZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuICAgICAgICAgICAgZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuICAgICAgICAgICAgZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXNDYWNoZSA9IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRDYWNoZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldDogKHYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlT3ZlcnJpZGUgPSB2O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWJ1ZztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIG5ld0RlYnVnLmxvZyA9IHRoaXMubG9nO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0RlYnVnO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gICAgICAgICAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gICAgICAgICAqIEBhcGkgcHVibGljXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBlbmFibGUobmFtZXNwYWNlcykge1xuICAgICAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG4gICAgICAgICAgICAgICAgY3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgaTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdCA9ICh0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBuYW1lc3BhY2VzIDogJycpLnNwbGl0KC9bXFxzLF0rLyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNwbGl0W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cChgXiR7bmFtZXNwYWNlcy5zdWJzdHIoMSl9JGApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cChgXiR7bmFtZXNwYWNlc30kYCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAgICAgICAgICogQGFwaSBwdWJsaWNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VzID0gW1xuICAgICAgICAgICAgICAgIC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG4gICAgICAgICAgICAgICAgLi4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAoKG5hbWVzcGFjZSkgPT4gYC0ke25hbWVzcGFjZX1gKSxcbiAgICAgICAgICAgIF0uam9pbignLCcpO1xuICAgICAgICAgICAgY3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VzO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICAgICAqIEBhcGkgcHVibGljXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGk7XG4gICAgICAgICAgICBsZXQgbGVuO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG4gICAgICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVnZXhwXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb2VyY2UgYHZhbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAgICAgICAgKiBAcmV0dXJuIHtNaXhlZH1cbiAgICAgICAgICogQGFwaSBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cbiAgICAgICAgICogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHlpZWxkIGNyZWF0ZURlYnVnLmxvYWQoKTtcbiAgICAgICAgeWllbGQgY3JlYXRlRGVidWcuZW5hYmxlKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVEZWJ1ZztcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHNldHVwO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgc2V0dXAgZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi9icm93c2VyJztcbmZ1bmN0aW9uIGNyZWF0ZURlYnVnQXN5bmMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHNldHVwKGJyb3dzZXIpO1xuICAgIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlRGVidWdBc3luYztcbiIsImV4cG9ydCAqIGZyb20gJy4vSnNCcmlkZ2VCYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vUHJvdmlkZXJCYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2Vycyc7XG5leHBvcnQgKiBmcm9tICcuL2luamVjdEpzQnJpZGdlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5qZWN0ZWRQcm92aWRlclJlY2VpdmVIYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vSnNCcmlkZ2VTaW1wbGUnO1xuaW1wb3J0ICogYXMgY29uc3RzIGZyb20gJy4vY29uc3RzJztcbmV4cG9ydCB7IGNvbnN0cyB9O1xuaW1wb3J0IGluamVjdGVkRmFjdG9yeSBmcm9tICcuL2luamVjdGVkRmFjdG9yeSc7XG5leHBvcnQgeyBpbmplY3RlZEZhY3RvcnkgfTtcbmltcG9ydCBzaXRlTWV0YWRhdGEgZnJvbSAnLi9zaXRlTWV0YWRhdGEnO1xuZXhwb3J0IHsgc2l0ZU1ldGFkYXRhIH07XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZlcnNpb25JbmZvIH0gZnJvbSAnLi92ZXJzaW9uSW5mbyc7XG4iLCJpbXBvcnQgeyBERUJVR19MT0dHRVJfU1RPUkFHRV9LRVkgfSBmcm9tICcuL2NvbnN0cyc7XG5mdW5jdGlvbiBmaXhHbG9iYWxTaGltKCkge1xuICAgIC8vIEZJWCBlcnJvcnMgaW4gUmVhY3ROYXRpdmVcbiAgICAvLyAgICBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZ2xvYmFsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHdpbmRvdy5nbG9iYWwgPSB3aW5kb3cuZ2xvYmFsIHx8IHdpbmRvdyB8fCB3aW5kb3cuZ2xvYmFsVGhpcztcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgd2luZG93Lmdsb2JhbCA9IHdpbmRvdy5nbG9iYWwgfHwgd2luZG93IHx8IHdpbmRvdy5nbG9iYWxUaGlzO1xufVxuZnVuY3Rpb24gaW5qZWN0SnNCcmlkZ2UoYnJpZGdlQ3JlYXRvcikge1xuICAgIHZhciBfYTtcbiAgICBmaXhHbG9iYWxTaGltKCk7XG4gICAgaWYgKCEoKF9hID0gd2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LiRvbmVrZXkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qc0JyaWRnZSkpIHtcbiAgICAgICAgd2luZG93LiRvbmVrZXkgPSB3aW5kb3cuJG9uZWtleSB8fCB7fTtcbiAgICAgICAgd2luZG93LiRvbmVrZXkuanNCcmlkZ2UgPSBicmlkZ2VDcmVhdG9yKCk7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShERUJVR19MT0dHRVJfU1RPUkFHRV9LRVkpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT0ganNCcmlkZ2UgaW5qZWN0ZWQgc3VjY2VzcyEgPj4+Pj4gJywgcGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3cuJG9uZWtleS5qc0JyaWRnZTtcbn1cbmV4cG9ydCB7IGluamVjdEpzQnJpZGdlIH07XG4iLCJmdW5jdGlvbiBjcmVhdGVDb2RlV2l0aFNjcmlwdFRhZyh7IGNvZGUgfSkge1xuICAgIC8vIHNjcmlwdCBpZCBjaGVjaywgb25seSBpbmplY3Qgb25jZS5cbiAgICByZXR1cm4gYFxuICAgIChmdW5jdGlvbigpe1xuICAgICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgcy5zZXRBdHRyaWJ1dGUoJ2FzeW5jJywgJ2ZhbHNlJyk7XG4gICAgICBzLnNldEF0dHJpYnV0ZSgnZGF0YS1vbmVrZXktaW5qZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgcy50ZXh0Q29udGVudD0ke0pTT04uc3RyaW5naWZ5KGNvZGUpfTtcbiAgICAgIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQocyk7XG4gICAgICBzLnJlbW92ZSgpO1xuICAgIH0pKCk7XG4gIGA7XG59XG5mdW5jdGlvbiBpbmplY3RDb2RlV2l0aFNjcmlwdFRhZyh7IGNvZGUsIGZpbGUsIHJlbW92ZSA9IHRydWUsIH0pIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHMuc2V0QXR0cmlidXRlKCdhc3luYycsICdmYWxzZScpO1xuICAgICAgICBzLnNldEF0dHJpYnV0ZSgnZGVmZXInLCAnZmFsc2UnKTtcbiAgICAgICAgcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtb25la2V5LWluamVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICAgIHMudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgcy5zcmMgPSBmaWxlO1xuICAgICAgICB9XG4gICAgICAgIHMub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZSAmJiBmaWxlKSB7XG4gICAgICAgICAgICAgICAgcy5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzKTtcbiAgICAgICAgaWYgKHJlbW92ZSAmJiBjb2RlKSB7XG4gICAgICAgICAgICBzLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSkoKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvZGVKc0JyaWRnZVJlY2VpdmUocGF5bG9hZFN0cikge1xuICAgIHJldHVybiBgXG4gIGlmKHdpbmRvdy4kb25la2V5ICYmIHdpbmRvdy4kb25la2V5LmpzQnJpZGdlKXtcbiAgICB3aW5kb3cuJG9uZWtleS5qc0JyaWRnZS5yZWNlaXZlKCR7SlNPTi5zdHJpbmdpZnkocGF5bG9hZFN0cil9KTtcbiAgfVxuICB2b2lkIDA7XG4gIGA7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5qZWN0Q29kZVdpdGhTY3JpcHRUYWcsXG4gICAgY3JlYXRlQ29kZVdpdGhTY3JpcHRUYWcsXG4gICAgY3JlYXRlQ29kZUpzQnJpZGdlUmVjZWl2ZSxcbn07XG4iLCJpbXBvcnQgeyBjb25zb2xlRXJyb3JJbkRldiB9IGZyb20gJy4vbG9nZ2Vycyc7XG5mdW5jdGlvbiBpbmplY3RlZFByb3ZpZGVyUmVjZWl2ZUhhbmRsZXIocGF5bG9hZCwgYnJpZGdlKSB7XG4gICAgLy8gZXRoZXJldW0sIHNvbGFuYSwgY29uZmx1eFxuICAgIGNvbnN0IHByb3ZpZGVySHViID0gKGJyaWRnZSA9PT0gbnVsbCB8fCBicmlkZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJyaWRnZS5wcm92aWRlcnNIdWIpIHx8IHdpbmRvdy4kb25la2V5O1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IHBheWxvYWQuc2NvcGU7XG4gICAgY29uc3QgcGF5bG9hZERhdGEgPSBwYXlsb2FkLmRhdGE7XG4gICAgaWYgKCFwcm92aWRlck5hbWUpIHtcbiAgICAgICAgY29uc29sZUVycm9ySW5EZXYoJ3Byb3ZpZGVyTmFtZSAoc2NvcGUpIGlzIHJlcXVpcmVkIGluIGluamVjdGVkUHJvdmlkZXJSZWNlaXZlSGFuZGxlci4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm92aWRlcnMgPSBbXVxuICAgICAgICAuY29uY2F0KHByb3ZpZGVySHViW3Byb3ZpZGVyTmFtZV0pXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKCFwcm92aWRlcnMgfHwgIXByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZUVycm9ySW5EZXYoYFske3Byb3ZpZGVyTmFtZX1dIHByb3ZpZGVyIGlzIE5PVCBpbmplY3RlZCB0byBkb2N1bWVudCBvciBicmlkZ2UuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZW1pdCBldmVudHMgdG8gaW5qZWN0ZWQgcHJvdmlkZXJcbiAgICBwcm92aWRlcnMuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICAgICAgaWYgKHByb3ZpZGVyICYmIHByb3ZpZGVyLmVtaXQpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyLmVtaXQoJ21lc3NhZ2VfbG93X2xldmVsJywgcGF5bG9hZERhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgeyBpbmplY3RlZFByb3ZpZGVyUmVjZWl2ZUhhbmRsZXIgfTtcbiIsIi8vIEB0cy1pZ25vcmVcbmltcG9ydCBjcmVhdGVEZWJ1Z0FzeW5jIGZyb20gJy4vZGVidWcnO1xuaW1wb3J0IHsgREVCVUdfTE9HR0VSX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9jb25zdHMnO1xuLy8gZW5hYmxlIGRlYnVnTG9nZ2VyOlxuLy8gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJyQkT05FS0VZX0RFQlVHX0xPR0dFUicsICcqJyk7XG5mdW5jdGlvbiBjb25zb2xlRXJyb3JJbkRldiguLi5hcmdzKSB7XG4gICAgY29uc3QgbG9nZ2VyQ29uZmlnID0gdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oREVCVUdfTE9HR0VSX1NUT1JBR0VfS0VZKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyB8fCBsb2dnZXJDb25maWcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICB9XG59XG5jb25zdCBmYWtlTG9nZ2VyID0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBfaXNGYWtlTG9nZ2VyOiB0cnVlLFxuICAgIGxvZzogKC4uLmFyZ3MpID0+IHVuZGVmaW5lZCxcbiAgICB3YXJuOiAoLi4uYXJncykgPT4gdW5kZWZpbmVkLFxuICAgIGVycm9yOiAoLi4uYXJncykgPT4gdW5kZWZpbmVkLFxuICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdW5kZWZpbmVkLFxuICAgIGluZm86ICguLi5hcmdzKSA9PiB1bmRlZmluZWQsXG4gICAgdHJhY2U6ICguLi5hcmdzKSA9PiB1bmRlZmluZWQsXG59O1xuY2xhc3MgRmFrZURlYnVnTG9nZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fZGVidWcgPSB7XG4gICAgICAgICAgICBlbmFibGUoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgLy9ub29wXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9leHRlcm5hbExvZ2dlciA9IGZha2VMb2dnZXI7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUV4dGVybmFsTG9nID0gKG5hbWUpID0+ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfbG9nZ2VyID0gdGhpcy5fZXh0ZXJuYWxMb2dnZXI7XG4gICAgICAgICAgICBpZiAoX2xvZ2dlcikge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9sb2dnZXIubG9nKG5hbWUsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmpzQnJpZGdlID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ2pzQnJpZGdlID4+Jyk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJCYXNlID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ3Byb3ZpZGVyQmFzZSA+PicpO1xuICAgICAgICB0aGlzLmV4dEluamVjdGVkID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ2V4dEluamVjdGVkID4+Jyk7XG4gICAgICAgIHRoaXMuZXh0Q29udGVudFNjcmlwdHMgPSB0aGlzLl9jcmVhdGVFeHRlcm5hbExvZygnZXh0Q29udGVudFNjcmlwdHMgPj4nKTtcbiAgICAgICAgdGhpcy53ZWJ2aWV3ID0gdGhpcy5fY3JlYXRlRXh0ZXJuYWxMb2coJ3dlYnZpZXcgPj4nKTtcbiAgICAgICAgdGhpcy5kZXNrdG9wSW5qZWN0ZWQgPSB0aGlzLl9jcmVhdGVFeHRlcm5hbExvZygnZGVza3RvcEluamVjdGVkID4+Jyk7XG4gICAgICAgIHRoaXMuZXRoZXJldW0gPSB0aGlzLl9jcmVhdGVFeHRlcm5hbExvZygnZXRoZXJldW0gPj4nKTtcbiAgICB9XG4gICAgX2F0dGFjaEV4dGVybmFsTG9nZ2VyKGxvZ2dlcikge1xuICAgICAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9leHRlcm5hbExvZ2dlciA9IGxvZ2dlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY3JlYXRlRGVidWdJbnN0YW5jZShuYW1lKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG59XG5jbGFzcyBBcHBEZWJ1Z0xvZ2dlciBleHRlbmRzIEZha2VEZWJ1Z0xvZ2dlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2RlYnVnSW5zdGFuY2VDcmVhdGVkTWFwID0ge307XG4gICAgICAgIHZvaWQgY3JlYXRlRGVidWdBc3luYygpLnRoZW4oKGRlYnVnKSA9PiAodGhpcy5fZGVidWcgPSBkZWJ1ZykpO1xuICAgIH1cbiAgICBfY3JlYXRlRGVidWdJbnN0YW5jZShuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z0luc3RhbmNlQ3JlYXRlZE1hcFtuYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlYnVnSW5zdGFuY2VDcmVhdGVkTWFwW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgdGhpcy5fZGVidWcgJiYgdHlwZW9mIHRoaXMuX2RlYnVnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgY29uc3QgX2RlYnVnTG9nID0gdGhpcy5fZGVidWcobmFtZSk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBfb3JpZ2luTG9nID0gdGhpc1tuYW1lXTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgdGhpc1tuYW1lXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICBfZGVidWdMb2coLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKF9vcmlnaW5Mb2cgJiYgdHlwZW9mIF9vcmlnaW5Mb2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgX29yaWdpbkxvZyguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gVE9ETyBtZXJnZSBGYWtlRGVidWdMb2dnZXIgYW5kIEFwcERlYnVnTG9nZ2VyIHRvIHNpbmdsZSBjbGFzc1xuY29uc3QgZmFrZURlYnVnTG9nZ2VyID0gbmV3IEZha2VEZWJ1Z0xvZ2dlcigpO1xuY29uc3QgYXBwRGVidWdMb2dnZXIgPSBuZXcgQXBwRGVidWdMb2dnZXIoKTtcbmV4cG9ydCB7IGZha2VEZWJ1Z0xvZ2dlciwgYXBwRGVidWdMb2dnZXIsIGZha2VMb2dnZXIsIGNvbnNvbGVFcnJvckluRGV2IH07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBpbWFnZSBVUkwgZXhpc3RzXG4gKiBAcGFyYW0gdXJsIC0gdGhlIHVybCBvZiB0aGUgaW1hZ2VcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGltYWdlIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gaW1nRXhpc3RzKHVybCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBHZXRzIHNpdGUgbWV0YWRhdGEgYW5kIHJldHVybnMgaXRcbiAqXG4gKi9cbmZ1bmN0aW9uIGdldFNpdGVNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogZ2V0U2l0ZU5hbWUod2luZG93KSxcbiAgICAgICAgICAgIGljb246IHlpZWxkIGdldFNpdGVJY29uKHdpbmRvdyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIEV4dHJhY3RzIGEgbmFtZSBmb3IgdGhlIHNpdGUgZnJvbSB0aGUgRE9NXG4gKi9cbmZ1bmN0aW9uIGdldFNpdGVOYW1lKHdpbmRvd09iamVjdCkge1xuICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvd09iamVjdDtcbiAgICBjb25zdCBzaXRlTmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgPiBtZXRhW3Byb3BlcnR5PVwib2c6c2l0ZV9uYW1lXCJdJyk7XG4gICAgaWYgKHNpdGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBzaXRlTmFtZS5jb250ZW50O1xuICAgIH1cbiAgICBjb25zdCBtZXRhVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkID4gbWV0YVtuYW1lPVwidGl0bGVcIl0nKTtcbiAgICBpZiAobWV0YVRpdGxlKSB7XG4gICAgICAgIHJldHVybiBtZXRhVGl0bGUuY29udGVudDtcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LnRpdGxlICYmIGRvY3VtZW50LnRpdGxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnRpdGxlO1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhbiBpY29uIGZvciB0aGUgc2l0ZSBmcm9tIHRoZSBET01cbiAqIEByZXR1cm5zIGFuIGljb24gVVJMXG4gKi9cbmZ1bmN0aW9uIGdldFNpdGVJY29uKHdpbmRvd09iamVjdCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvd09iamVjdDtcbiAgICAgICAgY29uc3QgaWNvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdoZWFkID4gbGlua1tyZWx+PVwiaWNvblwiXScpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgaWNvbnNBcnIgPSBpY29ucztcbiAgICAgICAgZm9yIChjb25zdCBpY29uIG9mIGljb25zQXJyKSB7XG4gICAgICAgICAgICBpZiAoaWNvbiAmJiAoeWllbGQgaW1nRXhpc3RzKGljb24uaHJlZikpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGljb24uaHJlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXRTaXRlTWV0YWRhdGEsXG4gICAgZ2V0U2l0ZUljb24sXG4gICAgZ2V0U2l0ZU5hbWUsXG4gICAgaW1nRXhpc3RzLFxufTtcbiIsImNvbnN0IHZlcnNpb24gPSAnMC4wLjctYWxwaGEuMyc7XG5jb25zdCB2ZXJzaW9uQnVpbGQgPSAnMjAyMC0wMTAxLTEnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHZlcnNpb24sXG4gICAgdmVyc2lvbkJ1aWxkLFxufTtcbiIsImltcG9ydCB7IGlwY1JlbmRlcmVyIH0gZnJvbSAnZWxlY3Ryb24nO1xuaW1wb3J0IHsgYXBwRGVidWdMb2dnZXIgYXMgZGVidWdMb2dnZXIsIEpzQnJpZGdlQmFzZSwgY29uc3RzLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItY29yZSc7XG5jbGFzcyBKc0JyaWRnZURlc2t0b3BJbmplY3RlZCBleHRlbmRzIEpzQnJpZGdlQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2VuZEFzU3RyaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0luamVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgc2VuZFBheWxvYWQocGF5bG9hZCkge1xuICAgICAgICAvLyBzZW5kIHRvIHJlbmRlcmVyICh3ZWJ2aWV3IGhvc3QpXG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoY29uc3RzLkpTX0JSSURHRV9NRVNTQUdFX0lQQ19DSEFOTkVMLCBwYXlsb2FkKTtcbiAgICAgICAgZGVidWdMb2dnZXIuZGVza3RvcEluamVjdGVkKCdpcGNSZW5kZXJlci5zZW5kVG9Ib3N0JywgY29uc3RzLkpTX0JSSURHRV9NRVNTQUdFX0lQQ19DSEFOTkVMLCBwYXlsb2FkKTtcbiAgICAgICAgLy8gc2VuZCB0byBtYWluXG4gICAgICAgIC8vIGlwY1JlbmRlcmVyLnNlbmQoSlNfQlJJREdFX01FU1NBR0VfSVBDX0NIQU5ORUwsIHBheWxvYWRTdHIpO1xuICAgIH1cbn1cbmV4cG9ydCB7IEpzQnJpZGdlRGVza3RvcEluamVjdGVkIH07XG4iLCJleHBvcnQgKiBmcm9tICcuL0pzQnJpZGdlRGVza3RvcEluamVjdGVkJztcbiIsImltcG9ydCBzYWZlU3RyaW5naWZ5IGZyb20gJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknO1xuLyoqXG4gKiBFcnJvciBzdWJjbGFzcyBpbXBsZW1lbnRpbmcgSlNPTiBSUEMgMi4wIGVycm9ycyBhbmQgV2ViMyBSUEMgZXJyb3JzXG4gKiBwZXIgRUlQLTE0NzQuXG4gKiBQZXJtaXRzIGFueSBpbnRlZ2VyIGVycm9yIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWIzUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY29kZSwgbWVzc2FnZSwgZGF0YSkge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJjb2RlXCIgbXVzdCBiZSBhbiBpbnRlZ2VyLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJtZXNzYWdlXCIgbXVzdCBiZSBhIG5vbmVtcHR5IHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIHB1YmxpYyBjbGFzcyBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHtcbiAgICAgICAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhY2spIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuc3RhY2sgPSB0aGlzLnN0YWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgZXJyb3IsIG9taXR0aW5nXG4gICAgICogYW55IGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzYWZlU3RyaW5naWZ5KHRoaXMuc2VyaWFsaXplKCksIHN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHN1YmNsYXNzIGltcGxlbWVudGluZyBXZWIzIFByb3ZpZGVyIGVycm9ycyBwZXIgRUlQLTExOTMuXG4gKiBQZXJtaXRzIGludGVnZXIgZXJyb3IgY29kZXMgaW4gdGhlIFsgMTAwMCA8PSA0OTk5IF0gcmFuZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWIzUHJvdmlkZXJFcnJvciBleHRlbmRzIFdlYjNScGNFcnJvciB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIFdlYjMgUHJvdmlkZXIgSlNPTi1SUEMgZXJyb3IuXG4gICAgICogYGNvZGVgIG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgMTAwMCA8PSA0OTk5IHJhbmdlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkV2ViM1Byb3ZpZGVyQ29kZShjb2RlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcImNvZGVcIiBtdXN0IGJlIGFuIGludGVnZXIgc3VjaCB0aGF0OiAxMDAwIDw9IGNvZGUgPD0gNDk5OScpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKGNvZGUsIG1lc3NhZ2UsIGRhdGEpO1xuICAgIH1cbn1cbi8vIEludGVybmFsXG5mdW5jdGlvbiBpc1ZhbGlkV2ViM1Byb3ZpZGVyQ29kZShjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA+PSAxMDAwICYmIGNvZGUgPD0gNDk5OTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeVJlcGxhY2VyKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAnW0NpcmN1bGFyXScpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0IGNvbnN0IGVycm9yQ29kZXMgPSB7XG4gICAgcnBjOiB7XG4gICAgICAgIGludmFsaWRJbnB1dDogLTMyMDAwLFxuICAgICAgICByZXNvdXJjZU5vdEZvdW5kOiAtMzIwMDEsXG4gICAgICAgIHJlc291cmNlVW5hdmFpbGFibGU6IC0zMjAwMixcbiAgICAgICAgdHJhbnNhY3Rpb25SZWplY3RlZDogLTMyMDAzLFxuICAgICAgICBtZXRob2ROb3RTdXBwb3J0ZWQ6IC0zMjAwNCxcbiAgICAgICAgbGltaXRFeGNlZWRlZDogLTMyMDA1LFxuICAgICAgICBwYXJzZTogLTMyNzAwLFxuICAgICAgICBpbnZhbGlkUmVxdWVzdDogLTMyNjAwLFxuICAgICAgICBtZXRob2ROb3RGb3VuZDogLTMyNjAxLFxuICAgICAgICBpbnZhbGlkUGFyYW1zOiAtMzI2MDIsXG4gICAgICAgIGludGVybmFsOiAtMzI2MDMsXG4gICAgfSxcbiAgICBwcm92aWRlcjoge1xuICAgICAgICB1c2VyUmVqZWN0ZWRSZXF1ZXN0OiA0MDAxLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IDQxMDAsXG4gICAgICAgIHVuc3VwcG9ydGVkTWV0aG9kOiA0MjAwLFxuICAgICAgICBkaXNjb25uZWN0ZWQ6IDQ5MDAsXG4gICAgICAgIGNoYWluRGlzY29ubmVjdGVkOiA0OTAxLFxuICAgICAgICByZXF1ZXN0VGltZW91dDogNDUwMCxcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBlcnJvclZhbHVlcyA9IHtcbiAgICAnLTMyNzAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LicsXG4gICAgfSxcbiAgICAnLTMyNjAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgSlNPTiBzZW50IGlzIG5vdCBhIHZhbGlkIFJlcXVlc3Qgb2JqZWN0LicsXG4gICAgfSxcbiAgICAnLTMyNjAxJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgbWV0aG9kIGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS4nLFxuICAgIH0sXG4gICAgJy0zMjYwMic6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdKU09OIFJQQyAyLjAnLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBtZXRob2QgcGFyYW1ldGVyKHMpLicsXG4gICAgfSxcbiAgICAnLTMyNjAzJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0pTT04gUlBDIDIuMCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBKU09OLVJQQyBlcnJvci4nLFxuICAgIH0sXG4gICAgJy0zMjAwMCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGlucHV0LicsXG4gICAgfSxcbiAgICAnLTMyMDAxJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xNDc0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc291cmNlIG5vdCBmb3VuZC4nLFxuICAgIH0sXG4gICAgJy0zMjAwMic6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNvdXJjZSB1bmF2YWlsYWJsZS4nLFxuICAgIH0sXG4gICAgJy0zMjAwMyc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdUcmFuc2FjdGlvbiByZWplY3RlZC4nLFxuICAgIH0sXG4gICAgJy0zMjAwNCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdNZXRob2Qgbm90IHN1cHBvcnRlZC4nLFxuICAgIH0sXG4gICAgJy0zMjAwNSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTQ3NCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXF1ZXN0IGxpbWl0IGV4Y2VlZGVkLicsXG4gICAgfSxcbiAgICAnNDAwMSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdVc2VyIHJlamVjdGVkIHRoZSByZXF1ZXN0LicsXG4gICAgfSxcbiAgICAnNDEwMCc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIGFjY291bnQgYW5kL29yIG1ldGhvZCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4nLFxuICAgIH0sXG4gICAgJzQyMDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnRUlQLTExOTMnLFxuICAgICAgICBtZXNzYWdlOiAnVGhlIHJlcXVlc3RlZCBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIFdlYjMgcHJvdmlkZXIuJyxcbiAgICB9LFxuICAgICc0OTAwJzoge1xuICAgICAgICBzdGFuZGFyZDogJ0VJUC0xMTkzJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwcm92aWRlciBpcyBkaXNjb25uZWN0ZWQgZnJvbSBhbGwgY2hhaW5zLicsXG4gICAgfSxcbiAgICAnNDkwMSc6IHtcbiAgICAgICAgc3RhbmRhcmQ6ICdFSVAtMTE5MycsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcHJvdmlkZXIgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIHNwZWNpZmllZCBjaGFpbi4nLFxuICAgIH0sXG4gICAgJzQ1MDAnOiB7XG4gICAgICAgIHN0YW5kYXJkOiAnJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSByZXF1ZXN0IGJ5IHRoaXMgV2ViMyBwcm92aWRlciBpcyB0aW1lb3V0LicsXG4gICAgfSxcbn07XG4vLyBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTE0NzQjZXJyb3ItY29kZXNcbi8vIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMTE5MyNwcm92aWRlci1lcnJvcnNcbiIsImltcG9ydCB7IFdlYjNScGNFcnJvciwgV2ViM1Byb3ZpZGVyRXJyb3IgfSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZUZyb21Db2RlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBlcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvci1jb25zdGFudHMnO1xuZXhwb3J0IGNvbnN0IHdlYjNFcnJvcnMgPSB7XG4gICAgcnBjOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgUGFyc2UgKC0zMjcwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5wYXJzZSwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBJbnZhbGlkIFJlcXVlc3QgKC0zMjYwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBpbnZhbGlkUmVxdWVzdDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5pbnZhbGlkUmVxdWVzdCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBJbnZhbGlkIFBhcmFtcyAoLTMyNjAyKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludmFsaWRQYXJhbXM6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMuaW52YWxpZFBhcmFtcywgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBNZXRob2QgTm90IEZvdW5kICgtMzI2MDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgbWV0aG9kTm90Rm91bmQ6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMubWV0aG9kTm90Rm91bmQsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBKU09OIFJQQyAyLjAgSW50ZXJuYWwgKC0zMjYwMykgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBpbnRlcm5hbDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5pbnRlcm5hbCwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIEpTT04gUlBDIDIuMCBTZXJ2ZXIgZXJyb3IuXG4gICAgICAgICAqIFBlcm1pdHMgaW50ZWdlciBlcnJvciBjb2RlcyBpbiB0aGUgWyAtMzIwOTkgPD0gLTMyMDA1IF0gcmFuZ2UuXG4gICAgICAgICAqIENvZGVzIC0zMjAwMCB0aHJvdWdoIC0zMjAwNCBhcmUgcmVzZXJ2ZWQgYnkgRUlQLTE0NzQuXG4gICAgICAgICAqL1xuICAgICAgICBzZXJ2ZXI6IChvcHRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob3B0cykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYjMgUlBDIFNlcnZlciBlcnJvcnMgbXVzdCBwcm92aWRlIHNpbmdsZSBvYmplY3QgYXJndW1lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IG9wdHM7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29kZSkgfHwgY29kZSA+IC0zMjAwNSB8fCBjb2RlIDwgLTMyMDk5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcImNvZGVcIiBtdXN0IGJlIGFuIGludGVnZXIgc3VjaCB0aGF0OiAtMzIwOTkgPD0gY29kZSA8PSAtMzIwMDUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzSnNvblJwY0Vycm9yKGNvZGUsIG9wdHMpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgSlNPTiBSUEMgSW52YWxpZCBJbnB1dCAoLTMyMDAwKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGludmFsaWRJbnB1dDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy5pbnZhbGlkSW5wdXQsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBKU09OIFJQQyBSZXNvdXJjZSBOb3QgRm91bmQgKC0zMjAwMSkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICByZXNvdXJjZU5vdEZvdW5kOiAoYXJnKSA9PiBnZXRXZWIzSnNvblJwY0Vycm9yKGVycm9yQ29kZXMucnBjLnJlc291cmNlTm90Rm91bmQsIGFyZyksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBKU09OIFJQQyBSZXNvdXJjZSBVbmF2YWlsYWJsZSAoLTMyMDAyKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIHJlc291cmNlVW5hdmFpbGFibGU6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMucmVzb3VyY2VVbmF2YWlsYWJsZSwgYXJnKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBXZWIzIEpTT04gUlBDIFRyYW5zYWN0aW9uIFJlamVjdGVkICgtMzIwMDMpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdHJhbnNhY3Rpb25SZWplY3RlZDogKGFyZykgPT4gZ2V0V2ViM0pzb25ScGNFcnJvcihlcnJvckNvZGVzLnJwYy50cmFuc2FjdGlvblJlamVjdGVkLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgSlNPTiBSUEMgTWV0aG9kIE5vdCBTdXBwb3J0ZWQgKC0zMjAwNCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBtZXRob2ROb3RTdXBwb3J0ZWQ6IChhcmcpID0+IGdldFdlYjNKc29uUnBjRXJyb3IoZXJyb3JDb2Rlcy5ycGMubWV0aG9kTm90U3VwcG9ydGVkLCBhcmcpLFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgSlNPTiBSUEMgTGltaXQgRXhjZWVkZWQgKC0zMjAwNSkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBsaW1pdEV4Y2VlZGVkOiAoYXJnKSA9PiBnZXRXZWIzSnNvblJwY0Vycm9yKGVycm9yQ29kZXMucnBjLmxpbWl0RXhjZWVkZWQsIGFyZyksXG4gICAgfSxcbiAgICBwcm92aWRlcjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgUHJvdmlkZXIgVXNlciBSZWplY3RlZCBSZXF1ZXN0ICg0MDAxKSBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIHVzZXJSZWplY3RlZFJlcXVlc3Q6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLnVzZXJSZWplY3RlZFJlcXVlc3QsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBQcm92aWRlciBVbmF1dGhvcml6ZWQgKDQxMDApIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdW5hdXRob3JpemVkOiAoYXJnKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0V2ViM1Byb3ZpZGVyRXJyb3IoZXJyb3JDb2Rlcy5wcm92aWRlci51bmF1dGhvcml6ZWQsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYW4gV2ViMyBQcm92aWRlciBVbnN1cHBvcnRlZCBNZXRob2QgKDQyMDApIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdW5zdXBwb3J0ZWRNZXRob2Q6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLnVuc3VwcG9ydGVkTWV0aG9kLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGFuIFdlYjMgUHJvdmlkZXIgTm90IENvbm5lY3RlZCAoNDkwMCkgZXJyb3IuXG4gICAgICAgICAqL1xuICAgICAgICBkaXNjb25uZWN0ZWQ6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLmRpc2Nvbm5lY3RlZCwgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhbiBXZWIzIFByb3ZpZGVyIENoYWluIE5vdCBDb25uZWN0ZWQgKDQ5MDEpIGVycm9yLlxuICAgICAgICAgKi9cbiAgICAgICAgY2hhaW5EaXNjb25uZWN0ZWQ6IChhcmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWIzUHJvdmlkZXJFcnJvcihlcnJvckNvZGVzLnByb3ZpZGVyLmNoYWluRGlzY29ubmVjdGVkLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICByZXF1ZXN0VGltZW91dDogKGFyZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldFdlYjNQcm92aWRlckVycm9yKGVycm9yQ29kZXMucHJvdmlkZXIucmVxdWVzdFRpbWVvdXQsIGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBjdXN0b20gV2ViMyBQcm92aWRlciBlcnJvci5cbiAgICAgICAgICovXG4gICAgICAgIGN1c3RvbTogKG9wdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViMyBQcm92aWRlciBjdXN0b20gZXJyb3JzIG11c3QgcHJvdmlkZSBzaW5nbGUgb2JqZWN0IGFyZ3VtZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBtZXNzYWdlLCBkYXRhIH0gPSBvcHRzO1xuICAgICAgICAgICAgaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJtZXNzYWdlXCIgbXVzdCBiZSBhIG5vbmVtcHR5IHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWIzUHJvdmlkZXJFcnJvcihjb2RlLCBtZXNzYWdlLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8vIEludGVybmFsXG5mdW5jdGlvbiBnZXRXZWIzSnNvblJwY0Vycm9yKGNvZGUsIGFyZykge1xuICAgIGNvbnN0IFttZXNzYWdlLCBkYXRhXSA9IHBhcnNlT3B0cyhhcmcpO1xuICAgIHJldHVybiBuZXcgV2ViM1JwY0Vycm9yKGNvZGUsIG1lc3NhZ2UgfHwgZ2V0TWVzc2FnZUZyb21Db2RlKGNvZGUpLCBkYXRhKTtcbn1cbmZ1bmN0aW9uIGdldFdlYjNQcm92aWRlckVycm9yKGNvZGUsIGFyZykge1xuICAgIGNvbnN0IFttZXNzYWdlLCBkYXRhXSA9IHBhcnNlT3B0cyhhcmcpO1xuICAgIHJldHVybiBuZXcgV2ViM1Byb3ZpZGVyRXJyb3IoY29kZSwgbWVzc2FnZSB8fCBnZXRNZXNzYWdlRnJvbUNvZGUoY29kZSksIGRhdGEpO1xufVxuZnVuY3Rpb24gcGFyc2VPcHRzKGFyZykge1xuICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gW2FyZ107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBkYXRhIH0gPSBhcmc7XG4gICAgICAgICAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBzdHJpbmcgbWVzc2FnZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZSB8fCB1bmRlZmluZWQsIGRhdGFdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbiIsImltcG9ydCB7IFdlYjNScGNFcnJvciwgV2ViM1Byb3ZpZGVyRXJyb3IgfSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3IsIGdldE1lc3NhZ2VGcm9tQ29kZSwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHdlYjNFcnJvcnMgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBlcnJvckNvZGVzIH0gZnJvbSAnLi9lcnJvci1jb25zdGFudHMnO1xuZXhwb3J0IHsgZXJyb3JDb2Rlcywgd2ViM0Vycm9ycywgV2ViM1JwY0Vycm9yLCBXZWIzUHJvdmlkZXJFcnJvciwgc2VyaWFsaXplRXJyb3IsIGdldE1lc3NhZ2VGcm9tQ29kZSwgfTtcbiIsImltcG9ydCB7IGVycm9yQ29kZXMsIGVycm9yVmFsdWVzIH0gZnJvbSAnLi9lcnJvci1jb25zdGFudHMnO1xuaW1wb3J0IHsgV2ViM1JwY0Vycm9yIH0gZnJvbSAnLi9jbGFzc2VzJztcbmNvbnN0IEZBTExCQUNLX0VSUk9SX0NPREUgPSBlcnJvckNvZGVzLnJwYy5pbnRlcm5hbDtcbmNvbnN0IEZBTExCQUNLX01FU1NBR0UgPSAnVW5zcGVjaWZpZWQgZXJyb3IgbWVzc2FnZS4gVGhpcyBpcyBhIGJ1ZywgcGxlYXNlIHJlcG9ydCBpdC4nO1xuY29uc3QgRkFMTEJBQ0tfRVJST1IgPSB7XG4gICAgY29kZTogRkFMTEJBQ0tfRVJST1JfQ09ERSxcbiAgICBtZXNzYWdlOiBnZXRNZXNzYWdlRnJvbUNvZGUoRkFMTEJBQ0tfRVJST1JfQ09ERSksXG59O1xuZXhwb3J0IGNvbnN0IEpTT05fUlBDX1NFUlZFUl9FUlJPUl9NRVNTQUdFID0gJ1Vuc3BlY2lmaWVkIHNlcnZlciBlcnJvci4nO1xuLyoqXG4gKiBHZXRzIHRoZSBtZXNzYWdlIGZvciBhIGdpdmVuIGNvZGUsIG9yIGEgZmFsbGJhY2sgbWVzc2FnZSBpZiB0aGUgY29kZSBoYXNcbiAqIG5vIGNvcnJlc3BvbmRpbmcgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc3NhZ2VGcm9tQ29kZShjb2RlLCBmYWxsYmFja01lc3NhZ2UgPSBGQUxMQkFDS19NRVNTQUdFKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoY29kZSkpIHtcbiAgICAgICAgY29uc3QgY29kZVN0cmluZyA9IGNvZGUudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGhhc0tleShlcnJvclZhbHVlcywgY29kZVN0cmluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlc1tjb2RlU3RyaW5nXS5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0pzb25ScGNTZXJ2ZXJFcnJvcihjb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT05fUlBDX1NFUlZFUl9FUlJPUl9NRVNTQUdFO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxsYmFja01lc3NhZ2U7XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gY29kZSBpcyB2YWxpZC5cbiAqIEEgY29kZSBpcyBvbmx5IHZhbGlkIGlmIGl0IGhhcyBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29kZShjb2RlKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29kZVN0cmluZyA9IGNvZGUudG9TdHJpbmcoKTtcbiAgICBpZiAoZXJyb3JWYWx1ZXNbY29kZVN0cmluZ10pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpc0pzb25ScGNTZXJ2ZXJFcnJvcihjb2RlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBnaXZlbiBlcnJvciB0byBhbiBXZWIzIEpTT04gUlBDLWNvbXBhdGlibGUgZXJyb3Igb2JqZWN0LlxuICogTWVyZWx5IGNvcGllcyB0aGUgZ2l2ZW4gZXJyb3IncyB2YWx1ZXMgaWYgaXQgaXMgYWxyZWFkeSBjb21wYXRpYmxlLlxuICogSWYgdGhlIGdpdmVuIGVycm9yIGlzIG5vdCBmdWxseSBjb21wYXRpYmxlLCBpdCB3aWxsIGJlIHByZXNlcnZlZCBvbiB0aGVcbiAqIHJldHVybmVkIG9iamVjdCdzIGRhdGEub3JpZ2luYWxFcnJvciBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVycm9yKGVycm9yLCB7IGZhbGxiYWNrRXJyb3IgPSBGQUxMQkFDS19FUlJPUiwgc2hvdWxkSW5jbHVkZVN0YWNrID0gZmFsc2UsIH0gPSB7fSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFmYWxsYmFja0Vycm9yIHx8XG4gICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKGZhbGxiYWNrRXJyb3IuY29kZSkgfHxcbiAgICAgICAgdHlwZW9mIGZhbGxiYWNrRXJyb3IubWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgZmFsbGJhY2sgZXJyb3Igd2l0aCBpbnRlZ2VyIG51bWJlciBjb2RlIGFuZCBzdHJpbmcgbWVzc2FnZS4nKTtcbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV2ViM1JwY0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5zZXJpYWxpemUoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHt9O1xuICAgIGlmIChlcnJvciAmJlxuICAgICAgICB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGVycm9yKSAmJlxuICAgICAgICBoYXNLZXkoZXJyb3IsICdjb2RlJykgJiZcbiAgICAgICAgaXNWYWxpZENvZGUoZXJyb3IuY29kZSkpIHtcbiAgICAgICAgY29uc3QgX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IF9lcnJvci5jb2RlO1xuICAgICAgICBpZiAoX2Vycm9yLm1lc3NhZ2UgJiYgdHlwZW9mIF9lcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gX2Vycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAoaGFzS2V5KF9lcnJvciwgJ2RhdGEnKSkge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQuZGF0YSA9IF9lcnJvci5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gZ2V0TWVzc2FnZUZyb21Db2RlKHNlcmlhbGl6ZWQuY29kZSk7XG4gICAgICAgICAgICBzZXJpYWxpemVkLmRhdGEgPSB7IG9yaWdpbmFsRXJyb3I6IGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuY29kZSA9IGZhbGxiYWNrRXJyb3IuY29kZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IChfYSA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZTtcbiAgICAgICAgc2VyaWFsaXplZC5tZXNzYWdlID0gKG1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG1lc3NhZ2VcbiAgICAgICAgICAgIDogZmFsbGJhY2tFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgc2VyaWFsaXplZC5kYXRhID0geyBvcmlnaW5hbEVycm9yOiBhc3NpZ25PcmlnaW5hbEVycm9yKGVycm9yKSB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IChfYiA9IGVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RhY2s7XG4gICAgaWYgKHNob3VsZEluY2x1ZGVTdGFjayAmJiBlcnJvciAmJiBzdGFjayAmJiB0eXBlb2Ygc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlcmlhbGl6ZWQuc3RhY2sgPSBzdGFjaztcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59XG4vLyBJbnRlcm5hbFxuZnVuY3Rpb24gaXNKc29uUnBjU2VydmVyRXJyb3IoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IC0zMjA5OSAmJiBjb2RlIDw9IC0zMjAwMDtcbn1cbmZ1bmN0aW9uIGFzc2lnbk9yaWdpbmFsRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG4iLCJpbXBvcnQgeyBQcm92aWRlckV0aGVyZXVtIH0gZnJvbSAnQG9uZWtleWZlL29uZWtleS1ldGgtcHJvdmlkZXInO1xuaW1wb3J0IHsgUHJvdmlkZXJQcml2YXRlIH0gZnJvbSAnQG9uZWtleWZlL29uZWtleS1wcml2YXRlLXByb3ZpZGVyJztcbmZ1bmN0aW9uIGluamVjdFdlYjNQcm92aWRlcigpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghKChfYSA9IHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy4kb25la2V5KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuanNCcmlkZ2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25lS2V5IGpzQnJpZGdlIG5vdCBmb3VuZC4nKTtcbiAgICB9XG4gICAgY29uc3QgYnJpZGdlID0gKF9iID0gd2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LiRvbmVrZXkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5qc0JyaWRnZTtcbiAgICBjb25zdCBldGhlcmV1bSA9IG5ldyBQcm92aWRlckV0aGVyZXVtKHtcbiAgICAgICAgYnJpZGdlLFxuICAgIH0pO1xuICAgIGNvbnN0ICRwcml2YXRlID0gbmV3IFByb3ZpZGVyUHJpdmF0ZSh7XG4gICAgICAgIGJyaWRnZSxcbiAgICB9KTtcbiAgICAvLyBwcm92aWRlckh1YlxuICAgIGNvbnN0ICRvbmVrZXkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdpbmRvdy4kb25la2V5KSwgeyBqc0JyaWRnZTogYnJpZGdlLCBldGhlcmV1bSxcbiAgICAgICAgJHByaXZhdGUsIHNvbGFuYTogbnVsbCwgY29uZmx1eDogbnVsbCwgc29sbGV0OiBudWxsIH0pO1xuICAgIHdpbmRvdy4kb25la2V5ID0gJG9uZWtleTtcbiAgICAvLyBUT0RPIGNvbmZsaWN0IHdpdGggTWV0YU1hc2tcbiAgICB3aW5kb3cuZXRoZXJldW0gPSBldGhlcmV1bTtcbiAgICAvLyB3aW5kb3cud2ViMyA9IGV0aGVyZXVtOyAvLyBkYXBwIGNyZWF0ZSB3ZWIzLmpzIG9yIGV0aGVycy5qcyBpdHNlbGZcbiAgICAvLyBUT0RPIHVzZSBpbml0aWFsaXplSW5wYWdlUHJvdmlkZXIudHNcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2V0aGVyZXVtI2luaXRpYWxpemVkJykpO1xuICAgIHJldHVybiAkb25la2V5O1xufVxuZXhwb3J0IHsgaW5qZWN0V2ViM1Byb3ZpZGVyIH07XG4iLCJpbXBvcnQgeyBNZXRhTWFza0lucGFnZVByb3ZpZGVyIH0gZnJvbSAnLi9ldGhlcmV1bSc7XG5jbGFzcyBQcm92aWRlckV0aGVyZXVtIGV4dGVuZHMgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciB7XG59XG5leHBvcnQgeyBQcm92aWRlckV0aGVyZXVtIH07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGwsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG5pbXBvcnQgeyBFdGhlcmV1bVJwY0Vycm9yLCBldGhFcnJvcnMgfSBmcm9tICdldGgtcnBjLWVycm9ycyc7XG5pbXBvcnQgZGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBhcHBEZWJ1Z0xvZ2dlciBhcyBkZWJ1Z0xvZ2dlciwgUHJvdmlkZXJCYXNlLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItY29yZSc7XG5pbXBvcnQgeyBJSW5qZWN0ZWRQcm92aWRlck5hbWVzLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItdHlwZXMnO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgRU1JVFRFRF9OT1RJRklDQVRJT05TLCBsb2dTdHJlYW1EaXNjb25uZWN0V2FybmluZyB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcihjb25maWcpO1xuICAgICAgICB0aGlzLnByb3ZpZGVyTmFtZSA9IElJbmplY3RlZFByb3ZpZGVyTmFtZXMuZXRoZXJldW07XG4gICAgICAgIHRoaXMuaXNNZXRhTWFzayA9IHRydWU7XG4gICAgICAgIC8vIFRPRE8gdXNlIGRlYnVnTG9nZ2VyLmV0aGVyZXVtKClcbiAgICAgICAgdGhpcy5fbG9nID0gKF9hID0gY29uZmlnLmxvZ2dlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogd2luZG93LmNvbnNvbGU7XG4gICAgICAgIC8vIFRPRE8gcmVtb3ZlXG4gICAgICAgIC8vIHRoaXMuc2V0TWF4TGlzdGVuZXJzKGNvbmZpZy5tYXhFdmVudExpc3RlbmVycyA/PyAxMDApO1xuICAgICAgICAvLyBwcml2YXRlIHN0YXRlXG4gICAgICAgIHRoaXMuX3N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgQmFzZVByb3ZpZGVyLl9kZWZhdWx0U3RhdGUpO1xuICAgICAgICAvLyBwdWJsaWMgc3RhdGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgICB0aGlzLmNoYWluSWQgPSBudWxsO1xuICAgICAgICAvLyBiaW5kIGZ1bmN0aW9ucyAodG8gcHJldmVudCBjb25zdW1lcnMgZnJvbSBtYWtpbmcgdW5ib3VuZCBjYWxscylcbiAgICAgICAgdGhpcy5faGFuZGxlQWNjb3VudHNDaGFuZ2VkID0gdGhpcy5faGFuZGxlQWNjb3VudHNDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNvbm5lY3QgPSB0aGlzLl9oYW5kbGVDb25uZWN0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoYWluQ2hhbmdlZCA9IHRoaXMuX2hhbmRsZUNoYWluQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVEaXNjb25uZWN0ID0gdGhpcy5faGFuZGxlRGlzY29ubmVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVTdHJlYW1EaXNjb25uZWN0ID0gdGhpcy5faGFuZGxlU3RyZWFtRGlzY29ubmVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9oYW5kbGVVbmxvY2tTdGF0ZUNoYW5nZWQgPSB0aGlzLl9oYW5kbGVVbmxvY2tTdGF0ZUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fcnBjUmVxdWVzdCA9IHRoaXMuX3JwY1JlcXVlc3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0LmJpbmQodGhpcyk7XG4gICAgICAgIC8vIFRPRE8ganNCcmlkZ2UgZGlzY29ubmVjdCBldmVudFxuICAgICAgICBjb25zdCBkaXNjb25uZWN0SGFuZGxlciA9IHRoaXMuX2hhbmRsZVN0cmVhbURpc2Nvbm5lY3QuYmluZCh0aGlzLCAnT25lS2V5Jyk7XG4gICAgICAgIC8vIHNldHVwIG93biBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgLy8gRUlQLTExOTMgY29ubmVjdFxuICAgICAgICB0aGlzLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gc2V0dXAgUlBDIGNvbm5lY3Rpb25cbiAgICAgICAgLy8gVE9ETyBqc0JyaWRnZSBkaXNjb25uZWN0IGV2ZW50XG4gICAgICAgIGNvbnN0IGRpc2Nvbm5lY3RIYW5kbGVyUnBjID0gdGhpcy5faGFuZGxlU3RyZWFtRGlzY29ubmVjdC5iaW5kKHRoaXMsICdPbmVLZXkgUnBjUHJvdmlkZXInKTtcbiAgICAgICAgLy8gaGFuZGxlIFJQQyByZXF1ZXN0cyB2aWEgZGFwcC1zaWRlIHJwYyBlbmdpbmVcbiAgICAgICAgLy8gVE9ETyBtaWRkbGV3YXJlIGxpa2UgbWV0aG9kc1xuICAgICAgICAvLyBycGNFbmdpbmUucHVzaChjcmVhdGVJZFJlbWFwTWlkZGxld2FyZSgpKTtcbiAgICAgICAgLy8gcnBjRW5naW5lLnB1c2goY3JlYXRlRXJyb3JNaWRkbGV3YXJlKHRoaXMuX2xvZykpO1xuICAgICAgICB2b2lkIHRoaXMuX2luaXRpYWxpemVTdGF0ZSgpO1xuICAgICAgICAvLyBoYW5kbGUgSlNPTi1SUEMgbm90aWZpY2F0aW9uc1xuICAgICAgICB0aGlzLm9uKCdtZXNzYWdlX2xvd19sZXZlbCcsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zIH0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ21ldGFtYXNrX2FjY291bnRzQ2hhbmdlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVBY2NvdW50c0NoYW5nZWQocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gJ21ldGFtYXNrX3VubG9ja1N0YXRlQ2hhbmdlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVVbmxvY2tTdGF0ZUNoYW5nZWQocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gJ21ldGFtYXNrX2NoYWluQ2hhbmdlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDaGFpbkNoYW5nZWQocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEVNSVRURURfTk9USUZJQ0FUSU9OUy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gJ01FVEFNQVNLX1NUUkVBTV9GQUlMVVJFJykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gZGVzdHJveSBicmlkZ2UgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2VzLmVycm9ycy5wZXJtYW5lbnRseURpc2Nvbm5lY3RlZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUHVibGljIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZXIgY2FuIHByb2Nlc3MgUlBDIHJlcXVlc3RzLlxuICAgICAqL1xuICAgIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdHMgYW4gUlBDIHJlcXVlc3QgZm9yIHRoZSBnaXZlbiBtZXRob2QsIHdpdGggdGhlIGdpdmVuIHBhcmFtcy5cbiAgICAgKiBSZXNvbHZlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCBjYWxsLCBvciByZWplY3RzIG9uIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFyZ3MgLSBUaGUgUlBDIHJlcXVlc3QgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSBhcmdzLm1ldGhvZCAtIFRoZSBSUEMgbWV0aG9kIG5hbWUuXG4gICAgICogQHBhcmFtIGFyZ3MucGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBSUEMgbWV0aG9kLlxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgUlBDIG1ldGhvZCxcbiAgICAgKiBvciByZWplY3RzIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLlxuICAgICAqL1xuICAgIHJlcXVlc3QoYXJncykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZGVidWdMb2dnZXIuZXRoZXJldW0oJ3JlcXVlc3QnLCBhcmdzKTtcbiAgICAgICAgICAgIGlmICghYXJncyB8fCB0eXBlb2YgYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuaW52YWxpZFJlcXVlc3RBcmdzKCksXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IG1ldGhvZCwgcGFyYW1zIH0gPSBhcmdzO1xuICAgICAgICAgICAgaWYgKCFtZXRob2QgfHwgdHlwZW9mIG1ldGhvZCAhPT0gJ3N0cmluZycgfHwgbWV0aG9kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZUVycm9yTWlkZGxld2FyZVxuICAgICAgICAgICAgICAgIC8vIGBUaGUgcmVxdWVzdCAnbWV0aG9kJyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gLFxuICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuaW52YWxpZFJlcXVlc3RNZXRob2QoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhcmFtcykgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHBhcmFtcyAhPT0gJ29iamVjdCcgfHwgcGFyYW1zID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuaW52YWxpZFJlcXVlc3RQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE8gZXJyb3IgbG9nZ2VyXG4gICAgICAgICAgICAvLyAgICAgIGxvZy5lcnJvcihgTWV0YU1hc2sgLSBSUEMgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgICAgICBjb25zdCByZXMgPSAoeWllbGQgdGhpcy5fcnBjUmVxdWVzdCh7IG1ldGhvZCwgcGFyYW1zIH0pKTtcbiAgICAgICAgICAgIGRlYnVnTG9nZ2VyLmV0aGVyZXVtKCdyZXF1ZXN0LT5yZXNwb25zZScsICdcXG4nLCBhcmdzLCAnXFxuIC0tLT4gJywgcmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFByaXZhdGUgTWV0aG9kc1xuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3IgaGVscGVyLlxuICAgICAqIFBvcHVsYXRlcyBpbml0aWFsIHN0YXRlIGJ5IGNhbGxpbmcgJ21ldGFtYXNrX2dldFByb3ZpZGVyU3RhdGUnIGFuZCBlbWl0c1xuICAgICAqIG5lY2Vzc2FyeSBldmVudHMuXG4gICAgICovXG4gICAgX2luaXRpYWxpemVTdGF0ZSgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ21ldGFtYXNrX2dldFByb3ZpZGVyU3RhdGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWNjb3VudHMsIGNoYWluSWQsIGlzVW5sb2NrZWQsIG5ldHdvcmtWZXJzaW9uLCBkZWJ1Z0xvZ2dlclNldHRpbmdzIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgLy8gU3luYyBkZWJ1Z0xvZ2dlciBzZXR0aW5ncyB0byBpbmplY3RlZC5qc1xuICAgICAgICAgICAgICAgIGlmICgoX2MgPSAoX2IgPSAoX2EgPSB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuJG9uZWtleSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlYnVnTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVidWcpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5lbmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LiRvbmVrZXkuZGVidWdMb2dnZXIuZGVidWcuZW5hYmxlKGRlYnVnTG9nZ2VyU2V0dGluZ3MgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IHdlJ3ZlIGNvbm5lY3RlZCwgZm9yIEVJUC0xMTkzIGNvbXBsaWFuY2VcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nvbm5lY3QnLCB7IGNoYWluSWQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24gfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlVW5sb2NrU3RhdGVDaGFuZ2VkKHsgYWNjb3VudHMsIGlzVW5sb2NrZWQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQWNjb3VudHNDaGFuZ2VkKGFjY291bnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IEZhaWxlZCB0byBnZXQgaW5pdGlhbCBzdGF0ZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4nLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdfaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIFJQQyBtZXRob2QuIEZvcndhcmRzIHJlcXVlc3RzIHRvIGJhY2tncm91bmQgdmlhIHRoZSBSUEMgZW5naW5lLlxuICAgICAqIEFsc28gcmVtYXAgaWRzIGluYm91bmQgYW5kIG91dGJvdW5kLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgUlBDIHJlcXVlc3Qgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBjYWxsYmFja1xuICAgICAqL1xuICAgIF9ycGNSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuanNvbnJwYykge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmpzb25ycGMgPSAnMi4wJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgdGhpcy5icmlkZ2VSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5tZXRob2QgPT09ICdldGhfYWNjb3VudHMnIHx8IHBheWxvYWQubWV0aG9kID09PSAnZXRoX3JlcXVlc3RBY2NvdW50cycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGFjY291bnRzIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFjY291bnRzQ2hhbmdlZChyZXN1bHQgfHwgW10sIHBheWxvYWQubWV0aG9kID09PSAnZXRoX2FjY291bnRzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPIGFycmF5IHBheWxvYWQ/XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5icmlkZ2VSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIHByb3ZpZGVyIGJlY29tZXMgY29ubmVjdGVkLCB1cGRhdGVzIGludGVybmFsIHN0YXRlIGFuZCBlbWl0c1xuICAgICAqIHJlcXVpcmVkIGV2ZW50cy4gSWRlbXBvdGVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFpbklkIC0gVGhlIElEIG9mIHRoZSBuZXdseSBjb25uZWN0ZWQgY2hhaW4uXG4gICAgICogQGVtaXRzIE1ldGFNYXNrSW5wYWdlUHJvdmlkZXIjY29ubmVjdFxuICAgICAqL1xuICAgIF9oYW5kbGVDb25uZWN0KGNoYWluSWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZS5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0JywgeyBjaGFpbklkIH0pO1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKG1lc3NhZ2VzLmluZm8uY29ubmVjdGVkKGNoYWluSWQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBwcm92aWRlciBiZWNvbWVzIGRpc2Nvbm5lY3RlZCwgdXBkYXRlcyBpbnRlcm5hbCBzdGF0ZSBhbmQgZW1pdHNcbiAgICAgKiByZXF1aXJlZCBldmVudHMuIElkZW1wb3RlbnQgd2l0aCByZXNwZWN0IHRvIHRoZSBpc1JlY292ZXJhYmxlIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEVycm9yIGNvZGVzIHBlciB0aGUgQ2xvc2VFdmVudCBzdGF0dXMgY29kZXMgYXMgcmVxdWlyZWQgYnkgRUlQLTExOTM6XG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Nsb3NlRXZlbnQjU3RhdHVzX2NvZGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNSZWNvdmVyYWJsZSAtIFdoZXRoZXIgdGhlIGRpc2Nvbm5lY3Rpb24gaXMgcmVjb3ZlcmFibGUuXG4gICAgICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIEEgY3VzdG9tIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQGVtaXRzIE1ldGFNYXNrSW5wYWdlUHJvdmlkZXIjZGlzY29ubmVjdFxuICAgICAqL1xuICAgIF9oYW5kbGVEaXNjb25uZWN0KGlzUmVjb3ZlcmFibGUsIGVycm9yTWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgfHwgKCF0aGlzLl9zdGF0ZS5pc1Blcm1hbmVudGx5RGlzY29ubmVjdGVkICYmICFpc1JlY292ZXJhYmxlKSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIGlmIChpc1JlY292ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEV0aGVyZXVtUnBjRXJyb3IoMTAxMywgLy8gVHJ5IGFnYWluIGxhdGVyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlIHx8IG1lc3NhZ2VzLmVycm9ycy5kaXNjb25uZWN0ZWQoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFdGhlcmV1bVJwY0Vycm9yKDEwMTEsIC8vIEludGVybmFsIGVycm9yXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlIHx8IG1lc3NhZ2VzLmVycm9ycy5wZXJtYW5lbnRseURpc2Nvbm5lY3RlZCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWNjb3VudHMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5pc1VubG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNQZXJtYW5lbnRseURpc2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gY29ubmVjdGlvbiBpcyBsb3N0IHRvIGNyaXRpY2FsIHN0cmVhbXMuXG4gICAgICpcbiAgICAgKiBAZW1pdHMgTWV0YW1hc2tJbnBhZ2VQcm92aWRlciNkaXNjb25uZWN0XG4gICAgICovXG4gICAgX2hhbmRsZVN0cmVhbURpc2Nvbm5lY3Qoc3RyZWFtTmFtZSwgZXJyb3IpIHtcbiAgICAgICAgbG9nU3RyZWFtRGlzY29ubmVjdFdhcm5pbmcodGhpcy5fbG9nLCBzdHJlYW1OYW1lLCBlcnJvciwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZURpc2Nvbm5lY3QoZmFsc2UsIGVycm9yID8gZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwb24gcmVjZWlwdCBvZiBhIG5ldyBjaGFpbklkIGFuZCBuZXR3b3JrVmVyc2lvbiwgZW1pdHMgY29ycmVzcG9uZGluZ1xuICAgICAqIGV2ZW50cyBhbmQgc2V0cyByZWxldmFudCBwdWJsaWMgc3RhdGUuXG4gICAgICogRG9lcyBub3RoaW5nIGlmIG5laXRoZXIgdGhlIGNoYWluSWQgbm9yIHRoZSBuZXR3b3JrVmVyc2lvbiBhcmUgZGlmZmVyZW50XG4gICAgICogZnJvbSBleGlzdGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAZW1pdHMgTWV0YW1hc2tJbnBhZ2VQcm92aWRlciNjaGFpbkNoYW5nZWRcbiAgICAgKiBAcGFyYW0gbmV0d29ya0luZm8gLSBBbiBvYmplY3Qgd2l0aCBuZXR3b3JrIGluZm8uXG4gICAgICogQHBhcmFtIG5ldHdvcmtJbmZvLmNoYWluSWQgLSBUaGUgbGF0ZXN0IGNoYWluIElELlxuICAgICAqIEBwYXJhbSBuZXR3b3JrSW5mby5uZXR3b3JrVmVyc2lvbiAtIFRoZSBsYXRlc3QgbmV0d29yayBJRC5cbiAgICAgKi9cbiAgICBfaGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24gfSA9IHt9KSB7XG4gICAgICAgIGlmICghY2hhaW5JZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGNoYWluSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAhY2hhaW5JZC5zdGFydHNXaXRoKCcweCcpIHx8XG4gICAgICAgICAgICAhbmV0d29ya1ZlcnNpb24gfHxcbiAgICAgICAgICAgIHR5cGVvZiBuZXR3b3JrVmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IFJlY2VpdmVkIGludmFsaWQgbmV0d29yayBwYXJhbWV0ZXJzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLicsIHtcbiAgICAgICAgICAgICAgICBjaGFpbklkLFxuICAgICAgICAgICAgICAgIG5ldHdvcmtWZXJzaW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ldHdvcmtWZXJzaW9uID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZURpc2Nvbm5lY3QodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDb25uZWN0KGNoYWluSWQpO1xuICAgICAgICAgICAgaWYgKGNoYWluSWQgIT09IHRoaXMuY2hhaW5JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5JZCA9IGNoYWluSWQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2hhaW5DaGFuZ2VkJywgdGhpcy5jaGFpbklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gYWNjb3VudHMgbWF5IGhhdmUgY2hhbmdlZC4gRGlmZnMgdGhlIG5ldyBhY2NvdW50cyB2YWx1ZSB3aXRoXG4gICAgICogdGhlIGN1cnJlbnQgb25lLCB1cGRhdGVzIGFsbCBzdGF0ZSBhcyBuZWNlc3NhcnksIGFuZCBlbWl0cyB0aGVcbiAgICAgKiBhY2NvdW50c0NoYW5nZWQgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWNjb3VudHMgLSBUaGUgbmV3IGFjY291bnRzIHZhbHVlLlxuICAgICAqIEBwYXJhbSBpc0V0aEFjY291bnRzIC0gV2hldGhlciB0aGUgYWNjb3VudHMgdmFsdWUgd2FzIHJldHVybmVkIGJ5XG4gICAgICogYSBjYWxsIHRvIGV0aF9hY2NvdW50cy5cbiAgICAgKi9cbiAgICBfaGFuZGxlQWNjb3VudHNDaGFuZ2VkKGFjY291bnRzLCBpc0V0aEFjY291bnRzID0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICBsZXQgX2FjY291bnRzID0gYWNjb3VudHM7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IFJlY2VpdmVkIGludmFsaWQgYWNjb3VudHMgcGFyYW1ldGVyLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLicsIGFjY291bnRzKTtcbiAgICAgICAgICAgIF9hY2NvdW50cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYWNjb3VudCBvZiBhY2NvdW50cykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY2NvdW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignTWV0YU1hc2s6IFJlY2VpdmVkIG5vbi1zdHJpbmcgYWNjb3VudC4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4nLCBhY2NvdW50cyk7XG4gICAgICAgICAgICAgICAgX2FjY291bnRzID0gW107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW1pdCBhY2NvdW50c0NoYW5nZWQgaWYgYW55dGhpbmcgYWJvdXQgdGhlIGFjY291bnRzIGFycmF5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGlmICghZGVxdWFsKHRoaXMuX3N0YXRlLmFjY291bnRzLCBfYWNjb3VudHMpKSB7XG4gICAgICAgICAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgdGhlIGNvcnJlY3QgYWNjb3VudHMgZXZlbiBiZWZvcmUgZXRoX2FjY291bnRzXG4gICAgICAgICAgICAvLyByZXR1cm5zXG4gICAgICAgICAgICBpZiAoaXNFdGhBY2NvdW50cyAmJiB0aGlzLl9zdGF0ZS5hY2NvdW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgTWV0YU1hc2s6ICdldGhfYWNjb3VudHMnIHVuZXhwZWN0ZWRseSB1cGRhdGVkIGFjY291bnRzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLmAsIF9hY2NvdW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZS5hY2NvdW50cyA9IF9hY2NvdW50cztcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzZWxlY3RlZEFkZHJlc3NcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQWRkcmVzcyAhPT0gX2FjY291bnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBfYWNjb3VudHNbMF0gfHwgbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmFsbHksIGFmdGVyIGFsbCBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkLCBlbWl0IHRoZSBldmVudFxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdhY2NvdW50c0NoYW5nZWQnLCBfYWNjb3VudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwb24gcmVjZWlwdCBvZiBhIG5ldyBpc1VubG9ja2VkIHN0YXRlLCBzZXRzIHJlbGV2YW50IHB1YmxpYyBzdGF0ZS5cbiAgICAgKiBDYWxscyB0aGUgYWNjb3VudHMgY2hhbmdlZCBoYW5kbGVyIHdpdGggdGhlIHJlY2VpdmVkIGFjY291bnRzLCBvciBhbiBlbXB0eVxuICAgICAqIGFycmF5LlxuICAgICAqXG4gICAgICogRG9lcyBub3RoaW5nIGlmIHRoZSByZWNlaXZlZCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgZXhpc3RpbmcgdmFsdWUuXG4gICAgICogVGhlcmUgYXJlIG5vIGxvY2svdW5sb2NrIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRzIC0gT3B0aW9ucyBiYWcuXG4gICAgICogQHBhcmFtIG9wdHMuYWNjb3VudHMgLSBUaGUgZXhwb3NlZCBhY2NvdW50cywgaWYgYW55LlxuICAgICAqIEBwYXJhbSBvcHRzLmlzVW5sb2NrZWQgLSBUaGUgbGF0ZXN0IGlzVW5sb2NrZWQgdmFsdWUuXG4gICAgICovXG4gICAgX2hhbmRsZVVubG9ja1N0YXRlQ2hhbmdlZCh7IGFjY291bnRzLCBpc1VubG9ja2VkIH0gPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGlzVW5sb2NrZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdNZXRhTWFzazogUmVjZWl2ZWQgaW52YWxpZCBpc1VubG9ja2VkIHBhcmFtZXRlci4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmxvY2tlZCAhPT0gdGhpcy5fc3RhdGUuaXNVbmxvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUuaXNVbmxvY2tlZCA9IGlzVW5sb2NrZWQ7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBY2NvdW50c0NoYW5nZWQoYWNjb3VudHMgfHwgW10pO1xuICAgICAgICB9XG4gICAgfVxufVxuQmFzZVByb3ZpZGVyLl9kZWZhdWx0U3RhdGUgPSB7XG4gICAgYWNjb3VudHM6IG51bGwsXG4gICAgaXNDb25uZWN0ZWQ6IGZhbHNlLFxuICAgIGlzVW5sb2NrZWQ6IGZhbHNlLFxuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICBpc1Blcm1hbmVudGx5RGlzY29ubmVjdGVkOiBmYWxzZSxcbn07XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLWR1cGUtY2xhc3MtbWVtYmVycyxAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbmltcG9ydCB7IGV0aEVycm9ycyB9IGZyb20gJ2V0aC1ycGMtZXJyb3JzJztcbmltcG9ydCBCYXNlUHJvdmlkZXIgZnJvbSAnLi9CYXNlUHJvdmlkZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IHNlbmRTaXRlTWV0YWRhdGEgZnJvbSAnLi9zaXRlTWV0YWRhdGEnO1xuaW1wb3J0IHsgRU1JVFRFRF9OT1RJRklDQVRJT05TLCBOT09QIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhTWFza0lucGFnZVByb3ZpZGVyIGV4dGVuZHMgQmFzZVByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvblN0cmVhbSAtIEEgTm9kZS5qcyBkdXBsZXggc3RyZWFtXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25zIGJhZ1xuICAgICAqIEBwYXJhbSBvcHRpb25zLmpzb25ScGNTdHJlYW1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIEpTT04tUlBDIHN0cmVhbS5cbiAgICAgKiBEZWZhdWx0OiBtZXRhbWFzay1wcm92aWRlclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmxvZ2dlciAtIFRoZSBsb2dnaW5nIEFQSSB0byB1c2UuIERlZmF1bHQ6IGNvbnNvbGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhFdmVudExpc3RlbmVycyAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBldmVudFxuICAgICAqIGxpc3RlbmVycy4gRGVmYXVsdDogMTAwXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc2hvdWxkU2VuZE1ldGFkYXRhIC0gV2hldGhlciB0aGUgcHJvdmlkZXIgc2hvdWxkXG4gICAgICogc2VuZCBwYWdlIG1ldGFkYXRhLiBEZWZhdWx0OiB0cnVlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2VudFdhcm5pbmdzID0ge1xuICAgICAgICAgICAgLy8gbWV0aG9kc1xuICAgICAgICAgICAgZW5hYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbE1ldGhvZHM6IGZhbHNlLFxuICAgICAgICAgICAgc2VuZDogZmFsc2UsXG4gICAgICAgICAgICAvLyBldmVudHNcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBuZXR3b3JrQ2hhbmdlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNob3VsZFNlbmRNZXRhZGF0YSA9IChfYSA9IGNvbmZpZy5zaG91bGRTZW5kTWV0YWRhdGEpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgICAgIHRoaXMubmV0d29ya1ZlcnNpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmlzTWV0YU1hc2sgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZW5kU3luYyA9IHRoaXMuX3NlbmRTeW5jLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZW5hYmxlID0gdGhpcy5lbmFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZW5kID0gdGhpcy5zZW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VuZEFzeW5jID0gdGhpcy5zZW5kQXN5bmMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fd2Fybk9mRGVwcmVjYXRpb24gPSB0aGlzLl93YXJuT2ZEZXByZWNhdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9tZXRhbWFzayA9IHRoaXMuX2dldEV4cGVyaW1lbnRhbEFwaSgpO1xuICAgICAgICAvLyBoYW5kbGUgSlNPTi1SUEMgbm90aWZpY2F0aW9uc1xuICAgICAgICB0aGlzLmJyaWRnZS5vbignbm90aWZpY2F0aW9uJywgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgaWYgKEVNSVRURURfTk9USUZJQ0FUSU9OUy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICAgICAgICAgIC8vIGVtaXR0ZWQgaGVyZSBiZWNhdXNlIHRoYXQgd2FzIHRoZSBvcmlnaW5hbCBvcmRlclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkUGFyYW1zID0gcGF5bG9hZC5wYXJhbXM7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdub3RpZmljYXRpb24nLCBwYXlsb2FkUGFyYW1zLnJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBzZW5kIHdlYnNpdGUgbWV0YWRhdGFcbiAgICAgICAgaWYgKHNob3VsZFNlbmRNZXRhZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICB2b2lkIHNlbmRTaXRlTWV0YWRhdGEodGhpcy5icmlkZ2UsIHRoaXMuX2xvZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50TG9hZGVkSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdm9pZCBzZW5kU2l0ZU1ldGFkYXRhKHRoaXMuYnJpZGdlLCB0aGlzLl9sb2cpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGRvbUNvbnRlbnRMb2FkZWRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZG9tQ29udGVudExvYWRlZEhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUHVibGljIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIFN1Ym1pdHMgYW4gUlBDIHJlcXVlc3QgcGVyIHRoZSBnaXZlbiBKU09OLVJQQyByZXF1ZXN0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIFJQQyByZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBzZW5kQXN5bmMocGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdm9pZCB0aGlzLl9ycGNSZXF1ZXN0KHBheWxvYWQsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2Ugb3ZlcnJpZGUgdGhlIGZvbGxvd2luZyBldmVudCBtZXRob2RzIHNvIHRoYXQgd2UgY2FuIHdhcm4gY29uc3VtZXJzXG4gICAgICogYWJvdXQgZGVwcmVjYXRlZCBldmVudHM6XG4gICAgICogICBhZGRMaXN0ZW5lciwgb24sIG9uY2UsIHByZXBlbmRMaXN0ZW5lciwgcHJlcGVuZE9uY2VMaXN0ZW5lclxuICAgICAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhZGRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX3dhcm5PZkRlcHJlY2F0aW9uKGV2ZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBzdXBlci5hZGRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fd2Fybk9mRGVwcmVjYXRpb24oZXZlbnROYW1lKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25jZShldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX3dhcm5PZkRlcHJlY2F0aW9uKGV2ZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBzdXBlci5vbmNlKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgICBwcmVwZW5kTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl93YXJuT2ZEZXByZWNhdGlvbihldmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gc3VwZXIuYWRkTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICAgIHByZXBlbmRPbmNlTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLl93YXJuT2ZEZXByZWNhdGlvbihldmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gc3VwZXIub25jZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gICAgLy89ID09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQcml2YXRlIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIHByb3ZpZGVyIGJlY29tZXMgZGlzY29ubmVjdGVkLCB1cGRhdGVzIGludGVybmFsIHN0YXRlIGFuZCBlbWl0c1xuICAgICAqIHJlcXVpcmVkIGV2ZW50cy4gSWRlbXBvdGVudCB3aXRoIHJlc3BlY3QgdG8gdGhlIGlzUmVjb3ZlcmFibGUgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogRXJyb3IgY29kZXMgcGVyIHRoZSBDbG9zZUV2ZW50IHN0YXR1cyBjb2RlcyBhcyByZXF1aXJlZCBieSBFSVAtMTE5MzpcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2xvc2VFdmVudCNTdGF0dXNfY29kZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc1JlY292ZXJhYmxlIC0gV2hldGhlciB0aGUgZGlzY29ubmVjdGlvbiBpcyByZWNvdmVyYWJsZS5cbiAgICAgKiBAcGFyYW0gZXJyb3JNZXNzYWdlIC0gQSBjdXN0b20gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAZW1pdHMgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciNkaXNjb25uZWN0XG4gICAgICovXG4gICAgX2hhbmRsZURpc2Nvbm5lY3QoaXNSZWNvdmVyYWJsZSwgZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyLl9oYW5kbGVEaXNjb25uZWN0KGlzUmVjb3ZlcmFibGUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIGlmICh0aGlzLm5ldHdvcmtWZXJzaW9uICYmICFpc1JlY292ZXJhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5ldHdvcmtWZXJzaW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXYXJucyBvZiBkZXByZWNhdGlvbiBmb3IgdGhlIGdpdmVuIGV2ZW50LCBpZiBhcHBsaWNhYmxlLlxuICAgICAqL1xuICAgIF93YXJuT2ZEZXByZWNhdGlvbihldmVudE5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKChfYSA9IHRoaXMuX3NlbnRXYXJuaW5ncykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV2ZW50c1tldmVudE5hbWVdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy53YXJuKG1lc3NhZ2VzLndhcm5pbmdzLmV2ZW50c1tldmVudE5hbWVdKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbnRXYXJuaW5ncy5ldmVudHNbZXZlbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy89ID09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEZXByZWNhdGVkIE1ldGhvZHNcbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PVxuICAgIC8qKlxuICAgICAqIEVxdWl2YWxlbnQgdG86IGV0aGVyZXVtLnJlcXVlc3QoJ2V0aF9yZXF1ZXN0QWNjb3VudHMnKVxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHJlcXVlc3QoeyBtZXRob2Q6ICdldGhfcmVxdWVzdEFjY291bnRzJyB9KSBpbnN0ZWFkLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFkZHJlc3Nlcy5cbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NlbnRXYXJuaW5ncy5lbmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cud2FybihtZXNzYWdlcy53YXJuaW5ncy5lbmFibGVEZXByZWNhdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VudFdhcm5pbmdzLmVuYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKHlpZWxkIHRoaXMuX3JwY1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ2V0aF9yZXF1ZXN0QWNjb3VudHMnLFxuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kKG1ldGhvZE9yUGF5bG9hZCwgY2FsbGJhY2tPckFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZW50V2FybmluZ3Muc2VuZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLndhcm4obWVzc2FnZXMud2FybmluZ3Muc2VuZERlcHJlY2F0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbnRXYXJuaW5ncy5zZW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZE9yUGF5bG9hZCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICghY2FsbGJhY2tPckFyZ3MgfHwgQXJyYXkuaXNBcnJheShjYWxsYmFja09yQXJncykpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcnBjUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2RPclBheWxvYWQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBjYWxsYmFja09yQXJncyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2RPclBheWxvYWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtZXRob2RPclBheWxvYWQgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICB0eXBlb2YgY2FsbGJhY2tPckFyZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ycGNSZXF1ZXN0KG1ldGhvZE9yUGF5bG9hZCwgY2FsbGJhY2tPckFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kU3luYyhtZXRob2RPclBheWxvYWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtZXRob2QsIHVzZWQgaW4gc2VuZC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgX3NlbmRTeW5jKHBheWxvYWQpIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgc3dpdGNoIChwYXlsb2FkLm1ldGhvZCkge1xuICAgICAgICAgICAgY2FzZSAnZXRoX2FjY291bnRzJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcyA/IFt0aGlzLnNlbGVjdGVkQWRkcmVzc10gOiBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V0aF9jb2luYmFzZSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZEFkZHJlc3MgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V0aF91bmluc3RhbGxGaWx0ZXInOlxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5fcnBjUmVxdWVzdChwYXlsb2FkLCBOT09QKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV0X3ZlcnNpb24nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubmV0d29ya1ZlcnNpb24gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLmVycm9ycy51bnN1cHBvcnRlZFN5bmMocGF5bG9hZC5tZXRob2QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgICAgICAgICBqc29ucnBjOiBwYXlsb2FkLmpzb25ycGMsXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yIGhlbHBlci5cbiAgICAgKiBHZXRzIGV4cGVyaW1lbnRhbCBfbWV0YW1hc2sgQVBJIGFzIFByb3h5LCBzbyB0aGF0IHdlIGNhbiB3YXJuIGNvbnN1bWVyc1xuICAgICAqIGFib3V0IGl0cyBleHBlcmltZW50IG5hdHVyZS5cbiAgICAgKi9cbiAgICBfZ2V0RXhwZXJpbWVudGFsQXBpKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRGV0ZXJtaW5lcyBpZiBNZXRhTWFzayBpcyB1bmxvY2tlZCBieSB0aGUgdXNlci5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0cnVlIGlmIE1ldGFNYXNrIGlzIGN1cnJlbnRseSB1bmxvY2tlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpc1VubG9ja2VkOiAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignX2luaXRpYWxpemVkJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5pc1VubG9ja2VkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE1ha2UgYSBiYXRjaCBSUEMgcmVxdWVzdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmVxdWVzdEJhdGNoOiAocmVxdWVzdHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWVzdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGV0aEVycm9ycy5ycGMuaW52YWxpZFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0JhdGNoIHJlcXVlc3RzIG11c3QgYmUgbWFkZSB3aXRoIGFuIGFycmF5IG9mIHJlcXVlc3Qgb2JqZWN0cy4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVxdWVzdHMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcnBjUmVxdWVzdChyZXF1ZXN0cyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZ2V0OiAob2JqLCBwcm9wLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zZW50V2FybmluZ3MuZXhwZXJpbWVudGFsTWV0aG9kcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cud2FybihtZXNzYWdlcy53YXJuaW5ncy5leHBlcmltZW50YWxNZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VudFdhcm5pbmdzLmV4cGVyaW1lbnRhbE1ldGhvZHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQob2JqLCBwcm9wLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcG9uIHJlY2VpcHQgb2YgYSBuZXcgY2hhaW5JZCBhbmQgbmV0d29ya1ZlcnNpb24sIGVtaXRzIGNvcnJlc3BvbmRpbmdcbiAgICAgKiBldmVudHMgYW5kIHNldHMgcmVsZXZhbnQgcHVibGljIHN0YXRlLlxuICAgICAqIERvZXMgbm90aGluZyBpZiBuZWl0aGVyIHRoZSBjaGFpbklkIG5vciB0aGUgbmV0d29ya1ZlcnNpb24gYXJlIGRpZmZlcmVudFxuICAgICAqIGZyb20gZXhpc3RpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQGVtaXRzIE1ldGFtYXNrSW5wYWdlUHJvdmlkZXIjY2hhaW5DaGFuZ2VkXG4gICAgICogQGVtaXRzIE1ldGFtYXNrSW5wYWdlUHJvdmlkZXIjbmV0d29ya0NoYW5nZWRcbiAgICAgKiBAcGFyYW0gbmV0d29ya0luZm8gLSBBbiBvYmplY3Qgd2l0aCBuZXR3b3JrIGluZm8uXG4gICAgICogQHBhcmFtIG5ldHdvcmtJbmZvLmNoYWluSWQgLSBUaGUgbGF0ZXN0IGNoYWluIElELlxuICAgICAqIEBwYXJhbSBuZXR3b3JrSW5mby5uZXR3b3JrVmVyc2lvbiAtIFRoZSBsYXRlc3QgbmV0d29yayBJRC5cbiAgICAgKi9cbiAgICBfaGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24sIH0gPSB7fSkge1xuICAgICAgICBzdXBlci5faGFuZGxlQ2hhaW5DaGFuZ2VkKHsgY2hhaW5JZCwgbmV0d29ya1ZlcnNpb24gfSk7XG4gICAgICAgIGlmIChuZXR3b3JrVmVyc2lvbiAmJlxuICAgICAgICAgICAgbmV0d29ya1ZlcnNpb24gIT09ICdsb2FkaW5nJyAmJlxuICAgICAgICAgICAgbmV0d29ya1ZlcnNpb24gIT09IHRoaXMubmV0d29ya1ZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMubmV0d29ya1ZlcnNpb24gPSBuZXR3b3JrVmVyc2lvbjtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbmV0d29ya0NoYW5nZWQnLCB0aGlzLm5ldHdvcmtWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBCYXNlUHJvdmlkZXIgZnJvbSAnLi9CYXNlUHJvdmlkZXInO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVByb3ZpZGVyLCBzZXRHbG9iYWxQcm92aWRlciwgfSBmcm9tICcuL2luaXRpYWxpemVJbnBhZ2VQcm92aWRlcic7XG5pbXBvcnQgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciBmcm9tICcuL01ldGFNYXNrSW5wYWdlUHJvdmlkZXInO1xuaW1wb3J0IHNoaW1XZWIzIGZyb20gJy4vc2hpbVdlYjMnO1xuZXhwb3J0IHsgaW5pdGlhbGl6ZVByb3ZpZGVyLCBNZXRhTWFza0lucGFnZVByb3ZpZGVyLCBCYXNlUHJvdmlkZXIsIHNldEdsb2JhbFByb3ZpZGVyLCBzaGltV2ViMywgfTtcbiIsImltcG9ydCBNZXRhTWFza0lucGFnZVByb3ZpZGVyIGZyb20gJy4vTWV0YU1hc2tJbnBhZ2VQcm92aWRlcic7XG5pbXBvcnQgc2hpbVdlYjMgZnJvbSAnLi9zaGltV2ViMyc7XG4vKipcbiAqIEluaXRpYWxpemVzIGEgTWV0YU1hc2tJbnBhZ2VQcm92aWRlciBhbmQgKG9wdGlvbmFsbHkpIGFzc2lnbnMgaXQgYXMgd2luZG93LmV0aGVyZXVtLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9ucyBiYWcuXG4gKiBAcGFyYW0gb3B0aW9ucy5jb25uZWN0aW9uU3RyZWFtIC0gQSBOb2RlLmpzIHN0cmVhbS5cbiAqIEBwYXJhbSBvcHRpb25zLmpzb25ScGNTdHJlYW1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIEpTT04tUlBDIHN0cmVhbS5cbiAqIEBwYXJhbSBvcHRpb25zLm1heEV2ZW50TGlzdGVuZXJzIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50IGxpc3RlbmVycy5cbiAqIEBwYXJhbSBvcHRpb25zLnNob3VsZFNlbmRNZXRhZGF0YSAtIFdoZXRoZXIgdGhlIHByb3ZpZGVyIHNob3VsZCBzZW5kIHBhZ2UgbWV0YWRhdGEuXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG91bGRTZXRPbldpbmRvdyAtIFdoZXRoZXIgdGhlIHByb3ZpZGVyIHNob3VsZCBiZSBzZXQgYXMgd2luZG93LmV0aGVyZXVtLlxuICogQHBhcmFtIG9wdGlvbnMuc2hvdWxkU2hpbVdlYjMgLSBXaGV0aGVyIGEgd2luZG93LndlYjMgc2hpbSBzaG91bGQgYmUgaW5qZWN0ZWQuXG4gKiBAcmV0dXJucyBUaGUgaW5pdGlhbGl6ZWQgcHJvdmlkZXIgKHdoZXRoZXIgc2V0IG9yIG5vdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplUHJvdmlkZXIoeyBicmlkZ2UsIGxvZ2dlciA9IGNvbnNvbGUsIG1heEV2ZW50TGlzdGVuZXJzID0gMTAwLCBzaG91bGRTZW5kTWV0YWRhdGEgPSB0cnVlLCBzaG91bGRTZXRPbldpbmRvdyA9IHRydWUsIHNob3VsZFNoaW1XZWIzID0gZmFsc2UsIH0pIHtcbiAgICBsZXQgcHJvdmlkZXIgPSBuZXcgTWV0YU1hc2tJbnBhZ2VQcm92aWRlcih7XG4gICAgICAgIGJyaWRnZSxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICBtYXhFdmVudExpc3RlbmVycyxcbiAgICAgICAgc2hvdWxkU2VuZE1ldGFkYXRhLFxuICAgIH0pO1xuICAgIHByb3ZpZGVyID0gbmV3IFByb3h5KHByb3ZpZGVyLCB7XG4gICAgICAgIC8vIHNvbWUgY29tbW9uIGxpYnJhcmllcywgZS5nLiB3ZWIzQDEueCwgbWVzcyB3aXRoIG91ciBBUElcbiAgICAgICAgZGVsZXRlUHJvcGVydHk6ICgpID0+IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKHNob3VsZFNldE9uV2luZG93KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgc2V0R2xvYmFsUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hpbVdlYjMpIHtcbiAgICAgICAgc2hpbVdlYjMocHJvdmlkZXIsIGxvZ2dlcik7XG4gICAgfVxuICAgIHJldHVybiBwcm92aWRlcjtcbn1cbi8qKlxuICogU2V0cyB0aGUgZ2l2ZW4gcHJvdmlkZXIgaW5zdGFuY2UgYXMgd2luZG93LmV0aGVyZXVtIGFuZCBkaXNwYXRjaGVzIHRoZVxuICogJ2V0aGVyZXVtI2luaXRpYWxpemVkJyBldmVudCBvbiB3aW5kb3cuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySW5zdGFuY2UgLSBUaGUgcHJvdmlkZXIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxQcm92aWRlcihwcm92aWRlckluc3RhbmNlKSB7XG4gICAgd2luZG93LmV0aGVyZXVtID0gcHJvdmlkZXJJbnN0YW5jZTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2V0aGVyZXVtI2luaXRpYWxpemVkJykpO1xufVxuIiwiY29uc3QgbWVzc2FnZXMgPSB7XG4gICAgZXJyb3JzOiB7XG4gICAgICAgIGRpc2Nvbm5lY3RlZDogKCkgPT4gJ01ldGFNYXNrOiBEaXNjb25uZWN0ZWQgZnJvbSBjaGFpbi4gQXR0ZW1wdGluZyB0byBjb25uZWN0LicsXG4gICAgICAgIHBlcm1hbmVudGx5RGlzY29ubmVjdGVkOiAoKSA9PiAnTWV0YU1hc2s6IERpc2Nvbm5lY3RlZCBmcm9tIE1ldGFNYXNrIGJhY2tncm91bmQuIFBhZ2UgcmVsb2FkIHJlcXVpcmVkLicsXG4gICAgICAgIHNlbmRTaXRlTWV0YWRhdGE6ICgpID0+IGBNZXRhTWFzazogRmFpbGVkIHRvIHNlbmQgc2l0ZSBtZXRhZGF0YS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBlcnJvciwgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy5gLFxuICAgICAgICB1bnN1cHBvcnRlZFN5bmM6IChtZXRob2QpID0+IGBNZXRhTWFzazogVGhlIE1ldGFNYXNrIEV0aGVyZXVtIHByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQgc3luY2hyb25vdXMgbWV0aG9kcyBsaWtlICR7bWV0aG9kfSB3aXRob3V0IGEgY2FsbGJhY2sgcGFyYW1ldGVyLmAsXG4gICAgICAgIGludmFsaWREdXBsZXhTdHJlYW06ICgpID0+ICdNdXN0IHByb3ZpZGUgYSBOb2RlLmpzLXN0eWxlIGR1cGxleCBzdHJlYW0uJyxcbiAgICAgICAgaW52YWxpZFJlcXVlc3RBcmdzOiAoKSA9PiBgRXhwZWN0ZWQgYSBzaW5nbGUsIG5vbi1hcnJheSwgb2JqZWN0IGFyZ3VtZW50LmAsXG4gICAgICAgIGludmFsaWRSZXF1ZXN0TWV0aG9kOiAoKSA9PiBgJ2FyZ3MubWV0aG9kJyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5gLFxuICAgICAgICBpbnZhbGlkUmVxdWVzdFBhcmFtczogKCkgPT4gYCdhcmdzLnBhcmFtcycgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYXJyYXkgaWYgcHJvdmlkZWQuYCxcbiAgICAgICAgaW52YWxpZExvZ2dlck9iamVjdDogKCkgPT4gYCdhcmdzLmxvZ2dlcicgbXVzdCBiZSBhbiBvYmplY3QgaWYgcHJvdmlkZWQuYCxcbiAgICAgICAgaW52YWxpZExvZ2dlck1ldGhvZDogKG1ldGhvZCkgPT4gYCdhcmdzLmxvZ2dlcicgbXVzdCBpbmNsdWRlIHJlcXVpcmVkIG1ldGhvZCAnJHttZXRob2R9Jy5gLFxuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgICBjb25uZWN0ZWQ6IChjaGFpbklkKSA9PiBgTWV0YU1hc2s6IENvbm5lY3RlZCB0byBjaGFpbiB3aXRoIElEIFwiJHtjaGFpbklkfVwiLmAsXG4gICAgfSxcbiAgICB3YXJuaW5nczoge1xuICAgICAgICAvLyBkZXByZWNhdGVkIG1ldGhvZHNcbiAgICAgICAgZW5hYmxlRGVwcmVjYXRpb246IGBNZXRhTWFzazogJ2V0aGVyZXVtLmVuYWJsZSgpJyBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlIHRoZSAnZXRoX3JlcXVlc3RBY2NvdW50cycgUlBDIG1ldGhvZCBpbnN0ZWFkLlxcbkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6IGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMTEwMmAsXG4gICAgICAgIHNlbmREZXByZWNhdGlvbjogYE1ldGFNYXNrOiAnZXRoZXJldW0uc2VuZCguLi4pJyBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlICdldGhlcmV1bS5zZW5kQXN5bmMoLi4uKScgb3IgJ2V0aGVyZXVtLnJlcXVlc3QoLi4uKScgaW5zdGVhZC5cXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTExOTNgLFxuICAgICAgICAvLyBkZXByZWNhdGVkIGV2ZW50c1xuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIGNsb3NlOiBgTWV0YU1hc2s6IFRoZSBldmVudCAnY2xvc2UnIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgJ2Rpc2Nvbm5lY3QnIGluc3RlYWQuXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMTkzI2Rpc2Nvbm5lY3RgLFxuICAgICAgICAgICAgZGF0YTogYE1ldGFNYXNrOiBUaGUgZXZlbnQgJ2RhdGEnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBVc2UgJ21lc3NhZ2UnIGluc3RlYWQuXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMTkzI21lc3NhZ2VgLFxuICAgICAgICAgICAgbmV0d29ya0NoYW5nZWQ6IGBNZXRhTWFzazogVGhlIGV2ZW50ICduZXR3b3JrQ2hhbmdlZCcgaXMgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVXNlICdjaGFpbkNoYW5nZWQnIGluc3RlYWQuXFxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC0xMTkzI2NoYWluY2hhbmdlZGAsXG4gICAgICAgICAgICBub3RpZmljYXRpb246IGBNZXRhTWFzazogVGhlIGV2ZW50ICdub3RpZmljYXRpb24nIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFVzZSAnbWVzc2FnZScgaW5zdGVhZC5cXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTExOTMjbWVzc2FnZWAsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIG1pc2NcbiAgICAgICAgZXhwZXJpbWVudGFsTWV0aG9kczogYE1ldGFNYXNrOiAnZXRoZXJldW0uX21ldGFtYXNrJyBleHBvc2VzIG5vbi1zdGFuZGFyZCwgZXhwZXJpbWVudGFsIG1ldGhvZHMuIFRoZXkgbWF5IGJlIHJlbW92ZWQgb3IgY2hhbmdlZCB3aXRob3V0IHdhcm5pbmcuYCxcbiAgICB9LFxufTtcbmV4cG9ydCBkZWZhdWx0IG1lc3NhZ2VzO1xuIiwiLyoqXG4gKiBJZiBubyBleGlzdGluZyB3aW5kb3cud2ViMyBpcyBmb3VuZCwgdGhpcyBmdW5jdGlvbiBpbmplY3RzIGEgd2ViMyBcInNoaW1cIiB0b1xuICogbm90IGJyZWFrIGRhcHBzIHRoYXQgcmVseSBvbiB3aW5kb3cud2ViMy5jdXJyZW50UHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVyIC0gVGhlIHByb3ZpZGVyIHRvIHNldCBhcyB3aW5kb3cud2ViMy5jdXJyZW50UHJvdmlkZXIuXG4gKiBAcGFyYW0gbG9nIC0gVGhlIGxvZ2dpbmcgQVBJIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hpbVdlYjMocHJvdmlkZXIsIGxvZyA9IGNvbnNvbGUpIHtcbiAgICBsZXQgbG9nZ2VkQ3VycmVudFByb3ZpZGVyID0gZmFsc2U7XG4gICAgbGV0IGxvZ2dlZE1pc3NpbmdQcm9wZXJ0eSA9IGZhbHNlO1xuICAgIGlmICghd2luZG93LndlYjMpIHtcbiAgICAgICAgY29uc3QgU0hJTV9JREVOVElGSUVSID0gJ19faXNNZXRhTWFza1NoaW1fXyc7XG4gICAgICAgIGxldCB3ZWIzU2hpbSA9IHsgY3VycmVudFByb3ZpZGVyOiBwcm92aWRlciB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2ViM1NoaW0sIFNISU1fSURFTlRJRklFUiwge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHdlYjNTaGltID0gbmV3IFByb3h5KHdlYjNTaGltLCB7XG4gICAgICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3BlcnR5LCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSAnY3VycmVudFByb3ZpZGVyJyAmJiAhbG9nZ2VkQ3VycmVudFByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlZEN1cnJlbnRQcm92aWRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCdZb3UgYXJlIGFjY2Vzc2luZyB0aGUgTWV0YU1hc2sgd2luZG93LndlYjMuY3VycmVudFByb3ZpZGVyIHNoaW0uIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZDsgdXNlIHdpbmRvdy5ldGhlcmV1bSBpbnN0ZWFkLiBGb3IgZGV0YWlscywgc2VlOiBodHRwczovL2RvY3MubWV0YW1hc2suaW8vZ3VpZGUvcHJvdmlkZXItbWlncmF0aW9uLmh0bWwjcmVwbGFjaW5nLXdpbmRvdy13ZWIzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ICE9PSAnY3VycmVudFByb3ZpZGVyJyAmJlxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSAhPT0gU0hJTV9JREVOVElGSUVSICYmXG4gICAgICAgICAgICAgICAgICAgICFsb2dnZWRNaXNzaW5nUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VkTWlzc2luZ1Byb3BlcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGBNZXRhTWFzayBubyBsb25nZXIgaW5qZWN0cyB3ZWIzLiBGb3IgZGV0YWlscywgc2VlOiBodHRwczovL2RvY3MubWV0YW1hc2suaW8vZ3VpZGUvcHJvdmlkZXItbWlncmF0aW9uLmh0bWwjcmVwbGFjaW5nLXdpbmRvdy13ZWIzYCk7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVxdWVzdCh7IG1ldGhvZDogJ21ldGFtYXNrX2xvZ1dlYjNTaGltVXNhZ2UnIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ01ldGFNYXNrOiBGYWlsZWQgdG8gbG9nIHdlYjMgc2hpbSB1c2FnZS4nLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgLi4uYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKCdZb3UgYXJlIGFjY2Vzc2luZyB0aGUgTWV0YU1hc2sgd2luZG93LndlYjMgc2hpbS4gVGhpcyBvYmplY3QgaXMgZGVwcmVjYXRlZDsgdXNlIHdpbmRvdy5ldGhlcmV1bSBpbnN0ZWFkLiBGb3IgZGV0YWlscywgc2VlOiBodHRwczovL2RvY3MubWV0YW1hc2suaW8vZ3VpZGUvcHJvdmlkZXItbWlncmF0aW9uLmh0bWwjcmVwbGFjaW5nLXdpbmRvdy13ZWIzJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICd3ZWIzJywge1xuICAgICAgICAgICAgdmFsdWU6IHdlYjNTaGltLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBJSW5qZWN0ZWRQcm92aWRlck5hbWVzIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci10eXBlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG4vKipcbiAqIFNlbmRzIHNpdGUgbWV0YWRhdGEgb3ZlciBhbiBSUEMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gZW5naW5lIC0gVGhlIEpTT04gUlBDIEVuZ2luZSB0byBzZW5kIG1ldGFkYXRhIG92ZXIuXG4gKiBAcGFyYW0gbG9nIC0gVGhlIGxvZ2dpbmcgQVBJIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VuZFNpdGVNZXRhZGF0YShlbmdpbmUsIGxvZykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb21haW5NZXRhZGF0YSA9IHlpZWxkIGdldFNpdGVNZXRhZGF0YSgpO1xuICAgICAgICAgICAgLy8gY2FsbCBlbmdpbmUuaGFuZGxlIGRpcmVjdGx5IHRvIGF2b2lkIG5vcm1hbCBSUEMgcmVxdWVzdCBoYW5kbGluZ1xuICAgICAgICAgICAgdm9pZCBlbmdpbmUucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgc2NvcGU6IElJbmplY3RlZFByb3ZpZGVyTmFtZXMuZXRoZXJldW0sXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ21ldGFtYXNrX3NlbmREb21haW5NZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogZG9tYWluTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nLmVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlcy5lcnJvcnMuc2VuZFNpdGVNZXRhZGF0YSgpLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogR2V0cyBzaXRlIG1ldGFkYXRhIGFuZCByZXR1cm5zIGl0XG4gKlxuICovXG5mdW5jdGlvbiBnZXRTaXRlTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGdldFNpdGVOYW1lKHdpbmRvdyksXG4gICAgICAgICAgICBpY29uOiB5aWVsZCBnZXRTaXRlSWNvbih3aW5kb3cpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhIG5hbWUgZm9yIHRoZSBzaXRlIGZyb20gdGhlIERPTVxuICovXG5mdW5jdGlvbiBnZXRTaXRlTmFtZSh3aW5kb3dPYmplY3QpIHtcbiAgICBjb25zdCB7IGRvY3VtZW50IH0gPSB3aW5kb3dPYmplY3Q7XG4gICAgY29uc3Qgc2l0ZU5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkID4gbWV0YVtwcm9wZXJ0eT1cIm9nOnNpdGVfbmFtZVwiXScpO1xuICAgIGlmIChzaXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gc2l0ZU5hbWUuY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgbWV0YVRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCA+IG1ldGFbbmFtZT1cInRpdGxlXCJdJyk7XG4gICAgaWYgKG1ldGFUaXRsZSkge1xuICAgICAgICByZXR1cm4gbWV0YVRpdGxlLmNvbnRlbnQ7XG4gICAgfVxuICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC50aXRsZTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYW4gaWNvbiBmb3IgdGhlIHNpdGUgZnJvbSB0aGUgRE9NXG4gKiBAcmV0dXJucyBhbiBpY29uIFVSTFxuICovXG5mdW5jdGlvbiBnZXRTaXRlSWNvbih3aW5kb3dPYmplY3QpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50IH0gPSB3aW5kb3dPYmplY3Q7XG4gICAgICAgIGNvbnN0IGljb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaGVhZCA+IGxpbmtbcmVsfj1cImljb25cIl0nKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGljb25zQXJyID0gaWNvbnM7XG4gICAgICAgIGZvciAoY29uc3QgaWNvbiBvZiBpY29uc0Fycikge1xuICAgICAgICAgICAgaWYgKGljb24gJiYgKHlpZWxkIGltZ0V4aXN0cyhpY29uLmhyZWYpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpY29uLmhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gaW1hZ2UgVVJMIGV4aXN0c1xuICogQHBhcmFtIHVybCAtIHRoZSB1cmwgb2YgdGhlIGltYWdlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbWFnZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGltZ0V4aXN0cyh1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICBpbWcuc3JjID0gdXJsO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsIi8vIHV0aWxpdHkgZnVuY3Rpb25zXG4vKipcbiAqIExvZ3MgYSBzdHJlYW0gZGlzY29ubmVjdGlvbiBlcnJvci4gRW1pdHMgYW4gJ2Vycm9yJyBpZiBnaXZlbiBhblxuICogRXZlbnRFbWl0dGVyIHRoYXQgaGFzIGxpc3RlbmVycyBmb3IgdGhlICdlcnJvcicgZXZlbnQuXG4gKlxuICogQHBhcmFtIGxvZyAtIFRoZSBsb2dnaW5nIEFQSSB0byB1c2UuXG4gKiBAcGFyYW0gcmVtb3RlTGFiZWwgLSBUaGUgbGFiZWwgb2YgdGhlIGRpc2Nvbm5lY3RlZCBzdHJlYW0uXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgYXNzb2NpYXRlZCBlcnJvciB0byBsb2cuXG4gKiBAcGFyYW0gZW1pdHRlciAtIFRoZSBsb2dnaW5nIEFQSSB0byB1c2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dTdHJlYW1EaXNjb25uZWN0V2FybmluZyhsb2csIHJlbW90ZUxhYmVsLCBlcnJvciwgZW1pdHRlcikge1xuICAgIGxldCB3YXJuaW5nTXNnID0gYE1ldGFNYXNrOiBMb3N0IGNvbm5lY3Rpb24gdG8gXCIke3JlbW90ZUxhYmVsfVwiLmA7XG4gICAgaWYgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnJvci5zdGFjaykge1xuICAgICAgICB3YXJuaW5nTXNnICs9IGBcXG4ke2Vycm9yLnN0YWNrfWA7XG4gICAgfVxuICAgIGxvZy53YXJuKHdhcm5pbmdNc2cpO1xuICAgIGlmIChlbWl0dGVyICYmIGVtaXR0ZXIubGlzdGVuZXJDb3VudCgnZXJyb3InKSA+IDApIHtcbiAgICAgICAgZW1pdHRlci5lbWl0KCdlcnJvcicsIHdhcm5pbmdNc2cpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBOT09QID0gKCkgPT4gdW5kZWZpbmVkO1xuLy8gY29uc3RhbnRzXG5leHBvcnQgY29uc3QgRU1JVFRFRF9OT1RJRklDQVRJT05TID0gW1xuICAgICdldGhfc3Vic2NyaXB0aW9uJywgLy8gcGVyIGV0aC1qc29uLXJwYy1maWx0ZXJzL3N1YnNjcmlwdGlvbk1hbmFnZXJcbl07XG4iLCJpbXBvcnQgeyBJSW5qZWN0ZWRQcm92aWRlck5hbWVzLCB9IGZyb20gJ0BvbmVrZXlmZS9jcm9zcy1pbnBhZ2UtcHJvdmlkZXItdHlwZXMnO1xuaW1wb3J0IHsgUHJvdmlkZXJCYXNlIH0gZnJvbSAnQG9uZWtleWZlL2Nyb3NzLWlucGFnZS1wcm92aWRlci1jb3JlJztcbmNsYXNzIFByb3ZpZGVyUHJpdmF0ZSBleHRlbmRzIFByb3ZpZGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJOYW1lID0gSUluamVjdGVkUHJvdmlkZXJOYW1lcy4kcHJpdmF0ZTtcbiAgICB9XG4gICAgcmVxdWVzdChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyaWRnZVJlcXVlc3QoZGF0YSk7XG4gICAgfVxufVxuZXhwb3J0IHsgUHJvdmlkZXJQcml2YXRlIH07XG4iLCJleHBvcnQgdmFyIElKc0JyaWRnZU1lc3NhZ2VUeXBlcztcbihmdW5jdGlvbiAoSUpzQnJpZGdlTWVzc2FnZVR5cGVzKSB7XG4gICAgSUpzQnJpZGdlTWVzc2FnZVR5cGVzW1wiUkVTUE9OU0VcIl0gPSBcIlJFU1BPTlNFXCI7XG4gICAgSUpzQnJpZGdlTWVzc2FnZVR5cGVzW1wiUkVRVUVTVFwiXSA9IFwiUkVRVUVTVFwiO1xufSkoSUpzQnJpZGdlTWVzc2FnZVR5cGVzIHx8IChJSnNCcmlkZ2VNZXNzYWdlVHlwZXMgPSB7fSkpO1xuZXhwb3J0IHZhciBJSW5qZWN0ZWRQcm92aWRlck5hbWVzO1xuKGZ1bmN0aW9uIChJSW5qZWN0ZWRQcm92aWRlck5hbWVzKSB7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcImV0aGVyZXVtXCJdID0gXCJldGhlcmV1bVwiO1xuICAgIElJbmplY3RlZFByb3ZpZGVyTmFtZXNbXCJjb25mbHV4XCJdID0gXCJjb25mbHV4XCI7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcInNvbGFuYVwiXSA9IFwic29sYW5hXCI7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcInNvbGxldFwiXSA9IFwic29sbGV0XCI7XG4gICAgSUluamVjdGVkUHJvdmlkZXJOYW1lc1tcIm5lYXJcIl0gPSBcIm5lYXJcIjtcbiAgICBJSW5qZWN0ZWRQcm92aWRlck5hbWVzW1wiJHByaXZhdGVcIl0gPSBcIiRwcml2YXRlXCI7XG59KShJSW5qZWN0ZWRQcm92aWRlck5hbWVzIHx8IChJSW5qZWN0ZWRQcm92aWRlck5hbWVzID0ge30pKTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgSnNCcmlkZ2VEZXNrdG9wSW5qZWN0ZWQgfSBmcm9tICdAb25la2V5ZmUvZGVza3RvcC1icmlkZ2UtaW5qZWN0ZWQnO1xuaW1wb3J0IHsgaW5qZWN0ZWRQcm92aWRlclJlY2VpdmVIYW5kbGVyLCBpbmplY3RKc0JyaWRnZSwgfSBmcm9tICdAb25la2V5ZmUvY3Jvc3MtaW5wYWdlLXByb3ZpZGVyLWNvcmUnO1xuaW1wb3J0IHsgaW5qZWN0V2ViM1Byb3ZpZGVyIH0gZnJvbSAnQG9uZWtleWZlL2lucGFnZS1wcm92aWRlcnMtaHViJztcbmNvbnN0IGJyaWRnZSA9ICgpID0+IG5ldyBKc0JyaWRnZURlc2t0b3BJbmplY3RlZCh7XG4gICAgcmVjZWl2ZUhhbmRsZXI6IGluamVjdGVkUHJvdmlkZXJSZWNlaXZlSGFuZGxlcixcbn0pO1xuaW5qZWN0SnNCcmlkZ2UoYnJpZGdlKTtcbmluamVjdFdlYjNQcm92aWRlcigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbnZvaWQgMDtcbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJFdmVudEVtaXR0ZXIiLCJpc1BsYWluT2JqZWN0IiwiaXNTdHJpbmciLCJhcHBEZWJ1Z0xvZ2dlciIsImNvbnNvbGVFcnJvckluRGV2IiwiSUpzQnJpZGdlTWVzc2FnZVR5cGVzIiwid2ViM0Vycm9ycyIsInZlcnNpb25JbmZvIiwiaXNMZWdhY3lFeHRNZXNzYWdlIiwicGF5bG9hZCIsInBheWxvYWRPYmoiLCJCb29sZWFuIiwibmFtZSIsImluY2x1ZGVzIiwiQlJJREdFX0VWRU5UUyIsIm1lc3NhZ2UiLCJlcnJvciIsIkpzQnJpZGdlQmFzZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiX2EiLCJfYiIsImlzRXh0VWkiLCJpc0luamVjdGVkIiwic2VuZEFzU3RyaW5nIiwiZ2xvYmFsT25NZXNzYWdlRW5hYmxlZCIsInByb3ZpZGVyc0h1YiIsImdsb2JhbE9uTWVzc2FnZSIsInJlY2VpdmVIYW5kbGVyIiwicmV0dXJuVmFsdWUiLCJpZCIsInJlc3BvbnNlIiwic2NvcGUiLCJyZW1vdGVJZCIsImRhdGEiLCJ0eXBlIiwiUkVRVUVTVCIsInJlc3BvbnNlRXJyb3IiLCJlbWl0IiwidmVyc2lvbiIsInJlbW90ZUluZm8iLCJvcmlnaW4iLCJkZWJ1Z0xvZ2dlciIsImNhbGxiYWNrcyIsImNhbGxiYWNrSWQiLCJjYWxsYmFja3NFeHBpcmVUaW1lb3V0IiwidGltZW91dCIsIm9uIiwiY29kZSIsInJlamVjdEV4cGlyZWRDYWxsYmFja3MiLCJhdHRhY2hQcm92aWRlckluc3RhbmNlIiwicHJvdmlkZXIiLCJwcm92aWRlck5hbWUiLCJwdXNoIiwiY3JlYXRlQ2FsbGJhY2tJZCIsImNyZWF0ZVBheWxvYWQiLCJFcnJvciIsImNyZWF0ZWQiLCJEYXRlIiwibm93IiwiZXJyb3JJbmZvIiwic3RhY2siLCJzZW5kIiwic3luYyIsImV4ZWN1dG9yIiwiX2lkIiwiZ2xvYmFsIiwibG9jYXRpb24iLCJwYXlsb2FkVG9TZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzQnJpZGdlIiwic2VuZFBheWxvYWQiLCJyZWplY3RDYWxsYmFjayIsInByb2Nlc3NDYWxsYmFjayIsIm1ldGhvZCIsInJlc29sdmVDYWxsYmFjayIsImNhbGxiYWNrSW5mbyIsImNsZWFyQ2FsbGJhY2tDYWNoZSIsInJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsInJlY2VpdmUiLCJwYXlsb2FkUmVjZWl2ZWQiLCJzZW5kZXIiLCJwYXJzZSIsImludGVybmFsIiwiUkVTUE9OU0UiLCJ1bmRlZmluZWQiLCJlcnJvcjAiLCJldmVudE1lc3NhZ2VQYXlsb2FkIiwiT2JqZWN0IiwiYXNzaWduIiwicmVxdWVzdFN5bmMiLCJyZXF1ZXN0IiwiaW5mbyIsImNvbnNvbGUiLCJ3YXJuIiwiSnNCcmlkZ2VTaW1wbGUiLCJhcmd1bWVudHMiLCJyZW1vdGUiLCJzZXRSZW1vdGUiLCJpc0Z1bmN0aW9uIiwic2l0ZU1ldGFkYXRhIiwiZmFrZUxvZ2dlciIsImZha2VEZWJ1Z0xvZ2dlciIsIk1FVEhPRFMiLCJ3YWxsZXRfZ2V0Q29ubmVjdFdhbGxldEluZm8iLCJ3YWxsZXRfc2VuZFNpdGVNZXRhZGF0YSIsIlByb3ZpZGVyQmFzZSIsIl9jIiwiaXNPbmVLZXkiLCJsb2dnZXIiLCJicmlkZ2UiLCJfYXR0YWNoRXh0ZXJuYWxMb2dnZXIiLCJzaG91bGRTZW5kTWV0YWRhdGEiLCJzZW5kU2l0ZU1ldGFkYXRhIiwiY29uZmlnRGVidWdMb2dnZXIiLCJlbmFibGVkS2V5cyIsImZvckVhY2giLCJrZXkiLCJfY3JlYXRlRGVidWdJbnN0YW5jZSIsIl9kZWJ1ZyIsImVuYWJsZSIsIndpbmRvdyIsIiRvbmVrZXkiLCIkZGVidWdMb2dnZXIiLCJnZXRDb25uZWN0V2FsbGV0SW5mbyIsInRpbWVyIiwiYnJpZGdlUmVxdWVzdCIsInBhcmFtcyIsInRpbWUiLCJwcm92aWRlclN0YXRlIiwiZGVidWdMb2dnZXJDb25maWciLCJ3YWxsZXRJbmZvIiwiJHdhbGxldEluZm8iLCJlcnIiLCJjbGVhclRpbWVvdXQiLCJjYWxsYmFjayIsImhhc0NhbGxiYWNrIiwicHJvdmlkZXJCYXNlIiwicmVzRGF0YSIsInJlcSIsInJlcyIsIm1ldGFkYXRhIiwiZ2V0U2l0ZU1ldGFkYXRhIiwiSlNfQlJJREdFX01FU1NBR0VfSVBDX0NIQU5ORUwiLCJKU19CUklER0VfTUVTU0FHRV9FWFRfQ0hBTk5FTCIsIkpTX0JSSURHRV9NRVNTQUdFX0VYVF9QSU5HIiwiSlNfQlJJREdFX01FU1NBR0VfRElSRUNUSU9OIiwiRVhUX1BPUlRfQ1NfVE9fQkciLCJFWFRfUE9SVF9VSV9UT19CRyIsIkRFQlVHX0xPR0dFUl9TVE9SQUdFX0tFWSIsImh1bWFuaXplIiwic3RvcmFnZUtleSIsImV4cG9ydHNCcm93c2VyIiwiZm9ybWF0QXJncyIsInNhdmUiLCJsb2FkIiwidXNlQ29sb3JzIiwic3RvcmFnZSIsImN1c3RvbUxvY2FsU3RvcmFnZSIsImRlc3Ryb3kiLCJ3YXJuZWQiLCJjb2xvcnMiLCJwcm9jZXNzIiwiX19ud2pzIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJXZWJraXRBcHBlYXJhbmNlIiwiZmlyZWJ1ZyIsImV4Y2VwdGlvbiIsInRhYmxlIiwicGFyc2VJbnQiLCJSZWdFeHAiLCIkMSIsImFyZ3MiLCJuYW1lc3BhY2UiLCJkaWZmIiwiYyIsImNvbG9yIiwic3BsaWNlIiwiaW5kZXgiLCJsYXN0QyIsInJlcGxhY2UiLCJsb2ciLCJkZWJ1ZyIsIm5hbWVzcGFjZXMiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsInIiLCJnZXRJdGVtIiwiZW52IiwiREVCVUciLCIkJG9uZWtleUFwcFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJzZXR1cCIsImNyZWF0ZURlYnVnIiwiZGVmYXVsdCIsImNvZXJjZSIsImRpc2FibGUiLCJlbmFibGVkIiwia2V5cyIsIm5hbWVzIiwic2tpcHMiLCJmb3JtYXR0ZXJzIiwiaiIsInYiLCJzZWxlY3RDb2xvciIsImhhc2giLCJpIiwibGVuZ3RoIiwiY2hhckNvZGVBdCIsIk1hdGgiLCJhYnMiLCJwcmV2VGltZSIsImVuYWJsZU92ZXJyaWRlIiwibmFtZXNwYWNlc0NhY2hlIiwiZW5hYmxlZENhY2hlIiwic2VsZiIsImN1cnIiLCJOdW1iZXIiLCJtcyIsInByZXYiLCJ1bnNoaWZ0IiwiZm9ybWF0IiwiZm9ybWF0dGVyIiwidmFsIiwiY2FsbCIsImxvZ0ZuIiwiZXh0ZW5kIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiZ2V0Iiwic2V0IiwiaW5pdCIsImRlbGltaXRlciIsIm5ld0RlYnVnIiwic3BsaXQiLCJsZW4iLCJzdWJzdHIiLCJtYXAiLCJ0b05hbWVzcGFjZSIsImpvaW4iLCJ0ZXN0IiwicmVnZXhwIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJicm93c2VyIiwiY3JlYXRlRGVidWdBc3luYyIsImNvbnN0cyIsImluamVjdGVkRmFjdG9yeSIsImZpeEdsb2JhbFNoaW0iLCJnbG9iYWxUaGlzIiwiaW5qZWN0SnNCcmlkZ2UiLCJicmlkZ2VDcmVhdG9yIiwicGVyZm9ybWFuY2UiLCJjcmVhdGVDb2RlV2l0aFNjcmlwdFRhZyIsImluamVjdENvZGVXaXRoU2NyaXB0VGFnIiwiZmlsZSIsInJlbW92ZSIsInMiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwidGV4dENvbnRlbnQiLCJzcmMiLCJvbmxvYWQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVDb2RlSnNCcmlkZ2VSZWNlaXZlIiwicGF5bG9hZFN0ciIsImluamVjdGVkUHJvdmlkZXJSZWNlaXZlSGFuZGxlciIsInByb3ZpZGVySHViIiwicGF5bG9hZERhdGEiLCJwcm92aWRlcnMiLCJjb25jYXQiLCJmaWx0ZXIiLCJsb2dnZXJDb25maWciLCJOT0RFX0VOViIsIl9pc0Zha2VMb2dnZXIiLCJ0cmFjZSIsIkZha2VEZWJ1Z0xvZ2dlciIsIl9leHRlcm5hbExvZ2dlciIsIl9jcmVhdGVFeHRlcm5hbExvZyIsIl9sb2dnZXIiLCJleHRJbmplY3RlZCIsImV4dENvbnRlbnRTY3JpcHRzIiwid2VidmlldyIsImRlc2t0b3BJbmplY3RlZCIsImV0aGVyZXVtIiwiQXBwRGVidWdMb2dnZXIiLCJfZGVidWdJbnN0YW5jZUNyZWF0ZWRNYXAiLCJfZGVidWdMb2ciLCJfb3JpZ2luTG9nIiwiaW1nRXhpc3RzIiwidXJsIiwiaW1nIiwib25lcnJvciIsImdldFNpdGVOYW1lIiwiaWNvbiIsImdldFNpdGVJY29uIiwid2luZG93T2JqZWN0Iiwic2l0ZU5hbWUiLCJxdWVyeVNlbGVjdG9yIiwiY29udGVudCIsIm1ldGFUaXRsZSIsInRpdGxlIiwiaG9zdG5hbWUiLCJpY29ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpY29uc0FyciIsImhyZWYiLCJ2ZXJzaW9uQnVpbGQiLCJpcGNSZW5kZXJlciIsIkpzQnJpZGdlRGVza3RvcEluamVjdGVkIiwic2VuZFRvSG9zdCIsInNhZmVTdHJpbmdpZnkiLCJXZWIzUnBjRXJyb3IiLCJpc0ludGVnZXIiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkIiwic3RyaW5naWZ5UmVwbGFjZXIiLCJXZWIzUHJvdmlkZXJFcnJvciIsImlzVmFsaWRXZWIzUHJvdmlkZXJDb2RlIiwiXyIsImVycm9yQ29kZXMiLCJycGMiLCJpbnZhbGlkSW5wdXQiLCJyZXNvdXJjZU5vdEZvdW5kIiwicmVzb3VyY2VVbmF2YWlsYWJsZSIsInRyYW5zYWN0aW9uUmVqZWN0ZWQiLCJtZXRob2ROb3RTdXBwb3J0ZWQiLCJsaW1pdEV4Y2VlZGVkIiwiaW52YWxpZFJlcXVlc3QiLCJtZXRob2ROb3RGb3VuZCIsImludmFsaWRQYXJhbXMiLCJ1c2VyUmVqZWN0ZWRSZXF1ZXN0IiwidW5hdXRob3JpemVkIiwidW5zdXBwb3J0ZWRNZXRob2QiLCJkaXNjb25uZWN0ZWQiLCJjaGFpbkRpc2Nvbm5lY3RlZCIsImVycm9yVmFsdWVzIiwic3RhbmRhcmQiLCJnZXRNZXNzYWdlRnJvbUNvZGUiLCJhcmciLCJnZXRXZWIzSnNvblJwY0Vycm9yIiwic2VydmVyIiwib3B0cyIsIkFycmF5IiwiaXNBcnJheSIsImdldFdlYjNQcm92aWRlckVycm9yIiwiY3VzdG9tIiwicGFyc2VPcHRzIiwic2VyaWFsaXplRXJyb3IiLCJGQUxMQkFDS19FUlJPUl9DT0RFIiwiRkFMTEJBQ0tfTUVTU0FHRSIsIkZBTExCQUNLX0VSUk9SIiwiSlNPTl9SUENfU0VSVkVSX0VSUk9SX01FU1NBR0UiLCJmYWxsYmFja01lc3NhZ2UiLCJjb2RlU3RyaW5nIiwiaGFzS2V5IiwiaXNKc29uUnBjU2VydmVyRXJyb3IiLCJpc1ZhbGlkQ29kZSIsImZhbGxiYWNrRXJyb3IiLCJzaG91bGRJbmNsdWRlU3RhY2siLCJfZXJyb3IiLCJvcmlnaW5hbEVycm9yIiwiYXNzaWduT3JpZ2luYWxFcnJvciIsIm9iaiIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiUHJvdmlkZXJFdGhlcmV1bSIsIlByb3ZpZGVyUHJpdmF0ZSIsImluamVjdFdlYjNQcm92aWRlciIsIiRwcml2YXRlIiwic29sYW5hIiwiY29uZmx1eCIsInNvbGxldCIsImRpc3BhdGNoRXZlbnQiLCJFdmVudCIsIk1ldGFNYXNrSW5wYWdlUHJvdmlkZXIiLCJFdGhlcmV1bVJwY0Vycm9yIiwiZXRoRXJyb3JzIiwiZGVxdWFsIiwiSUluamVjdGVkUHJvdmlkZXJOYW1lcyIsIm1lc3NhZ2VzIiwiRU1JVFRFRF9OT1RJRklDQVRJT05TIiwibG9nU3RyZWFtRGlzY29ubmVjdFdhcm5pbmciLCJCYXNlUHJvdmlkZXIiLCJpc01ldGFNYXNrIiwiX2xvZyIsIl9zdGF0ZSIsIl9kZWZhdWx0U3RhdGUiLCJzZWxlY3RlZEFkZHJlc3MiLCJjaGFpbklkIiwiX2hhbmRsZUFjY291bnRzQ2hhbmdlZCIsImJpbmQiLCJfaGFuZGxlQ29ubmVjdCIsIl9oYW5kbGVDaGFpbkNoYW5nZWQiLCJfaGFuZGxlRGlzY29ubmVjdCIsIl9oYW5kbGVTdHJlYW1EaXNjb25uZWN0IiwiX2hhbmRsZVVubG9ja1N0YXRlQ2hhbmdlZCIsIl9ycGNSZXF1ZXN0IiwiZGlzY29ubmVjdEhhbmRsZXIiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3RIYW5kbGVyUnBjIiwiX2luaXRpYWxpemVTdGF0ZSIsImVycm9ycyIsInBlcm1hbmVudGx5RGlzY29ubmVjdGVkIiwiaW52YWxpZFJlcXVlc3RBcmdzIiwiaW52YWxpZFJlcXVlc3RNZXRob2QiLCJpbnZhbGlkUmVxdWVzdFBhcmFtcyIsImFjY291bnRzIiwiaXNVbmxvY2tlZCIsIm5ldHdvcmtWZXJzaW9uIiwiZGVidWdMb2dnZXJTZXR0aW5ncyIsImluaXRpYWxpemVkIiwianNvbnJwYyIsImNvbm5lY3RlZCIsImlzUmVjb3ZlcmFibGUiLCJlcnJvck1lc3NhZ2UiLCJpc1Blcm1hbmVudGx5RGlzY29ubmVjdGVkIiwic3RyZWFtTmFtZSIsInN0YXJ0c1dpdGgiLCJpc0V0aEFjY291bnRzIiwiX2FjY291bnRzIiwiYWNjb3VudCIsIk5PT1AiLCJfc2VudFdhcm5pbmdzIiwiZXhwZXJpbWVudGFsTWV0aG9kcyIsImV2ZW50cyIsImNsb3NlIiwibmV0d29ya0NoYW5nZWQiLCJub3RpZmljYXRpb24iLCJfc2VuZFN5bmMiLCJzZW5kQXN5bmMiLCJfd2Fybk9mRGVwcmVjYXRpb24iLCJfbWV0YW1hc2siLCJfZ2V0RXhwZXJpbWVudGFsQXBpIiwicGF5bG9hZFBhcmFtcyIsInJlYWR5U3RhdGUiLCJkb21Db250ZW50TG9hZGVkSGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkTGlzdGVuZXIiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwid2FybmluZ3MiLCJlbmFibGVEZXByZWNhdGlvbiIsIm1ldGhvZE9yUGF5bG9hZCIsImNhbGxiYWNrT3JBcmdzIiwic2VuZERlcHJlY2F0aW9uIiwidW5zdXBwb3J0ZWRTeW5jIiwiUHJveHkiLCJyZXF1ZXN0QmF0Y2giLCJyZXF1ZXN0cyIsInByb3AiLCJSZWZsZWN0IiwiaW5pdGlhbGl6ZVByb3ZpZGVyIiwic2V0R2xvYmFsUHJvdmlkZXIiLCJzaGltV2ViMyIsIm1heEV2ZW50TGlzdGVuZXJzIiwic2hvdWxkU2V0T25XaW5kb3ciLCJzaG91bGRTaGltV2ViMyIsImRlbGV0ZVByb3BlcnR5IiwicHJvdmlkZXJJbnN0YW5jZSIsImludmFsaWREdXBsZXhTdHJlYW0iLCJpbnZhbGlkTG9nZ2VyT2JqZWN0IiwiaW52YWxpZExvZ2dlck1ldGhvZCIsImxvZ2dlZEN1cnJlbnRQcm92aWRlciIsImxvZ2dlZE1pc3NpbmdQcm9wZXJ0eSIsIndlYjMiLCJTSElNX0lERU5USUZJRVIiLCJ3ZWIzU2hpbSIsImN1cnJlbnRQcm92aWRlciIsIndyaXRhYmxlIiwidGFyZ2V0IiwicHJvcGVydHkiLCJjYXRjaCIsImVuZ2luZSIsImRvbWFpbk1ldGFkYXRhIiwicmVtb3RlTGFiZWwiLCJlbWl0dGVyIiwid2FybmluZ01zZyIsImxpc3RlbmVyQ291bnQiXSwic291cmNlUm9vdCI6IiJ9
|