diff --git a/lib/pinata-sdk.js b/lib/pinata-sdk.js index 21dfe2b..8caf0b3 100644 --- a/lib/pinata-sdk.js +++ b/lib/pinata-sdk.js @@ -22908,8 +22908,8 @@ function pinFileToIPFS(pinataApiKey, pinataSecretApiKey, readStream, options) { data.append('file', readStream); var endpoint = "".concat(_constants.baseUrl, "/pinning/pinFileToIPFS"); - if (!(readStream instanceof _stream["default"].Readable)) { - reject(new Error('readStream is not a readable stream')); + if (!(readStream instanceof _stream["default"].Readable || readStream instanceof _formData["default"])) { + reject(new Error('readStream is not a readable stream or form data')); } if (options) { @@ -22924,7 +22924,7 @@ function pinFileToIPFS(pinataApiKey, pinataSecretApiKey, readStream, options) { } } - _axios["default"].post(endpoint, data, { + _axios["default"].post(endpoint, readStream instanceof _formData["default"] ? readStream : data, { withCredentials: true, maxContentLength: 'Infinity', //this is needed to prevent axios from erroring out with large files @@ -24153,4 +24153,4 @@ module.exports = require("zlib"); /******/ }); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Jhc2UtcGF0aC1jb252ZXJ0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXgvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYnM1OC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY2lkcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jbGFzcy1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYXR0ZW4taW50by1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgudW11bGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcuYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9zaGltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbS9saWIvZGVsYXllZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2RlYnVnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9wb3B1bGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2hhcy1mbGFnL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGktYmFzZTMyL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC1yZWdleC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lwL2xpYi9pcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lzLWlwL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXMtaXBmcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tYWZtdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9jb2RlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29udmVydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL3Byb3RvY29scy10YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTE2LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvaW50LXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvcHJpbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy91dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdmFyaW50LXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGloYXNoZXMvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvY3BkaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVjdXJzaXZlLWZzL2xpYi9yZWFkZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvcm1kaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9kZWNvZGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZW5jb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2xlbmd0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3Bpbkxpc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcXVlcnlCdWlsZGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL2hhc2hNZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaFBpblBvbGljeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluQnlIYXNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5GaWxlVG9JUEZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Gcm9tRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpTT05Ub0lQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcGluSm9icy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9xdWVyeUJ1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3VucGluLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy91c2VyUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy91dGlsL2Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy91dGlsL3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImFzc2VydFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJidWZmZXJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJvc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInN0cmVhbVwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ0dHlcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwidXJsXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInV0aWxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiemxpYlwiIl0sIm5hbWVzIjpbInBpbkxpc3QiLCJwaW5hdGFBcGlLZXkiLCJwaW5hdGFTZWNyZXRBcGlLZXkiLCJmaWx0ZXJzIiwiYmFzZUVuZHBvaW50IiwiYmFzZVVybCIsImVuZHBvaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJheGlvcyIsImdldCIsIndpdGhDcmVkZW50aWFscyIsImhlYWRlcnMiLCJ0aGVuIiwicmVzdWx0Iiwic3RhdHVzIiwiRXJyb3IiLCJkYXRhIiwiZXJyb3IiLCJmb3JtYXR0ZWRFcnJvciIsInZhbGlkYXRlQW5kUmV0dXJuRGF0ZSIsImRhdGVUb1ZhbGlkYXRlIiwiZGF0ZVBhcnNlZCIsIkRhdGUiLCJwYXJzZSIsInRvSVNPU3RyaW5nIiwiZSIsInF1ZXJ5QnVpbGRlciIsImZpbHRlclF1ZXJ5IiwibWV0YWRhdGFRdWVyeSIsImhhc2hDb250YWlucyIsInBpblN0YXJ0IiwicGluRW5kIiwidW5waW5TdGFydCIsInVucGluRW5kIiwicGluU2l6ZU1pbiIsImlzTmFOIiwicGluU2l6ZU1heCIsInBhZ2VMaW1pdCIsInBhcnNlSW50IiwicGFnZU9mZnNldCIsIm1ldGFkYXRhIiwibmFtZSIsImtleXZhbHVlcyIsInBydW5lZEtleVZhbHVlcyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5VmFsdWUiLCJrZXkiLCJ2YWx1ZSIsIm9wIiwic2Vjb25kVmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwidGVzdEF1dGhlbnRpY2F0aW9uIiwiYXV0aGVudGljYXRlZCIsInVzZXJQaW5uZWREYXRhVG90YWwiLCJoYXNoTWV0YWRhdGEiLCJpcGZzUGluSGFzaCIsImlzSVBGUyIsImNpZCIsImJvZHkiLCJwdXQiLCJoYXNoUGluUG9saWN5IiwibmV3UGluUG9saWN5IiwicGluQnlIYXNoIiwiaGFzaFRvUGluIiwib3B0aW9ucyIsInBpbmF0YU9wdGlvbnMiLCJwaW5hdGFNZXRhZGF0YSIsInBvc3QiLCJwaW5GaWxlVG9JUEZTIiwicmVhZFN0cmVhbSIsIk5vZGVGb3JtRGF0YSIsImFwcGVuZCIsInN0cmVhbSIsIlJlYWRhYmxlIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJfYm91bmRhcnkiLCJmcyIsInJlcXVpcmUiLCJyZWN1cnNpdmUiLCJwaW5Gcm9tRlMiLCJzb3VyY2VQYXRoIiwic3RhdCIsImVyciIsInN0YXRzIiwiaXNGaWxlIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlYWRkaXJyIiwiZGlycyIsImZpbGVzIiwiZmlsZSIsImZpbGVwYXRoIiwicGluSlNPTlRvSVBGUyIsInJlcXVlc3RCb2R5IiwicGluYXRhQ29udGVudCIsInBpbkpvYnMiLCJuZXdVcmwiLCJmaXJzdEZpbHRlckFwcGxpZWQiLCJhZGRGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJzb3J0IiwiaXBmc19waW5faGFzaCIsImxpbWl0IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwib2Zmc2V0IiwidW5waW4iLCJoYXNoVG9VbnBpbiIsInVzZXJQaW5Qb2xpY3kiLCJwaW5hdGFDbGllbnQiLCJjbGllbnQiLCJyZWFkYWJsZVN0cmVhbSIsImhhbmRsZUVycm9yIiwicmVzcG9uc2UiLCJ2YWxpZGF0ZUFwaUtleXMiLCJ2YWxpZGF0ZUhvc3ROb2RlcyIsImhvc3ROb2RlcyIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGUiLCJwZWVyTXVsdGlhZGRyIiwidmFsaWRhdGVNZXRhZGF0YSIsIlN0cmluZyIsImkiLCJ2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSIsInBpblBvbGljeSIsInJlZ2lvbnMiLCJsZW5ndGgiLCJyZWdpb24iLCJpZCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiY2lkVmVyc2lvbiIsIndyYXBXaXRoRGlyZWN0b3J5IiwiY3VzdG9tUGluUG9saWN5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FB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QUNBO0FBQ0EsZUFBZSxtREFBbUQ7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUNuQyxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtB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QUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNFQUFvQjtBQUM1QixtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxnRUFBaUI7Ozs7Ozs7Ozs7OztBQ3JNMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9EQUFVOztBQUVuQyxPQUFPLFdBQVc7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDM1FBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFPLENBQUMsc0NBQUk7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxjQUFjO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxpQ0FBaUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVDQUF1QyxFQUFFO0FBQy9ELEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLHVFQUF1RTtBQUN2RixZQUFZLG1FQUFtRTtBQUMvRSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xEOzs7Ozs7Ozs7Ozs7QUN2ZkEscUJBQXFCLG1CQUFPLENBQUMsOEVBQWlCO0FBQzlDLFdBQVcsbUJBQU8sQ0FBQyxrQkFBTTtBQUN6QixXQUFXLG1CQUFPLENBQUMsa0JBQU07QUFDekIsV0FBVyxtQkFBTyxDQUFDLGtCQUFNO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxvQkFBTztBQUMzQixlQUFlLG1CQUFPLENBQUMsZ0JBQUs7QUFDNUIsU0FBUyxtQkFBTyxDQUFDLGNBQUk7QUFDckIsV0FBVyxtQkFBTyxDQUFDLHNEQUFZO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxrREFBVTtBQUNqQyxlQUFlLG1CQUFPLENBQUMsK0RBQWU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNB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QTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFEQUFxRCxXQUFXO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix5QkFBeUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQsV0FBVztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsTUFBTSxtQ0FBTztBQUNiO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0S0FBNEs7QUFDNUs7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxjQUFjO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixVQUFVLHlCQUF5QixHQUFHO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFD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bUJBQU8sQ0FBQyxrREFBVTs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLEdBQUc7QUFDcEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNsSUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDNUJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUN6QkE7QUFDQSxZQUFZLG1CQUFPLENBQUMsb0RBQWE7QUFDakMsWUFBWSxt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LE9BQU8sQ0FBQ29ELFNBQVosRUFBdUI7QUFDbkJELHFCQUFpQixDQUFDbkQsT0FBTyxDQUFDb0QsU0FBVCxDQUFqQjtBQUNIOztBQUVELE1BQUlwRCxPQUFPLENBQUN5RSxlQUFaLEVBQTZCO0FBQ3pCYiw4QkFBMEIsQ0FBQzVELE9BQU8sQ0FBQ3lFLGVBQVQsQ0FBMUI7QUFDSDtBQUNKLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JIRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxrQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxpQyIsImZpbGUiOiJwaW5hdGEtc2RrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJwaW5hdGEtc2RrXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBpbmF0YS1zZGtcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGluYXRhLXNka1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBzZXJpYWxPcmRlcmVkID0gcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICByZXR1cm4gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgbnVsbCwgY2FsbGJhY2spO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBsb2NhdGlvbikge1xuICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG5cbiAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICBpZiAocHJveHkuYXV0aCkge1xuICAgIHZhciBiYXNlNjQgPSBCdWZmZXIuZnJvbShwcm94eS5hdXRoLnVzZXJuYW1lICsgJzonICsgcHJveHkuYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgfVxuXG4gIC8vIElmIGEgcHJveHkgaXMgdXNlZCwgYW55IHJlZGlyZWN0cyBtdXN0IGFsc28gcGFzcyB0aHJvdWdoIHRoZSBwcm94eVxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3Rpb24pIHtcbiAgICByZWRpcmVjdGlvbi5oZWFkZXJzLmhvc3QgPSByZWRpcmVjdGlvbi5ob3N0O1xuICAgIHNldFByb3h5KHJlZGlyZWN0aW9uLCBwcm94eSwgcmVkaXJlY3Rpb24uaHJlZik7XG4gIH07XG59XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpIHtcbiAgICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICAgIHJlamVjdFByb21pc2UodmFsdWUpO1xuICAgIH07XG4gICAgdmFyIGRhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCFoZWFkZXJzWydVc2VyLUFnZW50J10gJiYgIWhlYWRlcnNbJ3VzZXItYWdlbnQnXSkge1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBwa2cudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXlCdWZmZXIsIGEgQnVmZmVyLCBvciBhIFN0cmVhbScsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIHZhciBhdXRoID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIGF1dGggPSB1c2VybmFtZSArICc6JyArIHBhc3N3b3JkO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHZhciBwYXJzZWQgPSB1cmwucGFyc2UoZnVsbFBhdGgpO1xuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonO1xuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC5hdXRoKSB7XG4gICAgICB2YXIgdXJsQXV0aCA9IHBhcnNlZC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgdXJsVXNlcm5hbWUgPSB1cmxBdXRoWzBdIHx8ICcnO1xuICAgICAgdmFyIHVybFBhc3N3b3JkID0gdXJsQXV0aFsxXSB8fCAnJztcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmIChhdXRoKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIHZhciBpc0h0dHBzUmVxdWVzdCA9IGlzSHR0cHMudGVzdChwcm90b2NvbCk7XG4gICAgdmFyIGFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiBhZ2VudCxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGg6IGF1dGhcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRQYXRoKSB7XG4gICAgICBvcHRpb25zLnNvY2tldFBhdGggPSBjb25maWcuc29ja2V0UGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHBhcnNlZC5wb3J0O1xuICAgIH1cblxuICAgIHZhciBwcm94eSA9IGNvbmZpZy5wcm94eTtcbiAgICBpZiAoIXByb3h5ICYmIHByb3h5ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIHByb3h5RW52ID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpICsgJ19wcm94eSc7XG4gICAgICB2YXIgcHJveHlVcmwgPSBwcm9jZXNzLmVudltwcm94eUVudl0gfHwgcHJvY2Vzcy5lbnZbcHJveHlFbnYudG9VcHBlckNhc2UoKV07XG4gICAgICBpZiAocHJveHlVcmwpIHtcbiAgICAgICAgdmFyIHBhcnNlZFByb3h5VXJsID0gdXJsLnBhcnNlKHByb3h5VXJsKTtcbiAgICAgICAgdmFyIG5vUHJveHlFbnYgPSBwcm9jZXNzLmVudi5ub19wcm94eSB8fCBwcm9jZXNzLmVudi5OT19QUk9YWTtcbiAgICAgICAgdmFyIHNob3VsZFByb3h5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAobm9Qcm94eUVudikge1xuICAgICAgICAgIHZhciBub1Byb3h5ID0gbm9Qcm94eUVudi5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiB0cmltKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNob3VsZFByb3h5ID0gIW5vUHJveHkuc29tZShmdW5jdGlvbiBwcm94eU1hdGNoKHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudCA9PT0gJyonKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudFswXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgcGFyc2VkLmhvc3RuYW1lLnN1YnN0cihwYXJzZWQuaG9zdG5hbWUubGVuZ3RoIC0gcHJveHlFbGVtZW50Lmxlbmd0aCkgPT09IHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZC5ob3N0bmFtZSA9PT0gcHJveHlFbGVtZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFByb3h5KSB7XG4gICAgICAgICAgcHJveHkgPSB7XG4gICAgICAgICAgICBob3N0OiBwYXJzZWRQcm94eVVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnQsXG4gICAgICAgICAgICBwcm90b2NvbDogcGFyc2VkUHJveHlVcmwucHJvdG9jb2xcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHBhcnNlZFByb3h5VXJsLmF1dGgpIHtcbiAgICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBwcm94eS5hdXRoID0ge1xuICAgICAgICAgICAgICB1c2VybmFtZTogcHJveHlVcmxBdXRoWzBdLFxuICAgICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aCk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zcG9ydDtcbiAgICB2YXIgaXNIdHRwc1Byb3h5ID0gaXNIdHRwc1JlcXVlc3QgJiYgKHByb3h5ID8gaXNIdHRwcy50ZXN0KHByb3h5LnByb3RvY29sKSA6IHRydWUpO1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUHJveHkgPyBodHRwc0ZvbGxvdyA6IGh0dHBGb2xsb3c7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEpIHtcbiAgICAgIG9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IGNvbmZpZy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHZhciByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuXG4gICAgICAvLyBpZiBubyBjb250ZW50LCBpcyBIRUFEIHJlcXVlc3Qgb3IgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0ICYmIGxhc3RSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1EYXRhKGNodW5rKSB7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpLmxlbmd0aCA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIGNvbmZpZywgbnVsbCwgbGFzdFJlcXVlc3QpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YS50b1N0cmluZyhjb25maWcucmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNwb25zZUVuY29kaW5nIHx8IGNvbmZpZy5yZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gdXRpbHMuc3RyaXBCT00ocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RFcnJvcihlcnIpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCAmJiBlcnIuY29kZSAhPT0gJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnKSByZXR1cm47XG4gICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCByZXEpKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSByZXF1ZXN0IHRpbWVvdXRcbiAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3JpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dChjb25maWcudGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGRhdGEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRXJyb3IoZXJyKSB7XG4gICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgICAgfSkucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZVxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhY29uZmlnLnJlc3BvbnNlVHlwZSB8fCBjb25maWcucmVzcG9uc2VUeXBlID09PSAndGV4dCcgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcih0aW1lb3V0RXJyb3JNZXNzYWdlLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCkge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZVxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgdmFyIHZhbHVlRnJvbUNvbmZpZzJLZXlzID0gWyd1cmwnLCAnbWV0aG9kJywgJ2RhdGEnXTtcbiAgdmFyIG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzID0gWydoZWFkZXJzJywgJ2F1dGgnLCAncHJveHknLCAncGFyYW1zJ107XG4gIHZhciBkZWZhdWx0VG9Db25maWcyS2V5cyA9IFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3RpbWVvdXRNZXNzYWdlJywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ2RlY29tcHJlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ21heEJvZHlMZW5ndGgnLCAnbWF4UmVkaXJlY3RzJywgJ3RyYW5zcG9ydCcsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnLCAncmVzcG9uc2VFbmNvZGluZydcbiAgXTtcbiAgdmFyIGRpcmVjdE1lcmdlS2V5cyA9IFsndmFsaWRhdGVTdGF0dXMnXTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHV0aWxzLmZvckVhY2godmFsdWVGcm9tQ29uZmlnMktleXMsIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzLCBtZXJnZURlZXBQcm9wZXJ0aWVzKTtcblxuICB1dGlscy5mb3JFYWNoKGRlZmF1bHRUb0NvbmZpZzJLZXlzLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChkaXJlY3RNZXJnZUtleXMsIGZ1bmN0aW9uIG1lcmdlKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBheGlvc0tleXMgPSB2YWx1ZUZyb21Db25maWcyS2V5c1xuICAgIC5jb25jYXQobWVyZ2VEZWVwUHJvcGVydGllc0tleXMpXG4gICAgLmNvbmNhdChkZWZhdWx0VG9Db25maWcyS2V5cylcbiAgICAuY29uY2F0KGRpcmVjdE1lcmdlS2V5cyk7XG5cbiAgdmFyIG90aGVyS2V5cyA9IE9iamVjdFxuICAgIC5rZXlzKGNvbmZpZzEpXG4gICAgLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSlcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIGZpbHRlckF4aW9zS2V5cyhrZXkpIHtcbiAgICAgIHJldHVybiBheGlvc0tleXMuaW5kZXhPZihrZXkpID09PSAtMTtcbiAgICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG90aGVyS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4oZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuICh0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLypnbG9iYWwgdG9TdHJpbmc6dHJ1ZSovXG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT01cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsImZ1bmN0aW9uIGNvbnZlcnRGaWxlUGF0aFRvQmFzZURpcmVjdG9yeVBhdGgoc291cmNlUGF0aCwgZmlsZVBhdGgpIHtcbiAgICBsZXQgbmV3U3RyaW5nID0gKHNvdXJjZVBhdGguc3RhcnRzV2l0aCgnLi8nKSA/IHNvdXJjZVBhdGguc3Vic3RyaW5nKDIpIDogc291cmNlUGF0aCk7XG4gICAgLy9tYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYSBkYW5nbGluZyAvIHRvIHRocm93IGEgZmFsc2UgcG9zaXRpdmUgaW50byB0aGUgbWl4XG4gICAgY29uc3QgbGFzdEluZGV4T2ZEaXJlY3RvcnkgPSBuZXdTdHJpbmcubGFzdEluZGV4T2YoJy8nKTtcbiAgICBpZihsYXN0SW5kZXhPZkRpcmVjdG9yeSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBsZW5ndGhPZlNvdXJjZSA9IHNvdXJjZVBhdGgubGVuZ3RoO1xuICAgIC8vb25seSB0cmltIGlmIHRoZSAvIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nXG4gICAgaWYgKGxhc3RJbmRleE9mRGlyZWN0b3J5ID09PSAobGVuZ3RoT2ZTb3VyY2UgLSAxKSkge1xuICAgICAgICBuZXdTdHJpbmcgPSBzb3VyY2VQYXRoLnNsaWNlKDAsLTEpO1xuICAgIH1cblxuICAgIC8vbm93IHRoYXQgd2UncmUgc3VyZSBvZiBubyBmYWxzZSBwb3NpdGl2ZSwgbGV0J3MgY2hlY2sgYW5kIHNlZSB3aGVyZSB0aGUgXCJyb290XCIgZGlyZWN0b3J5IGlzXG4gICAgY29uc3QgbmV3TGFzdEluZGV4ID0gbmV3U3RyaW5nLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYgKCBuZXdMYXN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGF0aEdhcmJhZ2UgPSBuZXdTdHJpbmcuc3Vic3RyaW5nKDAsIG5ld0xhc3RJbmRleCArIDEpO1xuICAgICAgICBuZXdTdHJpbmcgPSBmaWxlUGF0aC5zcGxpdChwYXRoR2FyYmFnZSlbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0RmlsZVBhdGhUb0Jhc2VEaXJlY3RvcnlQYXRoIiwiJ3VzZSBzdHJpY3QnXG4vLyBiYXNlLXggZW5jb2RpbmcgLyBkZWNvZGluZ1xuLy8gQ29weXJpZ2h0IChjKSAyMDE4IGJhc2UteCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFRoZSBCaXRjb2luIENvcmUgZGV2ZWxvcGVycyAoYmFzZTU4LmNwcClcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgc29mdHdhcmUgbGljZW5zZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmdcbi8vIGZpbGUgTElDRU5TRSBvciBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocC5cbi8vIEB0cy1pZ25vcmVcbnZhciBfQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbmZ1bmN0aW9uIGJhc2UgKEFMUEhBQkVUKSB7XG4gIGlmIChBTFBIQUJFVC5sZW5ndGggPj0gMjU1KSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscGhhYmV0IHRvbyBsb25nJykgfVxuICB2YXIgQkFTRV9NQVAgPSBuZXcgVWludDhBcnJheSgyNTYpXG4gIGZvciAodmFyIGogPSAwOyBqIDwgQkFTRV9NQVAubGVuZ3RoOyBqKyspIHtcbiAgICBCQVNFX01BUFtqXSA9IDI1NVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQUxQSEFCRVQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgeCA9IEFMUEhBQkVULmNoYXJBdChpKVxuICAgIHZhciB4YyA9IHguY2hhckNvZGVBdCgwKVxuICAgIGlmIChCQVNFX01BUFt4Y10gIT09IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIGFtYmlndW91cycpIH1cbiAgICBCQVNFX01BUFt4Y10gPSBpXG4gIH1cbiAgdmFyIEJBU0UgPSBBTFBIQUJFVC5sZW5ndGhcbiAgdmFyIExFQURFUiA9IEFMUEhBQkVULmNoYXJBdCgwKVxuICB2YXIgRkFDVE9SID0gTWF0aC5sb2coQkFTRSkgLyBNYXRoLmxvZygyNTYpIC8vIGxvZyhCQVNFKSAvIGxvZygyNTYpLCByb3VuZGVkIHVwXG4gIHZhciBpRkFDVE9SID0gTWF0aC5sb2coMjU2KSAvIE1hdGgubG9nKEJBU0UpIC8vIGxvZygyNTYpIC8gbG9nKEJBU0UpLCByb3VuZGVkIHVwXG4gIGZ1bmN0aW9uIGVuY29kZSAoc291cmNlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSB8fCBzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7IHNvdXJjZSA9IF9CdWZmZXIuZnJvbShzb3VyY2UpIH1cbiAgICBpZiAoIV9CdWZmZXIuaXNCdWZmZXIoc291cmNlKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBCdWZmZXInKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnIH1cbiAgICAgICAgLy8gU2tpcCAmIGNvdW50IGxlYWRpbmcgemVyb2VzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB2YXIgcGJlZ2luID0gMFxuICAgIHZhciBwZW5kID0gc291cmNlLmxlbmd0aFxuICAgIHdoaWxlIChwYmVnaW4gIT09IHBlbmQgJiYgc291cmNlW3BiZWdpbl0gPT09IDApIHtcbiAgICAgIHBiZWdpbisrXG4gICAgICB6ZXJvZXMrK1xuICAgIH1cbiAgICAgICAgLy8gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGluIGJpZy1lbmRpYW4gYmFzZTU4IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKChwZW5kIC0gcGJlZ2luKSAqIGlGQUNUT1IgKyAxKSA+Pj4gMFxuICAgIHZhciBiNTggPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBieXRlcy5cbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kKSB7XG4gICAgICB2YXIgY2FycnkgPSBzb3VyY2VbcGJlZ2luXVxuICAgICAgICAgICAgLy8gQXBwbHkgXCJiNTggPSBiNTggKiAyNTYgKyBjaFwiLlxuICAgICAgdmFyIGkgPSAwXG4gICAgICBmb3IgKHZhciBpdDEgPSBzaXplIC0gMTsgKGNhcnJ5ICE9PSAwIHx8IGkgPCBsZW5ndGgpICYmIChpdDEgIT09IC0xKTsgaXQxLS0sIGkrKykge1xuICAgICAgICBjYXJyeSArPSAoMjU2ICogYjU4W2l0MV0pID4+PiAwXG4gICAgICAgIGI1OFtpdDFdID0gKGNhcnJ5ICUgQkFTRSkgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSA+Pj4gMFxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7IHRocm93IG5ldyBFcnJvcignTm9uLXplcm8gY2FycnknKSB9XG4gICAgICBsZW5ndGggPSBpXG4gICAgICBwYmVnaW4rK1xuICAgIH1cbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lcyBpbiBiYXNlNTggcmVzdWx0LlxuICAgIHZhciBpdDIgPSBzaXplIC0gbGVuZ3RoXG4gICAgd2hpbGUgKGl0MiAhPT0gc2l6ZSAmJiBiNThbaXQyXSA9PT0gMCkge1xuICAgICAgaXQyKytcbiAgICB9XG4gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgcmVzdWx0IGludG8gYSBzdHJpbmcuXG4gICAgdmFyIHN0ciA9IExFQURFUi5yZXBlYXQoemVyb2VzKVxuICAgIGZvciAoOyBpdDIgPCBzaXplOyArK2l0MikgeyBzdHIgKz0gQUxQSEFCRVQuY2hhckF0KGI1OFtpdDJdKSB9XG4gICAgcmV0dXJuIHN0clxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZVVuc2FmZSAoc291cmNlKSB7XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFN0cmluZycpIH1cbiAgICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gX0J1ZmZlci5hbGxvYygwKSB9XG4gICAgdmFyIHBzeiA9IDBcbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGFuZCBjb3VudCBsZWFkaW5nICcxJ3MuXG4gICAgdmFyIHplcm9lcyA9IDBcbiAgICB2YXIgbGVuZ3RoID0gMFxuICAgIHdoaWxlIChzb3VyY2VbcHN6XSA9PT0gTEVBREVSKSB7XG4gICAgICB6ZXJvZXMrK1xuICAgICAgcHN6KytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2UyNTYgcmVwcmVzZW50YXRpb24uXG4gICAgdmFyIHNpemUgPSAoKChzb3VyY2UubGVuZ3RoIC0gcHN6KSAqIEZBQ1RPUikgKyAxKSA+Pj4gMCAvLyBsb2coNTgpIC8gbG9nKDI1NiksIHJvdW5kZWQgdXAuXG4gICAgdmFyIGIyNTYgPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBjaGFyYWN0ZXJzLlxuICAgIHdoaWxlIChzb3VyY2VbcHN6XSkge1xuICAgICAgICAgICAgLy8gRGVjb2RlIGNoYXJhY3RlclxuICAgICAgdmFyIGNhcnJ5ID0gQkFTRV9NQVBbc291cmNlLmNoYXJDb2RlQXQocHN6KV1cbiAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyXG4gICAgICBpZiAoY2FycnkgPT09IDI1NSkgeyByZXR1cm4gfVxuICAgICAgdmFyIGkgPSAwXG4gICAgICBmb3IgKHZhciBpdDMgPSBzaXplIC0gMTsgKGNhcnJ5ICE9PSAwIHx8IGkgPCBsZW5ndGgpICYmIChpdDMgIT09IC0xKTsgaXQzLS0sIGkrKykge1xuICAgICAgICBjYXJyeSArPSAoQkFTRSAqIGIyNTZbaXQzXSkgPj4+IDBcbiAgICAgICAgYjI1NltpdDNdID0gKGNhcnJ5ICUgMjU2KSA+Pj4gMFxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIDI1NikgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcHN6KytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgdHJhaWxpbmcgc3BhY2VzLlxuICAgIGlmIChzb3VyY2VbcHN6XSA9PT0gJyAnKSB7IHJldHVybiB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYjI1Ni5cbiAgICB2YXIgaXQ0ID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDQgIT09IHNpemUgJiYgYjI1NltpdDRdID09PSAwKSB7XG4gICAgICBpdDQrK1xuICAgIH1cbiAgICB2YXIgdmNoID0gX0J1ZmZlci5hbGxvY1Vuc2FmZSh6ZXJvZXMgKyAoc2l6ZSAtIGl0NCkpXG4gICAgdmNoLmZpbGwoMHgwMCwgMCwgemVyb2VzKVxuICAgIHZhciBqID0gemVyb2VzXG4gICAgd2hpbGUgKGl0NCAhPT0gc2l6ZSkge1xuICAgICAgdmNoW2orK10gPSBiMjU2W2l0NCsrXVxuICAgIH1cbiAgICByZXR1cm4gdmNoXG4gIH1cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSB7IHJldHVybiBidWZmZXIgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm9uLWJhc2UnICsgQkFTRSArICcgY2hhcmFjdGVyJylcbiAgfVxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gYmFzZVxuIiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuXG52YXIgQ0lEVXRpbCA9IHtcbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGlzIG5vdC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgaXQgaXMgYSB2YWxpZCBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tDSURDb21wb25lbnRzOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsIHZhbHVlcyBhcmUgbm90IHZhbGlkIENJRHMnXG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIudmVyc2lvbiA9PT0gMCB8fCBvdGhlci52ZXJzaW9uID09PSAxKSkge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIHZlcnNpb24sIG11c3QgYmUgYSBudW1iZXIgZXF1YWwgdG8gMSBvciAwJ1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3RoZXIuY29kZWMgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ2NvZGVjIG11c3QgYmUgc3RyaW5nJ1xuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAob3RoZXIuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICAgIHJldHVybiBcImNvZGVjIG11c3QgYmUgJ2RhZy1wYicgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlci5tdWx0aWJhc2VOYW1lICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICByZXR1cm4gXCJtdWx0aWJhc2VOYW1lIG11c3QgYmUgJ2Jhc2U1OGJ0YycgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlci5tdWx0aWhhc2gpKSB7XG4gICAgICByZXR1cm4gJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBtaC52YWxpZGF0ZShvdGhlci5tdWx0aWhhc2gpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgZXJyb3JNc2cgPSBlcnIubWVzc2FnZVxuICAgICAgaWYgKCFlcnJvck1zZykgeyAvLyBKdXN0IGluIGNhc2UgbWgudmFsaWRhdGUoKSB0aHJvd3MgYW4gZXJyb3Igd2l0aCBlbXB0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGVycm9yTXNnID0gJ011bHRpaGFzaCB2YWxpZGF0aW9uIGZhaWxlZCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvck1zZ1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENJRFV0aWxcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBtaCA9IHJlcXVpcmUoJ211bHRpaGFzaGVzJylcbmNvbnN0IG11bHRpYmFzZSA9IHJlcXVpcmUoJ211bHRpYmFzZScpXG5jb25zdCBtdWx0aWNvZGVjID0gcmVxdWlyZSgnbXVsdGljb2RlYycpXG5jb25zdCBjb2RlY3MgPSByZXF1aXJlKCdtdWx0aWNvZGVjL3NyYy9iYXNlLXRhYmxlLmpzb24nKVxuY29uc3QgQ0lEVXRpbCA9IHJlcXVpcmUoJy4vY2lkLXV0aWwnKVxuY29uc3Qgd2l0aElzID0gcmVxdWlyZSgnY2xhc3MtaXMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6ZWRDSURcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlY1xuICogQHBhcmFtIHtudW1iZXJ9IHZlcnNpb25cbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqL1xuXG4vKipcbiAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgQ0lELlxuICogQGZ1bmN0aW9uIGlzQ0lEXG4gKiBAbWVtYmVyb2YgQ0lEXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAqIEByZXR1cm5zIHtib29sfVxuICovXG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgQ0lEIGA8bWJhc2U+PHZlcnNpb24+PG1jb2RlYz48bWhhc2g+YFxuICogLCBhcyBkZWZpbmVkIGluIFtpcGxkL2NpZF0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9jaWQpLlxuICogQGNsYXNzIENJRFxuICovXG5jbGFzcyBDSUQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENJRC5cbiAgICpcbiAgICogVGhlIGFsZ29yaXRobSBmb3IgYXJndW1lbnQgaW5wdXQgaXMgcm91Z2hseTpcbiAgICogYGBgXG4gICAqIGlmIChjaWQpXG4gICAqICAgLT4gY3JlYXRlIGEgY29weVxuICAgKiBlbHNlIGlmIChzdHIpXG4gICAqICAgaWYgKDFzdCBjaGFyIGlzIG9uIG11bHRpYmFzZSB0YWJsZSkgLT4gQ0lEIFN0cmluZ1xuICAgKiAgIGVsc2UgLT4gYnM1OCBlbmNvZGVkIG11bHRpaGFzaFxuICAgKiBlbHNlIGlmIChCdWZmZXIpXG4gICAqICAgaWYgKDFzdCBieXRlIGlzIDAgb3IgMSkgLT4gQ0lEXG4gICAqICAgZWxzZSAtPiBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoTnVtYmVyKVxuICAgKiAgIC0+IGNvbnN0cnVjdCBDSUQgYnkgcGFydHNcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcnxDSUR9IHZlcnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlY11cbiAgICogQHBhcmFtIHtCdWZmZXJ9IFttdWx0aWhhc2hdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbXVsdGliYXNlTmFtZV1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IENJRCg8dmVyc2lvbj4sIDxjb2RlYz4sIDxtdWx0aWhhc2g+LCA8bXVsdGliYXNlTmFtZT4pXG4gICAqIG5ldyBDSUQoPGNpZFN0cj4pXG4gICAqIG5ldyBDSUQoPGNpZC5idWZmZXI+KVxuICAgKiBuZXcgQ0lEKDxtdWx0aWhhc2g+KVxuICAgKiBuZXcgQ0lEKDxiczU4IGVuY29kZWQgbXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8Y2lkPilcbiAgICovXG4gIGNvbnN0cnVjdG9yICh2ZXJzaW9uLCBjb2RlYywgbXVsdGloYXNoLCBtdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKF9DSUQuaXNDSUQodmVyc2lvbikpIHtcbiAgICAgIC8vIHZlcnNpb24gaXMgYW4gZXhpc2luZyBDSUQgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGNpZCA9IHZlcnNpb25cbiAgICAgIHRoaXMudmVyc2lvbiA9IGNpZC52ZXJzaW9uXG4gICAgICB0aGlzLmNvZGVjID0gY2lkLmNvZGVjXG4gICAgICB0aGlzLm11bHRpaGFzaCA9IEJ1ZmZlci5mcm9tKGNpZC5tdWx0aWhhc2gpXG4gICAgICAvLyBEZWZhdWx0IGd1YXJkIGZvciB3aGVuIGEgQ0lEIDwgMC43IGlzIHBhc3NlZCB3aXRoIG5vIG11bHRpYmFzZU5hbWVcbiAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IGNpZC5tdWx0aWJhc2VOYW1lIHx8IChjaWQudmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBlLmcuICdiYXNlMzInIG9yIGZhbHNlXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IG11bHRpYmFzZS5pc0VuY29kZWQodmVyc2lvbilcbiAgICAgIGlmIChiYXNlTmFtZSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIFN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlLCBzbyB2MVxuICAgICAgICBjb25zdCBjaWQgPSBtdWx0aWJhc2UuZGVjb2RlKHZlcnNpb24pXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHBhcnNlSW50KGNpZC5zbGljZSgwLCAxKS50b1N0cmluZygnaGV4JyksIDE2KVxuICAgICAgICB0aGlzLmNvZGVjID0gbXVsdGljb2RlYy5nZXRDb2RlYyhjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGljb2RlYy5ybVByZWZpeChjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IGJhc2VOYW1lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgYmFzZTU4YnRjIHN0cmluZyBtdWx0aWhhc2gsIHNvIHYwXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDBcbiAgICAgICAgdGhpcy5jb2RlYyA9ICdkYWctcGInXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbWguZnJvbUI1OFN0cmluZyh2ZXJzaW9uKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTU4YnRjJ1xuICAgICAgfVxuICAgICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0cmluZycsIHsgdmFsdWU6IHZlcnNpb24gfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmVyc2lvbikpIHtcbiAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IHZlcnNpb24uc2xpY2UoMCwgMSlcbiAgICAgIGNvbnN0IHYgPSBwYXJzZUludChmaXJzdEJ5dGUudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgIGlmICh2ID09PSAxKSB7XG4gICAgICAgIC8vIHZlcnNpb24gaXMgYSBDSUQgYnVmZmVyXG4gICAgICAgIGNvbnN0IGNpZCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdlxuICAgICAgICB0aGlzLmNvZGVjID0gbXVsdGljb2RlYy5nZXRDb2RlYyhjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGljb2RlYy5ybVByZWZpeChjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9ICdiYXNlMzInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgcmF3IG11bHRpaGFzaCBidWZmZXIsIHNvIHYwXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDBcbiAgICAgICAgdGhpcy5jb2RlYyA9ICdkYWctcGInXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gdmVyc2lvblxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTU4YnRjJ1xuICAgICAgfVxuICAgICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGFzc2VtYmxlIHRoZSBDSUQgZnJvbSB0aGUgcGFyYW1ldGVyc1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY29kZWMgPSBjb2RlY1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpaGFzaFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBtdWx0aWJhc2VOYW1lIHx8ICh2ZXJzaW9uID09PSAwID8gJ2Jhc2U1OGJ0YycgOiAnYmFzZTMyJylcblxuICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDSUQgYXMgYSBgQnVmZmVyYFxuICAgKlxuICAgKiBAcmV0dXJuIHtCdWZmZXJ9XG4gICAqIEByZWFkb25seVxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ0lEXG4gICAqL1xuICBnZXQgYnVmZmVyICgpIHtcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5fYnVmZmVyXG5cbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgICBidWZmZXIgPSB0aGlzLm11bHRpaGFzaFxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgQnVmZmVyLmZyb20oJzAxJywgJ2hleCcpLFxuICAgICAgICAgIG11bHRpY29kZWMuZ2V0Q29kZVZhcmludCh0aGlzLmNvZGVjKSxcbiAgICAgICAgICB0aGlzLm11bHRpaGFzaFxuICAgICAgICBdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2ZXJzaW9uJylcbiAgICAgIH1cblxuICAgICAgLy8gQ2FjaGUgdGhpcyBidWZmZXIgc28gaXQgZG9lc24ndCBoYXZlIHRvIGJlIHJlY3JlYXRlZFxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfYnVmZmVyJywgeyB2YWx1ZTogYnVmZmVyIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlZml4IG9mIHRoZSBDSUQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHByZWZpeCAoKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20oYDAke3RoaXMudmVyc2lvbn1gLCAnaGV4JyksXG4gICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICBtaC5wcmVmaXgodGhpcy5tdWx0aWhhc2gpXG4gICAgXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDBgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMCAoKSB7XG4gICAgaWYgKHRoaXMuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgbm9uIGRhZy1wYiBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgbmFtZSwgbGVuZ3RoIH0gPSBtaC5kZWNvZGUodGhpcy5tdWx0aWhhc2gpXG5cbiAgICBpZiAobmFtZSAhPT0gJ3NoYTItMjU2Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBub24gc2hhMi0yNTYgbXVsdGloYXNoIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgaWYgKGxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIDMyIGJ5dGUgbXVsdGloYXNoIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQ0lEKDAsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gYSBDSUQgb2YgdmVyc2lvbiBgMWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDSUR9XG4gICAqL1xuICB0b1YxICgpIHtcbiAgICByZXR1cm4gbmV3IF9DSUQoMSwgdGhpcy5jb2RlYywgdGhpcy5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIHRoZSBDSUQgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlPXRoaXMubXVsdGliYXNlTmFtZV0gLSBCYXNlIGVuY29kaW5nIHRvIHVzZS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvQmFzZUVuY29kZWRTdHJpbmcgKGJhc2UgPSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICBpZiAodGhpcy5zdHJpbmcgJiYgYmFzZSA9PT0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmdcbiAgICB9XG4gICAgbGV0IHN0ciA9IG51bGxcbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAoYmFzZSAhPT0gJ2Jhc2U1OGJ0YycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3Qgc3VwcG9ydGVkIHdpdGggQ0lEdjAsIHRvIHN1cHBvcnQgZGlmZmVyZW50IGJhc2VzLCBwbGVhc2UgbWlncmF0ZSB0aGUgaW5zdGFuY2UgZG8gQ0lEdjEsIHlvdSBjYW4gZG8gdGhhdCB0aHJvdWdoIGNpZC50b1YxKCknKVxuICAgICAgfVxuICAgICAgc3RyID0gbWgudG9CNThTdHJpbmcodGhpcy5tdWx0aWhhc2gpXG4gICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHtcbiAgICAgIHN0ciA9IG11bHRpYmFzZS5lbmNvZGUoYmFzZSwgdGhpcy5idWZmZXIpLnRvU3RyaW5nKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2ZXJzaW9uJylcbiAgICB9XG4gICAgaWYgKGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgLy8gY2FjaGUgdGhlIHN0cmluZyB2YWx1ZVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiBzdHIgfSlcbiAgICB9XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgdG9TdHJpbmcgKGJhc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b0Jhc2VFbmNvZGVkU3RyaW5nKGJhc2UpXG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIGEgcGxhaW4gb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VyaWFsaXplZENJRH1cbiAgICovXG4gIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVjOiB0aGlzLmNvZGVjLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgaGFzaDogdGhpcy5tdWx0aWhhc2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBlcXVhbGl0eSB3aXRoIGFub3RoZXIgQ0lELlxuICAgKlxuICAgKiBAcGFyYW0ge0NJRH0gb3RoZXJcbiAgICogQHJldHVybnMge2Jvb2x9XG4gICAqL1xuICBlcXVhbHMgKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZWMgPT09IG90aGVyLmNvZGVjICYmXG4gICAgICB0aGlzLnZlcnNpb24gPT09IG90aGVyLnZlcnNpb24gJiZcbiAgICAgIHRoaXMubXVsdGloYXNoLmVxdWFscyhvdGhlci5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgYSB2YWxpZCBDSUQgb2JqZWN0LlxuICAgKiBUaHJvd3MgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVDSUQgKG90aGVyKSB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBDSURVdGlsLmNoZWNrQ0lEQ29tcG9uZW50cyhvdGhlcilcbiAgICBpZiAoZXJyb3JNc2cpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZylcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgX0NJRCA9IHdpdGhJcyhDSUQsIHtcbiAgY2xhc3NOYW1lOiAnQ0lEJyxcbiAgc3ltYm9sTmFtZTogJ0BpcGxkL2pzLWNpZC9DSUQnXG59KVxuXG5fQ0lELmNvZGVjcyA9IGNvZGVjc1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9DSURcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gd2l0aElzKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIGNvbnN0IENsYXNzSXNXcmFwcGVyID0ge1xuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3NpZ25zIHRoZSBjbGFzcyB3cmFwcGVyIHRvIGFuIG9iamVjdCB0byB0cmlja1xuICAgICAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZXMgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgY2xhc3Mgd2hlblxuICAgICAgICAvLyBsb2dnaW5nIGFuIGluc3RhbmNlcy5cbiAgICAgICAgLy8gV2UgYXJlIGFzc2lnbmluZyBhbiBhbm9ueW1vdXMgY2xhc3MgKGNsYXNzIHdyYXBwZXIpIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gd2l0aCBrZXkgYGNsYXNzTmFtZWAgdG8ga2VlcCB0aGUgY29ycmVjdCBuYW1lLlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaXQgZmFsbHMgYmFjayB0byBsb2dnaW5nIGBDbGFzc0lzV3JhcHBlcmAuXG4gICAgICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHdpdGhJc1Byb3RvKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSwgd2l0aG91dE5ldyB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1zaG9ydGhhbmQgKi9cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAod2l0aG91dE5ldyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBDbGFzc0lzV3JhcHBlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzSXNXcmFwcGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IENsYXNzLmNhbGwodGhpcywgLi4uYXJncykgfHwgdGhpcztcblxuICAgICAgICAgICAgaWYgKF90aGlzICYmICFfdGhpc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG4gICAgLyogZXNsaW50LWVuYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG5cbiAgICBDbGFzc0lzV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSk7XG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3NJc1dyYXBwZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIENsYXNzSXNXcmFwcGVyW2BpcyR7Y2xhc3NOYW1lfWBdID0gKG9iaikgPT4gISEob2JqICYmIG9ialtzeW1ib2xdKTtcblxuICAgIHJldHVybiBDbGFzc0lzV3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoSXM7XG5tb2R1bGUuZXhwb3J0cy5wcm90byA9IHdpdGhJc1Byb3RvO1xuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiBlbmFibGVPdmVycmlkZSA9PT0gbnVsbCA/IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKSA6IGVuYWJsZU92ZXJyaWRlLFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcbnRyeSB7XG4gIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbn1cbmNhdGNoIChlcnJvcikge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZGVidWc7XG4iLCJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBVUkwgPSB1cmwuVVJMO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50SGFuZGxlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuW1wiYWJvcnRcIiwgXCJhYm9ydGVkXCIsIFwiY29ubmVjdFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RhYmxlLmVtaXQoZXZlbnQsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICB9O1xufSk7XG5cbi8vIEVycm9yIHR5cGVzIHdpdGggY29kZXNcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiXCJcbik7XG52YXIgVG9vTWFueVJlZGlyZWN0c0Vycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFNcIixcbiAgXCJNYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgZXhjZWVkZWRcIlxuKTtcbnZhciBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfTUFYX0JPRFlfTEVOR1RIX0VYQ0VFREVEXCIsXG4gIFwiUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXRcIlxuKTtcbnZhciBXcml0ZUFmdGVyRW5kRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkRcIixcbiAgXCJ3cml0ZSBhZnRlciBlbmRcIlxuKTtcblxuLy8gQW4gSFRUUChTKSByZXF1ZXN0IHRoYXQgY2FuIGJlIHJlZGlyZWN0ZWRcbmZ1bmN0aW9uIFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgcmVzcG9uc2VDYWxsYmFjaykge1xuICAvLyBJbml0aWFsaXplIHRoZSByZXF1ZXN0XG4gIFdyaXRhYmxlLmNhbGwodGhpcyk7XG4gIHRoaXMuX3Nhbml0aXplT3B0aW9ucyhvcHRpb25zKTtcbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuX2VuZGVkID0gZmFsc2U7XG4gIHRoaXMuX2VuZGluZyA9IGZhbHNlO1xuICB0aGlzLl9yZWRpcmVjdENvdW50ID0gMDtcbiAgdGhpcy5fcmVkaXJlY3RzID0gW107XG4gIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoID0gMDtcbiAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChyZXNwb25zZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInJlc3BvbnNlXCIsIHJlc3BvbnNlQ2FsbGJhY2spO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gcmVzcG9uc2VzIG9mIG5hdGl2ZSByZXF1ZXN0c1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBzZWxmLl9wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gdGhlIGZpcnN0IHJlcXVlc3RcbiAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbn1cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZS5wcm90b3R5cGUpO1xuXG4vLyBXcml0ZXMgYnVmZmVyZWQgZGF0YSB0byB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFdyaXRpbmcgaXMgbm90IGFsbG93ZWQgaWYgZW5kIGhhcyBiZWVuIGNhbGxlZFxuICBpZiAodGhpcy5fZW5kaW5nKSB7XG4gICAgdGhyb3cgbmV3IFdyaXRlQWZ0ZXJFbmRFcnJvcigpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIChcImxlbmd0aFwiIGluIGRhdGEpKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIHNob3VsZCBiZSBhIHN0cmluZywgQnVmZmVyIG9yIFVpbnQ4QXJyYXlcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBJZ25vcmUgZW1wdHkgYnVmZmVycywgc2luY2Ugd3JpdGluZyB0aGVtIGRvZXNuJ3QgaW52b2tlIHRoZSBjYWxsYmFja1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzIyMDY2XG4gIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE9ubHkgd3JpdGUgd2hlbiB3ZSBkb24ndCBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgaWYgKHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICsgZGF0YS5sZW5ndGggPD0gdGhpcy5fb3B0aW9ucy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzLnB1c2goeyBkYXRhOiBkYXRhLCBlbmNvZGluZzogZW5jb2RpbmcgfSk7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qud3JpdGUoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxuICAvLyBFcnJvciB3aGVuIHdlIGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBlbHNlIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IoKSk7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG59O1xuXG4vLyBFbmRzIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBkYXRhO1xuICAgIGRhdGEgPSBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIFdyaXRlIGRhdGEgaWYgbmVlZGVkIGFuZCBlbmRcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhpcy5fZW5kZWQgPSB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBjdXJyZW50UmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0O1xuICAgIHRoaXMud3JpdGUoZGF0YSwgZW5jb2RpbmcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2VuZGVkID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLy8gU2V0cyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xufTtcblxuLy8gQ2xlYXJzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWxldGUgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVIZWFkZXIobmFtZSk7XG59O1xuXG4vLyBHbG9iYWwgdGltZW91dCBmb3IgYWxsIHVuZGVybHlpbmcgcmVxdWVzdHNcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAobXNlY3MsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMub25jZShcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgc3RhcnRUaW1lcih0aGlzLCBtc2Vjcyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uY2UoXCJzb2NrZXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc3RhcnRUaW1lcihzZWxmLCBtc2Vjcyk7XG4gICAgfSk7XG4gIH1cblxuICB0aGlzLm9uY2UoXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbmNlKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBzdGFydFRpbWVyKHJlcXVlc3QsIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChyZXF1ZXN0Ll90aW1lb3V0KTtcbiAgcmVxdWVzdC5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHJlcXVlc3QuZW1pdChcInRpbWVvdXRcIik7XG4gIH0sIG1zZWNzKTtcbn1cblxuZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xufVxuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImFib3J0XCIsIFwiZmx1c2hIZWFkZXJzXCIsIFwiZ2V0SGVhZGVyXCIsXG4gIFwic2V0Tm9EZWxheVwiLCBcInNldFNvY2tldEtlZXBBbGl2ZVwiLFxuXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXF1ZXN0W21ldGhvZF0oYSwgYik7XG4gIH07XG59KTtcblxuLy8gUHJveHkgYWxsIHB1YmxpYyBDbGllbnRSZXF1ZXN0IHByb3BlcnRpZXNcbltcImFib3J0ZWRcIiwgXCJjb25uZWN0aW9uXCIsIFwic29ja2V0XCJdLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSwgcHJvcGVydHksIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXF1ZXN0W3Byb3BlcnR5XTsgfSxcbiAgfSk7XG59KTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Nhbml0aXplT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8vIEVuc3VyZSBoZWFkZXJzIGFyZSBhbHdheXMgcHJlc2VudFxuICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gU2luY2UgaHR0cC5yZXF1ZXN0IHRyZWF0cyBob3N0IGFzIGFuIGFsaWFzIG9mIGhvc3RuYW1lLFxuICAvLyBidXQgdGhlIHVybCBtb2R1bGUgaW50ZXJwcmV0cyBob3N0IGFzIGhvc3RuYW1lIHBsdXMgcG9ydCxcbiAgLy8gZWxpbWluYXRlIHRoZSBob3N0IHByb3BlcnR5IHRvIGF2b2lkIGNvbmZ1c2lvbi5cbiAgaWYgKG9wdGlvbnMuaG9zdCkge1xuICAgIC8vIFVzZSBob3N0bmFtZSBpZiBzZXQsIGJlY2F1c2UgaXQgaGFzIHByZWNlZGVuY2VcbiAgICBpZiAoIW9wdGlvbnMuaG9zdG5hbWUpIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBvcHRpb25zLmhvc3Q7XG4gICAgfVxuICAgIGRlbGV0ZSBvcHRpb25zLmhvc3Q7XG4gIH1cblxuICAvLyBDb21wbGV0ZSB0aGUgVVJMIG9iamVjdCB3aGVuIG5lY2Vzc2FyeVxuICBpZiAoIW9wdGlvbnMucGF0aG5hbWUgJiYgb3B0aW9ucy5wYXRoKSB7XG4gICAgdmFyIHNlYXJjaFBvcyA9IG9wdGlvbnMucGF0aC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoUG9zIDwgMCkge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZygwLCBzZWFyY2hQb3MpO1xuICAgICAgb3B0aW9ucy5zZWFyY2ggPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKHNlYXJjaFBvcyk7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vIEV4ZWN1dGVzIHRoZSBuZXh0IG5hdGl2ZSByZXF1ZXN0IChpbml0aWFsIG9yIHJlZGlyZWN0KVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3BlcmZvcm1SZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBMb2FkIHRoZSBuYXRpdmUgcHJvdG9jb2xcbiAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5wcm90b2NvbDtcbiAgdmFyIG5hdGl2ZVByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5uYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdO1xuICBpZiAoIW5hdGl2ZVByb3RvY29sKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIHByb3RvY29sIFwiICsgcHJvdG9jb2wpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc3Vic3RyKDAsIHByb3RvY29sLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdFxuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgdGhpcy5fY3VycmVudFVybCA9IHVybC5mb3JtYXQodGhpcy5fb3B0aW9ucyk7XG5cbiAgLy8gU2V0IHVwIGV2ZW50IGhhbmRsZXJzXG4gIHJlcXVlc3QuX3JlZGlyZWN0YWJsZSA9IHRoaXM7XG4gIGZvciAodmFyIGV2ZW50IGluIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudCkge1xuICAgICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuZCBhIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICAvLyAoVGhlIGZpcnN0IHJlcXVlc3QgbXVzdCBiZSBlbmRlZCBleHBsaWNpdGx5IHdpdGggUmVkaXJlY3RhYmxlUmVxdWVzdCNlbmQpXG4gIGlmICh0aGlzLl9pc1JlZGlyZWN0KSB7XG4gICAgLy8gV3JpdGUgdGhlIHJlcXVlc3QgZW50aXR5IGFuZCBlbmQuXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycztcbiAgICAoZnVuY3Rpb24gd3JpdGVOZXh0KGVycm9yKSB7XG4gICAgICAvLyBPbmx5IHdyaXRlIGlmIHRoaXMgcmVxdWVzdCBoYXMgbm90IGJlZW4gcmVkaXJlY3RlZCB5ZXRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocmVxdWVzdCA9PT0gc2VsZi5fY3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgLy8gUmVwb3J0IGFueSB3cml0ZSBlcnJvcnNcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXcml0ZSB0aGUgbmV4dCBidWZmZXIgaWYgdGhlcmUgYXJlIHN0aWxsIGxlZnRcbiAgICAgICAgZWxzZSBpZiAoaSA8IGJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICghcmVxdWVzdC5maW5pc2hlZCkge1xuICAgICAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QgaWYgYGVuZGAgaGFzIGJlZW4gY2FsbGVkIG9uIHVzXG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2VuZGVkKSB7XG4gICAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0oKSk7XG4gIH1cbn07XG5cbi8vIFByb2Nlc3NlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wcm9jZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgLy8gU3RvcmUgdGhlIHJlZGlyZWN0ZWQgcmVzcG9uc2VcbiAgdmFyIHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAobG9jYXRpb24gJiYgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgIT09IGZhbHNlICYmXG4gICAgICBzdGF0dXNDb2RlID49IDMwMCAmJiBzdGF0dXNDb2RlIDwgNDAwKSB7XG4gICAgLy8gQWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuYWJvcnQoKTtcbiAgICAvLyBEaXNjYXJkIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlc3BvbnNlIHRvIGF2b2lkIHdhaXRpbmcgZm9yIGRhdGFcbiAgICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgICAvLyBSRkM3MjMxwqc2LjQ6IEEgY2xpZW50IFNIT1VMRCBkZXRlY3QgYW5kIGludGVydmVuZVxuICAgIC8vIGluIGN5Y2xpY2FsIHJlZGlyZWN0aW9ucyAoaS5lLiwgXCJpbmZpbml0ZVwiIHJlZGlyZWN0aW9uIGxvb3BzKS5cbiAgICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUb29NYW55UmVkaXJlY3RzRXJyb3IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gICAgLy8gY2FyZSBmb3IgbWV0aG9kcyBub3Qga25vd24gdG8gYmUgc2FmZSwgW+KApl1cbiAgICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gICAgLy8gdGhlIHJlcXVlc3QgbWV0aG9kIGZyb20gUE9TVCB0byBHRVQgZm9yIHRoZSBzdWJzZXF1ZW50IHJlcXVlc3QuXG4gICAgaWYgKChzdGF0dXNDb2RlID09PSAzMDEgfHwgc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiB0aGlzLl9vcHRpb25zLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHxcbiAgICAgICAgLy8gUkZDNzIzMcKnNi40LjQ6IFRoZSAzMDMgKFNlZSBPdGhlcikgc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoYXRcbiAgICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgICAvLyBBIHVzZXIgYWdlbnQgY2FuIHBlcmZvcm0gYSByZXRyaWV2YWwgcmVxdWVzdCB0YXJnZXRpbmcgdGhhdCBVUklcbiAgICAgICAgLy8gKGEgR0VUIG9yIEhFQUQgcmVxdWVzdCBpZiB1c2luZyBIVFRQKSBb4oCmXVxuICAgICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgICAgdGhpcy5fb3B0aW9ucy5tZXRob2QgPSBcIkdFVFwiO1xuICAgICAgLy8gRHJvcCBhIHBvc3NpYmxlIGVudGl0eSBhbmQgaGVhZGVycyByZWxhdGVkIHRvIGl0XG4gICAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmNvbnRlbnQtL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuXG4gICAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgICB2YXIgcHJldmlvdXNIb3N0TmFtZSA9IHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmhvc3QkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycykgfHxcbiAgICAgIHVybC5wYXJzZSh0aGlzLl9jdXJyZW50VXJsKS5ob3N0bmFtZTtcblxuICAgIC8vIENyZWF0ZSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gICAgdmFyIHJlZGlyZWN0VXJsID0gdXJsLnJlc29sdmUodGhpcy5fY3VycmVudFVybCwgbG9jYXRpb24pO1xuICAgIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwpO1xuICAgIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICAgIHZhciByZWRpcmVjdFVybFBhcnRzID0gdXJsLnBhcnNlKHJlZGlyZWN0VXJsKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHJlZGlyZWN0VXJsUGFydHMpO1xuXG4gICAgLy8gRHJvcCB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RpbmcgdG8gYW5vdGhlciBob3N0XG4gICAgaWYgKHJlZGlyZWN0VXJsUGFydHMuaG9zdG5hbWUgIT09IHByZXZpb3VzSG9zdE5hbWUpIHtcbiAgICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmF1dGhvcml6YXRpb24kL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuXG4gICAgLy8gRXZhbHVhdGUgdGhlIGJlZm9yZVJlZGlyZWN0IGNhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhciByZXNwb25zZURldGFpbHMgPSB7IGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMuYmVmb3JlUmVkaXJlY3QuY2FsbChudWxsLCB0aGlzLl9vcHRpb25zLCByZXNwb25zZURldGFpbHMpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG4gICAgfVxuICAgIGNhdGNoIChjYXVzZSkge1xuICAgICAgdmFyIGVycm9yID0gbmV3IFJlZGlyZWN0aW9uRXJyb3IoXCJSZWRpcmVjdGVkIHJlcXVlc3QgZmFpbGVkOiBcIiArIGNhdXNlLm1lc3NhZ2UpO1xuICAgICAgZXJyb3IuY2F1c2UgPSBjYXVzZTtcbiAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gVGhlIHJlc3BvbnNlIGlzIG5vdCBhIHJlZGlyZWN0OyByZXR1cm4gaXQgYXMtaXNcbiAgICByZXNwb25zZS5yZXNwb25zZVVybCA9IHRoaXMuX2N1cnJlbnRVcmw7XG4gICAgcmVzcG9uc2UucmVkaXJlY3RzID0gdGhpcy5fcmVkaXJlY3RzO1xuICAgIHRoaXMuZW1pdChcInJlc3BvbnNlXCIsIHJlc3BvbnNlKTtcblxuICAgIC8vIENsZWFuIHVwXG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG4gIH1cbn07XG5cbi8vIFdyYXBzIHRoZSBrZXkvdmFsdWUgb2JqZWN0IG9mIHByb3RvY29scyB3aXRoIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHlcbmZ1bmN0aW9uIHdyYXAocHJvdG9jb2xzKSB7XG4gIC8vIERlZmF1bHQgc2V0dGluZ3NcbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgbWF4UmVkaXJlY3RzOiAyMSxcbiAgICBtYXhCb2R5TGVuZ3RoOiAxMCAqIDEwMjQgKiAxMDI0LFxuICB9O1xuXG4gIC8vIFdyYXAgZWFjaCBwcm90b2NvbFxuICB2YXIgbmF0aXZlUHJvdG9jb2xzID0ge307XG4gIE9iamVjdC5rZXlzKHByb3RvY29scykuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1lKSB7XG4gICAgdmFyIHByb3RvY29sID0gc2NoZW1lICsgXCI6XCI7XG4gICAgdmFyIG5hdGl2ZVByb3RvY29sID0gbmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXSA9IHByb3RvY29sc1tzY2hlbWVdO1xuICAgIHZhciB3cmFwcGVkUHJvdG9jb2wgPSBleHBvcnRzW3NjaGVtZV0gPSBPYmplY3QuY3JlYXRlKG5hdGl2ZVByb3RvY29sKTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgcmVxdWVzdCwgZm9sbG93aW5nIHJlZGlyZWN0c1xuICAgIGZ1bmN0aW9uIHJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAvLyBQYXJzZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciB1cmxTdHIgPSBpbnB1dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhuZXcgVVJMKHVybFN0cikpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlucHV0ID0gdXJsLnBhcnNlKHVybFN0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFVSTCAmJiAoaW5wdXQgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICAgIGlucHV0ID0gdXJsVG9PcHRpb25zKGlucHV0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBpbnB1dDtcbiAgICAgICAgaW5wdXQgPSB7IHByb3RvY29sOiBwcm90b2NvbCB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG1heFJlZGlyZWN0czogZXhwb3J0cy5tYXhSZWRpcmVjdHMsXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgIH0sIGlucHV0LCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMubmF0aXZlUHJvdG9jb2xzID0gbmF0aXZlUHJvdG9jb2xzO1xuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBub29wKCkgeyAvKiBlbXB0eSAqLyB9XG5cbi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC91cmwuanNcbmZ1bmN0aW9uIHVybFRvT3B0aW9ucyh1cmxPYmplY3QpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgcHJvdG9jb2w6IHVybE9iamVjdC5wcm90b2NvbCxcbiAgICBob3N0bmFtZTogdXJsT2JqZWN0Lmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpID9cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUuc2xpY2UoMSwgLTEpIDpcbiAgICAgIHVybE9iamVjdC5ob3N0bmFtZSxcbiAgICBoYXNoOiB1cmxPYmplY3QuaGFzaCxcbiAgICBzZWFyY2g6IHVybE9iamVjdC5zZWFyY2gsXG4gICAgcGF0aG5hbWU6IHVybE9iamVjdC5wYXRobmFtZSxcbiAgICBwYXRoOiB1cmxPYmplY3QucGF0aG5hbWUgKyB1cmxPYmplY3Quc2VhcmNoLFxuICAgIGhyZWY6IHVybE9iamVjdC5ocmVmLFxuICB9O1xuICBpZiAodXJsT2JqZWN0LnBvcnQgIT09IFwiXCIpIHtcbiAgICBvcHRpb25zLnBvcnQgPSBOdW1iZXIodXJsT2JqZWN0LnBvcnQpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNYXRjaGluZ0hlYWRlcnMocmVnZXgsIGhlYWRlcnMpIHtcbiAgdmFyIGxhc3RWYWx1ZTtcbiAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICBpZiAocmVnZXgudGVzdChoZWFkZXIpKSB7XG4gICAgICBsYXN0VmFsdWUgPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGFzdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZGVmYXVsdE1lc3NhZ2U7XG4gIH1cbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEN1c3RvbUVycm9yO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUubmFtZSA9IFwiRXJyb3IgW1wiICsgY29kZSArIFwiXVwiO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGU7XG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSB3cmFwKHsgaHR0cDogaHR0cCwgaHR0cHM6IGh0dHBzIH0pO1xubW9kdWxlLmV4cG9ydHMud3JhcCA9IHdyYXA7XG4iLCJ2YXIgQ29tYmluZWRTdHJlYW0gPSByZXF1aXJlKCdjb21iaW5lZC1zdHJlYW0nKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgbWltZSA9IHJlcXVpcmUoJ21pbWUtdHlwZXMnKTtcbnZhciBhc3luY2tpdCA9IHJlcXVpcmUoJ2FzeW5ja2l0Jyk7XG52YXIgcG9wdWxhdGUgPSByZXF1aXJlKCcuL3BvcHVsYXRlLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gRm9ybURhdGE7XG5cbi8vIG1ha2UgaXQgYSBTdHJlYW1cbnV0aWwuaW5oZXJpdHMoRm9ybURhdGEsIENvbWJpbmVkU3RyZWFtKTtcblxuLyoqXG4gKiBDcmVhdGUgcmVhZGFibGUgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgc3RyZWFtcy5cbiAqIENhbiBiZSB1c2VkIHRvIHN1Ym1pdCBmb3Jtc1xuICogYW5kIGZpbGUgdXBsb2FkcyB0byBvdGhlciB3ZWIgYXBwbGljYXRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQcm9wZXJ0aWVzIHRvIGJlIGFkZGVkL292ZXJyaWRlbiBmb3IgRm9ybURhdGEgYW5kIENvbWJpbmVkU3RyZWFtXG4gKi9cbmZ1bmN0aW9uIEZvcm1EYXRhKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgIHJldHVybiBuZXcgRm9ybURhdGEoKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlXG4gIGlmICghdmFsdWUgfHwgKCAhdmFsdWUucGF0aCAmJiAhKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSApKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2JvdW5kYXJ5KSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YUJ1ZmZlciA9IG5ldyBCdWZmZXIuYWxsb2MoIDAgKTtcbiAgdmFyIGJvdW5kYXJ5ID0gdGhpcy5nZXRCb3VuZGFyeSgpO1xuXG4gIC8vIENyZWF0ZSB0aGUgZm9ybSBjb250ZW50LiBBZGQgTGluZSBicmVha3MgdG8gdGhlIGVuZCBvZiBkYXRhLlxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fc3RyZWFtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAvLyBBZGQgY29udGVudCB0byB0aGUgYnVmZmVyLlxuICAgICAgaWYoQnVmZmVyLmlzQnVmZmVyKHRoaXMuX3N0cmVhbXNbaV0pKSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgdGhpcy5fc3RyZWFtc1tpXV0pO1xuICAgICAgfWVsc2Uge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX3N0cmVhbXNbaV0pXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBicmVhayBhZnRlciBjb250ZW50LlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnc3RyaW5nJyB8fCB0aGlzLl9zdHJlYW1zW2ldLnN1YnN0cmluZyggMiwgYm91bmRhcnkubGVuZ3RoICsgMiApICE9PSBib3VuZGFyeSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKEZvcm1EYXRhLkxJTkVfQlJFQUspXSApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgZm9vdGVyIGFuZCByZXR1cm4gdGhlIEJ1ZmZlciBvYmplY3QuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fbGFzdEJvdW5kYXJ5KCkpXSApO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZW5lcmF0ZUJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIC8vIFRoaXMgZ2VuZXJhdGVzIGEgNTAgY2hhcmFjdGVyIGJvdW5kYXJ5IHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieSBGaXJlZm94LlxuICAvLyBUaGV5IGFyZSBvcHRpbWl6ZWQgZm9yIGJveWVyLW1vb3JlIHBhcnNpbmcuXG4gIHZhciBib3VuZGFyeSA9ICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgIGJvdW5kYXJ5ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKS50b1N0cmluZygxNik7XG4gIH1cblxuICB0aGlzLl9ib3VuZGFyeSA9IGJvdW5kYXJ5O1xufTtcblxuLy8gTm90ZTogZ2V0TGVuZ3RoU3luYyBET0VTTidUIGNhbGN1bGF0ZSBzdHJlYW1zIGxlbmd0aFxuLy8gQXMgd29ya2Fyb3VuZCBvbmUgY2FuIGNhbGN1bGF0ZSBmaWxlIHNpemUgbWFudWFsbHlcbi8vIGFuZCBhZGQgaXQgYXMga25vd25MZW5ndGggb3B0aW9uXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoU3luYyA9IGZ1bmN0aW9uKCkge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIC8vIERvbid0IGdldCBjb25mdXNlZCwgdGhlcmUgYXJlIDMgXCJpbnRlcm5hbFwiIHN0cmVhbXMgZm9yIGVhY2gga2V5dmFsIHBhaXJcbiAgLy8gc28gaXQgYmFzaWNhbGx5IGNoZWNrcyBpZiB0aGVyZSBpcyBhbnkgdmFsdWUgYWRkZWQgdG8gdGhlIGZvcm1cbiAgaWYgKHRoaXMuX3N0cmVhbXMubGVuZ3RoKSB7XG4gICAga25vd25MZW5ndGggKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCkubGVuZ3RoO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzQwXG4gIGlmICghdGhpcy5oYXNLbm93bkxlbmd0aCgpKSB7XG4gICAgLy8gU29tZSBhc3luYyBsZW5ndGggcmV0cmlldmVycyBhcmUgcHJlc2VudFxuICAgIC8vIHRoZXJlZm9yZSBzeW5jaHJvbm91cyBsZW5ndGggY2FsY3VsYXRpb24gaXMgZmFsc2UuXG4gICAgLy8gUGxlYXNlIHVzZSBnZXRMZW5ndGgoY2FsbGJhY2spIHRvIGdldCBwcm9wZXIgbGVuZ3RoXG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHByb3BlciBsZW5ndGggaW4gc3luY2hyb25vdXMgd2F5LicpKTtcbiAgfVxuXG4gIHJldHVybiBrbm93bkxlbmd0aDtcbn07XG5cbi8vIFB1YmxpYyBBUEkgdG8gY2hlY2sgaWYgbGVuZ3RoIG9mIGFkZGVkIHZhbHVlcyBpcyBrbm93blxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzE5NlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzI2MlxuRm9ybURhdGEucHJvdG90eXBlLmhhc0tub3duTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoYXNLbm93bkxlbmd0aCA9IHRydWU7XG5cbiAgaWYgKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBoYXNLbm93bkxlbmd0aCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGhhc0tub3duTGVuZ3RoO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aCA9IGZ1bmN0aW9uKGNiKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgaWYgKHRoaXMuX3N0cmVhbXMubGVuZ3RoKSB7XG4gICAga25vd25MZW5ndGggKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCkubGVuZ3RoO1xuICB9XG5cbiAgaWYgKCF0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYi5iaW5kKHRoaXMsIG51bGwsIGtub3duTGVuZ3RoKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmNraXQucGFyYWxsZWwodGhpcy5fdmFsdWVzVG9NZWFzdXJlLCB0aGlzLl9sZW5ndGhSZXRyaWV2ZXIsIGZ1bmN0aW9uKGVyciwgdmFsdWVzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgIGtub3duTGVuZ3RoICs9IGxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNiKG51bGwsIGtub3duTGVuZ3RoKTtcbiAgfSk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24ocGFyYW1zLCBjYikge1xuICB2YXIgcmVxdWVzdFxuICAgICwgb3B0aW9uc1xuICAgICwgZGVmYXVsdHMgPSB7bWV0aG9kOiAncG9zdCd9XG4gICAgO1xuXG4gIC8vIHBhcnNlIHByb3ZpZGVkIHVybCBpZiBpdCdzIHN0cmluZ1xuICAvLyBvciB0cmVhdCBpdCBhcyBvcHRpb25zIG9iamVjdFxuICBpZiAodHlwZW9mIHBhcmFtcyA9PSAnc3RyaW5nJykge1xuXG4gICAgcGFyYW1zID0gcGFyc2VVcmwocGFyYW1zKTtcbiAgICBvcHRpb25zID0gcG9wdWxhdGUoe1xuICAgICAgcG9ydDogcGFyYW1zLnBvcnQsXG4gICAgICBwYXRoOiBwYXJhbXMucGF0aG5hbWUsXG4gICAgICBob3N0OiBwYXJhbXMuaG9zdG5hbWUsXG4gICAgICBwcm90b2NvbDogcGFyYW1zLnByb3RvY29sXG4gICAgfSwgZGVmYXVsdHMpO1xuXG4gIC8vIHVzZSBjdXN0b20gcGFyYW1zXG4gIH0gZWxzZSB7XG5cbiAgICBvcHRpb25zID0gcG9wdWxhdGUocGFyYW1zLCBkZWZhdWx0cyk7XG4gICAgLy8gaWYgbm8gcG9ydCBwcm92aWRlZCB1c2UgZGVmYXVsdCBvbmVcbiAgICBpZiAoIW9wdGlvbnMucG9ydCkge1xuICAgICAgb3B0aW9ucy5wb3J0ID0gb3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICAgIH1cbiAgfVxuXG4gIC8vIHB1dCB0aGF0IGdvb2QgY29kZSBpbiBnZXRIZWFkZXJzIHRvIHNvbWUgdXNlXG4gIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycyhwYXJhbXMuaGVhZGVycyk7XG5cbiAgLy8gaHR0cHMgaWYgc3BlY2lmaWVkLCBmYWxsYmFjayB0byBodHRwIGluIGFueSBvdGhlciBjYXNlXG4gIGlmIChvcHRpb25zLnByb3RvY29sID09ICdodHRwczonKSB7XG4gICAgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmVxdWVzdCA9IGh0dHAucmVxdWVzdChvcHRpb25zKTtcbiAgfVxuXG4gIC8vIGdldCBjb250ZW50IGxlbmd0aCBhbmQgZmlyZSBhd2F5XG4gIHRoaXMuZ2V0TGVuZ3RoKGZ1bmN0aW9uKGVyciwgbGVuZ3RoKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgY29udGVudCBsZW5ndGhcbiAgICByZXF1ZXN0LnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBsZW5ndGgpO1xuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCBjYik7XG4gICAgICByZXF1ZXN0Lm9uKCdyZXNwb25zZScsIGNiLmJpbmQodGhpcywgbnVsbCkpO1xuICAgIH1cbiAgfS5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gcmVxdWVzdDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKCF0aGlzLmVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycjtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59O1xuIiwiLy8gcG9wdWxhdGVzIG1pc3NpbmcgdmFsdWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRzdCwgc3JjKSB7XG5cbiAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApXG4gIHtcbiAgICBkc3RbcHJvcF0gPSBkc3RbcHJvcF0gfHwgc3JjW3Byb3BdO1xuICB9KTtcblxuICByZXR1cm4gZHN0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YpID0+IHtcblx0YXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvcyA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsIi8qXG4gKiBbaGktYmFzZTMyXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2hpLWJhc2UzMn1cbiAqXG4gKiBAdmVyc2lvbiAwLjUuMFxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE4XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB7fTtcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fTk9ERV9KUyAmJiB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gIGlmIChOT0RFX0pTKSB7XG4gICAgcm9vdCA9IGdsb2JhbDtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSElfQkFTRTMyX05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEJBU0UzMl9FTkNPREVfQ0hBUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nycuc3BsaXQoJycpO1xuICB2YXIgQkFTRTMyX0RFQ09ERV9DSEFSID0ge1xuICAgICdBJzogMCwgJ0InOiAxLCAnQyc6IDIsICdEJzogMywgJ0UnOiA0LCAnRic6IDUsICdHJzogNiwgJ0gnOiA3LCAnSSc6IDgsXG4gICAgJ0onOiA5LCAnSyc6IDEwLCAnTCc6IDExLCAnTSc6IDEyLCAnTic6IDEzLCAnTyc6IDE0LCAnUCc6IDE1LCAnUSc6IDE2LFxuICAgICdSJzogMTcsICdTJzogMTgsICdUJzogMTksICdVJzogMjAsICdWJzogMjEsICdXJzogMjIsICdYJzogMjMsICdZJzogMjQsXG4gICAgJ1onOiAyNSwgJzInOiAyNiwgJzMnOiAyNywgJzQnOiAyOCwgJzUnOiAyOSwgJzYnOiAzMCwgJzcnOiAzMVxuICB9O1xuXG4gIHZhciBibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgdmFyIHRocm93SW52YWxpZFV0ZjggPSBmdW5jdGlvbiAocG9zaXRpb24sIHBhcnRpYWwpIHtcbiAgICBpZiAocGFydGlhbC5sZW5ndGggPiAxMCkge1xuICAgICAgcGFydGlhbCA9ICcuLi4nICsgcGFydGlhbC5zdWJzdHIoLTEwKTtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignRGVjb2RlZCBkYXRhIGlzIG5vdCB2YWxpZCBVVEYtOC4nXG4gICAgICArICcgTWF5YmUgdHJ5IGJhc2UzMi5kZWNvZGUuYXNCeXRlcygpPydcbiAgICAgICsgJyBQYXJ0aWFsIGRhdGEgYWZ0ZXIgcmVhZGluZyAnICsgcG9zaXRpb24gKyAnIGJ5dGVzOiAnICsgcGFydGlhbCArICcgPC0nKTtcbiAgICBlcnIucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aHJvdyBlcnI7XG4gIH07XG5cbiAgdmFyIHRvVXRmOFN0cmluZyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoLCBpID0gMCwgZm9sbG93aW5nQ2hhcnMgPSAwLCBiLCBjO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgIGlmIChiIDw9IDB4N0YpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChiID4gMHhCRiAmJiBiIDw9IDB4REYpIHtcbiAgICAgICAgYyA9IGIgJiAweDFGO1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGIgPD0gMHhFRikge1xuICAgICAgICBjID0gYiAmIDB4MEY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEY3KSB7XG4gICAgICAgIGMgPSBiICYgMHgwNztcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGxvd2luZ0NoYXJzOyArK2opIHtcbiAgICAgICAgYiA9IGJ5dGVzW2krK107XG4gICAgICAgIGlmIChiIDwgMHg4MCB8fCBiID4gMHhCRikge1xuICAgICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjIDw8PSA2O1xuICAgICAgICBjICs9IGIgJiAweDNGO1xuICAgICAgfVxuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjID4gMHgxMEZGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEwKSArIDB4RDgwMCk7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZGVjb2RlQXNCeXRlcyA9IGZ1bmN0aW9uIChiYXNlMzJTdHIpIHtcbiAgICBpZiAoIS9eW0EtWjItNz1dKyQvLnRlc3QoYmFzZTMyU3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGJhc2UzMlN0ciA9IGJhc2UzMlN0ci5yZXBsYWNlKC89L2csICcnKTtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBieXRlcyA9IFtdLCBpbmRleCA9IDAsIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG5cbiAgICAvLyA0IGNoYXIgdG8gMyBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjcgPDwgNSB8IHY4KSAmIDI1NTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfTtcblxuICB2YXIgZW5jb2RlQXNjaWkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gcGFyc2VJbnQobGVuZ3RoIC8gNSkgKiA1OyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGNoYXJcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMSkge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICc9PT09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAnPT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDMpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICc9PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlVXRmOCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBjb2RlLCBlbmQgPSBmYWxzZSwgYmFzZTMyU3RyID0gJycsXG4gICAgICBpbmRleCA9IDAsIGksIHN0YXJ0ID0gMCwgYnl0ZXMgPSAwLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGRvIHtcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1s1XTtcbiAgICAgIGJsb2Nrc1sxXSA9IGJsb2Nrc1s2XTtcbiAgICAgIGJsb2Nrc1syXSA9IGJsb2Nrc1s3XTtcbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNTsgKytpbmRleCkge1xuICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGMwIHwgKGNvZGUgPj4gNik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGUwIHwgKGNvZGUgPj4gMTIpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2luZGV4KSAmIDB4M2ZmKSk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGYwIHwgKGNvZGUgPj4gMTgpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBieXRlcyArPSBpIC0gc3RhcnQ7XG4gICAgICBzdGFydCA9IGkgLSA1O1xuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IGxlbmd0aCAmJiBpIDwgNikge1xuICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdjEgPSBibG9ja3NbMF07XG4gICAgICBpZiAoaSA+IDQpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgdjUgPSBibG9ja3NbNF07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAxKSB7XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgICAnPT09PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAgICc9PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAgICc9PT0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICAgJz0nO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKCFlbmQpO1xuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZUJ5dGVzID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY1ID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQsIGFzY2lpT25seSkge1xuICAgIHZhciBub3RTdHJpbmcgPSB0eXBlb2YoaW5wdXQpICE9PSAnc3RyaW5nJztcbiAgICBpZiAobm90U3RyaW5nICYmIGlucHV0LmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgaW5wdXQgPSBuZXcgVWludDhBcnJheShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyhpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiBlbmNvZGVBc2NpaShpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVVdGY4KGlucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChiYXNlMzJTdHIsIGFzY2lpT25seSkge1xuICAgIGlmICghYXNjaWlPbmx5KSB7XG4gICAgICByZXR1cm4gdG9VdGY4U3RyaW5nKGRlY29kZUFzQnl0ZXMoYmFzZTMyU3RyKSk7XG4gICAgfVxuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgc3RyID0gJycsIGxlbmd0aCA9IGJhc2UzMlN0ci5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gLTEpIHtcbiAgICAgIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gOCBjaGFyIHRvIDUgYnl0ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBsZW5ndGggPj4gMyA8PCAzOyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjggPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjcgPDwgNSB8IHY4KSAmIDI1NSk7XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGJ5dGVzXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA3KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlOiBkZWNvZGVcbiAgfTtcbiAgZGVjb2RlLmFzQnl0ZXMgPSBkZWNvZGVBc0J5dGVzO1xuXG4gIGlmIChDT01NT05fSlMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5iYXNlMzIgPSBleHBvcnRzO1xuICAgIGlmIChBTUQpIHtcbiAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdvcmQgPSAnW2EtZkEtRlxcXFxkOl0nO1xuY29uc3QgYiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmluY2x1ZGVCb3VuZGFyaWVzID9cblx0YCg/Oig/PD1cXFxcc3xeKSg/PSR7d29yZH0pfCg/PD0ke3dvcmR9KSg/PVxcXFxzfCQpKWAgOlxuXHQnJztcblxuY29uc3QgdjQgPSAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuXG5jb25zdCB2NnNlZyA9ICdbYS1mQS1GXFxcXGRdezEsNH0nO1xuY29uc3QgdjYgPSBgXG4oXG4oPzoke3Y2c2VnfTopezd9KD86JHt2NnNlZ318Oil8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo3OjogIDE6MjozOjQ6NTo2Ojc6OFxuKD86JHt2NnNlZ306KXs2fSg/OiR7djR9fDoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjY6OiAgICAxOjI6Mzo0OjU6Njo6OCAgIDE6MjozOjQ6NTo2Ojo4ICAxOjI6Mzo0OjU6Njo6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs1fSg/Ojoke3Y0fXwoOiR7djZzZWd9KXsxLDJ9fDopfCAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjogICAgICAxOjI6Mzo0OjU6Ojc6OCAgIDE6MjozOjQ6NTo6OCAgICAxOjI6Mzo0OjU6Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs0fSg/Oig6JHt2NnNlZ30pezAsMX06JHt2NH18KDoke3Y2c2VnfSl7MSwzfXw6KXwgLy8gMToyOjM6NDo6ICAgICAgICAxOjI6Mzo0Ojo2Ojc6OCAgIDE6MjozOjQ6OjggICAgICAxOjI6Mzo0Ojo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXszfSg/Oig6JHt2NnNlZ30pezAsMn06JHt2NH18KDoke3Y2c2VnfSl7MSw0fXw6KXwgLy8gMToyOjM6OiAgICAgICAgICAxOjI6Mzo6NTo2Ojc6OCAgIDE6MjozOjo4ICAgICAgICAxOjI6Mzo6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsyfSg/Oig6JHt2NnNlZ30pezAsM306JHt2NH18KDoke3Y2c2VnfSl7MSw1fXw6KXwgLy8gMToyOjogICAgICAgICAgICAxOjI6OjQ6NTo2Ojc6OCAgIDE6Mjo6OCAgICAgICAgICAxOjI6OjQ6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsxfSg/Oig6JHt2NnNlZ30pezAsNH06JHt2NH18KDoke3Y2c2VnfSl7MSw2fXw6KXwgLy8gMTo6ICAgICAgICAgICAgICAxOjozOjQ6NTo2Ojc6OCAgIDE6OjggICAgICAgICAgICAxOjozOjQ6NTo2Ojc6MS4yLjMuNFxuKD86OigoPzo6JHt2NnNlZ30pezAsNX06JHt2NH18KD86OiR7djZzZWd9KXsxLDd9fDopKSAgICAgICAgICAgLy8gOjoyOjM6NDo1OjY6Nzo4ICA6OjI6Mzo0OjU6Njo3OjggIDo6OCAgICAgICAgICAgICA6OjEuMi4zLjRcbikoJVswLTlhLXpBLVpdezEsfSk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICVldGgwICAgICAgICAgICAgJTFcbmAucmVwbGFjZSgvXFxzKlxcL1xcLy4qJC9nbSwgJycpLnJlcGxhY2UoL1xcbi9nLCAnJykudHJpbSgpO1xuXG5jb25zdCBpcCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID9cblx0bmV3IFJlZ0V4cChgKD86XiR7djR9JCl8KD86XiR7djZ9JClgKSA6XG5cdG5ldyBSZWdFeHAoYCg/OiR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX0pfCg/OiR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX0pYCwgJ2cnKTtcblxuaXAudjQgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y0fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX1gLCAnZycpO1xuaXAudjYgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y2fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX1gLCAnZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlwO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXAgPSBleHBvcnRzO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5cbmlwLnRvQnVmZmVyID0gZnVuY3Rpb24oaXAsIGJ1ZmYsIG9mZnNldCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcblxuICB2YXIgcmVzdWx0O1xuXG4gIGlmICh0aGlzLmlzVjRGb3JtYXQoaXApKSB7XG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDQpO1xuICAgIGlwLnNwbGl0KC9cXC4vZykubWFwKGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSBwYXJzZUludChieXRlLCAxMCkgJiAweGZmO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNWNkZvcm1hdChpcCkpIHtcbiAgICB2YXIgc2VjdGlvbnMgPSBpcC5zcGxpdCgnOicsIDgpO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXN2NCA9IHRoaXMuaXNWNEZvcm1hdChzZWN0aW9uc1tpXSk7XG4gICAgICB2YXIgdjRCdWZmZXI7XG5cbiAgICAgIGlmIChpc3Y0KSB7XG4gICAgICAgIHY0QnVmZmVyID0gdGhpcy50b0J1ZmZlcihzZWN0aW9uc1tpXSk7XG4gICAgICAgIHNlY3Rpb25zW2ldID0gdjRCdWZmZXIuc2xpY2UoMCwgMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodjRCdWZmZXIgJiYgKytpIDwgOCkge1xuICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaSwgMCwgdjRCdWZmZXIuc2xpY2UoMiwgNCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VjdGlvbnNbMF0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMudW5zaGlmdCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMucHVzaCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnMubGVuZ3RoIDwgOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9uc1tpXSAhPT0gJyc7IGkrKyk7XG4gICAgICB2YXIgYXJndiA9IFsgaSwgMSBdO1xuICAgICAgZm9yIChpID0gOSAtIHNlY3Rpb25zLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICBhcmd2LnB1c2goJzAnKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25zLnNwbGljZS5hcHBseShzZWN0aW9ucywgYXJndik7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDE2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gcGFyc2VJbnQoc2VjdGlvbnNbaV0sIDE2KTtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gd29yZCAmIDB4ZmY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCBpcCBhZGRyZXNzOiAnICsgaXApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmlwLnRvU3RyaW5nID0gZnVuY3Rpb24oYnVmZiwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gfn5vZmZzZXQ7XG4gIGxlbmd0aCA9IGxlbmd0aCB8fCAoYnVmZi5sZW5ndGggLSBvZmZzZXQpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKGxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChidWZmW29mZnNldCArIGldKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJy4nKTtcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IDE2KSB7XG4gICAgLy8gSVB2NlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmYucmVhZFVJbnQxNkJFKG9mZnNldCArIGkpLnRvU3RyaW5nKDE2KSk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5qb2luKCc6Jyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyhefDopMCg6MCkqOjAoOnwkKS8sICckMTo6JDMnKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOnszLDR9LywgJzo6Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGlwdjRSZWdleCA9IC9eKFxcZHsxLDN9XFwuKXszLDN9XFxkezEsM30kLztcbnZhciBpcHY2UmVnZXggPVxuICAgIC9eKDo6KT8oKChcXGR7MSwzfVxcLil7M30oXFxkezEsM30pezF9KT8oWzAtOWEtZl0pezAsNH06ezAsMn0pezEsOH0oOjopPyQvaTtcblxuaXAuaXNWNEZvcm1hdCA9IGZ1bmN0aW9uKGlwKSB7XG4gIHJldHVybiBpcHY0UmVnZXgudGVzdChpcCk7XG59O1xuXG5pcC5pc1Y2Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjZSZWdleC50ZXN0KGlwKTtcbn07XG5mdW5jdGlvbiBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSkge1xuICByZXR1cm4gZmFtaWx5ID8gZmFtaWx5LnRvTG93ZXJDYXNlKCkgOiAnaXB2NCc7XG59XG5cbmlwLmZyb21QcmVmaXhMZW4gPSBmdW5jdGlvbihwcmVmaXhsZW4sIGZhbWlseSkge1xuICBpZiAocHJlZml4bGVuID4gMzIpIHtcbiAgICBmYW1pbHkgPSAnaXB2Nic7XG4gIH0gZWxzZSB7XG4gICAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuICB9XG5cbiAgdmFyIGxlbiA9IDQ7XG4gIGlmIChmYW1pbHkgPT09ICdpcHY2Jykge1xuICAgIGxlbiA9IDE2O1xuICB9XG4gIHZhciBidWZmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gYnVmZi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgYml0cyA9IDg7XG4gICAgaWYgKHByZWZpeGxlbiA8IDgpIHtcbiAgICAgIGJpdHMgPSBwcmVmaXhsZW47XG4gICAgfVxuICAgIHByZWZpeGxlbiAtPSBiaXRzO1xuXG4gICAgYnVmZltpXSA9IH4oMHhmZiA+PiBiaXRzKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG59O1xuXG5pcC5tYXNrID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICBhZGRyID0gaXAudG9CdWZmZXIoYWRkcik7XG4gIG1hc2sgPSBpcC50b0J1ZmZlcihtYXNrKTtcblxuICB2YXIgcmVzdWx0ID0gbmV3IEJ1ZmZlcihNYXRoLm1heChhZGRyLmxlbmd0aCwgbWFzay5sZW5ndGgpKTtcblxuICB2YXIgaSA9IDA7XG4gIC8vIFNhbWUgcHJvdG9jb2wgLSBkbyBiaXR3aXNlIGFuZFxuICBpZiAoYWRkci5sZW5ndGggPT09IG1hc2subGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGFkZHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXNrLmxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjYgYWRkcmVzcyBhbmQgSVB2NCBtYXNrXG4gICAgLy8gKE1hc2sgbG93IGJpdHMpXG4gICAgZm9yIChpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbYWRkci5sZW5ndGggLSA0ICArIGldICYgbWFza1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSVB2NiBtYXNrIGFuZCBJUHY0IGFkZHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGggLSA2OyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gOjpmZmZmOmlwdjRcbiAgICByZXN1bHRbMTBdID0gMHhmZjtcbiAgICByZXN1bHRbMTFdID0gMHhmZjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2kgKyAxMl0gPSBhZGRyW2ldICYgbWFza1tpICsgMTJdO1xuICAgIH1cbiAgICBpID0gaSArIDEyO1xuICB9XG4gIGZvciAoOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKVxuICAgIHJlc3VsdFtpXSA9IDA7XG5cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKHJlc3VsdCk7XG59O1xuXG5pcC5jaWRyID0gZnVuY3Rpb24oY2lkclN0cmluZykge1xuICB2YXIgY2lkclBhcnRzID0gY2lkclN0cmluZy5zcGxpdCgnLycpO1xuXG4gIHZhciBhZGRyID0gY2lkclBhcnRzWzBdO1xuICBpZiAoY2lkclBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ0lEUiBzdWJuZXQ6ICcgKyBhZGRyKTtcblxuICB2YXIgbWFzayA9IGlwLmZyb21QcmVmaXhMZW4ocGFyc2VJbnQoY2lkclBhcnRzWzFdLCAxMCkpO1xuXG4gIHJldHVybiBpcC5tYXNrKGFkZHIsIG1hc2spO1xufTtcblxuaXAuc3VibmV0ID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICB2YXIgbmV0d29ya0FkZHJlc3MgPSBpcC50b0xvbmcoaXAubWFzayhhZGRyLCBtYXNrKSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBtYXNrJ3MgbGVuZ3RoLlxuICB2YXIgbWFza0J1ZmZlciA9IGlwLnRvQnVmZmVyKG1hc2spO1xuICB2YXIgbWFza0xlbmd0aCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1hc2tCdWZmZXJbaV0gPT09IDB4ZmYpIHtcbiAgICAgIG1hc2tMZW5ndGggKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9jdGV0ID0gbWFza0J1ZmZlcltpXSAmIDB4ZmY7XG4gICAgICB3aGlsZSAob2N0ZXQpIHtcbiAgICAgICAgb2N0ZXQgPSAob2N0ZXQgPDwgMSkgJiAweGZmO1xuICAgICAgICBtYXNrTGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG51bWJlck9mQWRkcmVzc2VzID0gTWF0aC5wb3coMiwgMzIgLSBtYXNrTGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIG5ldHdvcmtBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyksXG4gICAgZmlyc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyAxKSxcbiAgICBsYXN0QWRkcmVzczogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAyKSxcbiAgICBicm9hZGNhc3RBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMSksXG4gICAgc3VibmV0TWFzazogbWFzayxcbiAgICBzdWJuZXRNYXNrTGVuZ3RoOiBtYXNrTGVuZ3RoLFxuICAgIG51bUhvc3RzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICBudW1iZXJPZkFkZHJlc3NlcyA6IG51bWJlck9mQWRkcmVzc2VzIC0gMixcbiAgICBsZW5ndGg6IG51bWJlck9mQWRkcmVzc2VzLFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgcmV0dXJuIG5ldHdvcmtBZGRyZXNzID09PSBpcC50b0xvbmcoaXAubWFzayhvdGhlciwgbWFzaykpO1xuICAgIH1cbiAgfTtcbn07XG5cbmlwLmNpZHJTdWJuZXQgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLnN1Ym5ldChhZGRyLCBtYXNrKTtcbn07XG5cbmlwLm5vdCA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgdmFyIGJ1ZmYgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgYnVmZltpXSA9IDB4ZmYgXiBidWZmW2ldO1xuICB9XG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm9yID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBzYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFbaV0gfD0gYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGEpO1xuXG4gIC8vIG1peGVkIHByb3RvY29sc1xuICB9IGVsc2Uge1xuICAgIHZhciBidWZmID0gYTtcbiAgICB2YXIgb3RoZXIgPSBiO1xuICAgIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICBidWZmID0gYjtcbiAgICAgIG90aGVyID0gYTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBvdGhlci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGJ1ZmYubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZbaV0gfD0gb3RoZXJbaSAtIG9mZnNldF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xuICB9XG59O1xuXG5pcC5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBTYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3dhcFxuICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgdCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICAvLyBhIC0gSVB2NCwgYiAtIElQdjZcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKGJbaV0gIT09IDApIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB3b3JkID0gYi5yZWFkVUludDE2QkUoMTApO1xuICBpZiAod29yZCAhPT0gMCAmJiB3b3JkICE9PSAweGZmZmYpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2kgKyAxMl0pIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuaXAuaXNQcml2YXRlID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTBcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTkyXFwuMTY4XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNzJcXC4oMVs2LTldfDJcXGR8MzB8MzEpXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTY5XFwuMjU0XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXmZbY2RdWzAtOWEtZl17Mn06L2kudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDovaS50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5pc1B1YmxpYyA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuICFpcC5pc1ByaXZhdGUoYWRkcik7XG59O1xuXG5pcC5pc0xvb3BiYWNrID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pL1xuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXmZlODA6OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5sb29wYmFjayA9IGZ1bmN0aW9uKGZhbWlseSkge1xuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgaWYgKGZhbWlseSAhPT0gJ2lwdjQnICYmIGZhbWlseSAhPT0gJ2lwdjYnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYW1pbHkgbXVzdCBiZSBpcHY0IG9yIGlwdjYnKTtcbiAgfVxuXG4gIHJldHVybiBmYW1pbHkgPT09ICdpcHY0JyA/ICcxMjcuMC4wLjEnIDogJ2ZlODA6OjEnO1xufTtcblxuLy9cbi8vICMjIyBmdW5jdGlvbiBhZGRyZXNzIChuYW1lLCBmYW1pbHkpXG4vLyAjIyMjIEBuYW1lIHtzdHJpbmd8J3B1YmxpYyd8J3ByaXZhdGUnfSAqKk9wdGlvbmFsKiogTmFtZSBvciBzZWN1cml0eVxuLy8gICAgICBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UuXG4vLyAjIyMjIEBmYW1pbHkge2lwdjR8aXB2Nn0gKipPcHRpb25hbCoqIElQIGZhbWlseSBvZiB0aGUgYWRkcmVzcyAoZGVmYXVsdHNcbi8vICAgICAgdG8gaXB2NCkuXG4vL1xuLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB3aXRoXG4vLyB0aGUgc3BlY2lmaWVkIGBuYW1lYDpcbi8vICAgKiBTdHJpbmc6IEZpcnN0IGBmYW1pbHlgIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS5cbi8vICAgICAgICAgICAgIElmIG5vdCBmb3VuZCBzZWUgYHVuZGVmaW5lZGAuXG4vLyAgICogJ3B1YmxpYyc6IHRoZSBmaXJzdCBwdWJsaWMgaXAgYWRkcmVzcyBvZiBmYW1pbHkuXG4vLyAgICogJ3ByaXZhdGUnOiB0aGUgZmlyc3QgcHJpdmF0ZSBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiB1bmRlZmluZWQ6IEZpcnN0IGFkZHJlc3Mgd2l0aCBgaXB2NGAgb3IgbG9vcGJhY2sgYWRkcmVzcyBgMTI3LjAuMC4xYC5cbi8vXG5pcC5hZGRyZXNzID0gZnVuY3Rpb24obmFtZSwgZmFtaWx5KSB7XG4gIHZhciBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTtcbiAgdmFyIGFsbDtcblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgLy9cbiAgLy8gSWYgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBoYXMgYmVlbiBuYW1lZCxcbiAgLy8gcmV0dXJuIHRoZSBhZGRyZXNzLlxuICAvL1xuICBpZiAobmFtZSAmJiBuYW1lICE9PSAncHJpdmF0ZScgJiYgbmFtZSAhPT0gJ3B1YmxpYycpIHtcbiAgICB2YXIgcmVzID0gaW50ZXJmYWNlc1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24oZGV0YWlscykge1xuICAgICAgdmFyIGl0ZW1GYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGl0ZW1GYW1pbHkgPT09IGZhbWlseTtcbiAgICB9KTtcbiAgICBpZiAocmVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc1swXS5hZGRyZXNzO1xuICB9XG5cbiAgdmFyIGFsbCA9IE9iamVjdC5rZXlzKGludGVyZmFjZXMpLm1hcChmdW5jdGlvbiAobmljKSB7XG4gICAgLy9cbiAgICAvLyBOb3RlOiBuYW1lIHdpbGwgb25seSBiZSBgcHVibGljYCBvciBgcHJpdmF0ZWBcbiAgICAvLyB3aGVuIHRoaXMgaXMgY2FsbGVkLlxuICAgIC8vXG4gICAgdmFyIGFkZHJlc3NlcyA9IGludGVyZmFjZXNbbmljXS5maWx0ZXIoZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMuZmFtaWx5ID0gZGV0YWlscy5mYW1pbHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChkZXRhaWxzLmZhbWlseSAhPT0gZmFtaWx5IHx8IGlwLmlzTG9vcGJhY2soZGV0YWlscy5hZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZSA9PT0gJ3B1YmxpYycgPyBpcC5pc1ByaXZhdGUoZGV0YWlscy5hZGRyZXNzKSA6XG4gICAgICAgICAgaXAuaXNQdWJsaWMoZGV0YWlscy5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhZGRyZXNzZXMubGVuZ3RoID8gYWRkcmVzc2VzWzBdLmFkZHJlc3MgOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4gIWFsbC5sZW5ndGggPyBpcC5sb29wYmFjayhmYW1pbHkpIDogYWxsWzBdO1xufTtcblxuaXAudG9Mb25nID0gZnVuY3Rpb24oaXApIHtcbiAgdmFyIGlwbCA9IDA7XG4gIGlwLnNwbGl0KCcuJykuZm9yRWFjaChmdW5jdGlvbihvY3RldCkge1xuICAgIGlwbCA8PD0gODtcbiAgICBpcGwgKz0gcGFyc2VJbnQob2N0ZXQpO1xuICB9KTtcbiAgcmV0dXJuKGlwbCA+Pj4gMCk7XG59O1xuXG5pcC5mcm9tTG9uZyA9IGZ1bmN0aW9uKGlwbCkge1xuICByZXR1cm4gKChpcGwgPj4+IDI0KSArICcuJyArXG4gICAgICAoaXBsID4+IDE2ICYgMjU1KSArICcuJyArXG4gICAgICAoaXBsID4+IDggJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgJiAyNTUpICk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgaXBSZWdleCA9IHJlcXVpcmUoJ2lwLXJlZ2V4Jyk7XG5cbmNvbnN0IGlzSXAgPSBzdHJpbmcgPT4gaXBSZWdleCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY0ID0gc3RyaW5nID0+IGlwUmVnZXgudjQoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52NiA9IHN0cmluZyA9PiBpcFJlZ2V4LnY2KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudmVyc2lvbiA9IHN0cmluZyA9PiBpc0lwKHN0cmluZykgPyAoaXNJcC52NChzdHJpbmcpID8gNCA6IDYpIDogdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXA7XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTU4ID0gcmVxdWlyZSgnYnM1OCcpXG5jb25zdCBtdWx0aWhhc2ggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgTXVsdGlhZGRyID0gcmVxdWlyZSgnbXVsdGlhZGRyJylcbmNvbnN0IG1hZm10ID0gcmVxdWlyZSgnbWFmbXQnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5cbmNvbnN0IHVybFBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC9bXi9dK1xcLyhpcChmfG4pcylcXC8oKFxcdyspLiopL1xuY29uc3QgcGF0aFBhdHRlcm4gPSAvXlxcLyhpcChmfG4pcylcXC8oKFxcdyspLiopL1xuY29uc3QgZGVmYXVsdFByb3RvY29sTWF0Y2ggPSAxXG5jb25zdCBkZWZhdWx0SGFzaE1hdGggPSA0XG5cbmNvbnN0IGZxZG5QYXR0ZXJuID0gL15odHRwcz86XFwvXFwvKFteL10rKVxcLihpcCg/OmZ8bilzKVxcLlteL10rL1xuY29uc3QgZnFkbkhhc2hNYXRjaCA9IDFcbmNvbnN0IGZxZG5Qcm90b2NvbE1hdGNoID0gMlxuXG5mdW5jdGlvbiBpc011bHRpaGFzaCAoaGFzaCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaGFzaClcbiAgdHJ5IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNTguZGVjb2RlKGZvcm1hdHRlZCkpXG4gICAgbXVsdGloYXNoLmRlY29kZShidWZmZXIpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTXVsdGliYXNlIChoYXNoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG11bHRpYmFzZS5pc0VuY29kZWQoaGFzaClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ0lEIChoYXNoKSB7XG4gIHRyeSB7XG4gICAgbmV3IENJRChoYXNoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYWRkciAoaW5wdXQpIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGZhbHNlXG4gIGlmIChNdWx0aWFkZHIuaXNNdWx0aWFkZHIoaW5wdXQpKSByZXR1cm4gdHJ1ZVxuICB0cnkge1xuICAgIG5ldyBNdWx0aWFkZHIoaW5wdXQpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGVlck11bHRpYWRkciAoaW5wdXQpIHtcbiAgcmV0dXJuIGlzTXVsdGlhZGRyKGlucHV0KSAmJiBtYWZtdC5JUEZTLm1hdGNoZXMoaW5wdXQpXG59XG5cbmZ1bmN0aW9uIGlzSXBmcyAoaW5wdXQsIHBhdHRlcm4sIHByb3RvY29sTWF0Y2ggPSBkZWZhdWx0UHJvdG9jb2xNYXRjaCwgaGFzaE1hdGNoID0gZGVmYXVsdEhhc2hNYXRoKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dClcbiAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwZnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsZXQgaGFzaCA9IG1hdGNoW2hhc2hNYXRjaF1cblxuICBpZiAoaGFzaCAmJiBwYXR0ZXJuID09PSBmcWRuUGF0dGVybikge1xuICAgIC8vIHdoZW4gZG9pbmcgY2hlY2tzIGZvciBzdWJkb21haW4gY29udGV4dFxuICAgIC8vIGVuc3VyZSBoYXNoIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyAoYnJvd3NlcnMgZm9yY2UtbG93ZXJjYXNlIGF1dGhvcml0eSBjb21wb3RlbnQgYW55d2F5KVxuICAgIGhhc2ggPSBoYXNoLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBpc0NJRChoYXNoKVxufVxuXG5mdW5jdGlvbiBpc0lwbnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBmb3JtYXR0ZWQubWF0Y2gocGF0dGVybilcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1hdGNoW3Byb3RvY29sTWF0Y2hdICE9PSAnaXBucycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChoYXNoTWF0Y2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICBsZXQgaGFzaCA9IG1hdGNoW2hhc2hNYXRjaF1cbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gICAgcmV0dXJuIGlzQ0lEKGhhc2gpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZyAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbn1cblxuZnVuY3Rpb24gY29udmVydFRvU3RyaW5nIChpbnB1dCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBiYXNlNTguZW5jb2RlKGlucHV0KVxuICB9XG5cbiAgaWYgKGlzU3RyaW5nKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dFxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IGlwZnNTdWJkb21haW4gPSAodXJsKSA9PiBpc0lwZnModXJsLCBmcWRuUGF0dGVybiwgZnFkblByb3RvY29sTWF0Y2gsIGZxZG5IYXNoTWF0Y2gpXG5jb25zdCBpcG5zU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcG5zKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbXVsdGloYXNoOiBpc011bHRpaGFzaCxcbiAgbXVsdGlhZGRyOiBpc011bHRpYWRkcixcbiAgcGVlck11bHRpYWRkcjogaXNQZWVyTXVsdGlhZGRyLFxuICBjaWQ6IGlzQ0lELFxuICBiYXNlMzJjaWQ6IChjaWQpID0+IChpc011bHRpYmFzZShjaWQpID09PSAnYmFzZTMyJyAmJiBpc0NJRChjaWQpKSxcbiAgaXBmc1N1YmRvbWFpbjogaXBmc1N1YmRvbWFpbixcbiAgaXBuc1N1YmRvbWFpbjogaXBuc1N1YmRvbWFpbixcbiAgc3ViZG9tYWluOiAodXJsKSA9PiAoaXBmc1N1YmRvbWFpbih1cmwpIHx8IGlwbnNTdWJkb21haW4odXJsKSksXG4gIHN1YmRvbWFpblBhdHRlcm46IGZxZG5QYXR0ZXJuLFxuICBpcGZzVXJsOiAodXJsKSA9PiBpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSxcbiAgaXBuc1VybDogKHVybCkgPT4gaXNJcG5zKHVybCwgdXJsUGF0dGVybiksXG4gIHVybDogKHVybCkgPT4gKGlzSXBmcyh1cmwsIHVybFBhdHRlcm4pIHx8IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pKSxcbiAgdXJsUGF0dGVybjogdXJsUGF0dGVybixcbiAgaXBmc1BhdGg6IChwYXRoKSA9PiBpc0lwZnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBpcG5zUGF0aDogKHBhdGgpID0+IGlzSXBucyhwYXRoLCBwYXRoUGF0dGVybiksXG4gIHBhdGg6IChwYXRoKSA9PiAoaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pKSxcbiAgcGF0aFBhdHRlcm46IHBhdGhQYXR0ZXJuLFxuICB1cmxPclBhdGg6ICh4KSA9PiAoaXNJcGZzKHgsIHVybFBhdHRlcm4pIHx8IGlzSXBucyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwZnMoeCwgcGF0aFBhdHRlcm4pIHx8IGlzSXBucyh4LCBwYXRoUGF0dGVybikpLFxuICBjaWRQYXRoOiBwYXRoID0+IGlzU3RyaW5nKHBhdGgpICYmICFpc0NJRChwYXRoKSAmJiBpc0lwZnMoYC9pcGZzLyR7cGF0aH1gLCBwYXRoUGF0dGVybilcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBtdWx0aWFkZHIgPSByZXF1aXJlKCdtdWx0aWFkZHInKVxuXG4vKlxuICogVmFsaWQgY29tYmluYXRpb25zXG4gKi9cbmNvbnN0IEROUzQgPSBiYXNlKCdkbnM0JylcbmNvbnN0IEROUzYgPSBiYXNlKCdkbnM2JylcbmNvbnN0IEROUyA9IG9yKFxuICBiYXNlKCdkbnMnKSxcbiAgYmFzZSgnZG5zYWRkcicpLFxuICBETlM0LFxuICBETlM2XG4pXG5cbmNvbnN0IElQID0gb3IoYmFzZSgnaXA0JyksIGJhc2UoJ2lwNicpKVxuY29uc3QgVENQID0gb3IoXG4gIGFuZChJUCwgYmFzZSgndGNwJykpLFxuICBhbmQoRE5TLCBiYXNlKCd0Y3AnKSlcbilcbmNvbnN0IFVEUCA9IGFuZChJUCwgYmFzZSgndWRwJykpXG5jb25zdCBVVFAgPSBhbmQoVURQLCBiYXNlKCd1dHAnKSlcblxuY29uc3QgV2ViU29ja2V0cyA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCd3cycpKSxcbiAgYW5kKEROUywgYmFzZSgnd3MnKSlcbilcblxuY29uc3QgV2ViU29ja2V0c1NlY3VyZSA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCd3c3MnKSksXG4gIGFuZChETlMsIGJhc2UoJ3dzcycpKVxuKVxuXG5jb25zdCBIVFRQID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ2h0dHAnKSksXG4gIGFuZChJUCwgYmFzZSgnaHR0cCcpKSxcbiAgYW5kKEROUywgYmFzZSgnaHR0cCcpKVxuKVxuXG5jb25zdCBIVFRQUyA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCdodHRwcycpKSxcbiAgYW5kKElQLCBiYXNlKCdodHRwcycpKSxcbiAgYW5kKEROUywgYmFzZSgnaHR0cHMnKSlcbilcblxuY29uc3QgV2ViUlRDU3RhciA9IG9yKFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSlcbilcblxuY29uc3QgV2ViU29ja2V0U3RhciA9IG9yKFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSlcbilcblxuY29uc3QgV2ViUlRDRGlyZWN0ID0gb3IoXG4gIGFuZChIVFRQLCBiYXNlKCdwMnAtd2VicnRjLWRpcmVjdCcpKSxcbiAgYW5kKEhUVFBTLCBiYXNlKCdwMnAtd2VicnRjLWRpcmVjdCcpKVxuKVxuXG5jb25zdCBSZWxpYWJsZSA9IG9yKFxuICBXZWJTb2NrZXRzLFxuICBXZWJTb2NrZXRzU2VjdXJlLFxuICBIVFRQLFxuICBIVFRQUyxcbiAgV2ViUlRDU3RhcixcbiAgV2ViUlRDRGlyZWN0LFxuICBUQ1AsXG4gIFVUUFxuKVxuXG4vLyBVbmxpa2Ugd3Mtc3Rhciwgc3RhcmR1c3QgY2FuIHJ1biBvdmVyIGFueSB0cmFuc3BvcnQgdGh1cyByZW1vdmluZyB0aGUgcmVxdWlyZW1lbnQgZm9yIHdlYnNvY2tldHMgKGJ1dCBkb24ndCBldmVuIHRoaW5rIGFib3V0IHJ1bm5pbmcgYSBzdGFyZHVzdCBzZXJ2ZXIgb3ZlciB3ZWJydGMtc3RhciA7KSApXG5jb25zdCBTdGFyZHVzdCA9IG9yKFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycC1zdGFyZHVzdCcpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLXN0YXJkdXN0JykpXG4pXG5cbmNvbnN0IF9QMlAgPSBvcihcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAnKSksXG4gIFdlYlJUQ1N0YXIsXG4gIGJhc2UoJ3AycCcpXG4pXG5cbmNvbnN0IF9DaXJjdWl0ID0gb3IoXG4gIGFuZChfUDJQLCBiYXNlKCdwMnAtY2lyY3VpdCcpLCBfUDJQKSxcbiAgYW5kKF9QMlAsIGJhc2UoJ3AycC1jaXJjdWl0JykpLFxuICBhbmQoYmFzZSgncDJwLWNpcmN1aXQnKSwgX1AyUCksXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLWNpcmN1aXQnKSksXG4gIGFuZChiYXNlKCdwMnAtY2lyY3VpdCcpLCBSZWxpYWJsZSksXG4gIGJhc2UoJ3AycC1jaXJjdWl0JylcbilcblxuY29uc3QgQ2lyY3VpdFJlY3Vyc2l2ZSA9ICgpID0+IG9yKFxuICBhbmQoX0NpcmN1aXQsIENpcmN1aXRSZWN1cnNpdmUpLFxuICBfQ2lyY3VpdFxuKVxuXG5jb25zdCBDaXJjdWl0ID0gQ2lyY3VpdFJlY3Vyc2l2ZSgpXG5cbmNvbnN0IFAyUCA9IG9yKFxuICBhbmQoQ2lyY3VpdCwgX1AyUCwgQ2lyY3VpdCksXG4gIGFuZChfUDJQLCBDaXJjdWl0KSxcbiAgYW5kKENpcmN1aXQsIF9QMlApLFxuICBDaXJjdWl0LFxuICBfUDJQXG4pXG5cbmV4cG9ydHMuRE5TID0gRE5TXG5leHBvcnRzLkROUzQgPSBETlM0XG5leHBvcnRzLkROUzYgPSBETlM2XG5leHBvcnRzLklQID0gSVBcbmV4cG9ydHMuVENQID0gVENQXG5leHBvcnRzLlVEUCA9IFVEUFxuZXhwb3J0cy5VVFAgPSBVVFBcbmV4cG9ydHMuSFRUUCA9IEhUVFBcbmV4cG9ydHMuSFRUUFMgPSBIVFRQU1xuZXhwb3J0cy5XZWJTb2NrZXRzID0gV2ViU29ja2V0c1xuZXhwb3J0cy5XZWJTb2NrZXRzU2VjdXJlID0gV2ViU29ja2V0c1NlY3VyZVxuZXhwb3J0cy5XZWJTb2NrZXRTdGFyID0gV2ViU29ja2V0U3RhclxuZXhwb3J0cy5XZWJSVENTdGFyID0gV2ViUlRDU3RhclxuZXhwb3J0cy5XZWJSVENEaXJlY3QgPSBXZWJSVENEaXJlY3RcbmV4cG9ydHMuUmVsaWFibGUgPSBSZWxpYWJsZVxuZXhwb3J0cy5TdGFyZHVzdCA9IFN0YXJkdXN0XG5leHBvcnRzLkNpcmN1aXQgPSBDaXJjdWl0XG5leHBvcnRzLlAyUCA9IFAyUFxuZXhwb3J0cy5JUEZTID0gUDJQXG5cbi8qXG4gKiBWYWxpZGF0aW9uIGZ1bmNzXG4gKi9cblxuZnVuY3Rpb24gbWFrZU1hdGNoZXNGdW5jdGlvbiAocGFydGlhbE1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtYXRjaGVzIChhKSB7XG4gICAgaWYgKCFtdWx0aWFkZHIuaXNNdWx0aWFkZHIoYSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBtdWx0aWFkZHIoYSlcbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvLyBjYXRjaCBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2UgLy8gYWxzbyBpZiBpdCdzIGludmFsaWQgaXQncyBwcm9wYWJseSBub3QgbWF0Y2hpbmcgYXMgd2VsbCBzbyByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3V0ID0gcGFydGlhbE1hdGNoKGEucHJvdG9OYW1lcygpKVxuICAgIGlmIChvdXQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gb3V0Lmxlbmd0aCA9PT0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIGFuZCAoKSB7XG4gIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cylcbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChhKSB7XG4gICAgaWYgKGEubGVuZ3RoIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGFyZ3Muc29tZSgoYXJnKSA9PiB7XG4gICAgICBhID0gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGFyZygpLnBhcnRpYWxNYXRjaChhKVxuICAgICAgICA6IGFyZy5wYXJ0aWFsTWF0Y2goYSlcblxuICAgICAgaWYgKGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd7ICcgKyBhcmdzLmpvaW4oJyAnKSArICcgfScgfSxcbiAgICBpbnB1dDogYXJncyxcbiAgICBtYXRjaGVzOiBtYWtlTWF0Y2hlc0Z1bmN0aW9uKHBhcnRpYWxNYXRjaCksXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxufVxuXG5mdW5jdGlvbiBvciAoKSB7XG4gIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cylcblxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKGEpIHtcbiAgICBsZXQgb3V0ID0gbnVsbFxuICAgIGFyZ3Muc29tZSgoYXJnKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYXJnKCkucGFydGlhbE1hdGNoKGEpXG4gICAgICAgIDogYXJnLnBhcnRpYWxNYXRjaChhKVxuICAgICAgaWYgKHJlcykge1xuICAgICAgICBvdXQgPSByZXNcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAneyAnICsgYXJncy5qb2luKCcgJykgKyAnIH0nIH0sXG4gICAgaW5wdXQ6IGFyZ3MsXG4gICAgbWF0Y2hlczogbWFrZU1hdGNoZXNGdW5jdGlvbihwYXJ0aWFsTWF0Y2gpLFxuICAgIHBhcnRpYWxNYXRjaDogcGFydGlhbE1hdGNoXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGJhc2UgKG4pIHtcbiAgY29uc3QgbmFtZSA9IG5cblxuICBmdW5jdGlvbiBtYXRjaGVzIChhKSB7XG4gICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IG11bHRpYWRkcihhKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7IC8vIGNhdGNoIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZSAvLyBhbHNvIGlmIGl0J3MgaW52YWxpZCBpdCdzIHByb3BhYmx5IG5vdCBtYXRjaGluZyBhcyB3ZWxsIHNvIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBuYW1lcyA9IGEucHJvdG9OYW1lcygpXG4gICAgaWYgKHBuYW1lcy5sZW5ndGggPT09IDEgJiYgcG5hbWVzWzBdID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAocHJvdG9zKSB7XG4gICAgaWYgKHByb3Rvcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKHByb3Rvc1swXSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHByb3Rvcy5zbGljZSgxKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZSB9LFxuICAgIG1hdGNoZXM6IG1hdGNoZXMsXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxufVxuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIGlmIChtcyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtcyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICByZXR1cm4gcGx1cmFsKG1zLCBkLCAnZGF5JykgfHxcbiAgICBwbHVyYWwobXMsIGgsICdob3VyJykgfHxcbiAgICBwbHVyYWwobXMsIG0sICdtaW51dGUnKSB8fFxuICAgIHBsdXJhbChtcywgcywgJ3NlY29uZCcpIHx8XG4gICAgbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG4sIG5hbWUpIHtcbiAgaWYgKG1zIDwgbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobXMgPCBuICogMS41KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobXMgLyBuKSArICcgJyArIG5hbWU7XG4gIH1cbiAgcmV0dXJuIE1hdGguY2VpbChtcyAvIG4pICsgJyAnICsgbmFtZSArICdzJztcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb252ZXJ0ID0gcmVxdWlyZSgnLi9jb252ZXJ0JylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbi8vIGV4cG9ydCBjb2RlY1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0cmluZ1RvU3RyaW5nVHVwbGVzOiBzdHJpbmdUb1N0cmluZ1R1cGxlcyxcbiAgc3RyaW5nVHVwbGVzVG9TdHJpbmc6IHN0cmluZ1R1cGxlc1RvU3RyaW5nLFxuXG4gIHR1cGxlc1RvU3RyaW5nVHVwbGVzOiB0dXBsZXNUb1N0cmluZ1R1cGxlcyxcbiAgc3RyaW5nVHVwbGVzVG9UdXBsZXM6IHN0cmluZ1R1cGxlc1RvVHVwbGVzLFxuXG4gIGJ1ZmZlclRvVHVwbGVzOiBidWZmZXJUb1R1cGxlcyxcbiAgdHVwbGVzVG9CdWZmZXI6IHR1cGxlc1RvQnVmZmVyLFxuXG4gIGJ1ZmZlclRvU3RyaW5nOiBidWZmZXJUb1N0cmluZyxcbiAgc3RyaW5nVG9CdWZmZXI6IHN0cmluZ1RvQnVmZmVyLFxuXG4gIGZyb21TdHJpbmc6IGZyb21TdHJpbmcsXG4gIGZyb21CdWZmZXI6IGZyb21CdWZmZXIsXG4gIHZhbGlkYXRlQnVmZmVyOiB2YWxpZGF0ZUJ1ZmZlcixcbiAgaXNWYWxpZEJ1ZmZlcjogaXNWYWxpZEJ1ZmZlcixcbiAgY2xlYW5QYXRoOiBjbGVhblBhdGgsXG5cbiAgUGFyc2VFcnJvcjogUGFyc2VFcnJvcixcbiAgcHJvdG9Gcm9tVHVwbGU6IHByb3RvRnJvbVR1cGxlLFxuXG4gIHNpemVGb3JBZGRyOiBzaXplRm9yQWRkclxufVxuXG4vLyBzdHJpbmcgLT4gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF1cbmZ1bmN0aW9uIHN0cmluZ1RvU3RyaW5nVHVwbGVzIChzdHIpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgY29uc3QgcGFydHMgPSBzdHIuc3BsaXQoJy8nKS5zbGljZSgxKSAvLyBza2lwIGZpcnN0IGVtcHR5IGVsZW1cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSAmJiBwYXJ0c1swXSA9PT0gJycpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGZvciAobGV0IHAgPSAwOyBwIDwgcGFydHMubGVuZ3RoOyBwKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbcF1cbiAgICBjb25zdCBwcm90byA9IHByb3RvY29scyhwYXJ0KVxuXG4gICAgaWYgKHByb3RvLnNpemUgPT09IDApIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtwYXJ0XSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcCsrIC8vIGFkdmFuY2UgYWRkciBwYXJ0XG4gICAgaWYgKHAgPj0gcGFydHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdpbnZhbGlkIGFkZHJlc3M6ICcgKyBzdHIpXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBhIHBhdGggcHJvdG8sIHRha2UgdGhlIHJlc3RcbiAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgdHVwbGVzLnB1c2goW1xuICAgICAgICBwYXJ0LFxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgbmVlZCB0byBjaGVjayBlYWNoIHBhdGggcGFydCB0byBzZWUgaWYgaXQncyBhIHByb3RvP1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGFsbG93IGZvciBvdGhlciBwcm90b2NvbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgYSB1bml4IHBhdGgsXG4gICAgICAgIC8vIGhvd2V2ZXIgaXQgd291bGQgaGF2ZSBpc3N1ZXMgaWYgdGhlIHBhdGggaGFkIGEgcHJvdG9jb2wgbmFtZSBpbiB0aGUgcGF0aFxuICAgICAgICBjbGVhblBhdGgocGFydHMuc2xpY2UocCkuam9pbignLycpKVxuICAgICAgXSlcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgdHVwbGVzLnB1c2goW3BhcnQsIHBhcnRzW3BdXSlcbiAgfVxuXG4gIHJldHVybiB0dXBsZXNcbn1cblxuLy8gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF0gLT4gc3RyaW5nXG5mdW5jdGlvbiBzdHJpbmdUdXBsZXNUb1N0cmluZyAodHVwbGVzKSB7XG4gIGNvbnN0IHBhcnRzID0gW11cbiAgdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIHBhcnRzLnB1c2gocHJvdG8ubmFtZSlcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhcnRzLnB1c2godHVwWzFdKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gY2xlYW5QYXRoKHBhcnRzLmpvaW4oJy8nKSlcbn1cblxuLy8gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF0gLT4gW1tpbnQgY29kZSwgQnVmZmVyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUdXBsZXNUb1R1cGxlcyAodHVwbGVzKSB7XG4gIHJldHVybiB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR1cCkpIHtcbiAgICAgIHR1cCA9IFt0dXBdXG4gICAgfVxuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvQnVmZmVyKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyXS4uLiBdIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiB0dXBsZXNUb1N0cmluZ1R1cGxlcyAodHVwbGVzKSB7XG4gIHJldHVybiB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gW3Byb3RvLmNvZGUsIGNvbnZlcnQudG9TdHJpbmcocHJvdG8uY29kZSwgdHVwWzFdKV1cbiAgICB9XG4gICAgcmV0dXJuIFtwcm90by5jb2RlXVxuICB9KVxufVxuXG4vLyBbW2ludCBjb2RlLCBCdWZmZXIgXS4uLiBdIC0+IEJ1ZmZlclxuZnVuY3Rpb24gdHVwbGVzVG9CdWZmZXIgKHR1cGxlcykge1xuICByZXR1cm4gZnJvbUJ1ZmZlcihCdWZmZXIuY29uY2F0KHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBsZXQgYnVmID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShwcm90by5jb2RlKSlcblxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgYnVmID0gQnVmZmVyLmNvbmNhdChbYnVmLCB0dXBbMV1dKSAvLyBhZGQgYWRkcmVzcyBidWZmZXJcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmXG4gIH0pKSlcbn1cblxuZnVuY3Rpb24gc2l6ZUZvckFkZHIgKHAsIGFkZHIpIHtcbiAgaWYgKHAuc2l6ZSA+IDApIHtcbiAgICByZXR1cm4gcC5zaXplIC8gOFxuICB9IGVsc2UgaWYgKHAuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYWRkcilcbiAgICByZXR1cm4gc2l6ZSArIHZhcmludC5kZWNvZGUuYnl0ZXNcbiAgfVxufVxuXG4vLyBCdWZmZXIgLT4gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXVxuZnVuY3Rpb24gYnVmZmVyVG9UdXBsZXMgKGJ1Zikge1xuICBjb25zdCB0dXBsZXMgPSBbXVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG5cbiAgICBjb25zdCBzaXplID0gc2l6ZUZvckFkZHIocCwgYnVmLnNsaWNlKGkgKyBuKSlcblxuICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbY29kZV0pXG4gICAgICBpICs9IG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYWRkciA9IGJ1Zi5zbGljZShpICsgbiwgaSArIG4gKyBzaXplKVxuXG4gICAgaSArPSAoc2l6ZSArIG4pXG5cbiAgICBpZiAoaSA+IGJ1Zi5sZW5ndGgpIHsgLy8gZGlkIG5vdCBlbmQgX2V4YWN0bHlfIGF0IGJ1ZmZlci5sZW5ndGhcbiAgICAgIHRocm93IFBhcnNlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyBidWZmZXI6ICcgKyBidWYudG9TdHJpbmcoJ2hleCcpKVxuICAgIH1cblxuICAgIC8vIG9rLCB0dXBsZSBzZWVtcyBnb29kLlxuICAgIHR1cGxlcy5wdXNoKFtjb2RlLCBhZGRyXSlcbiAgfVxuXG4gIHJldHVybiB0dXBsZXNcbn1cblxuLy8gQnVmZmVyIC0+IFN0cmluZ1xuZnVuY3Rpb24gYnVmZmVyVG9TdHJpbmcgKGJ1Zikge1xuICBjb25zdCBhID0gYnVmZmVyVG9UdXBsZXMoYnVmKVxuICBjb25zdCBiID0gdHVwbGVzVG9TdHJpbmdUdXBsZXMoYSlcbiAgcmV0dXJuIHN0cmluZ1R1cGxlc1RvU3RyaW5nKGIpXG59XG5cbi8vIFN0cmluZyAtPiBCdWZmZXJcbmZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyIChzdHIpIHtcbiAgc3RyID0gY2xlYW5QYXRoKHN0cilcbiAgY29uc3QgYSA9IHN0cmluZ1RvU3RyaW5nVHVwbGVzKHN0cilcbiAgY29uc3QgYiA9IHN0cmluZ1R1cGxlc1RvVHVwbGVzKGEpXG5cbiAgcmV0dXJuIHR1cGxlc1RvQnVmZmVyKGIpXG59XG5cbi8vIFN0cmluZyAtPiBCdWZmZXJcbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyaW5nVG9CdWZmZXIoc3RyKVxufVxuXG4vLyBCdWZmZXIgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tQnVmZmVyIChidWYpIHtcbiAgY29uc3QgZXJyID0gdmFsaWRhdGVCdWZmZXIoYnVmKVxuICBpZiAoZXJyKSB0aHJvdyBlcnJcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZikgLy8gY29weVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJ1ZmZlciAoYnVmKSB7XG4gIHRyeSB7XG4gICAgYnVmZmVyVG9UdXBsZXMoYnVmKSAvLyB0cnkgdG8gcGFyc2UuIHdpbGwgdGhyb3cgaWYgYnJlYWtzXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBlcnJcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkQnVmZmVyIChidWYpIHtcbiAgcmV0dXJuIHZhbGlkYXRlQnVmZmVyKGJ1ZikgPT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjbGVhblBhdGggKHN0cikge1xuICByZXR1cm4gJy8nICsgc3RyLnRyaW0oKS5zcGxpdCgnLycpLmZpbHRlcihhID0+IGEpLmpvaW4oJy8nKVxufVxuXG5mdW5jdGlvbiBQYXJzZUVycm9yIChzdHIpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcignRXJyb3IgcGFyc2luZyBhZGRyZXNzOiAnICsgc3RyKVxufVxuXG5mdW5jdGlvbiBwcm90b0Zyb21UdXBsZSAodHVwKSB7XG4gIGNvbnN0IHByb3RvID0gcHJvdG9jb2xzKHR1cFswXSlcbiAgcmV0dXJuIHByb3RvXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgaXAgPSByZXF1aXJlKCdpcCcpXG5jb25zdCBpc0lwID0gcmVxdWlyZSgnaXMtaXAnKVxuY29uc3QgcHJvdG9jb2xzID0gcmVxdWlyZSgnLi9wcm90b2NvbHMtdGFibGUnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCBiYXNlMzIgPSByZXF1aXJlKCdoaS1iYXNlMzInKVxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSBDb252ZXJ0XG5cbi8vIGNvbnZlcnRzIChzZXJpYWxpemVzKSBhZGRyZXNzZXNcbmZ1bmN0aW9uIENvbnZlcnQgKHByb3RvLCBhKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIENvbnZlcnQudG9TdHJpbmcocHJvdG8sIGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIENvbnZlcnQudG9CdWZmZXIocHJvdG8sIGEpXG4gIH1cbn1cblxuQ29udmVydC50b1N0cmluZyA9IGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAocHJvdG8sIGJ1Zikge1xuICBwcm90byA9IHByb3RvY29scyhwcm90bylcbiAgc3dpdGNoIChwcm90by5jb2RlKSB7XG4gICAgY2FzZSA0OiAvLyBpcHY0XG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGJ1ZjJpcChidWYpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBidWYycG9ydChidWYpXG5cbiAgICBjYXNlIDUzOiAvLyBkbnNcbiAgICBjYXNlIDU0OiAvLyBkbnM0XG4gICAgY2FzZSA1NTogLy8gZG5zNlxuICAgIGNhc2UgNTY6IC8vIGRuc2FkZHJcbiAgICBjYXNlIDQwMDogLy8gdW5peFxuICAgICAgcmV0dXJuIGJ1ZjJzdHIoYnVmKVxuXG4gICAgY2FzZSA0MjE6IC8vIGlwZnNcbiAgICAgIHJldHVybiBidWYybWgoYnVmKVxuICAgIGNhc2UgNDQ0OiAvLyBvbmlvblxuICAgICAgcmV0dXJuIGJ1ZjJvbmlvbihidWYpXG4gICAgY2FzZSA0NDU6IC8vIG9uaW9uM1xuICAgICAgcmV0dXJuIGJ1ZjJvbmlvbihidWYpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBidWYudG9TdHJpbmcoJ2hleCcpIC8vIG5vIGNsdWUuIGNvbnZlcnQgdG8gaGV4XG4gIH1cbn1cblxuQ29udmVydC50b0J1ZmZlciA9IGZ1bmN0aW9uIGNvbnZlcnRUb0J1ZmZlciAocHJvdG8sIHN0cikge1xuICBwcm90byA9IHByb3RvY29scyhwcm90bylcbiAgc3dpdGNoIChwcm90by5jb2RlKSB7XG4gICAgY2FzZSA0OiAvLyBpcHY0XG4gICAgICByZXR1cm4gaXAyYnVmKHN0cilcbiAgICBjYXNlIDQxOiAvLyBpcHY2XG4gICAgICByZXR1cm4gaXAyYnVmKHN0cilcblxuICAgIGNhc2UgNjogLy8gdGNwXG4gICAgY2FzZSAyNzM6IC8vIHVkcFxuICAgIGNhc2UgMzM6IC8vIGRjY3BcbiAgICBjYXNlIDEzMjogLy8gc2N0cFxuICAgICAgcmV0dXJuIHBvcnQyYnVmKHBhcnNlSW50KHN0ciwgMTApKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBzdHIyYnVmKHN0cilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gbWgyYnVmKHN0cilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBvbmlvbjJidWYoc3RyKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBvbmlvbjMyYnVmKHN0cilcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2hleCcpIC8vIG5vIGNsdWUuIGNvbnZlcnQgZnJvbSBoZXhcbiAgfVxufVxuXG5mdW5jdGlvbiBpcDJidWYgKGlwU3RyaW5nKSB7XG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwLnRvQnVmZmVyKGlwU3RyaW5nKVxufVxuXG5mdW5jdGlvbiBidWYyaXAgKGlwQnVmZikge1xuICBjb25zdCBpcFN0cmluZyA9IGlwLnRvU3RyaW5nKGlwQnVmZilcbiAgaWYgKCFpc0lwKGlwU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpcCBhZGRyZXNzJylcbiAgfVxuICByZXR1cm4gaXBTdHJpbmdcbn1cblxuZnVuY3Rpb24gcG9ydDJidWYgKHBvcnQpIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIpXG4gIGJ1Zi53cml0ZVVJbnQxNkJFKHBvcnQsIDApXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gYnVmMnBvcnQgKGJ1Zikge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRSgwKVxufVxuXG5mdW5jdGlvbiBzdHIyYnVmIChzdHIpIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyKVxuICBjb25zdCBzaXplID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWYubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIGJ1Zl0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJzdHIgKGJ1Zikge1xuICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShidWYpXG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnVmLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gbWgyYnVmIChoYXNoKSB7XG4gIC8vIHRoZSBhZGRyZXNzIGlzIGEgdmFyaW50IHByZWZpeGVkIG11bHRpaGFzaCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgY29uc3QgbWggPSBuZXcgQ0lEKGhhc2gpLm11bHRpaGFzaFxuICBjb25zdCBzaXplID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShtaC5sZW5ndGgpKVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbc2l6ZSwgbWhdKVxufVxuXG5mdW5jdGlvbiBidWYybWggKGJ1Zikge1xuICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShidWYpXG4gIGNvbnN0IGFkZHJlc3MgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYWRkcmVzcy5sZW5ndGggIT09IHNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29uc2lzdGVudCBsZW5ndGhzJylcbiAgfVxuXG4gIHJldHVybiBiczU4LmVuY29kZShhZGRyZXNzKVxufVxuXG5mdW5jdGlvbiBvbmlvbjJidWYgKHN0cikge1xuICBjb25zdCBhZGRyID0gc3RyLnNwbGl0KCc6JylcbiAgaWYgKGFkZHIubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHIgKyAnIGRvZXMgbm90IGNvbnRhaW4gYSBwb3J0IG51bWJlcicpXG4gIH1cbiAgaWYgKGFkZHJbMF0ubGVuZ3RoICE9PSAxNikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyWzBdICsgJyBub3QgYSBUb3Igb25pb24gYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBvbmlvbjMyYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uMyBhZGRyZXNzLicpXG4gIH1cbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oYmFzZTMyLmRlY29kZS5hc0J5dGVzKGFkZHJbMF0udG9VcHBlckNhc2UoKSkpXG5cbiAgLy8gb25pb24gcG9ydCBudW1iZXJcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGFkZHJbMV0sIDEwKVxuICBpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQb3J0IG51bWJlciBpcyBub3QgaW4gcmFuZ2UoMSwgNjU1MzYpJylcbiAgfVxuICBjb25zdCBwb3J0QnVmID0gcG9ydDJidWYocG9ydClcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgcG9ydEJ1Zl0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJvbmlvbiAoYnVmKSB7XG4gIGNvbnN0IGFkZHJCeXRlcyA9IGJ1Zi5zbGljZSgwLCBidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgcG9ydEJ5dGVzID0gYnVmLnNsaWNlKGJ1Zi5sZW5ndGggLSAyKVxuICBjb25zdCBhZGRyID0gYmFzZTMyLmVuY29kZShhZGRyQnl0ZXMpLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgcG9ydCA9IGJ1ZjJwb3J0KHBvcnRCeXRlcylcbiAgcmV0dXJuIGFkZHIgKyAnOicgKyBwb3J0XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgY29kZWMgPSByZXF1aXJlKCcuL2NvZGVjJylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5jb25zdCBiczU4ID0gcmVxdWlyZSgnYnM1OCcpXG5jb25zdCBDSUQgPSByZXF1aXJlKCdjaWRzJylcbmNvbnN0IHdpdGhJcyA9IHJlcXVpcmUoJ2NsYXNzLWlzJylcbmNvbnN0IGluc3BlY3QgPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXG5cbi8qKlxuICogQ3JlYXRlcyBhIFttdWx0aWFkZHJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyKSBmcm9tXG4gKiBhIEJ1ZmZlciwgU3RyaW5nIG9yIGFub3RoZXIgTXVsdGlhZGRyIGluc3RhbmNlXG4gKiBwdWJsaWMga2V5LlxuICogQGNsYXNzIE11bHRpYWRkclxuICogQHBhcmFtIHsoU3RyaW5nfEJ1ZmZlcnxNdWx0aWFkZHIpfSBhZGRyIC0gSWYgU3RyaW5nIG9yIEJ1ZmZlciwgbmVlZHMgdG8gYWRoZXJlXG4gKiB0byB0aGUgYWRkcmVzcyBmb3JtYXQgb2YgYSBbbXVsdGlhZGRyXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkciNzdHJpbmctZm9ybWF0KVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKi9cbmNvbnN0IE11bHRpYWRkciA9IHdpdGhJcy5wcm90byhmdW5jdGlvbiAoYWRkcikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTXVsdGlhZGRyKSkge1xuICAgIHJldHVybiBuZXcgTXVsdGlhZGRyKGFkZHIpXG4gIH1cblxuICAvLyBkZWZhdWx0XG4gIGlmIChhZGRyID09IG51bGwpIHtcbiAgICBhZGRyID0gJydcbiAgfVxuXG4gIGlmIChhZGRyIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0J1ZmZlcn0gLSBUaGUgcmF3IGJ5dGVzIHJlcHJlc2VudGluZyB0aGlzIG11bHRpYWRkcmVzc1xuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gY29kZWMuZnJvbUJ1ZmZlcihhZGRyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhZGRyID09PSAnc3RyaW5nJyB8fCBhZGRyIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKGFkZHIubGVuZ3RoID4gMCAmJiBhZGRyLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpYWRkciBcIiR7YWRkcn1cIiBtdXN0IHN0YXJ0IHdpdGggYSBcIi9cImApXG4gICAgfVxuICAgIHRoaXMuYnVmZmVyID0gY29kZWMuZnJvbVN0cmluZyhhZGRyKVxuICB9IGVsc2UgaWYgKGFkZHIuYnVmZmVyICYmIGFkZHIucHJvdG9zICYmIGFkZHIucHJvdG9Db2RlcykgeyAvLyBNdWx0aWFkZHJcbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21CdWZmZXIoYWRkci5idWZmZXIpIC8vIHZhbGlkYXRlICsgY29weSBidWZmZXJcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZHIgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBvciBhbm90aGVyIE11bHRpYWRkcicpXG4gIH1cbn0sIHsgY2xhc3NOYW1lOiAnTXVsdGlhZGRyJywgc3ltYm9sTmFtZTogJ0BtdWx0aWZvcm1hdHMvanMtbXVsdGlhZGRyL211bHRpYWRkcicgfSlcblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIFN0cmluZ1xuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgcmV0dXJuIGNvZGVjLmJ1ZmZlclRvU3RyaW5nKHRoaXMuYnVmZmVyKVxufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgSlNPTiBlbmNvZGVkIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogSlNPTi5zdHJpbmdpZnkoTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpKVxuICogLy8gJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnRvSlNPTiA9IE11bHRpYWRkci5wcm90b3R5cGUudG9TdHJpbmdcblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIGNvbnZpbmllbnQgb3B0aW9ucyBvYmplY3QgdG8gYmUgdXNlZCB3aXRoIG5ldC5jcmVhdGVDb25uZWN0aW9uXG4gKlxuICogQHJldHVybnMge3tmYW1pbHk6IFN0cmluZywgaG9zdDogU3RyaW5nLCB0cmFuc3BvcnQ6IFN0cmluZywgcG9ydDogTnVtYmVyfX1cbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykudG9PcHRpb25zKClcbiAqIC8vIHsgZmFtaWx5OiAnaXB2NCcsIGhvc3Q6ICcxMjcuMC4wLjEnLCB0cmFuc3BvcnQ6ICd0Y3AnLCBwb3J0OiA0MDAxIH1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b09wdGlvbnMgPSBmdW5jdGlvbiB0b09wdGlvbnMgKCkge1xuICBjb25zdCBvcHRzID0ge31cbiAgY29uc3QgcGFyc2VkID0gdGhpcy50b1N0cmluZygpLnNwbGl0KCcvJylcbiAgb3B0cy5mYW1pbHkgPSBwYXJzZWRbMV0gPT09ICdpcDQnID8gJ2lwdjQnIDogJ2lwdjYnXG4gIG9wdHMuaG9zdCA9IHBhcnNlZFsyXVxuICBvcHRzLnRyYW5zcG9ydCA9IHBhcnNlZFszXVxuICBvcHRzLnBvcnQgPSBwYXJzZUludChwYXJzZWRbNF0pXG4gIHJldHVybiBvcHRzXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBGb3IgcG9zdCBOb2RlLmpzIHYxMC4wLjAuXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL2RlcHJlY2F0aW9ucy5odG1sI2RlcHJlY2F0aW9uc19kZXAwMDc5X2N1c3RvbV9pbnNwZWN0aW9uX2Z1bmN0aW9uX29uX29iamVjdHNfdmlhX2luc3BlY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKSlcbiAqIC8vICc8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT4nXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGVbaW5zcGVjdF0gPSBmdW5jdGlvbiBpbnNwZWN0Q3VzdG9tICgpIHtcbiAgcmV0dXJuICc8TXVsdGlhZGRyICcgK1xuICAgIHRoaXMuYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSArICcgLSAnICtcbiAgICBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcikgKyAnPidcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqIEZhbGxiYWNrIGZvciBwcmUgTm9kZS5qcyB2MTAuMC4wLlxuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDA3OV9jdXN0b21faW5zcGVjdGlvbl9mdW5jdGlvbl9vbl9vYmplY3RzX3ZpYV9pbnNwZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykuaW5zcGVjdCgpXG4gKiAvLyAnPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+J1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgcmV0dXJuICc8TXVsdGlhZGRyICcgK1xuICAgIHRoaXMuYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSArICcgLSAnICtcbiAgICBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcikgKyAnPidcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm90b2NvbHMgdGhlIE11bHRpYWRkciBpcyBkZWZpbmVkIHdpdGgsIGFzIGFuIGFycmF5IG9mIG9iamVjdHMsIGluXG4gKiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLiBFYWNoIG9iamVjdCBjb250YWlucyB0aGUgcHJvdG9jb2wgY29kZSwgcHJvdG9jb2wgbmFtZSxcbiAqIGFuZCB0aGUgc2l6ZSBvZiBpdHMgYWRkcmVzcyBzcGFjZSBpbiBiaXRzLlxuICogW1NlZSBsaXN0IG9mIHByb3RvY29sc10oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdilcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPE9iamVjdD59IHByb3RvY29scyAtIEFsbCB0aGUgcHJvdG9jb2xzIHRoZSBhZGRyZXNzIGlzIGNvbXBvc2VkIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBwcm90b2NvbHNbXS5jb2RlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBwcm90b2NvbHNbXS5zaXplXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBwcm90b2NvbHNbXS5uYW1lXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnByb3RvcygpXG4gKiAvLyBbIHsgY29kZTogNCwgc2l6ZTogMzIsIG5hbWU6ICdpcDQnIH0sXG4gKiAvLyAgIHsgY29kZTogNiwgc2l6ZTogMTYsIG5hbWU6ICd0Y3AnIH0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvcyA9IGZ1bmN0aW9uIHByb3RvcyAoKSB7XG4gIHJldHVybiB0aGlzLnByb3RvQ29kZXMoKS5tYXAoY29kZSA9PiBPYmplY3QuYXNzaWduKHt9LCBwcm90b2NvbHMoY29kZSkpKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvZGVzIG9mIHRoZSBwcm90b2NvbHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybnMge0FycmF5LjxOdW1iZXI+fSBwcm90b2NvbCBjb2Rlc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b0NvZGVzKClcbiAqIC8vIFsgNCwgNiBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUucHJvdG9Db2RlcyA9IGZ1bmN0aW9uIHByb3RvQ29kZXMgKCkge1xuICBjb25zdCBjb2RlcyA9IFtdXG4gIGNvbnN0IGJ1ZiA9IHRoaXMuYnVmZmVyXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGJ1Zi5sZW5ndGgpIHtcbiAgICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShidWYsIGkpXG4gICAgY29uc3QgbiA9IHZhcmludC5kZWNvZGUuYnl0ZXNcblxuICAgIGNvbnN0IHAgPSBwcm90b2NvbHMoY29kZSlcbiAgICBjb25zdCBzaXplID0gY29kZWMuc2l6ZUZvckFkZHIocCwgYnVmLnNsaWNlKGkgKyBuKSlcblxuICAgIGkgKz0gKHNpemUgKyBuKVxuICAgIGNvZGVzLnB1c2goY29kZSlcbiAgfVxuXG4gIHJldHVybiBjb2Rlc1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBwcm90b2NvbHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybiB7QXJyYXkuPFN0cmluZz59IHByb3RvY29sIG5hbWVzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnByb3RvTmFtZXMoKVxuICogLy8gWyAnaXA0JywgJ3RjcCcgXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvTmFtZXMgPSBmdW5jdGlvbiBwcm90b05hbWVzICgpIHtcbiAgcmV0dXJuIHRoaXMucHJvdG9zKCkubWFwKHByb3RvID0+IHByb3RvLm5hbWUpXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHR1cGxlIG9mIHBhcnRzXG4gKlxuICogQHJldHVybiB7QXJyYXkuPEFycmF5Pn0gdHVwbGVzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHR1cGxlc1tdLjAgY29kZSBvZiBwcm90b2NvbFxuICogQHJldHVybiB7QnVmZmVyfSB0dXBsZXNbXS4xIGNvbnRlbnRzIG9mIGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoXCIvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMVwiKS50dXBsZXMoKVxuICogLy8gWyBbIDQsIDxCdWZmZXIgN2YgMDAgMDAgMDE+IF0sIFsgNiwgPEJ1ZmZlciAwZiBhMT4gXSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudHVwbGVzID0gZnVuY3Rpb24gdHVwbGVzICgpIHtcbiAgcmV0dXJuIGNvZGVjLmJ1ZmZlclRvVHVwbGVzKHRoaXMuYnVmZmVyKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBzdHJpbmcvbnVtYmVyIHBhcnRzXG4gKlxuICogQHJldHVybiB7QXJyYXkuPEFycmF5Pn0gdHVwbGVzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHR1cGxlc1tdLjAgY29kZSBvZiBwcm90b2NvbFxuICogQHJldHVybiB7KFN0cmluZ3xOdW1iZXIpfSB0dXBsZXNbXS4xIGNvbnRlbnRzIG9mIGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoXCIvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMVwiKS5zdHJpbmdUdXBsZXMoKVxuICogLy8gWyBbIDQsICcxMjcuMC4wLjEnIF0sIFsgNiwgNDAwMSBdIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5zdHJpbmdUdXBsZXMgPSBmdW5jdGlvbiBzdHJpbmdUdXBsZXMgKCkge1xuICBjb25zdCB0ID0gY29kZWMuYnVmZmVyVG9UdXBsZXModGhpcy5idWZmZXIpXG4gIHJldHVybiBjb2RlYy50dXBsZXNUb1N0cmluZ1R1cGxlcyh0KVxufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhIE11bHRpYWRkciBpbiBhbm90aGVyIE11bHRpYWRkclxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyIC0gTXVsdGlhZGRyIHRvIGFkZCBpbnRvIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzODA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBtaDMudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvOC44LjguOC90Y3AvMTA4MC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmVuY2Fwc3VsYXRlID0gZnVuY3Rpb24gZW5jYXBzdWxhdGUgKGFkZHIpIHtcbiAgYWRkciA9IE11bHRpYWRkcihhZGRyKVxuICByZXR1cm4gTXVsdGlhZGRyKHRoaXMudG9TdHJpbmcoKSArIGFkZHIudG9TdHJpbmcoKSlcbn1cblxuLyoqXG4gKiBEZWNhcHN1bGF0ZXMgYSBNdWx0aWFkZHIgZnJvbSBhbm90aGVyIE11bHRpYWRkclxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyIC0gTXVsdGlhZGRyIHRvIHJlbW92ZSBmcm9tIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzODA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBtaDMuZGVjYXBzdWxhdGUobWgyKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC84LjguOC44L3RjcC8xMDgwJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmRlY2Fwc3VsYXRlID0gZnVuY3Rpb24gZGVjYXBzdWxhdGUgKGFkZHIpIHtcbiAgYWRkciA9IGFkZHIudG9TdHJpbmcoKVxuICBjb25zdCBzID0gdGhpcy50b1N0cmluZygpXG4gIGNvbnN0IGkgPSBzLmxhc3RJbmRleE9mKGFkZHIpXG4gIGlmIChpIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWRkcmVzcyAnICsgdGhpcyArICcgZG9lcyBub3QgY29udGFpbiBzdWJhZGRyZXNzOiAnICsgYWRkcilcbiAgfVxuICByZXR1cm4gTXVsdGlhZGRyKHMuc2xpY2UoMCwgaSkpXG59XG5cbi8qKlxuICogQSBtb3JlIHJlbGlhYmxlIHZlcnNpb24gb2YgYGRlY2Fwc3VsYXRlYCBpZiB5b3UgYXJlIHRhcmdldGluZyBhXG4gKiBzcGVjaWZpYyBjb2RlLCBzdWNoIGFzIDQyMSAodGhlIGBwMnBgIHByb3RvY29sIGNvZGUpLiBUaGUgbGFzdCBpbmRleCBvZiB0aGUgY29kZVxuICogd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGBNdWx0aWFkZHJgLCBhbmQgYSBuZXcgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBjb2RlIGlzIG5vdCBwcmVzZW50LCB0aGUgb3JpZ2luYWwgYE11bHRpYWRkcmAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGUgVGhlIGNvZGUgb2YgdGhlIHByb3RvY29sIHRvIGRlY2Fwc3VsYXRlIGZyb20gdGhpcyBNdWx0aWFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhZGRyID0gTXVsdGlhZGRyKCcvaXA0LzAuMC4wLjAvdGNwLzgwODAvcDJwL1FtY2dwc3lXZ0g4WThhakp6MUN1NzJLblM1dW8yQWEyTHB6VTdraW5TdXBOS0MnKVxuICogLy8gPE11bHRpYWRkciAwNDAwLi4uIC0gL2lwNC8wLjAuMC4wL3RjcC84MDgwL3AycC9RbWNncHN5V2dIOFk4YWpKejFDdTcyS25TNXVvMkFhMkxwelU3a2luU3VwTktDPlxuICpcbiAqIGFkZHIuZGVjYXBzdWxhdGVDb2RlKDQyMSkudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvMC4wLjAuMC90Y3AvODA4MCdcbiAqXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC84MDgwJykuZGVjYXBzdWxhdGVDb2RlKDQyMSkudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvMTI3LjAuMC4xL3RjcC84MDgwJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmRlY2Fwc3VsYXRlQ29kZSA9IGZ1bmN0aW9uIGRlY2Fwc3VsYXRlQ29kZSAoY29kZSkge1xuICBjb25zdCB0dXBsZXMgPSB0aGlzLnR1cGxlcygpXG4gIGZvciAobGV0IGkgPSB0dXBsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAodHVwbGVzW2ldWzBdID09PSBjb2RlKSB7XG4gICAgICByZXR1cm4gTXVsdGlhZGRyKGNvZGVjLnR1cGxlc1RvQnVmZmVyKHR1cGxlcy5zbGljZSgwLCBpKSkpXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGVlcklkIGlmIHRoZSBtdWx0aWFkZHIgY29udGFpbnMgb25lXG4gKlxuICogQHJldHVybiB7U3RyaW5nfG51bGx9IHBlZXJJZCAtIFRoZSBpZCBvZiB0aGUgcGVlciBvciBudWxsIGlmIGludmFsaWQgb3IgbWlzc2luZyBmcm9tIHRoZSBtYVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwL2lwZnMvUW1WYWxpZEJhc2U1OHN0cmluZycpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODAvaXBmcy9RbVZhbGlkQmFzZTU4c3RyaW5nPlxuICpcbiAqIC8vIHNob3VsZCByZXR1cm4gUW1WYWxpZEJhc2U1OHN0cmluZyBvciBudWxsIGlmIHRoZSBpZCBpcyBtaXNzaW5nIG9yIGludmFsaWRcbiAqIGNvbnN0IHBlZXJJZCA9IG1oMS5nZXRQZWVySWQoKVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmdldFBlZXJJZCA9IGZ1bmN0aW9uIGdldFBlZXJJZCAoKSB7XG4gIGxldCBiNThzdHIgPSBudWxsXG4gIHRyeSB7XG4gICAgY29uc3QgdHVwbGVzID0gdGhpcy5zdHJpbmdUdXBsZXMoKS5maWx0ZXIoKHR1cGxlKSA9PiB7XG4gICAgICBpZiAodHVwbGVbMF0gPT09IHByb3RvY29scy5uYW1lcy5pcGZzLmNvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gR2V0IHRoZSBsYXN0IGlkXG4gICAgYjU4c3RyID0gdHVwbGVzLnBvcCgpWzFdXG4gICAgLy8gR2V0IG11bHRpaGFzaCwgdW53cmFwIGZyb20gQ0lEIGlmIG5lZWRlZFxuICAgIGI1OHN0ciA9IGJzNTguZW5jb2RlKG5ldyBDSUQoYjU4c3RyKS5tdWx0aWhhc2gpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBiNThzdHIgPSBudWxsXG4gIH1cblxuICByZXR1cm4gYjU4c3RyXG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGF0aCBpZiB0aGUgbXVsdGlhZGRyIGNvbnRhaW5zIG9uZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIG11bHRpYWRkciwgb3IgbnVsbCBpZiBubyBwYXRoIHByb3RvY29sIGlzIHByZXNlbnRcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MC91bml4L3RtcC9wMnAuc29jaycpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODAvdW5peC90bXAvcDJwLnNvY2s+XG4gKlxuICogLy8gc2hvdWxkIHJldHVybiB1dGY4IHN0cmluZyBvciBudWxsIGlmIHRoZSBpZCBpcyBtaXNzaW5nIG9yIGludmFsaWRcbiAqIGNvbnN0IHBhdGggPSBtaDEuZ2V0UGF0aCgpXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uIGdldFBhdGggKCkge1xuICBsZXQgcGF0aCA9IG51bGxcbiAgdHJ5IHtcbiAgICBwYXRoID0gdGhpcy5zdHJpbmdUdXBsZXMoKS5maWx0ZXIoKHR1cGxlKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IHByb3RvY29scyh0dXBsZVswXSlcbiAgICAgIGlmIChwcm90by5wYXRoKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlbMF1bMV1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhdGggPSBudWxsXG4gIH1cblxuICByZXR1cm4gcGF0aFxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0d28gTXVsdGlhZGRycyBhcmUgdGhlIHNhbWVcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7Qm9vbH1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODA+XG4gKlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBtaDEuZXF1YWxzKG1oMSlcbiAqIC8vIHRydWVcbiAqXG4gKiBtaDEuZXF1YWxzKG1oMilcbiAqIC8vIGZhbHNlXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChhZGRyKSB7XG4gIHJldHVybiB0aGlzLmJ1ZmZlci5lcXVhbHMoYWRkci5idWZmZXIpXG59XG5cbi8qKlxuICogR2V0cyBhIE11bHRpYWRkcnMgbm9kZS1mcmllbmRseSBhZGRyZXNzIG9iamVjdC4gTm90ZSB0aGF0IHByb3RvY29sIGluZm9ybWF0aW9uXG4gKiBpcyBsZWZ0IG91dDogaW4gTm9kZSAoYW5kIG1vc3QgbmV0d29yayBzeXN0ZW1zKSB0aGUgcHJvdG9jb2wgaXMgdW5rbm93YWJsZVxuICogZ2l2ZW4gb25seSB0aGUgYWRkcmVzcy5cbiAqXG4gKiBIYXMgdG8gYmUgYSBUaGluV2Fpc3QgQWRkcmVzcywgb3RoZXJ3aXNlIHRocm93cyBlcnJvclxuICpcbiAqIEByZXR1cm5zIHt7ZmFtaWx5OiBTdHJpbmcsIGFkZHJlc3M6IFN0cmluZywgcG9ydDogTnVtYmVyfX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgTXVsdGlhZGRyIGlzIG5vdCBhIFRoaW4gV2Fpc3QgYWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5ub2RlQWRkcmVzcygpXG4gKiAvLyB7ZmFtaWx5OiAnSVB2NCcsIGFkZHJlc3M6ICcxMjcuMC4wLjEnLCBwb3J0OiAnNDAwMSd9XG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUubm9kZUFkZHJlc3MgPSBmdW5jdGlvbiBub2RlQWRkcmVzcyAoKSB7XG4gIGNvbnN0IGNvZGVzID0gdGhpcy5wcm90b0NvZGVzKClcbiAgY29uc3QgbmFtZXMgPSB0aGlzLnByb3RvTmFtZXMoKVxuICBjb25zdCBwYXJ0cyA9IHRoaXMudG9TdHJpbmcoKS5zcGxpdCgnLycpLnNsaWNlKDEpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpYWRkciBtdXN0IGhhdmUgYSB2YWxpZCBmb3JtYXQ6IFwiL3tpcDQsIGlwNiwgZG5zNCwgZG5zNn0ve2FkZHJlc3N9L3t0Y3AsIHVkcH0ve3BvcnR9XCIuJylcbiAgfSBlbHNlIGlmIChjb2Rlc1swXSAhPT0gNCAmJiBjb2Rlc1swXSAhPT0gNDEgJiYgY29kZXNbMF0gIT09IDU0ICYmIGNvZGVzWzBdICE9PSA1NSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gcHJvdG9jb2wgd2l0aCBuYW1lOiBcIicke25hbWVzWzBdfSdcIi4gTXVzdCBoYXZlIGEgdmFsaWQgZmFtaWx5IG5hbWU6IFwie2lwNCwgaXA2LCBkbnM0LCBkbnM2fVwiLmApXG4gIH0gZWxzZSBpZiAocGFydHNbMl0gIT09ICd0Y3AnICYmIHBhcnRzWzJdICE9PSAndWRwJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gcHJvdG9jb2wgd2l0aCBuYW1lOiBcIicke25hbWVzWzFdfSdcIi4gTXVzdCBoYXZlIGEgdmFsaWQgdHJhbnNwb3J0IHByb3RvY29sOiBcInt0Y3AsIHVkcH1cIi5gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmYW1pbHk6IChjb2Rlc1swXSA9PT0gNDEgfHwgY29kZXNbMF0gPT09IDU1KSA/IDYgOiA0LFxuICAgIGFkZHJlc3M6IHBhcnRzWzFdLCAvLyBpcCBhZGRyXG4gICAgcG9ydDogcGFyc2VJbnQocGFydHNbM10pIC8vIHRjcCBvciB1ZHAgcG9ydFxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIE11bHRpYWRkciBmcm9tIGEgbm9kZS1mcmllbmRseSBhZGRyZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7e2ZhbWlseTogU3RyaW5nLCBhZGRyZXNzOiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19IGFkZHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0cmFuc3BvcnRcbiAqIEByZXR1cm5zIHtNdWx0aWFkZHJ9IG11bHRpYWRkclxuICogQHRocm93cyB7RXJyb3J9IFRocm93cyBlcnJvciBpZiBhZGRyIGlzIG5vdCB0cnV0aHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgdHJhbnNwb3J0IGlzIG5vdCB0cnV0aHlcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIuZnJvbU5vZGVBZGRyZXNzKHthZGRyZXNzOiAnMTI3LjAuMC4xJywgcG9ydDogJzQwMDEnfSwgJ3RjcCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqL1xuTXVsdGlhZGRyLmZyb21Ob2RlQWRkcmVzcyA9IGZ1bmN0aW9uIGZyb21Ob2RlQWRkcmVzcyAoYWRkciwgdHJhbnNwb3J0KSB7XG4gIGlmICghYWRkcikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyBub2RlIGFkZHJlc3Mgb2JqZWN0JylcbiAgaWYgKCF0cmFuc3BvcnQpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgdHJhbnNwb3J0IHByb3RvY29sJylcbiAgY29uc3QgaXAgPSAoYWRkci5mYW1pbHkgPT09ICdJUHY2JykgPyAnaXA2JyA6ICdpcDQnXG4gIHJldHVybiBNdWx0aWFkZHIoJy8nICsgW2lwLCBhZGRyLmFkZHJlc3MsIHRyYW5zcG9ydCwgYWRkci5wb3J0XS5qb2luKCcvJykpXG59XG5cbi8vIFRPRE8gZmluZCBhIGJldHRlciBleGFtcGxlLCBub3Qgc3VyZSBhYm91dCBpdCdzIGdvb2QgZW5vdWdoXG4vKipcbiAqIFJldHVybnMgaWYgYSBNdWx0aWFkZHIgaXMgYSBUaGluIFdhaXN0IGFkZHJlc3Mgb3Igbm90LlxuICpcbiAqIFRoaW4gV2Fpc3QgaXMgaWYgYSBNdWx0aWFkZHIgYWRoZXJlcyB0byB0aGUgc3RhbmRhcmQgY29tYmluYXRpb24gb2Y6XG4gKlxuICogYHtJUHY0LCBJUHY2fS97VENQLCBVRFB9YFxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBbYWRkcl0gLSBEZWZhdWx0cyB0byB1c2luZyBgdGhpc2AgaW5zdGFuY2VcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpc1RoaW5XYWlzdEFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDRjMGE4MDIwMTA2MTM4OSAtIC9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDE+XG4gKiBjb25zdCBtaDMgPSBtaDEuZW5jYXBzdWxhdGUobWgyKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExMDRjMGE4MDIwMTA2MTM4OSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMT5cbiAqIG1oMS5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gdHJ1ZVxuICogbWgyLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyB0cnVlXG4gKiBtaDMuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIGZhbHNlXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuaXNUaGluV2Fpc3RBZGRyZXNzID0gZnVuY3Rpb24gaXNUaGluV2Fpc3RBZGRyZXNzIChhZGRyKSB7XG4gIGNvbnN0IHByb3RvcyA9IChhZGRyIHx8IHRoaXMpLnByb3RvcygpXG5cbiAgaWYgKHByb3Rvcy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChwcm90b3NbMF0uY29kZSAhPT0gNCAmJiBwcm90b3NbMF0uY29kZSAhPT0gNDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAocHJvdG9zWzFdLmNvZGUgIT09IDYgJiYgcHJvdG9zWzFdLmNvZGUgIT09IDI3Mykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogT2JqZWN0IGNvbnRhaW5pbmcgdGFibGUsIG5hbWVzIGFuZCBjb2RlcyBvZiBhbGwgc3VwcG9ydGVkIHByb3RvY29scy5cbiAqIFRvIGdldCB0aGUgcHJvdG9jb2wgdmFsdWVzIGZyb20gYSBNdWx0aWFkZHIsIHlvdSBjYW4gdXNlXG4gKiBbYC5wcm90b3MoKWBdKCNtdWx0aWFkZHJwcm90b3MpLFxuICogW2AucHJvdG9Db2RlcygpYF0oI211bHRpYWRkcnByb3RvY29kZXMpIG9yXG4gKiBbYC5wcm90b05hbWVzKClgXSgjbXVsdGlhZGRycHJvdG9uYW1lcylcbiAqXG4gKiBAaW5zdGFuY2VcbiAqIEByZXR1cm5zIHt7dGFibGU6IEFycmF5LCBuYW1lczogT2JqZWN0LCBjb2RlczogT2JqZWN0fX1cbiAqXG4gKi9cbk11bHRpYWRkci5wcm90b2NvbHMgPSBwcm90b2NvbHNcblxuLyoqXG4gKiBSZXR1cm5zIGlmIHNvbWV0aGluZyBpcyBhIE11bHRpYWRkciB0aGF0IGlzIGEgbmFtZVxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyXG4gKiBAcmV0dXJuIHtCb29sfSBpc05hbWVcbiAqL1xuTXVsdGlhZGRyLmlzTmFtZSA9IGZ1bmN0aW9uIGlzTmFtZSAoYWRkcikge1xuICBpZiAoIU11bHRpYWRkci5pc011bHRpYWRkcihhZGRyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gaWYgYSBwYXJ0IG9mIHRoZSBtdWx0aWFkZHIgaXMgcmVzb2x2YWJsZSwgdGhlbiByZXR1cm4gdHJ1ZVxuICByZXR1cm4gYWRkci5wcm90b3MoKS5zb21lKChwcm90bykgPT4gcHJvdG8ucmVzb2x2YWJsZSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIG11bHRpYWRkcnMsIGJ5IHJlc29sdmluZyB0aGUgbXVsdGlhZGRyIHRoYXQgaXMgYSBuYW1lXG4gKlxuICogQGFzeW5jXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyW119XG4gKi9cbk11bHRpYWRkci5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSAoYWRkcikge1xuICBpZiAoIU11bHRpYWRkci5pc011bHRpYWRkcihhZGRyKSB8fCAhTXVsdGlhZGRyLmlzTmFtZShhZGRyKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChFcnJvcignbm90IGEgdmFsaWQgbmFtZScpKVxuICB9XG5cbiAgLypcbiAgICogTmVlZHMgbW9yZSBjb25zaWRlcmF0aW9uIGZyb20gc3BlYyBkZXNpZ246XG4gICAqICAgLSB3aGF0IHRvIHJldHVyblxuICAgKiAgIC0gaG93IHRvIGFjaGlldmUgaXQgaW4gdGhlIGJyb3dzZXI/XG4gICAqL1xuICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQgeWV0JykpXG59XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IE11bHRpYWRkclxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIFByb3RvY29scyAocHJvdG8pIHtcbiAgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnbnVtYmVyJykge1xuICAgIGlmIChQcm90b2NvbHMuY29kZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLmNvZGVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBjb2RlOiAnICsgcHJvdG8pXG4gIH0gZWxzZSBpZiAodHlwZW9mIChwcm90bykgPT09ICdzdHJpbmcnIHx8IHByb3RvIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKFByb3RvY29scy5uYW1lc1twcm90b10pIHtcbiAgICAgIHJldHVybiBQcm90b2NvbHMubmFtZXNbcHJvdG9dXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm90b2NvbCB3aXRoIG5hbWU6ICcgKyBwcm90bylcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcm90b2NvbCBpZCB0eXBlOiAnICsgcHJvdG8pXG59XG5cbmNvbnN0IFYgPSAtMVxuUHJvdG9jb2xzLmxlbmd0aFByZWZpeGVkVmFyU2l6ZSA9IFZcblByb3RvY29scy5WID0gVlxuXG5Qcm90b2NvbHMudGFibGUgPSBbXG4gIFs0LCAzMiwgJ2lwNCddLFxuICBbNiwgMTYsICd0Y3AnXSxcbiAgWzMzLCAxNiwgJ2RjY3AnXSxcbiAgWzQxLCAxMjgsICdpcDYnXSxcbiAgWzQyLCBWLCAnaXA2em9uZSddLFxuICBbNTMsIFYsICdkbnMnLCAncmVzb2x2YWJsZSddLFxuICBbNTQsIFYsICdkbnM0JywgJ3Jlc29sdmFibGUnXSxcbiAgWzU1LCBWLCAnZG5zNicsICdyZXNvbHZhYmxlJ10sXG4gIFs1NiwgViwgJ2Ruc2FkZHInLCAncmVzb2x2YWJsZSddLFxuICBbMTMyLCAxNiwgJ3NjdHAnXSxcbiAgWzI3MywgMTYsICd1ZHAnXSxcbiAgWzI3NSwgMCwgJ3AycC13ZWJydGMtc3RhciddLFxuICBbMjc2LCAwLCAncDJwLXdlYnJ0Yy1kaXJlY3QnXSxcbiAgWzI3NywgMCwgJ3AycC1zdGFyZHVzdCddLFxuICBbMjkwLCAwLCAncDJwLWNpcmN1aXQnXSxcbiAgWzMwMSwgMCwgJ3VkdCddLFxuICBbMzAyLCAwLCAndXRwJ10sXG4gIFs0MDAsIFYsICd1bml4JywgZmFsc2UsICdwYXRoJ10sXG4gIC8vIGBpcGZzYCBpcyBhZGRlZCBiZWZvcmUgYHAycGAgZm9yIGxlZ2FjeSBzdXBwb3J0LlxuICAvLyBBbGwgdGV4dCByZXByZXNlbnRhdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGBwMnBgLCBidXQgYGlwZnNgIHdpbGxcbiAgLy8gc3RpbGwgYmUgc3VwcG9ydGVkXG4gIFs0MjEsIFYsICdpcGZzJ10sXG4gIC8vIGBwMnBgIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgNDIxLCBhbmQgaXMgbm93IHRoZSBkZWZhdWx0XG4gIFs0MjEsIFYsICdwMnAnXSxcbiAgWzQ0MywgMCwgJ2h0dHBzJ10sXG4gIFs0NDQsIDk2LCAnb25pb24nXSxcbiAgWzQ0NSwgMjk2LCAnb25pb24zJ10sXG4gIFs0NDYsIFYsICdnYXJsaWM2NCddLFxuICBbNDYwLCAwLCAncXVpYyddLFxuICBbNDc3LCAwLCAnd3MnXSxcbiAgWzQ3OCwgMCwgJ3dzcyddLFxuICBbNDc5LCAwLCAncDJwLXdlYnNvY2tldC1zdGFyJ10sXG4gIFs0ODAsIDAsICdodHRwJ11cbl1cblxuUHJvdG9jb2xzLm5hbWVzID0ge31cblByb3RvY29scy5jb2RlcyA9IHt9XG5cbi8vIHBvcHVsYXRlIHRhYmxlc1xuUHJvdG9jb2xzLnRhYmxlLm1hcChyb3cgPT4ge1xuICBjb25zdCBwcm90byA9IHAuYXBwbHkobnVsbCwgcm93KVxuICBQcm90b2NvbHMuY29kZXNbcHJvdG8uY29kZV0gPSBwcm90b1xuICBQcm90b2NvbHMubmFtZXNbcHJvdG8ubmFtZV0gPSBwcm90b1xufSlcblxuUHJvdG9jb2xzLm9iamVjdCA9IHBcblxuZnVuY3Rpb24gcCAoY29kZSwgc2l6ZSwgbmFtZSwgcmVzb2x2YWJsZSwgcGF0aCkge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlc29sdmFibGU6IEJvb2xlYW4ocmVzb2x2YWJsZSksXG4gICAgcGF0aDogQm9vbGVhbihwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvdG9jb2xzXG4iLCIndXNlIHN0cmljdCdcblxuY2xhc3MgQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChuYW1lLCBjb2RlLCBpbXBsZW1lbnRhdGlvbiwgYWxwaGFiZXQpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5jb2RlID0gY29kZVxuICAgIHRoaXMuYWxwaGFiZXQgPSBhbHBoYWJldFxuICAgIGlmIChpbXBsZW1lbnRhdGlvbiAmJiBhbHBoYWJldCkge1xuICAgICAgdGhpcy5lbmdpbmUgPSBpbXBsZW1lbnRhdGlvbihhbHBoYWJldClcbiAgICB9XG4gIH1cblxuICBlbmNvZGUgKHN0cmluZ09yQnVmZmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLmVuY29kZShzdHJpbmdPckJ1ZmZlcilcbiAgfVxuXG4gIGRlY29kZSAoc3RyaW5nT3JCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuZGVjb2RlKHN0cmluZ09yQnVmZmVyKVxuICB9XG5cbiAgaXNJbXBsZW1lbnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYXNlXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlMTYgKGFscGhhYmV0KSB7XG4gIHJldHVybiB7XG4gICAgZW5jb2RlIChpbnB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0KS50b1N0cmluZygnaGV4JylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnB1dC50b1N0cmluZygnaGV4JylcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2UxNiBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQsICdoZXgnKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGRlY29kZSAoaW5wdXQsIGFscGhhYmV0KSB7XG4gIGlucHV0ID0gaW5wdXQucmVwbGFjZShuZXcgUmVnRXhwKCc9JywgJ2cnKSwgJycpXG4gIGxldCBsZW5ndGggPSBpbnB1dC5sZW5ndGhcblxuICBsZXQgYml0cyA9IDBcbiAgbGV0IHZhbHVlID0gMFxuXG4gIGxldCBpbmRleCA9IDBcbiAgbGV0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KChsZW5ndGggKiA1IC8gOCkgfCAwKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA1KSB8IGFscGhhYmV0LmluZGV4T2YoaW5wdXRbaV0pXG4gICAgYml0cyArPSA1XG5cbiAgICBpZiAoYml0cyA+PSA4KSB7XG4gICAgICBvdXRwdXRbaW5kZXgrK10gPSAodmFsdWUgPj4+IChiaXRzIC0gOCkpICYgMjU1XG4gICAgICBiaXRzIC09IDhcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0LmJ1ZmZlclxufVxuXG5mdW5jdGlvbiBlbmNvZGUgKGJ1ZmZlciwgYWxwaGFiZXQpIHtcbiAgbGV0IGxlbmd0aCA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKVxuICBsZXQgcGFkZGluZyA9IGFscGhhYmV0LmluZGV4T2YoJz0nKSA9PT0gYWxwaGFiZXQubGVuZ3RoIC0gMVxuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgYWxwaGFiZXQgPSBhbHBoYWJldC5zdWJzdHJpbmcoMCwgYWxwaGFiZXQubGVuZ3RoIC0gMilcbiAgfVxuXG4gIGxldCBiaXRzID0gMFxuICBsZXQgdmFsdWUgPSAwXG4gIGxldCBvdXRwdXQgPSAnJ1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSB8IHZpZXdbaV1cbiAgICBiaXRzICs9IDhcblxuICAgIHdoaWxlIChiaXRzID49IDUpIHtcbiAgICAgIG91dHB1dCArPSBhbHBoYWJldFsodmFsdWUgPj4+IChiaXRzIC0gNSkpICYgMzFdXG4gICAgICBiaXRzIC09IDVcbiAgICB9XG4gIH1cblxuICBpZiAoYml0cyA+IDApIHtcbiAgICBvdXRwdXQgKz0gYWxwaGFiZXRbKHZhbHVlIDw8ICg1IC0gYml0cykpICYgMzFdXG4gIH1cblxuICBpZiAocGFkZGluZykge1xuICAgIHdoaWxlICgob3V0cHV0Lmxlbmd0aCAlIDgpICE9PSAwKSB7XG4gICAgICBvdXRwdXQgKz0gJz0nXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UzMiAoYWxwaGFiZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZW5jb2RlKEJ1ZmZlci5mcm9tKGlucHV0KSwgYWxwaGFiZXQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbmNvZGUoaW5wdXQsIGFscGhhYmV0KVxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlY29kZShpbnB1dCwgYWxwaGFiZXQpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlNjQgKGFscGhhYmV0KSB7XG4gIC8vIFRoZSBhbHBoYWJldCBpcyBvbmx5IHVzZWQgdG8ga25vdzpcbiAgLy8gICAxLiBJZiBwYWRkaW5nIGlzIGVuYWJsZWQgKG11c3QgY29udGFpbiAnPScpXG4gIC8vICAgMi4gSWYgdGhlIG91dHB1dCBtdXN0IGJlIHVybC1zYWZlIChtdXN0IGNvbnRhaW4gJy0nIGFuZCAnXycpXG4gIC8vICAgMy4gSWYgdGhlIGlucHV0IG9mIHRoZSBvdXRwdXQgZnVuY3Rpb24gaXMgdmFsaWRcbiAgLy8gVGhlIGFscGhhYmV0cyBmcm9tIFJGQyA0NjQ4IGFyZSBhbHdheXMgdXNlZC5cbiAgY29uc3QgcGFkZGluZyA9IGFscGhhYmV0LmluZGV4T2YoJz0nKSA+IC0xXG4gIGNvbnN0IHVybCA9IGFscGhhYmV0LmluZGV4T2YoJy0nKSA+IC0xICYmIGFscGhhYmV0LmluZGV4T2YoJ18nKSA+IC0xXG5cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBsZXQgb3V0cHV0ID0gJydcblxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3V0cHV0ID0gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0ID0gaW5wdXQudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZCA9IG91dHB1dC5pbmRleE9mKCc9JylcbiAgICAgIGlmIChwYWQgPiAwICYmICFwYWRkaW5nKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5zdWJzdHJpbmcoMCwgcGFkKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3V0cHV0XG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlNjQgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQsICdiYXNlNjQnKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJhc2UgPSByZXF1aXJlKCcuL2Jhc2UuanMnKVxuY29uc3QgYmFzZVggPSByZXF1aXJlKCdiYXNlLXgnKVxuY29uc3QgYmFzZTE2ID0gcmVxdWlyZSgnLi9iYXNlMTYnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnLi9iYXNlMzInKVxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKVxuXG4vLyBuYW1lLCBjb2RlLCBpbXBsZW1lbnRhdGlvbiwgYWxwaGFiZXRcbmNvbnN0IGNvbnN0YW50cyA9IFtcbiAgWydiYXNlMScsICcxJywgJycsICcxJ10sXG4gIFsnYmFzZTInLCAnMCcsIGJhc2VYLCAnMDEnXSxcbiAgWydiYXNlOCcsICc3JywgYmFzZVgsICcwMTIzNDU2NyddLFxuICBbJ2Jhc2UxMCcsICc5JywgYmFzZVgsICcwMTIzNDU2Nzg5J10sXG4gIFsnYmFzZTE2JywgJ2YnLCBiYXNlMTYsICcwMTIzNDU2Nzg5YWJjZGVmJ10sXG4gIFsnYmFzZTMyJywgJ2InLCBiYXNlMzIsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2NyddLFxuICBbJ2Jhc2UzMnBhZCcsICdjJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1Njc9J10sXG4gIFsnYmFzZTMyaGV4JywgJ3YnLCBiYXNlMzIsICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1diddLFxuICBbJ2Jhc2UzMmhleHBhZCcsICd0JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXY9J10sXG4gIFsnYmFzZTMyeicsICdoJywgYmFzZTMyLCAneWJuZHJmZzhlamttY3BxeG90MXV3aXN6YTM0NWg3NjknXSxcbiAgWydiYXNlNThmbGlja3InLCAnWicsIGJhc2VYLCAnMTIzNDU2Nzg5YWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWiddLFxuICBbJ2Jhc2U1OGJ0YycsICd6JywgYmFzZVgsICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J10sXG4gIFsnYmFzZTY0JywgJ20nLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ10sXG4gIFsnYmFzZTY0cGFkJywgJ00nLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSddLFxuICBbJ2Jhc2U2NHVybCcsICd1JywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyddLFxuICBbJ2Jhc2U2NHVybHBhZCcsICdVJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz0nXVxuXVxuXG5jb25zdCBuYW1lcyA9IGNvbnN0YW50cy5yZWR1Y2UoKHByZXYsIHR1cHBsZSkgPT4ge1xuICBwcmV2W3R1cHBsZVswXV0gPSBuZXcgQmFzZSh0dXBwbGVbMF0sIHR1cHBsZVsxXSwgdHVwcGxlWzJdLCB0dXBwbGVbM10pXG4gIHJldHVybiBwcmV2XG59LCB7fSlcblxuY29uc3QgY29kZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMV1dID0gbmFtZXNbdHVwcGxlWzBdXVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBuYW1lczogbmFtZXMsXG4gIGNvZGVzOiBjb2Rlc1xufVxuIiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW211bHRpYmFzZV0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWJhc2UpIHNwZWNpZmljYXRpb24uXG4gKiBAbW9kdWxlIE11bHRpYmFzZVxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBtdWx0aWJhc2VcbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlXG5leHBvcnRzLmRlY29kZSA9IGRlY29kZVxuZXhwb3J0cy5pc0VuY29kZWQgPSBpc0VuY29kZWRcbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5uYW1lcykpXG5leHBvcnRzLmNvZGVzID0gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhjb25zdGFudHMuY29kZXMpKVxuXG5jb25zdCBlcnJOb3RTdXBwb3J0ZWQgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVuY29kaW5nJylcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgYnVmZmVyIHdpdGggdGhlIG11bHRpYmFzZSB2YXJpbnQrY29kZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgcHJlZml4ZWQgd2l0aCBtdWx0aWJhc2UuXG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5mdW5jdGlvbiBtdWx0aWJhc2UgKG5hbWVPckNvZGUsIGJ1Zikge1xuICBpZiAoIWJ1Zikge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgYW4gZW5jb2RlZCBidWZmZXInKVxuICB9XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IGNvZGVCdWYgPSBCdWZmZXIuZnJvbShiYXNlLmNvZGUpXG5cbiAgY29uc3QgbmFtZSA9IGJhc2UubmFtZVxuICB2YWxpZEVuY29kZShuYW1lLCBidWYpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtjb2RlQnVmLCBidWZdKVxufVxuXG4vKipcbiAqIEVuY29kZSBkYXRhIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlIGFuZCBhZGQgdGhlIG11bHRpYmFzZSBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBuYW1lT3JDb2RlIC0gVGhlIG11bHRpYmFzZSBuYW1lIG9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZiAtIFRoZSBkYXRhIHRvIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICogQG1lbWJlcm9mIE11bHRpYmFzZVxuICovXG5mdW5jdGlvbiBlbmNvZGUgKG5hbWVPckNvZGUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lT3JDb2RlKVxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG5cbiAgcmV0dXJuIG11bHRpYmFzZShuYW1lLCBCdWZmZXIuZnJvbShiYXNlLmVuY29kZShidWYpKSlcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGJ1ZmZlciBvciBzdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSBoZWFkZXIsIGRlY29kZXMgaXQgYW5kXG4gKiByZXR1cm5zIHRoZSBkZWNvZGVkIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gYnVmT3JTdHJpbmdcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKlxuICovXG5mdW5jdGlvbiBkZWNvZGUgKGJ1Zk9yU3RyaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JTdHJpbmcpKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy50b1N0cmluZygpXG4gIH1cblxuICBjb25zdCBjb2RlID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDAsIDEpXG4gIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDEsIGJ1Zk9yU3RyaW5nLmxlbmd0aClcblxuICBpZiAodHlwZW9mIGJ1Zk9yU3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgIGJ1Zk9yU3RyaW5nID0gQnVmZmVyLmZyb20oYnVmT3JTdHJpbmcpXG4gIH1cblxuICBjb25zdCBiYXNlID0gZ2V0QmFzZShjb2RlKVxuICByZXR1cm4gQnVmZmVyLmZyb20oYmFzZS5kZWNvZGUoYnVmT3JTdHJpbmcudG9TdHJpbmcoKSkpXG59XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIGRhdGEgbXVsdGliYXNlIGVuY29kZWQ/XG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGlzRW5jb2RlZCAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIEVuc3VyZSBidWZPclN0cmluZyBpcyBhIHN0cmluZ1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJ1Zk9yU3RyaW5nKSAhPT0gJ1tvYmplY3QgU3RyaW5nXScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlID0gZ2V0QmFzZShjb2RlKVxuICAgIHJldHVybiBiYXNlLm5hbWVcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkRW5jb2RlIChuYW1lLCBidWYpIHtcbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZSlcbiAgYmFzZS5kZWNvZGUoYnVmLnRvU3RyaW5nKCkpXG59XG5cbmZ1bmN0aW9uIGdldEJhc2UgKG5hbWVPckNvZGUpIHtcbiAgbGV0IGJhc2VcblxuICBpZiAoY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5uYW1lc1tuYW1lT3JDb2RlXVxuICB9IGVsc2UgaWYgKGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXSkge1xuICAgIGJhc2UgPSBjb25zdGFudHMuY29kZXNbbmFtZU9yQ29kZV1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnJOb3RTdXBwb3J0ZWRcbiAgfVxuXG4gIGlmICghYmFzZS5pc0ltcGxlbWVudGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgJyArIG5hbWVPckNvZGUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKVxuICB9XG5cbiAgcmV0dXJuIGJhc2Vcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB0YWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBjb2RlY0NvbnN0YW50IC0+IGNvZGVcbmNvbnN0IGNvbnN0YW50cyA9IHt9XG5cbmZvciAoY29uc3QgW25hbWUsIGNvZGVdIG9mIE9iamVjdC5lbnRyaWVzKHRhYmxlKSkge1xuICBjb25zdGFudHNbbmFtZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLy0vZywgJ18nKV0gPSBjb2RlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZShjb25zdGFudHMpXG4iLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBtdWx0aWNvZGVjIHNwZWNpZmljYXRpb24uXG4gKlxuICogQG1vZHVsZSBtdWx0aWNvZGVjXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuICpcbiAqIGNvbnN0IHByZWZpeGVkUHJvdG9idWYgPSBtdWx0aWNvZGVjLmFkZFByZWZpeCgncHJvdG9idWYnLCBwcm90b2J1ZkJ1ZmZlcilcbiAqIC8vIHByZWZpeGVkUHJvdG9idWYgMHg1MC4uLlxuICpcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5jb25zdCBpbnRUYWJsZSA9IHJlcXVpcmUoJy4vaW50LXRhYmxlJylcbmNvbnN0IGNvZGVjTmFtZVRvQ29kZVZhcmludCA9IHJlcXVpcmUoJy4vdmFyaW50LXRhYmxlJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHNcblxuLyoqXG4gKiBQcmVmaXggYSBidWZmZXIgd2l0aCBhIG11bHRpY29kZWMtcGFja2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbXVsdGljb2RlY1N0ck9yQ29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuYWRkUHJlZml4ID0gKG11bHRpY29kZWNTdHJPckNvZGUsIGRhdGEpID0+IHtcbiAgbGV0IHByZWZpeFxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIobXVsdGljb2RlY1N0ck9yQ29kZSkpIHtcbiAgICBwcmVmaXggPSB1dGlsLnZhcmludEJ1ZmZlckVuY29kZShtdWx0aWNvZGVjU3RyT3JDb2RlKVxuICB9IGVsc2Uge1xuICAgIGlmIChjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV0pIHtcbiAgICAgIHByZWZpeCA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFttdWx0aWNvZGVjU3RyT3JDb2RlXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpY29kZWMgbm90IHJlY29nbml6ZWQnKVxuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbcHJlZml4LCBkYXRhXSlcbn1cblxuLyoqXG4gKiBEZWNhcHN1bGF0ZSB0aGUgbXVsdGljb2RlYy1wYWNrZWQgcHJlZml4IGZyb20gdGhlIGRhdGEuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMucm1QcmVmaXggPSAoZGF0YSkgPT4ge1xuICB2YXJpbnQuZGVjb2RlKGRhdGEpXG4gIHJldHVybiBkYXRhLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlYyBvZiB0aGUgcHJlZml4ZWQgZGF0YS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwcmVmaXhlZERhdGFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZWMgPSAocHJlZml4ZWREYXRhKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKHByZWZpeGVkRGF0YSlcbiAgY29uc3QgY29kZWNOYW1lID0gaW50VGFibGUuZ2V0KGNvZGUpXG4gIGlmIChjb2RlY05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29kZSAke2NvZGV9IG5vdCBmb3VuZGApXG4gIH1cbiAgcmV0dXJuIGNvZGVjTmFtZVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmFtZSBvZiB0aGUgY29kZWMuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZWNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZ2V0TmFtZSA9IChjb2RlYykgPT4ge1xuICByZXR1cm4gaW50VGFibGUuZ2V0KGNvZGVjKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZSBvZiB0aGUgY29kZWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmdldE51bWJlciA9IChuYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbmFtZV1cbiAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29kZWMgYCcgKyBuYW1lICsgJ2Agbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gdXRpbC52YXJpbnRCdWZmZXJEZWNvZGUoY29kZSlbMF1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmdldENvZGUgPSAocHJlZml4ZWREYXRhKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZGVjb2RlKHByZWZpeGVkRGF0YSlcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgYXMgdmFyaW50IG9mIGEgY29kZWMgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlY05hbWVcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZVZhcmludCA9IChjb2RlY05hbWUpID0+IHtcbiAgY29uc3QgY29kZSA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFtjb2RlY05hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgY29kZWNOYW1lICsgJ2Agbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFyaW50IG9mIGEgY29kZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gKi9cbmV4cG9ydHMuZ2V0VmFyaW50ID0gKGNvZGUpID0+IHtcbiAgcmV0dXJuIHZhcmludC5lbmNvZGUoY29kZSlcbn1cblxuLy8gTWFrZSB0aGUgY29uc3RhbnRzIHRvcC1sZXZlbCBjb25zdGFudHNcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbk9iamVjdC5hc3NpZ24oZXhwb3J0cywgY29uc3RhbnRzKVxuXG4vLyBIdW1hbiBmcmllbmRseSBuYW1lcyBmb3IgcHJpbnRpbmcsIGUuZy4gaW4gZXJyb3IgbWVzc2FnZXNcbmV4cG9ydHMucHJpbnQgPSByZXF1aXJlKCcuL3ByaW50JylcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgYmFzZVRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGhleFN0cmluZyAtPiBjb2RlY05hbWVcbmNvbnN0IG5hbWVUYWJsZSA9IG5ldyBNYXAoKVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIG5hbWVUYWJsZS5zZXQoY29kZSwgZW5jb2RpbmdOYW1lKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUobmFtZVRhYmxlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGUgLT4gcHJpbnQgZnJpZW5kbHkgbmFtZVxuY29uc3QgdGFibGVCeUNvZGUgPSB7fVxuXG5mb3IgKGNvbnN0IFtuYW1lLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyh0YWJsZSkpIHtcbiAgaWYgKHRhYmxlQnlDb2RlW2NvZGVdID09PSB1bmRlZmluZWQpIHRhYmxlQnlDb2RlW2NvZGVdID0gbmFtZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUodGFibGVCeUNvZGUpXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBudW1iZXJUb0J1ZmZlcixcbiAgYnVmZmVyVG9OdW1iZXIsXG4gIHZhcmludEJ1ZmZlckVuY29kZSxcbiAgdmFyaW50QnVmZmVyRGVjb2RlLFxuICB2YXJpbnRFbmNvZGVcbn1cblxuZnVuY3Rpb24gYnVmZmVyVG9OdW1iZXIgKGJ1Zikge1xuICByZXR1cm4gcGFyc2VJbnQoYnVmLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG59XG5cbmZ1bmN0aW9uIG51bWJlclRvQnVmZmVyIChudW0pIHtcbiAgbGV0IGhleFN0cmluZyA9IG51bS50b1N0cmluZygxNilcbiAgaWYgKGhleFN0cmluZy5sZW5ndGggJSAyID09PSAxKSB7XG4gICAgaGV4U3RyaW5nID0gJzAnICsgaGV4U3RyaW5nXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleFN0cmluZywgJ2hleCcpXG59XG5cbmZ1bmN0aW9uIHZhcmludEJ1ZmZlckVuY29kZSAoaW5wdXQpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmZmVyVG9OdW1iZXIoaW5wdXQpKSlcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRGVjb2RlIChpbnB1dCkge1xuICByZXR1cm4gbnVtYmVyVG9CdWZmZXIodmFyaW50LmRlY29kZShpbnB1dCkpXG59XG5cbmZ1bmN0aW9uIHZhcmludEVuY29kZSAobnVtKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKG51bSkpXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZVRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuY29uc3QgdmFyaW50RW5jb2RlID0gcmVxdWlyZSgnLi91dGlsJykudmFyaW50RW5jb2RlXG5cbi8vIG1hcCBmb3IgY29kZWNOYW1lIC0+IGNvZGVWYXJpbnRCdWZmZXJcbmNvbnN0IHZhcmludFRhYmxlID0ge31cblxuZm9yIChjb25zdCBlbmNvZGluZ05hbWUgaW4gYmFzZVRhYmxlKSB7XG4gIGNvbnN0IGNvZGUgPSBiYXNlVGFibGVbZW5jb2RpbmdOYW1lXVxuICB2YXJpbnRUYWJsZVtlbmNvZGluZ05hbWVdID0gdmFyaW50RW5jb2RlKGNvZGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh2YXJpbnRUYWJsZSlcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogb2ZmICovXG4vKiBlc2xpbnQga2V5LXNwYWNpbmc6IG9mZiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgJ2lkZW50aXR5JzogICAweDAsXG4gICdzaGExJzogICAgICAgMHgxMSxcbiAgJ3NoYTItMjU2JzogICAweDEyLFxuICAnc2hhMi01MTInOiAgIDB4MTMsXG4gICdkYmwtc2hhMi0yNTYnOiAweDU2LFxuICAnc2hhMy0yMjQnOiAgIDB4MTcsXG4gICdzaGEzLTI1Nic6ICAgMHgxNixcbiAgJ3NoYTMtMzg0JzogICAweDE1LFxuICAnc2hhMy01MTInOiAgIDB4MTQsXG4gICdzaGFrZS0xMjgnOiAgMHgxOCxcbiAgJ3NoYWtlLTI1Nic6ICAweDE5LFxuICAna2VjY2FrLTIyNCc6IDB4MUEsXG4gICdrZWNjYWstMjU2JzogMHgxQixcbiAgJ2tlY2Nhay0zODQnOiAweDFDLFxuICAna2VjY2FrLTUxMic6IDB4MUQsXG4gICdtdXJtdXIzLTEyOCc6IDB4MjIsXG4gICdtdXJtdXIzLTMyJzogIDB4MjMsXG4gICdibGFrZTJiLTgnOiAgIDB4YjIwMSxcbiAgJ2JsYWtlMmItMTYnOiAgMHhiMjAyLFxuICAnYmxha2UyYi0yNCc6ICAweGIyMDMsXG4gICdibGFrZTJiLTMyJzogIDB4YjIwNCxcbiAgJ2JsYWtlMmItNDAnOiAgMHhiMjA1LFxuICAnYmxha2UyYi00OCc6ICAweGIyMDYsXG4gICdibGFrZTJiLTU2JzogIDB4YjIwNyxcbiAgJ2JsYWtlMmItNjQnOiAgMHhiMjA4LFxuICAnYmxha2UyYi03Mic6ICAweGIyMDksXG4gICdibGFrZTJiLTgwJzogIDB4YjIwYSxcbiAgJ2JsYWtlMmItODgnOiAgMHhiMjBiLFxuICAnYmxha2UyYi05Nic6ICAweGIyMGMsXG4gICdibGFrZTJiLTEwNCc6IDB4YjIwZCxcbiAgJ2JsYWtlMmItMTEyJzogMHhiMjBlLFxuICAnYmxha2UyYi0xMjAnOiAweGIyMGYsXG4gICdibGFrZTJiLTEyOCc6IDB4YjIxMCxcbiAgJ2JsYWtlMmItMTM2JzogMHhiMjExLFxuICAnYmxha2UyYi0xNDQnOiAweGIyMTIsXG4gICdibGFrZTJiLTE1Mic6IDB4YjIxMyxcbiAgJ2JsYWtlMmItMTYwJzogMHhiMjE0LFxuICAnYmxha2UyYi0xNjgnOiAweGIyMTUsXG4gICdibGFrZTJiLTE3Nic6IDB4YjIxNixcbiAgJ2JsYWtlMmItMTg0JzogMHhiMjE3LFxuICAnYmxha2UyYi0xOTInOiAweGIyMTgsXG4gICdibGFrZTJiLTIwMCc6IDB4YjIxOSxcbiAgJ2JsYWtlMmItMjA4JzogMHhiMjFhLFxuICAnYmxha2UyYi0yMTYnOiAweGIyMWIsXG4gICdibGFrZTJiLTIyNCc6IDB4YjIxYyxcbiAgJ2JsYWtlMmItMjMyJzogMHhiMjFkLFxuICAnYmxha2UyYi0yNDAnOiAweGIyMWUsXG4gICdibGFrZTJiLTI0OCc6IDB4YjIxZixcbiAgJ2JsYWtlMmItMjU2JzogMHhiMjIwLFxuICAnYmxha2UyYi0yNjQnOiAweGIyMjEsXG4gICdibGFrZTJiLTI3Mic6IDB4YjIyMixcbiAgJ2JsYWtlMmItMjgwJzogMHhiMjIzLFxuICAnYmxha2UyYi0yODgnOiAweGIyMjQsXG4gICdibGFrZTJiLTI5Nic6IDB4YjIyNSxcbiAgJ2JsYWtlMmItMzA0JzogMHhiMjI2LFxuICAnYmxha2UyYi0zMTInOiAweGIyMjcsXG4gICdibGFrZTJiLTMyMCc6IDB4YjIyOCxcbiAgJ2JsYWtlMmItMzI4JzogMHhiMjI5LFxuICAnYmxha2UyYi0zMzYnOiAweGIyMmEsXG4gICdibGFrZTJiLTM0NCc6IDB4YjIyYixcbiAgJ2JsYWtlMmItMzUyJzogMHhiMjJjLFxuICAnYmxha2UyYi0zNjAnOiAweGIyMmQsXG4gICdibGFrZTJiLTM2OCc6IDB4YjIyZSxcbiAgJ2JsYWtlMmItMzc2JzogMHhiMjJmLFxuICAnYmxha2UyYi0zODQnOiAweGIyMzAsXG4gICdibGFrZTJiLTM5Mic6IDB4YjIzMSxcbiAgJ2JsYWtlMmItNDAwJzogMHhiMjMyLFxuICAnYmxha2UyYi00MDgnOiAweGIyMzMsXG4gICdibGFrZTJiLTQxNic6IDB4YjIzNCxcbiAgJ2JsYWtlMmItNDI0JzogMHhiMjM1LFxuICAnYmxha2UyYi00MzInOiAweGIyMzYsXG4gICdibGFrZTJiLTQ0MCc6IDB4YjIzNyxcbiAgJ2JsYWtlMmItNDQ4JzogMHhiMjM4LFxuICAnYmxha2UyYi00NTYnOiAweGIyMzksXG4gICdibGFrZTJiLTQ2NCc6IDB4YjIzYSxcbiAgJ2JsYWtlMmItNDcyJzogMHhiMjNiLFxuICAnYmxha2UyYi00ODAnOiAweGIyM2MsXG4gICdibGFrZTJiLTQ4OCc6IDB4YjIzZCxcbiAgJ2JsYWtlMmItNDk2JzogMHhiMjNlLFxuICAnYmxha2UyYi01MDQnOiAweGIyM2YsXG4gICdibGFrZTJiLTUxMic6IDB4YjI0MCxcbiAgJ2JsYWtlMnMtOCc6ICAgMHhiMjQxLFxuICAnYmxha2Uycy0xNic6ICAweGIyNDIsXG4gICdibGFrZTJzLTI0JzogIDB4YjI0MyxcbiAgJ2JsYWtlMnMtMzInOiAgMHhiMjQ0LFxuICAnYmxha2Uycy00MCc6ICAweGIyNDUsXG4gICdibGFrZTJzLTQ4JzogIDB4YjI0NixcbiAgJ2JsYWtlMnMtNTYnOiAgMHhiMjQ3LFxuICAnYmxha2Uycy02NCc6ICAweGIyNDgsXG4gICdibGFrZTJzLTcyJzogIDB4YjI0OSxcbiAgJ2JsYWtlMnMtODAnOiAgMHhiMjRhLFxuICAnYmxha2Uycy04OCc6ICAweGIyNGIsXG4gICdibGFrZTJzLTk2JzogIDB4YjI0YyxcbiAgJ2JsYWtlMnMtMTA0JzogMHhiMjRkLFxuICAnYmxha2Uycy0xMTInOiAweGIyNGUsXG4gICdibGFrZTJzLTEyMCc6IDB4YjI0ZixcbiAgJ2JsYWtlMnMtMTI4JzogMHhiMjUwLFxuICAnYmxha2Uycy0xMzYnOiAweGIyNTEsXG4gICdibGFrZTJzLTE0NCc6IDB4YjI1MixcbiAgJ2JsYWtlMnMtMTUyJzogMHhiMjUzLFxuICAnYmxha2Uycy0xNjAnOiAweGIyNTQsXG4gICdibGFrZTJzLTE2OCc6IDB4YjI1NSxcbiAgJ2JsYWtlMnMtMTc2JzogMHhiMjU2LFxuICAnYmxha2Uycy0xODQnOiAweGIyNTcsXG4gICdibGFrZTJzLTE5Mic6IDB4YjI1OCxcbiAgJ2JsYWtlMnMtMjAwJzogMHhiMjU5LFxuICAnYmxha2Uycy0yMDgnOiAweGIyNWEsXG4gICdibGFrZTJzLTIxNic6IDB4YjI1YixcbiAgJ2JsYWtlMnMtMjI0JzogMHhiMjVjLFxuICAnYmxha2Uycy0yMzInOiAweGIyNWQsXG4gICdibGFrZTJzLTI0MCc6IDB4YjI1ZSxcbiAgJ2JsYWtlMnMtMjQ4JzogMHhiMjVmLFxuICAnYmxha2Uycy0yNTYnOiAweGIyNjAsXG4gICdTa2VpbjI1Ni04JzogMHhiMzAxLFxuICAnU2tlaW4yNTYtMTYnOiAweGIzMDIsXG4gICdTa2VpbjI1Ni0yNCc6IDB4YjMwMyxcbiAgJ1NrZWluMjU2LTMyJzogMHhiMzA0LFxuICAnU2tlaW4yNTYtNDAnOiAweGIzMDUsXG4gICdTa2VpbjI1Ni00OCc6IDB4YjMwNixcbiAgJ1NrZWluMjU2LTU2JzogMHhiMzA3LFxuICAnU2tlaW4yNTYtNjQnOiAweGIzMDgsXG4gICdTa2VpbjI1Ni03Mic6IDB4YjMwOSxcbiAgJ1NrZWluMjU2LTgwJzogMHhiMzBhLFxuICAnU2tlaW4yNTYtODgnOiAweGIzMGIsXG4gICdTa2VpbjI1Ni05Nic6IDB4YjMwYyxcbiAgJ1NrZWluMjU2LTEwNCc6IDB4YjMwZCxcbiAgJ1NrZWluMjU2LTExMic6IDB4YjMwZSxcbiAgJ1NrZWluMjU2LTEyMCc6IDB4YjMwZixcbiAgJ1NrZWluMjU2LTEyOCc6IDB4YjMxMCxcbiAgJ1NrZWluMjU2LTEzNic6IDB4YjMxMSxcbiAgJ1NrZWluMjU2LTE0NCc6IDB4YjMxMixcbiAgJ1NrZWluMjU2LTE1Mic6IDB4YjMxMyxcbiAgJ1NrZWluMjU2LTE2MCc6IDB4YjMxNCxcbiAgJ1NrZWluMjU2LTE2OCc6IDB4YjMxNSxcbiAgJ1NrZWluMjU2LTE3Nic6IDB4YjMxNixcbiAgJ1NrZWluMjU2LTE4NCc6IDB4YjMxNyxcbiAgJ1NrZWluMjU2LTE5Mic6IDB4YjMxOCxcbiAgJ1NrZWluMjU2LTIwMCc6IDB4YjMxOSxcbiAgJ1NrZWluMjU2LTIwOCc6IDB4YjMxYSxcbiAgJ1NrZWluMjU2LTIxNic6IDB4YjMxYixcbiAgJ1NrZWluMjU2LTIyNCc6IDB4YjMxYyxcbiAgJ1NrZWluMjU2LTIzMic6IDB4YjMxZCxcbiAgJ1NrZWluMjU2LTI0MCc6IDB4YjMxZSxcbiAgJ1NrZWluMjU2LTI0OCc6IDB4YjMxZixcbiAgJ1NrZWluMjU2LTI1Nic6IDB4YjMyMCxcbiAgJ1NrZWluNTEyLTgnOiAweGIzMjEsXG4gICdTa2VpbjUxMi0xNic6IDB4YjMyMixcbiAgJ1NrZWluNTEyLTI0JzogMHhiMzIzLFxuICAnU2tlaW41MTItMzInOiAweGIzMjQsXG4gICdTa2VpbjUxMi00MCc6IDB4YjMyNSxcbiAgJ1NrZWluNTEyLTQ4JzogMHhiMzI2LFxuICAnU2tlaW41MTItNTYnOiAweGIzMjcsXG4gICdTa2VpbjUxMi02NCc6IDB4YjMyOCxcbiAgJ1NrZWluNTEyLTcyJzogMHhiMzI5LFxuICAnU2tlaW41MTItODAnOiAweGIzMmEsXG4gICdTa2VpbjUxMi04OCc6IDB4YjMyYixcbiAgJ1NrZWluNTEyLTk2JzogMHhiMzJjLFxuICAnU2tlaW41MTItMTA0JzogMHhiMzJkLFxuICAnU2tlaW41MTItMTEyJzogMHhiMzJlLFxuICAnU2tlaW41MTItMTIwJzogMHhiMzJmLFxuICAnU2tlaW41MTItMTI4JzogMHhiMzMwLFxuICAnU2tlaW41MTItMTM2JzogMHhiMzMxLFxuICAnU2tlaW41MTItMTQ0JzogMHhiMzMyLFxuICAnU2tlaW41MTItMTUyJzogMHhiMzMzLFxuICAnU2tlaW41MTItMTYwJzogMHhiMzM0LFxuICAnU2tlaW41MTItMTY4JzogMHhiMzM1LFxuICAnU2tlaW41MTItMTc2JzogMHhiMzM2LFxuICAnU2tlaW41MTItMTg0JzogMHhiMzM3LFxuICAnU2tlaW41MTItMTkyJzogMHhiMzM4LFxuICAnU2tlaW41MTItMjAwJzogMHhiMzM5LFxuICAnU2tlaW41MTItMjA4JzogMHhiMzNhLFxuICAnU2tlaW41MTItMjE2JzogMHhiMzNiLFxuICAnU2tlaW41MTItMjI0JzogMHhiMzNjLFxuICAnU2tlaW41MTItMjMyJzogMHhiMzNkLFxuICAnU2tlaW41MTItMjQwJzogMHhiMzNlLFxuICAnU2tlaW41MTItMjQ4JzogMHhiMzNmLFxuICAnU2tlaW41MTItMjU2JzogMHhiMzQwLFxuICAnU2tlaW41MTItMjY0JzogMHhiMzQxLFxuICAnU2tlaW41MTItMjcyJzogMHhiMzQyLFxuICAnU2tlaW41MTItMjgwJzogMHhiMzQzLFxuICAnU2tlaW41MTItMjg4JzogMHhiMzQ0LFxuICAnU2tlaW41MTItMjk2JzogMHhiMzQ1LFxuICAnU2tlaW41MTItMzA0JzogMHhiMzQ2LFxuICAnU2tlaW41MTItMzEyJzogMHhiMzQ3LFxuICAnU2tlaW41MTItMzIwJzogMHhiMzQ4LFxuICAnU2tlaW41MTItMzI4JzogMHhiMzQ5LFxuICAnU2tlaW41MTItMzM2JzogMHhiMzRhLFxuICAnU2tlaW41MTItMzQ0JzogMHhiMzRiLFxuICAnU2tlaW41MTItMzUyJzogMHhiMzRjLFxuICAnU2tlaW41MTItMzYwJzogMHhiMzRkLFxuICAnU2tlaW41MTItMzY4JzogMHhiMzRlLFxuICAnU2tlaW41MTItMzc2JzogMHhiMzRmLFxuICAnU2tlaW41MTItMzg0JzogMHhiMzUwLFxuICAnU2tlaW41MTItMzkyJzogMHhiMzUxLFxuICAnU2tlaW41MTItNDAwJzogMHhiMzUyLFxuICAnU2tlaW41MTItNDA4JzogMHhiMzUzLFxuICAnU2tlaW41MTItNDE2JzogMHhiMzU0LFxuICAnU2tlaW41MTItNDI0JzogMHhiMzU1LFxuICAnU2tlaW41MTItNDMyJzogMHhiMzU2LFxuICAnU2tlaW41MTItNDQwJzogMHhiMzU3LFxuICAnU2tlaW41MTItNDQ4JzogMHhiMzU4LFxuICAnU2tlaW41MTItNDU2JzogMHhiMzU5LFxuICAnU2tlaW41MTItNDY0JzogMHhiMzVhLFxuICAnU2tlaW41MTItNDcyJzogMHhiMzViLFxuICAnU2tlaW41MTItNDgwJzogMHhiMzVjLFxuICAnU2tlaW41MTItNDg4JzogMHhiMzVkLFxuICAnU2tlaW41MTItNDk2JzogMHhiMzVlLFxuICAnU2tlaW41MTItNTA0JzogMHhiMzVmLFxuICAnU2tlaW41MTItNTEyJzogMHhiMzYwLFxuICAnU2tlaW4xMDI0LTgnOiAweGIzNjEsXG4gICdTa2VpbjEwMjQtMTYnOiAweGIzNjIsXG4gICdTa2VpbjEwMjQtMjQnOiAweGIzNjMsXG4gICdTa2VpbjEwMjQtMzInOiAweGIzNjQsXG4gICdTa2VpbjEwMjQtNDAnOiAweGIzNjUsXG4gICdTa2VpbjEwMjQtNDgnOiAweGIzNjYsXG4gICdTa2VpbjEwMjQtNTYnOiAweGIzNjcsXG4gICdTa2VpbjEwMjQtNjQnOiAweGIzNjgsXG4gICdTa2VpbjEwMjQtNzInOiAweGIzNjksXG4gICdTa2VpbjEwMjQtODAnOiAweGIzNmEsXG4gICdTa2VpbjEwMjQtODgnOiAweGIzNmIsXG4gICdTa2VpbjEwMjQtOTYnOiAweGIzNmMsXG4gICdTa2VpbjEwMjQtMTA0JzogMHhiMzZkLFxuICAnU2tlaW4xMDI0LTExMic6IDB4YjM2ZSxcbiAgJ1NrZWluMTAyNC0xMjAnOiAweGIzNmYsXG4gICdTa2VpbjEwMjQtMTI4JzogMHhiMzcwLFxuICAnU2tlaW4xMDI0LTEzNic6IDB4YjM3MSxcbiAgJ1NrZWluMTAyNC0xNDQnOiAweGIzNzIsXG4gICdTa2VpbjEwMjQtMTUyJzogMHhiMzczLFxuICAnU2tlaW4xMDI0LTE2MCc6IDB4YjM3NCxcbiAgJ1NrZWluMTAyNC0xNjgnOiAweGIzNzUsXG4gICdTa2VpbjEwMjQtMTc2JzogMHhiMzc2LFxuICAnU2tlaW4xMDI0LTE4NCc6IDB4YjM3NyxcbiAgJ1NrZWluMTAyNC0xOTInOiAweGIzNzgsXG4gICdTa2VpbjEwMjQtMjAwJzogMHhiMzc5LFxuICAnU2tlaW4xMDI0LTIwOCc6IDB4YjM3YSxcbiAgJ1NrZWluMTAyNC0yMTYnOiAweGIzN2IsXG4gICdTa2VpbjEwMjQtMjI0JzogMHhiMzdjLFxuICAnU2tlaW4xMDI0LTIzMic6IDB4YjM3ZCxcbiAgJ1NrZWluMTAyNC0yNDAnOiAweGIzN2UsXG4gICdTa2VpbjEwMjQtMjQ4JzogMHhiMzdmLFxuICAnU2tlaW4xMDI0LTI1Nic6IDB4YjM4MCxcbiAgJ1NrZWluMTAyNC0yNjQnOiAweGIzODEsXG4gICdTa2VpbjEwMjQtMjcyJzogMHhiMzgyLFxuICAnU2tlaW4xMDI0LTI4MCc6IDB4YjM4MyxcbiAgJ1NrZWluMTAyNC0yODgnOiAweGIzODQsXG4gICdTa2VpbjEwMjQtMjk2JzogMHhiMzg1LFxuICAnU2tlaW4xMDI0LTMwNCc6IDB4YjM4NixcbiAgJ1NrZWluMTAyNC0zMTInOiAweGIzODcsXG4gICdTa2VpbjEwMjQtMzIwJzogMHhiMzg4LFxuICAnU2tlaW4xMDI0LTMyOCc6IDB4YjM4OSxcbiAgJ1NrZWluMTAyNC0zMzYnOiAweGIzOGEsXG4gICdTa2VpbjEwMjQtMzQ0JzogMHhiMzhiLFxuICAnU2tlaW4xMDI0LTM1Mic6IDB4YjM4YyxcbiAgJ1NrZWluMTAyNC0zNjAnOiAweGIzOGQsXG4gICdTa2VpbjEwMjQtMzY4JzogMHhiMzhlLFxuICAnU2tlaW4xMDI0LTM3Nic6IDB4YjM4ZixcbiAgJ1NrZWluMTAyNC0zODQnOiAweGIzOTAsXG4gICdTa2VpbjEwMjQtMzkyJzogMHhiMzkxLFxuICAnU2tlaW4xMDI0LTQwMCc6IDB4YjM5MixcbiAgJ1NrZWluMTAyNC00MDgnOiAweGIzOTMsXG4gICdTa2VpbjEwMjQtNDE2JzogMHhiMzk0LFxuICAnU2tlaW4xMDI0LTQyNCc6IDB4YjM5NSxcbiAgJ1NrZWluMTAyNC00MzInOiAweGIzOTYsXG4gICdTa2VpbjEwMjQtNDQwJzogMHhiMzk3LFxuICAnU2tlaW4xMDI0LTQ0OCc6IDB4YjM5OCxcbiAgJ1NrZWluMTAyNC00NTYnOiAweGIzOTksXG4gICdTa2VpbjEwMjQtNDY0JzogMHhiMzlhLFxuICAnU2tlaW4xMDI0LTQ3Mic6IDB4YjM5YixcbiAgJ1NrZWluMTAyNC00ODAnOiAweGIzOWMsXG4gICdTa2VpbjEwMjQtNDg4JzogMHhiMzlkLFxuICAnU2tlaW4xMDI0LTQ5Nic6IDB4YjM5ZSxcbiAgJ1NrZWluMTAyNC01MDQnOiAweGIzOWYsXG4gICdTa2VpbjEwMjQtNTEyJzogMHhiM2EwLFxuICAnU2tlaW4xMDI0LTUyMCc6IDB4YjNhMSxcbiAgJ1NrZWluMTAyNC01MjgnOiAweGIzYTIsXG4gICdTa2VpbjEwMjQtNTM2JzogMHhiM2EzLFxuICAnU2tlaW4xMDI0LTU0NCc6IDB4YjNhNCxcbiAgJ1NrZWluMTAyNC01NTInOiAweGIzYTUsXG4gICdTa2VpbjEwMjQtNTYwJzogMHhiM2E2LFxuICAnU2tlaW4xMDI0LTU2OCc6IDB4YjNhNyxcbiAgJ1NrZWluMTAyNC01NzYnOiAweGIzYTgsXG4gICdTa2VpbjEwMjQtNTg0JzogMHhiM2E5LFxuICAnU2tlaW4xMDI0LTU5Mic6IDB4YjNhYSxcbiAgJ1NrZWluMTAyNC02MDAnOiAweGIzYWIsXG4gICdTa2VpbjEwMjQtNjA4JzogMHhiM2FjLFxuICAnU2tlaW4xMDI0LTYxNic6IDB4YjNhZCxcbiAgJ1NrZWluMTAyNC02MjQnOiAweGIzYWUsXG4gICdTa2VpbjEwMjQtNjMyJzogMHhiM2FmLFxuICAnU2tlaW4xMDI0LTY0MCc6IDB4YjNiMCxcbiAgJ1NrZWluMTAyNC02NDgnOiAweGIzYjEsXG4gICdTa2VpbjEwMjQtNjU2JzogMHhiM2IyLFxuICAnU2tlaW4xMDI0LTY2NCc6IDB4YjNiMyxcbiAgJ1NrZWluMTAyNC02NzInOiAweGIzYjQsXG4gICdTa2VpbjEwMjQtNjgwJzogMHhiM2I1LFxuICAnU2tlaW4xMDI0LTY4OCc6IDB4YjNiNixcbiAgJ1NrZWluMTAyNC02OTYnOiAweGIzYjcsXG4gICdTa2VpbjEwMjQtNzA0JzogMHhiM2I4LFxuICAnU2tlaW4xMDI0LTcxMic6IDB4YjNiOSxcbiAgJ1NrZWluMTAyNC03MjAnOiAweGIzYmEsXG4gICdTa2VpbjEwMjQtNzI4JzogMHhiM2JiLFxuICAnU2tlaW4xMDI0LTczNic6IDB4YjNiYyxcbiAgJ1NrZWluMTAyNC03NDQnOiAweGIzYmQsXG4gICdTa2VpbjEwMjQtNzUyJzogMHhiM2JlLFxuICAnU2tlaW4xMDI0LTc2MCc6IDB4YjNiZixcbiAgJ1NrZWluMTAyNC03NjgnOiAweGIzYzAsXG4gICdTa2VpbjEwMjQtNzc2JzogMHhiM2MxLFxuICAnU2tlaW4xMDI0LTc4NCc6IDB4YjNjMixcbiAgJ1NrZWluMTAyNC03OTInOiAweGIzYzMsXG4gICdTa2VpbjEwMjQtODAwJzogMHhiM2M0LFxuICAnU2tlaW4xMDI0LTgwOCc6IDB4YjNjNSxcbiAgJ1NrZWluMTAyNC04MTYnOiAweGIzYzYsXG4gICdTa2VpbjEwMjQtODI0JzogMHhiM2M3LFxuICAnU2tlaW4xMDI0LTgzMic6IDB4YjNjOCxcbiAgJ1NrZWluMTAyNC04NDAnOiAweGIzYzksXG4gICdTa2VpbjEwMjQtODQ4JzogMHhiM2NhLFxuICAnU2tlaW4xMDI0LTg1Nic6IDB4YjNjYixcbiAgJ1NrZWluMTAyNC04NjQnOiAweGIzY2MsXG4gICdTa2VpbjEwMjQtODcyJzogMHhiM2NkLFxuICAnU2tlaW4xMDI0LTg4MCc6IDB4YjNjZSxcbiAgJ1NrZWluMTAyNC04ODgnOiAweGIzY2YsXG4gICdTa2VpbjEwMjQtODk2JzogMHhiM2QwLFxuICAnU2tlaW4xMDI0LTkwNCc6IDB4YjNkMSxcbiAgJ1NrZWluMTAyNC05MTInOiAweGIzZDIsXG4gICdTa2VpbjEwMjQtOTIwJzogMHhiM2QzLFxuICAnU2tlaW4xMDI0LTkyOCc6IDB4YjNkNCxcbiAgJ1NrZWluMTAyNC05MzYnOiAweGIzZDUsXG4gICdTa2VpbjEwMjQtOTQ0JzogMHhiM2Q2LFxuICAnU2tlaW4xMDI0LTk1Mic6IDB4YjNkNyxcbiAgJ1NrZWluMTAyNC05NjAnOiAweGIzZDgsXG4gICdTa2VpbjEwMjQtOTY4JzogMHhiM2Q5LFxuICAnU2tlaW4xMDI0LTk3Nic6IDB4YjNkYSxcbiAgJ1NrZWluMTAyNC05ODQnOiAweGIzZGIsXG4gICdTa2VpbjEwMjQtOTkyJzogMHhiM2RjLFxuICAnU2tlaW4xMDI0LTEwMDAnOiAweGIzZGQsXG4gICdTa2VpbjEwMjQtMTAwOCc6IDB4YjNkZSxcbiAgJ1NrZWluMTAyNC0xMDE2JzogMHhiM2RmLFxuICAnU2tlaW4xMDI0LTEwMjQnOiAweGIzZTBcbn0pXG5cbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgwOiAnaWRlbnRpdHknLFxuXG4gIC8vIHNoYSBmYW1pbHlcbiAgMHgxMTogJ3NoYTEnLFxuICAweDEyOiAnc2hhMi0yNTYnLFxuICAweDEzOiAnc2hhMi01MTInLFxuICAweDU2OiAnZGJsLXNoYTItMjU2JyxcbiAgMHgxNzogJ3NoYTMtMjI0JyxcbiAgMHgxNjogJ3NoYTMtMjU2JyxcbiAgMHgxNTogJ3NoYTMtMzg0JyxcbiAgMHgxNDogJ3NoYTMtNTEyJyxcbiAgMHgxODogJ3NoYWtlLTEyOCcsXG4gIDB4MTk6ICdzaGFrZS0yNTYnLFxuICAweDFBOiAna2VjY2FrLTIyNCcsXG4gIDB4MUI6ICdrZWNjYWstMjU2JyxcbiAgMHgxQzogJ2tlY2Nhay0zODQnLFxuICAweDFEOiAna2VjY2FrLTUxMicsXG5cbiAgMHgyMjogJ211cm11cjMtMTI4JyxcbiAgMHgyMzogJ211cm11cjMtMzInLFxuXG4gIC8vIGJsYWtlMlxuICAweGIyMDE6ICdibGFrZTJiLTgnLFxuICAweGIyMDI6ICdibGFrZTJiLTE2JyxcbiAgMHhiMjAzOiAnYmxha2UyYi0yNCcsXG4gIDB4YjIwNDogJ2JsYWtlMmItMzInLFxuICAweGIyMDU6ICdibGFrZTJiLTQwJyxcbiAgMHhiMjA2OiAnYmxha2UyYi00OCcsXG4gIDB4YjIwNzogJ2JsYWtlMmItNTYnLFxuICAweGIyMDg6ICdibGFrZTJiLTY0JyxcbiAgMHhiMjA5OiAnYmxha2UyYi03MicsXG4gIDB4YjIwYTogJ2JsYWtlMmItODAnLFxuICAweGIyMGI6ICdibGFrZTJiLTg4JyxcbiAgMHhiMjBjOiAnYmxha2UyYi05NicsXG4gIDB4YjIwZDogJ2JsYWtlMmItMTA0JyxcbiAgMHhiMjBlOiAnYmxha2UyYi0xMTInLFxuICAweGIyMGY6ICdibGFrZTJiLTEyMCcsXG4gIDB4YjIxMDogJ2JsYWtlMmItMTI4JyxcbiAgMHhiMjExOiAnYmxha2UyYi0xMzYnLFxuICAweGIyMTI6ICdibGFrZTJiLTE0NCcsXG4gIDB4YjIxMzogJ2JsYWtlMmItMTUyJyxcbiAgMHhiMjE0OiAnYmxha2UyYi0xNjAnLFxuICAweGIyMTU6ICdibGFrZTJiLTE2OCcsXG4gIDB4YjIxNjogJ2JsYWtlMmItMTc2JyxcbiAgMHhiMjE3OiAnYmxha2UyYi0xODQnLFxuICAweGIyMTg6ICdibGFrZTJiLTE5MicsXG4gIDB4YjIxOTogJ2JsYWtlMmItMjAwJyxcbiAgMHhiMjFhOiAnYmxha2UyYi0yMDgnLFxuICAweGIyMWI6ICdibGFrZTJiLTIxNicsXG4gIDB4YjIxYzogJ2JsYWtlMmItMjI0JyxcbiAgMHhiMjFkOiAnYmxha2UyYi0yMzInLFxuICAweGIyMWU6ICdibGFrZTJiLTI0MCcsXG4gIDB4YjIxZjogJ2JsYWtlMmItMjQ4JyxcbiAgMHhiMjIwOiAnYmxha2UyYi0yNTYnLFxuICAweGIyMjE6ICdibGFrZTJiLTI2NCcsXG4gIDB4YjIyMjogJ2JsYWtlMmItMjcyJyxcbiAgMHhiMjIzOiAnYmxha2UyYi0yODAnLFxuICAweGIyMjQ6ICdibGFrZTJiLTI4OCcsXG4gIDB4YjIyNTogJ2JsYWtlMmItMjk2JyxcbiAgMHhiMjI2OiAnYmxha2UyYi0zMDQnLFxuICAweGIyMjc6ICdibGFrZTJiLTMxMicsXG4gIDB4YjIyODogJ2JsYWtlMmItMzIwJyxcbiAgMHhiMjI5OiAnYmxha2UyYi0zMjgnLFxuICAweGIyMmE6ICdibGFrZTJiLTMzNicsXG4gIDB4YjIyYjogJ2JsYWtlMmItMzQ0JyxcbiAgMHhiMjJjOiAnYmxha2UyYi0zNTInLFxuICAweGIyMmQ6ICdibGFrZTJiLTM2MCcsXG4gIDB4YjIyZTogJ2JsYWtlMmItMzY4JyxcbiAgMHhiMjJmOiAnYmxha2UyYi0zNzYnLFxuICAweGIyMzA6ICdibGFrZTJiLTM4NCcsXG4gIDB4YjIzMTogJ2JsYWtlMmItMzkyJyxcbiAgMHhiMjMyOiAnYmxha2UyYi00MDAnLFxuICAweGIyMzM6ICdibGFrZTJiLTQwOCcsXG4gIDB4YjIzNDogJ2JsYWtlMmItNDE2JyxcbiAgMHhiMjM1OiAnYmxha2UyYi00MjQnLFxuICAweGIyMzY6ICdibGFrZTJiLTQzMicsXG4gIDB4YjIzNzogJ2JsYWtlMmItNDQwJyxcbiAgMHhiMjM4OiAnYmxha2UyYi00NDgnLFxuICAweGIyMzk6ICdibGFrZTJiLTQ1NicsXG4gIDB4YjIzYTogJ2JsYWtlMmItNDY0JyxcbiAgMHhiMjNiOiAnYmxha2UyYi00NzInLFxuICAweGIyM2M6ICdibGFrZTJiLTQ4MCcsXG4gIDB4YjIzZDogJ2JsYWtlMmItNDg4JyxcbiAgMHhiMjNlOiAnYmxha2UyYi00OTYnLFxuICAweGIyM2Y6ICdibGFrZTJiLTUwNCcsXG4gIDB4YjI0MDogJ2JsYWtlMmItNTEyJyxcbiAgMHhiMjQxOiAnYmxha2Uycy04JyxcbiAgMHhiMjQyOiAnYmxha2Uycy0xNicsXG4gIDB4YjI0MzogJ2JsYWtlMnMtMjQnLFxuICAweGIyNDQ6ICdibGFrZTJzLTMyJyxcbiAgMHhiMjQ1OiAnYmxha2Uycy00MCcsXG4gIDB4YjI0NjogJ2JsYWtlMnMtNDgnLFxuICAweGIyNDc6ICdibGFrZTJzLTU2JyxcbiAgMHhiMjQ4OiAnYmxha2Uycy02NCcsXG4gIDB4YjI0OTogJ2JsYWtlMnMtNzInLFxuICAweGIyNGE6ICdibGFrZTJzLTgwJyxcbiAgMHhiMjRiOiAnYmxha2Uycy04OCcsXG4gIDB4YjI0YzogJ2JsYWtlMnMtOTYnLFxuICAweGIyNGQ6ICdibGFrZTJzLTEwNCcsXG4gIDB4YjI0ZTogJ2JsYWtlMnMtMTEyJyxcbiAgMHhiMjRmOiAnYmxha2Uycy0xMjAnLFxuICAweGIyNTA6ICdibGFrZTJzLTEyOCcsXG4gIDB4YjI1MTogJ2JsYWtlMnMtMTM2JyxcbiAgMHhiMjUyOiAnYmxha2Uycy0xNDQnLFxuICAweGIyNTM6ICdibGFrZTJzLTE1MicsXG4gIDB4YjI1NDogJ2JsYWtlMnMtMTYwJyxcbiAgMHhiMjU1OiAnYmxha2Uycy0xNjgnLFxuICAweGIyNTY6ICdibGFrZTJzLTE3NicsXG4gIDB4YjI1NzogJ2JsYWtlMnMtMTg0JyxcbiAgMHhiMjU4OiAnYmxha2Uycy0xOTInLFxuICAweGIyNTk6ICdibGFrZTJzLTIwMCcsXG4gIDB4YjI1YTogJ2JsYWtlMnMtMjA4JyxcbiAgMHhiMjViOiAnYmxha2Uycy0yMTYnLFxuICAweGIyNWM6ICdibGFrZTJzLTIyNCcsXG4gIDB4YjI1ZDogJ2JsYWtlMnMtMjMyJyxcbiAgMHhiMjVlOiAnYmxha2Uycy0yNDAnLFxuICAweGIyNWY6ICdibGFrZTJzLTI0OCcsXG4gIDB4YjI2MDogJ2JsYWtlMnMtMjU2JyxcblxuICAvLyBza2VpblxuICAweGIzMDE6ICdTa2VpbjI1Ni04JyxcbiAgMHhiMzAyOiAnU2tlaW4yNTYtMTYnLFxuICAweGIzMDM6ICdTa2VpbjI1Ni0yNCcsXG4gIDB4YjMwNDogJ1NrZWluMjU2LTMyJyxcbiAgMHhiMzA1OiAnU2tlaW4yNTYtNDAnLFxuICAweGIzMDY6ICdTa2VpbjI1Ni00OCcsXG4gIDB4YjMwNzogJ1NrZWluMjU2LTU2JyxcbiAgMHhiMzA4OiAnU2tlaW4yNTYtNjQnLFxuICAweGIzMDk6ICdTa2VpbjI1Ni03MicsXG4gIDB4YjMwYTogJ1NrZWluMjU2LTgwJyxcbiAgMHhiMzBiOiAnU2tlaW4yNTYtODgnLFxuICAweGIzMGM6ICdTa2VpbjI1Ni05NicsXG4gIDB4YjMwZDogJ1NrZWluMjU2LTEwNCcsXG4gIDB4YjMwZTogJ1NrZWluMjU2LTExMicsXG4gIDB4YjMwZjogJ1NrZWluMjU2LTEyMCcsXG4gIDB4YjMxMDogJ1NrZWluMjU2LTEyOCcsXG4gIDB4YjMxMTogJ1NrZWluMjU2LTEzNicsXG4gIDB4YjMxMjogJ1NrZWluMjU2LTE0NCcsXG4gIDB4YjMxMzogJ1NrZWluMjU2LTE1MicsXG4gIDB4YjMxNDogJ1NrZWluMjU2LTE2MCcsXG4gIDB4YjMxNTogJ1NrZWluMjU2LTE2OCcsXG4gIDB4YjMxNjogJ1NrZWluMjU2LTE3NicsXG4gIDB4YjMxNzogJ1NrZWluMjU2LTE4NCcsXG4gIDB4YjMxODogJ1NrZWluMjU2LTE5MicsXG4gIDB4YjMxOTogJ1NrZWluMjU2LTIwMCcsXG4gIDB4YjMxYTogJ1NrZWluMjU2LTIwOCcsXG4gIDB4YjMxYjogJ1NrZWluMjU2LTIxNicsXG4gIDB4YjMxYzogJ1NrZWluMjU2LTIyNCcsXG4gIDB4YjMxZDogJ1NrZWluMjU2LTIzMicsXG4gIDB4YjMxZTogJ1NrZWluMjU2LTI0MCcsXG4gIDB4YjMxZjogJ1NrZWluMjU2LTI0OCcsXG4gIDB4YjMyMDogJ1NrZWluMjU2LTI1NicsXG4gIDB4YjMyMTogJ1NrZWluNTEyLTgnLFxuICAweGIzMjI6ICdTa2VpbjUxMi0xNicsXG4gIDB4YjMyMzogJ1NrZWluNTEyLTI0JyxcbiAgMHhiMzI0OiAnU2tlaW41MTItMzInLFxuICAweGIzMjU6ICdTa2VpbjUxMi00MCcsXG4gIDB4YjMyNjogJ1NrZWluNTEyLTQ4JyxcbiAgMHhiMzI3OiAnU2tlaW41MTItNTYnLFxuICAweGIzMjg6ICdTa2VpbjUxMi02NCcsXG4gIDB4YjMyOTogJ1NrZWluNTEyLTcyJyxcbiAgMHhiMzJhOiAnU2tlaW41MTItODAnLFxuICAweGIzMmI6ICdTa2VpbjUxMi04OCcsXG4gIDB4YjMyYzogJ1NrZWluNTEyLTk2JyxcbiAgMHhiMzJkOiAnU2tlaW41MTItMTA0JyxcbiAgMHhiMzJlOiAnU2tlaW41MTItMTEyJyxcbiAgMHhiMzJmOiAnU2tlaW41MTItMTIwJyxcbiAgMHhiMzMwOiAnU2tlaW41MTItMTI4JyxcbiAgMHhiMzMxOiAnU2tlaW41MTItMTM2JyxcbiAgMHhiMzMyOiAnU2tlaW41MTItMTQ0JyxcbiAgMHhiMzMzOiAnU2tlaW41MTItMTUyJyxcbiAgMHhiMzM0OiAnU2tlaW41MTItMTYwJyxcbiAgMHhiMzM1OiAnU2tlaW41MTItMTY4JyxcbiAgMHhiMzM2OiAnU2tlaW41MTItMTc2JyxcbiAgMHhiMzM3OiAnU2tlaW41MTItMTg0JyxcbiAgMHhiMzM4OiAnU2tlaW41MTItMTkyJyxcbiAgMHhiMzM5OiAnU2tlaW41MTItMjAwJyxcbiAgMHhiMzNhOiAnU2tlaW41MTItMjA4JyxcbiAgMHhiMzNiOiAnU2tlaW41MTItMjE2JyxcbiAgMHhiMzNjOiAnU2tlaW41MTItMjI0JyxcbiAgMHhiMzNkOiAnU2tlaW41MTItMjMyJyxcbiAgMHhiMzNlOiAnU2tlaW41MTItMjQwJyxcbiAgMHhiMzNmOiAnU2tlaW41MTItMjQ4JyxcbiAgMHhiMzQwOiAnU2tlaW41MTItMjU2JyxcbiAgMHhiMzQxOiAnU2tlaW41MTItMjY0JyxcbiAgMHhiMzQyOiAnU2tlaW41MTItMjcyJyxcbiAgMHhiMzQzOiAnU2tlaW41MTItMjgwJyxcbiAgMHhiMzQ0OiAnU2tlaW41MTItMjg4JyxcbiAgMHhiMzQ1OiAnU2tlaW41MTItMjk2JyxcbiAgMHhiMzQ2OiAnU2tlaW41MTItMzA0JyxcbiAgMHhiMzQ3OiAnU2tlaW41MTItMzEyJyxcbiAgMHhiMzQ4OiAnU2tlaW41MTItMzIwJyxcbiAgMHhiMzQ5OiAnU2tlaW41MTItMzI4JyxcbiAgMHhiMzRhOiAnU2tlaW41MTItMzM2JyxcbiAgMHhiMzRiOiAnU2tlaW41MTItMzQ0JyxcbiAgMHhiMzRjOiAnU2tlaW41MTItMzUyJyxcbiAgMHhiMzRkOiAnU2tlaW41MTItMzYwJyxcbiAgMHhiMzRlOiAnU2tlaW41MTItMzY4JyxcbiAgMHhiMzRmOiAnU2tlaW41MTItMzc2JyxcbiAgMHhiMzUwOiAnU2tlaW41MTItMzg0JyxcbiAgMHhiMzUxOiAnU2tlaW41MTItMzkyJyxcbiAgMHhiMzUyOiAnU2tlaW41MTItNDAwJyxcbiAgMHhiMzUzOiAnU2tlaW41MTItNDA4JyxcbiAgMHhiMzU0OiAnU2tlaW41MTItNDE2JyxcbiAgMHhiMzU1OiAnU2tlaW41MTItNDI0JyxcbiAgMHhiMzU2OiAnU2tlaW41MTItNDMyJyxcbiAgMHhiMzU3OiAnU2tlaW41MTItNDQwJyxcbiAgMHhiMzU4OiAnU2tlaW41MTItNDQ4JyxcbiAgMHhiMzU5OiAnU2tlaW41MTItNDU2JyxcbiAgMHhiMzVhOiAnU2tlaW41MTItNDY0JyxcbiAgMHhiMzViOiAnU2tlaW41MTItNDcyJyxcbiAgMHhiMzVjOiAnU2tlaW41MTItNDgwJyxcbiAgMHhiMzVkOiAnU2tlaW41MTItNDg4JyxcbiAgMHhiMzVlOiAnU2tlaW41MTItNDk2JyxcbiAgMHhiMzVmOiAnU2tlaW41MTItNTA0JyxcbiAgMHhiMzYwOiAnU2tlaW41MTItNTEyJyxcbiAgMHhiMzYxOiAnU2tlaW4xMDI0LTgnLFxuICAweGIzNjI6ICdTa2VpbjEwMjQtMTYnLFxuICAweGIzNjM6ICdTa2VpbjEwMjQtMjQnLFxuICAweGIzNjQ6ICdTa2VpbjEwMjQtMzInLFxuICAweGIzNjU6ICdTa2VpbjEwMjQtNDAnLFxuICAweGIzNjY6ICdTa2VpbjEwMjQtNDgnLFxuICAweGIzNjc6ICdTa2VpbjEwMjQtNTYnLFxuICAweGIzNjg6ICdTa2VpbjEwMjQtNjQnLFxuICAweGIzNjk6ICdTa2VpbjEwMjQtNzInLFxuICAweGIzNmE6ICdTa2VpbjEwMjQtODAnLFxuICAweGIzNmI6ICdTa2VpbjEwMjQtODgnLFxuICAweGIzNmM6ICdTa2VpbjEwMjQtOTYnLFxuICAweGIzNmQ6ICdTa2VpbjEwMjQtMTA0JyxcbiAgMHhiMzZlOiAnU2tlaW4xMDI0LTExMicsXG4gIDB4YjM2ZjogJ1NrZWluMTAyNC0xMjAnLFxuICAweGIzNzA6ICdTa2VpbjEwMjQtMTI4JyxcbiAgMHhiMzcxOiAnU2tlaW4xMDI0LTEzNicsXG4gIDB4YjM3MjogJ1NrZWluMTAyNC0xNDQnLFxuICAweGIzNzM6ICdTa2VpbjEwMjQtMTUyJyxcbiAgMHhiMzc0OiAnU2tlaW4xMDI0LTE2MCcsXG4gIDB4YjM3NTogJ1NrZWluMTAyNC0xNjgnLFxuICAweGIzNzY6ICdTa2VpbjEwMjQtMTc2JyxcbiAgMHhiMzc3OiAnU2tlaW4xMDI0LTE4NCcsXG4gIDB4YjM3ODogJ1NrZWluMTAyNC0xOTInLFxuICAweGIzNzk6ICdTa2VpbjEwMjQtMjAwJyxcbiAgMHhiMzdhOiAnU2tlaW4xMDI0LTIwOCcsXG4gIDB4YjM3YjogJ1NrZWluMTAyNC0yMTYnLFxuICAweGIzN2M6ICdTa2VpbjEwMjQtMjI0JyxcbiAgMHhiMzdkOiAnU2tlaW4xMDI0LTIzMicsXG4gIDB4YjM3ZTogJ1NrZWluMTAyNC0yNDAnLFxuICAweGIzN2Y6ICdTa2VpbjEwMjQtMjQ4JyxcbiAgMHhiMzgwOiAnU2tlaW4xMDI0LTI1NicsXG4gIDB4YjM4MTogJ1NrZWluMTAyNC0yNjQnLFxuICAweGIzODI6ICdTa2VpbjEwMjQtMjcyJyxcbiAgMHhiMzgzOiAnU2tlaW4xMDI0LTI4MCcsXG4gIDB4YjM4NDogJ1NrZWluMTAyNC0yODgnLFxuICAweGIzODU6ICdTa2VpbjEwMjQtMjk2JyxcbiAgMHhiMzg2OiAnU2tlaW4xMDI0LTMwNCcsXG4gIDB4YjM4NzogJ1NrZWluMTAyNC0zMTInLFxuICAweGIzODg6ICdTa2VpbjEwMjQtMzIwJyxcbiAgMHhiMzg5OiAnU2tlaW4xMDI0LTMyOCcsXG4gIDB4YjM4YTogJ1NrZWluMTAyNC0zMzYnLFxuICAweGIzOGI6ICdTa2VpbjEwMjQtMzQ0JyxcbiAgMHhiMzhjOiAnU2tlaW4xMDI0LTM1MicsXG4gIDB4YjM4ZDogJ1NrZWluMTAyNC0zNjAnLFxuICAweGIzOGU6ICdTa2VpbjEwMjQtMzY4JyxcbiAgMHhiMzhmOiAnU2tlaW4xMDI0LTM3NicsXG4gIDB4YjM5MDogJ1NrZWluMTAyNC0zODQnLFxuICAweGIzOTE6ICdTa2VpbjEwMjQtMzkyJyxcbiAgMHhiMzkyOiAnU2tlaW4xMDI0LTQwMCcsXG4gIDB4YjM5MzogJ1NrZWluMTAyNC00MDgnLFxuICAweGIzOTQ6ICdTa2VpbjEwMjQtNDE2JyxcbiAgMHhiMzk1OiAnU2tlaW4xMDI0LTQyNCcsXG4gIDB4YjM5NjogJ1NrZWluMTAyNC00MzInLFxuICAweGIzOTc6ICdTa2VpbjEwMjQtNDQwJyxcbiAgMHhiMzk4OiAnU2tlaW4xMDI0LTQ0OCcsXG4gIDB4YjM5OTogJ1NrZWluMTAyNC00NTYnLFxuICAweGIzOWE6ICdTa2VpbjEwMjQtNDY0JyxcbiAgMHhiMzliOiAnU2tlaW4xMDI0LTQ3MicsXG4gIDB4YjM5YzogJ1NrZWluMTAyNC00ODAnLFxuICAweGIzOWQ6ICdTa2VpbjEwMjQtNDg4JyxcbiAgMHhiMzllOiAnU2tlaW4xMDI0LTQ5NicsXG4gIDB4YjM5ZjogJ1NrZWluMTAyNC01MDQnLFxuICAweGIzYTA6ICdTa2VpbjEwMjQtNTEyJyxcbiAgMHhiM2ExOiAnU2tlaW4xMDI0LTUyMCcsXG4gIDB4YjNhMjogJ1NrZWluMTAyNC01MjgnLFxuICAweGIzYTM6ICdTa2VpbjEwMjQtNTM2JyxcbiAgMHhiM2E0OiAnU2tlaW4xMDI0LTU0NCcsXG4gIDB4YjNhNTogJ1NrZWluMTAyNC01NTInLFxuICAweGIzYTY6ICdTa2VpbjEwMjQtNTYwJyxcbiAgMHhiM2E3OiAnU2tlaW4xMDI0LTU2OCcsXG4gIDB4YjNhODogJ1NrZWluMTAyNC01NzYnLFxuICAweGIzYTk6ICdTa2VpbjEwMjQtNTg0JyxcbiAgMHhiM2FhOiAnU2tlaW4xMDI0LTU5MicsXG4gIDB4YjNhYjogJ1NrZWluMTAyNC02MDAnLFxuICAweGIzYWM6ICdTa2VpbjEwMjQtNjA4JyxcbiAgMHhiM2FkOiAnU2tlaW4xMDI0LTYxNicsXG4gIDB4YjNhZTogJ1NrZWluMTAyNC02MjQnLFxuICAweGIzYWY6ICdTa2VpbjEwMjQtNjMyJyxcbiAgMHhiM2IwOiAnU2tlaW4xMDI0LTY0MCcsXG4gIDB4YjNiMTogJ1NrZWluMTAyNC02NDgnLFxuICAweGIzYjI6ICdTa2VpbjEwMjQtNjU2JyxcbiAgMHhiM2IzOiAnU2tlaW4xMDI0LTY2NCcsXG4gIDB4YjNiNDogJ1NrZWluMTAyNC02NzInLFxuICAweGIzYjU6ICdTa2VpbjEwMjQtNjgwJyxcbiAgMHhiM2I2OiAnU2tlaW4xMDI0LTY4OCcsXG4gIDB4YjNiNzogJ1NrZWluMTAyNC02OTYnLFxuICAweGIzYjg6ICdTa2VpbjEwMjQtNzA0JyxcbiAgMHhiM2I5OiAnU2tlaW4xMDI0LTcxMicsXG4gIDB4YjNiYTogJ1NrZWluMTAyNC03MjAnLFxuICAweGIzYmI6ICdTa2VpbjEwMjQtNzI4JyxcbiAgMHhiM2JjOiAnU2tlaW4xMDI0LTczNicsXG4gIDB4YjNiZDogJ1NrZWluMTAyNC03NDQnLFxuICAweGIzYmU6ICdTa2VpbjEwMjQtNzUyJyxcbiAgMHhiM2JmOiAnU2tlaW4xMDI0LTc2MCcsXG4gIDB4YjNjMDogJ1NrZWluMTAyNC03NjgnLFxuICAweGIzYzE6ICdTa2VpbjEwMjQtNzc2JyxcbiAgMHhiM2MyOiAnU2tlaW4xMDI0LTc4NCcsXG4gIDB4YjNjMzogJ1NrZWluMTAyNC03OTInLFxuICAweGIzYzQ6ICdTa2VpbjEwMjQtODAwJyxcbiAgMHhiM2M1OiAnU2tlaW4xMDI0LTgwOCcsXG4gIDB4YjNjNjogJ1NrZWluMTAyNC04MTYnLFxuICAweGIzYzc6ICdTa2VpbjEwMjQtODI0JyxcbiAgMHhiM2M4OiAnU2tlaW4xMDI0LTgzMicsXG4gIDB4YjNjOTogJ1NrZWluMTAyNC04NDAnLFxuICAweGIzY2E6ICdTa2VpbjEwMjQtODQ4JyxcbiAgMHhiM2NiOiAnU2tlaW4xMDI0LTg1NicsXG4gIDB4YjNjYzogJ1NrZWluMTAyNC04NjQnLFxuICAweGIzY2Q6ICdTa2VpbjEwMjQtODcyJyxcbiAgMHhiM2NlOiAnU2tlaW4xMDI0LTg4MCcsXG4gIDB4YjNjZjogJ1NrZWluMTAyNC04ODgnLFxuICAweGIzZDA6ICdTa2VpbjEwMjQtODk2JyxcbiAgMHhiM2QxOiAnU2tlaW4xMDI0LTkwNCcsXG4gIDB4YjNkMjogJ1NrZWluMTAyNC05MTInLFxuICAweGIzZDM6ICdTa2VpbjEwMjQtOTIwJyxcbiAgMHhiM2Q0OiAnU2tlaW4xMDI0LTkyOCcsXG4gIDB4YjNkNTogJ1NrZWluMTAyNC05MzYnLFxuICAweGIzZDY6ICdTa2VpbjEwMjQtOTQ0JyxcbiAgMHhiM2Q3OiAnU2tlaW4xMDI0LTk1MicsXG4gIDB4YjNkODogJ1NrZWluMTAyNC05NjAnLFxuICAweGIzZDk6ICdTa2VpbjEwMjQtOTY4JyxcbiAgMHhiM2RhOiAnU2tlaW4xMDI0LTk3NicsXG4gIDB4YjNkYjogJ1NrZWluMTAyNC05ODQnLFxuICAweGIzZGM6ICdTa2VpbjEwMjQtOTkyJyxcbiAgMHhiM2RkOiAnU2tlaW4xMDI0LTEwMDAnLFxuICAweGIzZGU6ICdTa2VpbjEwMjQtMTAwOCcsXG4gIDB4YjNkZjogJ1NrZWluMTAyNC0xMDE2JyxcbiAgMHhiM2UwOiAnU2tlaW4xMDI0LTEwMjQnXG59KVxuXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIDB4MTE6IDIwLFxuICAweDEyOiAzMixcbiAgMHgxMzogNjQsXG4gIDB4NTY6IDMyLFxuICAweDE3OiAyOCxcbiAgMHgxNjogMzIsXG4gIDB4MTU6IDQ4LFxuICAweDE0OiA2NCxcbiAgMHgxODogMzIsXG4gIDB4MTk6IDY0LFxuICAweDFBOiAyOCxcbiAgMHgxQjogMzIsXG4gIDB4MUM6IDQ4LFxuICAweDFEOiA2NCxcbiAgMHgyMjogMzIsXG5cbiAgMHhiMjAxOiAweDAxLFxuICAweGIyMDI6IDB4MDIsXG4gIDB4YjIwMzogMHgwMyxcbiAgMHhiMjA0OiAweDA0LFxuICAweGIyMDU6IDB4MDUsXG4gIDB4YjIwNjogMHgwNixcbiAgMHhiMjA3OiAweDA3LFxuICAweGIyMDg6IDB4MDgsXG4gIDB4YjIwOTogMHgwOSxcbiAgMHhiMjBhOiAweDBhLFxuICAweGIyMGI6IDB4MGIsXG4gIDB4YjIwYzogMHgwYyxcbiAgMHhiMjBkOiAweDBkLFxuICAweGIyMGU6IDB4MGUsXG4gIDB4YjIwZjogMHgwZixcbiAgMHhiMjEwOiAweDEwLFxuICAweGIyMTE6IDB4MTEsXG4gIDB4YjIxMjogMHgxMixcbiAgMHhiMjEzOiAweDEzLFxuICAweGIyMTQ6IDB4MTQsXG4gIDB4YjIxNTogMHgxNSxcbiAgMHhiMjE2OiAweDE2LFxuICAweGIyMTc6IDB4MTcsXG4gIDB4YjIxODogMHgxOCxcbiAgMHhiMjE5OiAweDE5LFxuICAweGIyMWE6IDB4MWEsXG4gIDB4YjIxYjogMHgxYixcbiAgMHhiMjFjOiAweDFjLFxuICAweGIyMWQ6IDB4MWQsXG4gIDB4YjIxZTogMHgxZSxcbiAgMHhiMjFmOiAweDFmLFxuICAweGIyMjA6IDB4MjAsXG4gIDB4YjIyMTogMHgyMSxcbiAgMHhiMjIyOiAweDIyLFxuICAweGIyMjM6IDB4MjMsXG4gIDB4YjIyNDogMHgyNCxcbiAgMHhiMjI1OiAweDI1LFxuICAweGIyMjY6IDB4MjYsXG4gIDB4YjIyNzogMHgyNyxcbiAgMHhiMjI4OiAweDI4LFxuICAweGIyMjk6IDB4MjksXG4gIDB4YjIyYTogMHgyYSxcbiAgMHhiMjJiOiAweDJiLFxuICAweGIyMmM6IDB4MmMsXG4gIDB4YjIyZDogMHgyZCxcbiAgMHhiMjJlOiAweDJlLFxuICAweGIyMmY6IDB4MmYsXG4gIDB4YjIzMDogMHgzMCxcbiAgMHhiMjMxOiAweDMxLFxuICAweGIyMzI6IDB4MzIsXG4gIDB4YjIzMzogMHgzMyxcbiAgMHhiMjM0OiAweDM0LFxuICAweGIyMzU6IDB4MzUsXG4gIDB4YjIzNjogMHgzNixcbiAgMHhiMjM3OiAweDM3LFxuICAweGIyMzg6IDB4MzgsXG4gIDB4YjIzOTogMHgzOSxcbiAgMHhiMjNhOiAweDNhLFxuICAweGIyM2I6IDB4M2IsXG4gIDB4YjIzYzogMHgzYyxcbiAgMHhiMjNkOiAweDNkLFxuICAweGIyM2U6IDB4M2UsXG4gIDB4YjIzZjogMHgzZixcbiAgMHhiMjQwOiAweDQwLFxuICAweGIyNDE6IDB4MDEsXG4gIDB4YjI0MjogMHgwMixcbiAgMHhiMjQzOiAweDAzLFxuICAweGIyNDQ6IDB4MDQsXG4gIDB4YjI0NTogMHgwNSxcbiAgMHhiMjQ2OiAweDA2LFxuICAweGIyNDc6IDB4MDcsXG4gIDB4YjI0ODogMHgwOCxcbiAgMHhiMjQ5OiAweDA5LFxuICAweGIyNGE6IDB4MGEsXG4gIDB4YjI0YjogMHgwYixcbiAgMHhiMjRjOiAweDBjLFxuICAweGIyNGQ6IDB4MGQsXG4gIDB4YjI0ZTogMHgwZSxcbiAgMHhiMjRmOiAweDBmLFxuICAweGIyNTA6IDB4MTAsXG4gIDB4YjI1MTogMHgxMSxcbiAgMHhiMjUyOiAweDEyLFxuICAweGIyNTM6IDB4MTMsXG4gIDB4YjI1NDogMHgxNCxcbiAgMHhiMjU1OiAweDE1LFxuICAweGIyNTY6IDB4MTYsXG4gIDB4YjI1NzogMHgxNyxcbiAgMHhiMjU4OiAweDE4LFxuICAweGIyNTk6IDB4MTksXG4gIDB4YjI1YTogMHgxYSxcbiAgMHhiMjViOiAweDFiLFxuICAweGIyNWM6IDB4MWMsXG4gIDB4YjI1ZDogMHgxZCxcbiAgMHhiMjVlOiAweDFlLFxuICAweGIyNWY6IDB4MWYsXG4gIDB4YjI2MDogMHgyMCxcbiAgMHhiMzAxOiAweDAxLFxuICAweGIzMDI6IDB4MDIsXG4gIDB4YjMwMzogMHgwMyxcbiAgMHhiMzA0OiAweDA0LFxuICAweGIzMDU6IDB4MDUsXG4gIDB4YjMwNjogMHgwNixcbiAgMHhiMzA3OiAweDA3LFxuICAweGIzMDg6IDB4MDgsXG4gIDB4YjMwOTogMHgwOSxcbiAgMHhiMzBhOiAweDBhLFxuICAweGIzMGI6IDB4MGIsXG4gIDB4YjMwYzogMHgwYyxcbiAgMHhiMzBkOiAweDBkLFxuICAweGIzMGU6IDB4MGUsXG4gIDB4YjMwZjogMHgwZixcbiAgMHhiMzEwOiAweDEwLFxuICAweGIzMTE6IDB4MTEsXG4gIDB4YjMxMjogMHgxMixcbiAgMHhiMzEzOiAweDEzLFxuICAweGIzMTQ6IDB4MTQsXG4gIDB4YjMxNTogMHgxNSxcbiAgMHhiMzE2OiAweDE2LFxuICAweGIzMTc6IDB4MTcsXG4gIDB4YjMxODogMHgxOCxcbiAgMHhiMzE5OiAweDE5LFxuICAweGIzMWE6IDB4MWEsXG4gIDB4YjMxYjogMHgxYixcbiAgMHhiMzFjOiAweDFjLFxuICAweGIzMWQ6IDB4MWQsXG4gIDB4YjMxZTogMHgxZSxcbiAgMHhiMzFmOiAweDFmLFxuICAweGIzMjA6IDB4MjAsXG4gIDB4YjMyMTogMHgwMSxcbiAgMHhiMzIyOiAweDAyLFxuICAweGIzMjM6IDB4MDMsXG4gIDB4YjMyNDogMHgwNCxcbiAgMHhiMzI1OiAweDA1LFxuICAweGIzMjY6IDB4MDYsXG4gIDB4YjMyNzogMHgwNyxcbiAgMHhiMzI4OiAweDA4LFxuICAweGIzMjk6IDB4MDksXG4gIDB4YjMyYTogMHgwYSxcbiAgMHhiMzJiOiAweDBiLFxuICAweGIzMmM6IDB4MGMsXG4gIDB4YjMyZDogMHgwZCxcbiAgMHhiMzJlOiAweDBlLFxuICAweGIzMmY6IDB4MGYsXG4gIDB4YjMzMDogMHgxMCxcbiAgMHhiMzMxOiAweDExLFxuICAweGIzMzI6IDB4MTIsXG4gIDB4YjMzMzogMHgxMyxcbiAgMHhiMzM0OiAweDE0LFxuICAweGIzMzU6IDB4MTUsXG4gIDB4YjMzNjogMHgxNixcbiAgMHhiMzM3OiAweDE3LFxuICAweGIzMzg6IDB4MTgsXG4gIDB4YjMzOTogMHgxOSxcbiAgMHhiMzNhOiAweDFhLFxuICAweGIzM2I6IDB4MWIsXG4gIDB4YjMzYzogMHgxYyxcbiAgMHhiMzNkOiAweDFkLFxuICAweGIzM2U6IDB4MWUsXG4gIDB4YjMzZjogMHgxZixcbiAgMHhiMzQwOiAweDIwLFxuICAweGIzNDE6IDB4MjEsXG4gIDB4YjM0MjogMHgyMixcbiAgMHhiMzQzOiAweDIzLFxuICAweGIzNDQ6IDB4MjQsXG4gIDB4YjM0NTogMHgyNSxcbiAgMHhiMzQ2OiAweDI2LFxuICAweGIzNDc6IDB4MjcsXG4gIDB4YjM0ODogMHgyOCxcbiAgMHhiMzQ5OiAweDI5LFxuICAweGIzNGE6IDB4MmEsXG4gIDB4YjM0YjogMHgyYixcbiAgMHhiMzRjOiAweDJjLFxuICAweGIzNGQ6IDB4MmQsXG4gIDB4YjM0ZTogMHgyZSxcbiAgMHhiMzRmOiAweDJmLFxuICAweGIzNTA6IDB4MzAsXG4gIDB4YjM1MTogMHgzMSxcbiAgMHhiMzUyOiAweDMyLFxuICAweGIzNTM6IDB4MzMsXG4gIDB4YjM1NDogMHgzNCxcbiAgMHhiMzU1OiAweDM1LFxuICAweGIzNTY6IDB4MzYsXG4gIDB4YjM1NzogMHgzNyxcbiAgMHhiMzU4OiAweDM4LFxuICAweGIzNTk6IDB4MzksXG4gIDB4YjM1YTogMHgzYSxcbiAgMHhiMzViOiAweDNiLFxuICAweGIzNWM6IDB4M2MsXG4gIDB4YjM1ZDogMHgzZCxcbiAgMHhiMzVlOiAweDNlLFxuICAweGIzNWY6IDB4M2YsXG4gIDB4YjM2MDogMHg0MCxcbiAgMHhiMzYxOiAweDAxLFxuICAweGIzNjI6IDB4MDIsXG4gIDB4YjM2MzogMHgwMyxcbiAgMHhiMzY0OiAweDA0LFxuICAweGIzNjU6IDB4MDUsXG4gIDB4YjM2NjogMHgwNixcbiAgMHhiMzY3OiAweDA3LFxuICAweGIzNjg6IDB4MDgsXG4gIDB4YjM2OTogMHgwOSxcbiAgMHhiMzZhOiAweDBhLFxuICAweGIzNmI6IDB4MGIsXG4gIDB4YjM2YzogMHgwYyxcbiAgMHhiMzZkOiAweDBkLFxuICAweGIzNmU6IDB4MGUsXG4gIDB4YjM2ZjogMHgwZixcbiAgMHhiMzcwOiAweDEwLFxuICAweGIzNzE6IDB4MTEsXG4gIDB4YjM3MjogMHgxMixcbiAgMHhiMzczOiAweDEzLFxuICAweGIzNzQ6IDB4MTQsXG4gIDB4YjM3NTogMHgxNSxcbiAgMHhiMzc2OiAweDE2LFxuICAweGIzNzc6IDB4MTcsXG4gIDB4YjM3ODogMHgxOCxcbiAgMHhiMzc5OiAweDE5LFxuICAweGIzN2E6IDB4MWEsXG4gIDB4YjM3YjogMHgxYixcbiAgMHhiMzdjOiAweDFjLFxuICAweGIzN2Q6IDB4MWQsXG4gIDB4YjM3ZTogMHgxZSxcbiAgMHhiMzdmOiAweDFmLFxuICAweGIzODA6IDB4MjAsXG4gIDB4YjM4MTogMHgyMSxcbiAgMHhiMzgyOiAweDIyLFxuICAweGIzODM6IDB4MjMsXG4gIDB4YjM4NDogMHgyNCxcbiAgMHhiMzg1OiAweDI1LFxuICAweGIzODY6IDB4MjYsXG4gIDB4YjM4NzogMHgyNyxcbiAgMHhiMzg4OiAweDI4LFxuICAweGIzODk6IDB4MjksXG4gIDB4YjM4YTogMHgyYSxcbiAgMHhiMzhiOiAweDJiLFxuICAweGIzOGM6IDB4MmMsXG4gIDB4YjM4ZDogMHgyZCxcbiAgMHhiMzhlOiAweDJlLFxuICAweGIzOGY6IDB4MmYsXG4gIDB4YjM5MDogMHgzMCxcbiAgMHhiMzkxOiAweDMxLFxuICAweGIzOTI6IDB4MzIsXG4gIDB4YjM5MzogMHgzMyxcbiAgMHhiMzk0OiAweDM0LFxuICAweGIzOTU6IDB4MzUsXG4gIDB4YjM5NjogMHgzNixcbiAgMHhiMzk3OiAweDM3LFxuICAweGIzOTg6IDB4MzgsXG4gIDB4YjM5OTogMHgzOSxcbiAgMHhiMzlhOiAweDNhLFxuICAweGIzOWI6IDB4M2IsXG4gIDB4YjM5YzogMHgzYyxcbiAgMHhiMzlkOiAweDNkLFxuICAweGIzOWU6IDB4M2UsXG4gIDB4YjM5ZjogMHgzZixcbiAgMHhiM2EwOiAweDQwLFxuICAweGIzYTE6IDB4NDEsXG4gIDB4YjNhMjogMHg0MixcbiAgMHhiM2EzOiAweDQzLFxuICAweGIzYTQ6IDB4NDQsXG4gIDB4YjNhNTogMHg0NSxcbiAgMHhiM2E2OiAweDQ2LFxuICAweGIzYTc6IDB4NDcsXG4gIDB4YjNhODogMHg0OCxcbiAgMHhiM2E5OiAweDQ5LFxuICAweGIzYWE6IDB4NGEsXG4gIDB4YjNhYjogMHg0YixcbiAgMHhiM2FjOiAweDRjLFxuICAweGIzYWQ6IDB4NGQsXG4gIDB4YjNhZTogMHg0ZSxcbiAgMHhiM2FmOiAweDRmLFxuICAweGIzYjA6IDB4NTAsXG4gIDB4YjNiMTogMHg1MSxcbiAgMHhiM2IyOiAweDUyLFxuICAweGIzYjM6IDB4NTMsXG4gIDB4YjNiNDogMHg1NCxcbiAgMHhiM2I1OiAweDU1LFxuICAweGIzYjY6IDB4NTYsXG4gIDB4YjNiNzogMHg1NyxcbiAgMHhiM2I4OiAweDU4LFxuICAweGIzYjk6IDB4NTksXG4gIDB4YjNiYTogMHg1YSxcbiAgMHhiM2JiOiAweDViLFxuICAweGIzYmM6IDB4NWMsXG4gIDB4YjNiZDogMHg1ZCxcbiAgMHhiM2JlOiAweDVlLFxuICAweGIzYmY6IDB4NWYsXG4gIDB4YjNjMDogMHg2MCxcbiAgMHhiM2MxOiAweDYxLFxuICAweGIzYzI6IDB4NjIsXG4gIDB4YjNjMzogMHg2MyxcbiAgMHhiM2M0OiAweDY0LFxuICAweGIzYzU6IDB4NjUsXG4gIDB4YjNjNjogMHg2NixcbiAgMHhiM2M3OiAweDY3LFxuICAweGIzYzg6IDB4NjgsXG4gIDB4YjNjOTogMHg2OSxcbiAgMHhiM2NhOiAweDZhLFxuICAweGIzY2I6IDB4NmIsXG4gIDB4YjNjYzogMHg2YyxcbiAgMHhiM2NkOiAweDZkLFxuICAweGIzY2U6IDB4NmUsXG4gIDB4YjNjZjogMHg2ZixcbiAgMHhiM2QwOiAweDcwLFxuICAweGIzZDE6IDB4NzEsXG4gIDB4YjNkMjogMHg3MixcbiAgMHhiM2QzOiAweDczLFxuICAweGIzZDQ6IDB4NzQsXG4gIDB4YjNkNTogMHg3NSxcbiAgMHhiM2Q2OiAweDc2LFxuICAweGIzZDc6IDB4NzcsXG4gIDB4YjNkODogMHg3OCxcbiAgMHhiM2Q5OiAweDc5LFxuICAweGIzZGE6IDB4N2EsXG4gIDB4YjNkYjogMHg3YixcbiAgMHhiM2RjOiAweDdjLFxuICAweGIzZGQ6IDB4N2QsXG4gIDB4YjNkZTogMHg3ZSxcbiAgMHhiM2RmOiAweDdmLFxuICAweGIzZTA6IDB4ODBcbn0pXG4iLCIvKipcbiAqIE11bHRpaGFzaCBpbXBsZW1lbnRhdGlvbiBpbiBKYXZhU2NyaXB0LlxuICpcbiAqIEBtb2R1bGUgbXVsdGloYXNoXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiczU4ID0gcmVxdWlyZSgnYnM1OCcpXG5cbmNvbnN0IGNzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5leHBvcnRzLm5hbWVzID0gY3MubmFtZXNcbmV4cG9ydHMuY29kZXMgPSBjcy5jb2Rlc1xuZXhwb3J0cy5kZWZhdWx0TGVuZ3RocyA9IGNzLmRlZmF1bHRMZW5ndGhzXG5cbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gbXVsdGloYXNoIHRvIGEgaGV4IGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLnRvSGV4U3RyaW5nID0gZnVuY3Rpb24gdG9IZXhTdHJpbmcgKGhhc2gpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFzaCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgYmUgcGFzc2VkIGEgYnVmZmVyJylcbiAgfVxuXG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKCdoZXgnKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGhleCBlbmNvZGVkIHN0cmluZyB0byBhIG11bHRpaGFzaC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5mcm9tSGV4U3RyaW5nID0gZnVuY3Rpb24gZnJvbUhleFN0cmluZyAoaGFzaCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20oaGFzaCwgJ2hleCcpXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gbXVsdGloYXNoIHRvIGEgYmFzZTU4IGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLnRvQjU4U3RyaW5nID0gZnVuY3Rpb24gdG9CNThTdHJpbmcgKGhhc2gpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFzaCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgYmUgcGFzc2VkIGEgYnVmZmVyJylcbiAgfVxuXG4gIHJldHVybiBiczU4LmVuY29kZShoYXNoKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJhc2U1OCBlbmNvZGVkIHN0cmluZyB0byBhIG11bHRpaGFzaC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZnJvbUI1OFN0cmluZyA9IGZ1bmN0aW9uIGZyb21CNThTdHJpbmcgKGhhc2gpIHtcbiAgbGV0IGVuY29kZWQgPSBoYXNoXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaGFzaCkpIHtcbiAgICBlbmNvZGVkID0gaGFzaC50b1N0cmluZygpXG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmZyb20oYnM1OC5kZWNvZGUoZW5jb2RlZCkpXG59XG5cbi8qKlxuICogRGVjb2RlIGEgaGFzaCBmcm9tIHRoZSBnaXZlbiBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZlxuICogQHJldHVybnMge3tjb2RlOiBudW1iZXIsIG5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIGRpZ2VzdDogQnVmZmVyfX0gcmVzdWx0XG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlIChidWYpIHtcbiAgaWYgKCEoQnVmZmVyLmlzQnVmZmVyKGJ1ZikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoYnVmLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpaGFzaCB0b28gc2hvcnQuIG11c3QgYmUgPiAzIGJ5dGVzLicpXG4gIH1cblxuICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShidWYpXG4gIGlmICghZXhwb3J0cy5pc1ZhbGlkQ29kZShjb2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIHVua25vd24gZnVuY3Rpb24gY29kZTogMHgke2NvZGUudG9TdHJpbmcoMTYpfWApXG4gIH1cbiAgYnVmID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgY29uc3QgbGVuID0gdmFyaW50LmRlY29kZShidWYpXG4gIGlmIChsZW4gPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWhhc2ggaW52YWxpZCBsZW5ndGg6IDB4JHtsZW4udG9TdHJpbmcoMTYpfWApXG4gIH1cbiAgYnVmID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGJ1Zi5sZW5ndGggIT09IGxlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIGxlbmd0aCBpbmNvbnNpc3RlbnQ6IDB4JHtidWYudG9TdHJpbmcoJ2hleCcpfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgbmFtZTogY3MuY29kZXNbY29kZV0sXG4gICAgbGVuZ3RoOiBsZW4sXG4gICAgZGlnZXN0OiBidWZcbiAgfVxufVxuXG4vKipcbiAqICBFbmNvZGUgYSBoYXNoIGRpZ2VzdCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gY29kZS5cbiAqXG4gKiA+ICoqTm90ZToqKiB0aGUgbGVuZ3RoIGlzIGRlcml2ZWQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBkaWdlc3QgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBkaWdlc3RcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gY29kZVxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZSAoZGlnZXN0LCBjb2RlLCBsZW5ndGgpIHtcbiAgaWYgKCFkaWdlc3QgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggZW5jb2RlIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBhcmdzOiBkaWdlc3QsIGNvZGUnKVxuICB9XG5cbiAgLy8gZW5zdXJlIGl0J3MgYSBoYXNoZnVuY3Rpb24gY29kZS5cbiAgY29uc3QgaGFzaGZuID0gZXhwb3J0cy5jb2VyY2VDb2RlKGNvZGUpXG5cbiAgaWYgKCEoQnVmZmVyLmlzQnVmZmVyKGRpZ2VzdCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkaWdlc3Qgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChsZW5ndGggPT0gbnVsbCkge1xuICAgIGxlbmd0aCA9IGRpZ2VzdC5sZW5ndGhcbiAgfVxuXG4gIGlmIChsZW5ndGggJiYgZGlnZXN0Lmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkaWdlc3QgbGVuZ3RoIHNob3VsZCBiZSBlcXVhbCB0byBzcGVjaWZpZWQgbGVuZ3RoLicpXG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShoYXNoZm4pKSxcbiAgICBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKGxlbmd0aCkpLFxuICAgIGRpZ2VzdFxuICBdKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgaGFzaCBmdW5jdGlvbiBuYW1lIGludG8gdGhlIG1hdGNoaW5nIGNvZGUuXG4gKiBJZiBwYXNzZWQgYSBudW1iZXIgaXQgd2lsbCByZXR1cm4gdGhlIG51bWJlciBpZiBpdCdzIGEgdmFsaWQgY29kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5jb2VyY2VDb2RlID0gZnVuY3Rpb24gY29lcmNlQ29kZSAobmFtZSkge1xuICBsZXQgY29kZSA9IG5hbWVcblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGNzLm5hbWVzW25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZnVuY3Rpb24gbmFtZWQ6ICR7bmFtZX1gKVxuICAgIH1cbiAgICBjb2RlID0gY3MubmFtZXNbbmFtZV1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29kZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhhc2ggZnVuY3Rpb24gY29kZSBzaG91bGQgYmUgYSBudW1iZXIuIEdvdDogJHtjb2RlfWApXG4gIH1cblxuICBpZiAoY3MuY29kZXNbY29kZV0gPT09IHVuZGVmaW5lZCAmJiAhZXhwb3J0cy5pc0FwcENvZGUoY29kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBmdW5jdGlvbiBjb2RlOiAke2NvZGV9YClcbiAgfVxuXG4gIHJldHVybiBjb2RlXG59XG5cbi8qKlxuICogQ2hlY2tzIHdldGhlciBhIGNvZGUgaXMgcGFydCBvZiB0aGUgYXBwIHJhbmdlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLmlzQXBwQ29kZSA9IGZ1bmN0aW9uIGFwcENvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPiAwICYmIGNvZGUgPCAweDEwXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBtdWx0aWhhc2ggY29kZSBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuaXNWYWxpZENvZGUgPSBmdW5jdGlvbiB2YWxpZENvZGUgKGNvZGUpIHtcbiAgaWYgKGV4cG9ydHMuaXNBcHBDb2RlKGNvZGUpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChjcy5jb2Rlc1tjb2RlXSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gYnVmZmVyIGlzIGEgdmFsaWQgbXVsdGloYXNoLiBUaHJvd3MgYW4gZXJyb3IgaWYgaXQgaXMgbm90IHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGUgKG11bHRpaGFzaCkge1xuICBleHBvcnRzLmRlY29kZShtdWx0aWhhc2gpIC8vIHRocm93cyBpZiBiYWQuXG59XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGVcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJlZml4IGZyb20gYSB2YWxpZCBtdWx0aWhhc2guIFRocm93cyBhbiBlcnJvciBpZiBpdCBpcyBub3QgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IG11bHRpaGFzaFxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnRzLnByZWZpeCA9IGZ1bmN0aW9uIHByZWZpeCAobXVsdGloYXNoKSB7XG4gIHZhbGlkYXRlKG11bHRpaGFzaClcblxuICByZXR1cm4gbXVsdGloYXNoLnNsaWNlKDAsIDIpXG59XG4iLCJcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkZGlycjogcmVxdWlyZSgnLi9saWIvcmVhZGRpcnInKS5yZWFkZGlycixcblxuICBybWRpcnI6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycixcbiAgcm1kaXJzOiByZXF1aXJlKCcuL2xpYi9ybWRpcnInKS5ybWRpcnMsXG4gIHJtZmlsZXM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZmlsZXMsXG5cbiAgY3BkaXJyOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnIsXG4gIGNwZGlyczogcmVxdWlyZSgnLi9saWIvY3BkaXJyJykuY3BkaXJzLFxuICBjcGZpbGVzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGZpbGVzXG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIENvcHkgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJyID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgY2IpIHtcbiAgcmVhZGRpcnIoc3BhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBleHBvcnRzLmNwZGlycyhzcGF0aCwgdHBhdGgsIGRpcnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBleHBvcnRzLmNwZmlsZXMoc3BhdGgsIHRwYXRoLCBmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBjYigpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGRpcnMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIHZhciBycGF0aCA9IHBhdGgucmVsYXRpdmUoc3BhdGgsIGRpcnNbaW5kZXhdKVxuICAgIHJwYXRoID0gcGF0aC5qb2luKHRwYXRoLCBycGF0aClcbiAgICBmcy5leGlzdHMocnBhdGgsIGZ1bmN0aW9uIChleGlzdHMpIHtcbiAgICAgIGlmIChleGlzdHMpIHJldHVybiBsb29wKCsraW5kZXgpXG4gICAgICBmcy5ta2RpcihycGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZmlsZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BmaWxlcyA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGZpbGVzLCBjYikge1xuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5yZWFkRmlsZShmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBmaWxlc1tpbmRleF0pXG4gICAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgICBmcy53cml0ZUZpbGUocnBhdGgsIGRhdGEsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG5cbi8qKlxuICogUmVhZCBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheXN9IGRpcnMgJiBmaWxlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJlYWRkaXJyID0gZnVuY3Rpb24gKGRwYXRoLCBjYikge1xuICB2YXIgZGlycyA9IFtdLCBmaWxlcyA9IFtdXG4gIGRpcnMucHVzaChkcGF0aClcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKG51bGwsIGRpcnMsIGZpbGVzKVxuICAgIGZzLnJlYWRkaXIoZGlyc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIF9maWxlcykge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGdldHN0YXQoZGlyc1tpbmRleF0sIF9maWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG5cbiAgLyoqXG4gICAqIEdldCBzdGF0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldHN0YXQgKGRwYXRoLCBfZmlsZXMsIGNiKSB7XG4gICAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09IF9maWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgICB2YXIgZnBhdGggPSBwYXRoLmpvaW4oZHBhdGgsIF9maWxlc1tpbmRleF0pXG4gICAgICBmcy5zdGF0KGZwYXRoLCBmdW5jdGlvbiAoZXJyLCBzdGF0cykge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGRpcnMucHVzaChmcGF0aClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlcy5wdXNoKGZwYXRoKVxuICAgICAgICB9XG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSgwKSlcbiAgfVxufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIFJlbW92ZSBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1kaXJyID0gZnVuY3Rpb24gKGRwYXRoLCBjYikge1xuICByZWFkZGlycihkcGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGV4cG9ydHMucm1maWxlcyhmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGV4cG9ydHMucm1kaXJzKGRpcnMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVtb3ZlIGEgbGlzdCBvZiBmaWxlc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZmlsZXMgPSBmdW5jdGlvbiAoZmlsZXMsIGNiKSB7XG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZmlsZXMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIGZzLnVubGluayhmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBsb29wKCsraW5kZXgpXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnMgPSBmdW5jdGlvbiAoZGlycywgY2IpIHtcbiAgZGlycy5zb3J0KGRlc2MpXG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZGlycy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMucm1kaXIoZGlyc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBsb29wKCsraW5kZXgpXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBTb3J0IGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYVxuICogQHBhcmFtIHtTdHJpbmd9IGJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGRlc2MoYSwgYikge1xuICBpZiAoYSA+IGIpIHJldHVybiAtMVxuICBpZiAoYSA8IGIpIHJldHVybiAgMVxuICByZXR1cm4gMFxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCdWZmZXIucHJvdG90eXBlKVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG5cdGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKHN0cmVhbSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChzdHJlYW0gJiYgIXN0cmVhbS5pc1RUWSAmJiBmb3JjZUNvbG9yICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG5cdFx0Ly8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcblx0XHQvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcblx0XHQvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93c1xuXHRcdC8vIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlXG5cdFx0Ly8gdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKVswXSkgPj0gOCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVycilcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlYWRcblxudmFyIE1TQiA9IDB4ODBcbiAgLCBSRVNUID0gMHg3RlxuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciByZXMgICAgPSAwXG4gICAgLCBvZmZzZXQgPSBvZmZzZXQgfHwgMFxuICAgICwgc2hpZnQgID0gMFxuICAgICwgY291bnRlciA9IG9mZnNldFxuICAgICwgYlxuICAgICwgbCA9IGJ1Zi5sZW5ndGhcblxuICBkbyB7XG4gICAgaWYgKGNvdW50ZXIgPj0gbCkge1xuICAgICAgcmVhZC5ieXRlcyA9IDBcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb3VsZCBub3QgZGVjb2RlIHZhcmludCcpXG4gICAgfVxuICAgIGIgPSBidWZbY291bnRlcisrXVxuICAgIHJlcyArPSBzaGlmdCA8IDI4XG4gICAgICA/IChiICYgUkVTVCkgPDwgc2hpZnRcbiAgICAgIDogKGIgJiBSRVNUKSAqIE1hdGgucG93KDIsIHNoaWZ0KVxuICAgIHNoaWZ0ICs9IDdcbiAgfSB3aGlsZSAoYiA+PSBNU0IpXG5cbiAgcmVhZC5ieXRlcyA9IGNvdW50ZXIgLSBvZmZzZXRcblxuICByZXR1cm4gcmVzXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGVuY29kZVxuXG52YXIgTVNCID0gMHg4MFxuICAsIFJFU1QgPSAweDdGXG4gICwgTVNCQUxMID0gflJFU1RcbiAgLCBJTlQgPSBNYXRoLnBvdygyLCAzMSlcblxuZnVuY3Rpb24gZW5jb2RlKG51bSwgb3V0LCBvZmZzZXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdXG4gIG9mZnNldCA9IG9mZnNldCB8fCAwXG4gIHZhciBvbGRPZmZzZXQgPSBvZmZzZXRcblxuICB3aGlsZShudW0gPj0gSU5UKSB7XG4gICAgb3V0W29mZnNldCsrXSA9IChudW0gJiAweEZGKSB8IE1TQlxuICAgIG51bSAvPSAxMjhcbiAgfVxuICB3aGlsZShudW0gJiBNU0JBTEwpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtID4+Pj0gN1xuICB9XG4gIG91dFtvZmZzZXRdID0gbnVtIHwgMFxuICBcbiAgZW5jb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0ICsgMVxuICBcbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiByZXF1aXJlKCcuL2VuY29kZS5qcycpXG4gICwgZGVjb2RlOiByZXF1aXJlKCcuL2RlY29kZS5qcycpXG4gICwgZW5jb2RpbmdMZW5ndGg6IHJlcXVpcmUoJy4vbGVuZ3RoLmpzJylcbn1cbiIsIlxudmFyIE4xID0gTWF0aC5wb3coMiwgIDcpXG52YXIgTjIgPSBNYXRoLnBvdygyLCAxNClcbnZhciBOMyA9IE1hdGgucG93KDIsIDIxKVxudmFyIE40ID0gTWF0aC5wb3coMiwgMjgpXG52YXIgTjUgPSBNYXRoLnBvdygyLCAzNSlcbnZhciBONiA9IE1hdGgucG93KDIsIDQyKVxudmFyIE43ID0gTWF0aC5wb3coMiwgNDkpXG52YXIgTjggPSBNYXRoLnBvdygyLCA1NilcbnZhciBOOSA9IE1hdGgucG93KDIsIDYzKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIDwgTjEgPyAxXG4gIDogdmFsdWUgPCBOMiA/IDJcbiAgOiB2YWx1ZSA8IE4zID8gM1xuICA6IHZhbHVlIDwgTjQgPyA0XG4gIDogdmFsdWUgPCBONSA/IDVcbiAgOiB2YWx1ZSA8IE42ID8gNlxuICA6IHZhbHVlIDwgTjcgPyA3XG4gIDogdmFsdWUgPCBOOCA/IDhcbiAgOiB2YWx1ZSA8IE45ID8gOVxuICA6ICAgICAgICAgICAgICAxMFxuICApXG59XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuaW1wb3J0IHF1ZXJ5QnVpbGRlciBmcm9tICcuL3F1ZXJ5QnVpbGRlcic7XG5cbi8qKlxuICogUGluIExpc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluTGlzdChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBjb25zdCBiYXNlRW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3Bpbkxpc3RgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcXVlcnlCdWlsZGVyKGJhc2VFbmRwb2ludCwgZmlsdGVycyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHVzZXIgcGluIGxpc3Q6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCIvKipcbiAqIFZhbGlkYXRlIGFuZCByZXR1cm4gZGF0YVxuICogQHBhcmFtIHsqfSBkYXRlVG9WYWxpZGF0ZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kUmV0dXJuRGF0ZShkYXRlVG9WYWxpZGF0ZSkge1xuICAgIGxldCBkYXRlUGFyc2VkID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlVG9WYWxpZGF0ZSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGRhdGVQYXJzZWQudG9JU09TdHJpbmcoKSA9PT0gZGF0ZVRvVmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlVG9WYWxpZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGVzIG11c3QgYmUgaW4gdmFsaWQgSVNPXzg2MDEgZm9ybWF0Jyk7XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0ZXMgbXVzdCBiZSBpbiB2YWxpZCBJU09fODYwMSBmb3JtYXQnKTtcbiAgICB9XG59XG5cbi8qKlxuICogUXVlcnkgQnVpbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVcmxcbiAqIEBwYXJhbSB7Kn0gZmlsdGVyc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gIHByZXNldCBmaWx0ZXIgdmFsdWVzXG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gJz8nO1xuXG4gICAgbGV0IG1ldGFkYXRhUXVlcnkgPSAnJztcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuaGFzaENvbnRhaW5zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMuaGFzaENvbnRhaW5zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaENvbnRhaW5zIHZhbHVlIGlzIG5vdCBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBoYXNoQ29udGFpbnM9JHtmaWx0ZXJzLmhhc2hDb250YWluc30mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TdGFydD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluRW5kPSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpblN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHVucGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpbkVuZCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnVucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWluKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWluKSB8fCBmaWx0ZXJzLnBpblNpemVNaW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWluIGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWluPSR7ZmlsdGVycy5waW5TaXplTWlufSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNYXgpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNYXgpIHx8IGZpbHRlcnMucGluU2l6ZU1heCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNYXggaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpblNpemVNYXg9JHtmaWx0ZXJzLnBpblNpemVNYXh9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgIT09ICdhbGwnICYmIGZpbHRlcnMuc3RhdHVzICE9PSAncGlubmVkJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3VucGlubmVkJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdHVzIHZhbHVlIG11c3QgYmUgZWl0aGVyOiBhbGwsIHBpbm5lZCwgb3IgdW5waW5uZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZUxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5wYWdlTGltaXQpIHx8IGZpbHRlcnMucGFnZUxpbWl0IDw9IDAgfHwgZmlsdGVycy5wYWdlTGltaXQgPiAxMDAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlTGltaXQgaXMgYSB2YWxpZCBpbnRlZ2VyIGJldHdlZW4gMS0xMDAwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VMaW1pdD0ke3BhcnNlSW50KGZpbHRlcnMucGFnZUxpbWl0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZU9mZnNldCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZU9mZnNldCkgfHwgZmlsdGVycy5wYWdlT2Zmc2V0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VPZmZzZXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VPZmZzZXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VPZmZzZXQpfSZgOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGRlY2ltYWxzIGdldCByb3VuZGVkIHRvIGludGVnZXJzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IGBtZXRhZGF0YVtuYW1lXT0ke2ZpbHRlcnMubWV0YWRhdGEubmFtZX0mYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IG1ldGFkYXRhUXVlcnkgKyAnbWV0YWRhdGFba2V5dmFsdWVzXT0nO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSBrZXl2YWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcnVuZWRLZXlWYWx1ZXMgPSB7fTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UncmUgb25seSBncmFiYmluZyB0aGUgdmFsdWVzIHdlIHdhbnQgZm9yIHRoZSBxdWVyeSwgYW5kIG5vdGhpbmcgZXh0cmFcblxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKS5mb3JFYWNoKChrZXlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBrZXlWYWx1ZVsxXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZTogJHtrZXl9IGlzIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS52YWx1ZSB8fCAhdmFsdWUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBtdXN0IGhhdmUgYm90aCB2YWx1ZSBhbmQgb3AgYXR0cmlidXRlc2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncywgYm9vbGVhbnMsIG9yIG51bWJlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBjaGVja3MgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aGUga2V5dmFsdWVzIGFyZSB2YWxpZFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3JlYXRlciB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2UgYmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RCZXR3ZWVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnNlY29uZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmVjYXVzZSBub3RCZXR3ZWVuIG9wIGNvZGUgd2FzIHBhc3NlZCBpbiwga2V5VmFsdWU6ICR7a2V5VmFsdWVbMF19IG11c3QgaGF2ZSBib3RoIGFsc28gaW5jbHVkZSBhIHNlY29uZFZhbHVlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSBzZWNvbmRWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nLCBib29sZWFuLCBvciBudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbm90IGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdElMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lSZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWUgb3A6ICR7dmFsdWUub3B9IGlzIG5vdCBhIHZhbGlkIG9wIGNvZGVgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IG1ldGFkYXRhUXVlcnkgKyBgJHtKU09OLnN0cmluZ2lmeShwcnVuZWRLZXlWYWx1ZXMpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHtmaWx0ZXJRdWVyeX0ke21ldGFkYXRhUXVlcnl9YDtcbn1cblxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5c30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBUZXN0IEF1dGhlbnRpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIC8vICB0ZXN0IGF1dGhlbnRpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyJ3MgcHJvdmlkZWQga2V5cyBhcmUgbGVnaXRcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbm5lZCBEYXRhIFRvdGFsXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogSGFzaCBNZXRhIERhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gaXBmc1Bpbkhhc2hcbiAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoTWV0YWRhdGEocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBtZXRhZGF0YSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBpZiAoIWlwZnNQaW5IYXNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXBmc1Bpbkhhc2ggdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0lQRlMuY2lkKGlwZnNQaW5IYXNoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIGFuIGludmFsaWQgSVBGUyBDSUQnKTtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gbWV0YWRhdGEgb2JqZWN0IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvaGFzaE1ldGFkYXRhYDtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBpcGZzUGluSGFzaDogaXBmc1Bpbkhhc2hcbiAgICB9O1xuXG4gICAgaWYgKG1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgYm9keS5uYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGJvZHkua2V5dmFsdWVzID0gbWV0YWRhdGEua2V5dmFsdWVzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBtZXRhZGF0YSBmb3IgaGFzaDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIEhhc2ggUGluIFBvbGljeVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBpcGZzUGluSGFzaFxuICogQHBhcmFtIHsqfSBuZXdQaW5Qb2xpY3lcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFpcGZzUGluSGFzaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGlmICghaXNJUEZTLmNpZChpcGZzUGluSGFzaCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL2hhc2hQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGlwZnNQaW5IYXNoOiBpcGZzUGluSGFzaCxcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIGhhc2g6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBCeSBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0geyp9IGhhc2hUb1BpblxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9QaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgcmVxdWlyZWQgZm9yIHBpbm5pbmcgYnkgaGFzaCcpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvUGluKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1BpbiB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkJ5SGFzaGA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaGFzaFRvUGluOiBoYXNoVG9QaW4sXG4gICAgICAgIHBpbmF0YU9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhZGRpbmcgdG8gcGluIHF1ZXVlOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBGaWxlIHRvIElQRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gcmVhZFN0cmVhbVxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRmlsZVRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgcmVhZFN0cmVhbSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCByZWFkU3RyZWFtKTtcblxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluRmlsZVRvSVBGU2A7XG5cbiAgICAgICAgaWYgKCEocmVhZFN0cmVhbSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZSkpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3JlYWRTdHJlYW0gaXMgbm90IGEgcmVhZGFibGUgc3RyZWFtJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU9wdGlvbnMnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6ICdJbmZpbml0eScsIC8vdGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBheGlvcyBmcm9tIGVycm9yaW5nIG91dCB3aXRoIGxhcmdlIGZpbGVzXG4gICAgICAgICAgICAgICAgbWF4Qm9keUxlbmd0aDogJ0luZmluaXR5JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9ICR7ZGF0YS5fYm91bmRhcnl9YCxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBGaWxlIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgYmFzZVBhdGhDb252ZXJ0ZXIgZnJvbSAnYmFzZS1wYXRoLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCByZWN1cnNpdmUgPSByZXF1aXJlKCdyZWN1cnNpdmUtZnMnKTtcblxuLyoqXG4gKiBQaW5Gcm9tRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoXG4gKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5Gcm9tRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkZpbGVUb0lQRlNgO1xuXG4gICAgICAgIGZzLnN0YXQoc291cmNlUGF0aCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vd2UgbmVlZCB0byBjcmVhdGUgYSBzaW5nbGUgcmVhZCBzdHJlYW0gaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IE5vZGVGb3JtRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHNvdXJjZVBhdGgpKTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU9wdGlvbnMnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm9keUxlbmd0aDogJ0luZmluaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSAke2RhdGEuX2JvdW5kYXJ5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgRmlsZSB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmUucmVhZGRpcnIoc291cmNlUGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbmV3IE5vZGVGb3JtRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGVhY2ggZmlsZSBzdHJlYW0sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgY29ycmVjdCByZWxhdGl2ZSBmaWxlIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVwYXRoOiBiYXNlUGF0aENvbnZlcnRlcihzb3VyY2VQYXRoLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvZHlMZW5ndGg6ICdJbmZpbml0eScsIC8vdGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBheGlvcyBmcm9tIGVycm9yaW5nIG91dCB3aXRoIGxhcmdlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSAke2RhdGEuX2JvdW5kYXJ5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgRmlsZSB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBKU09OIHRvIElQRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gYm9keVxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgcmVxdWVzdEJvZHkgPSBib2R5O1xuXG4gICAgaWYgKHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBwaW5hdGFDb250ZW50OiBib2R5XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5KU09OVG9JUEZTYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgSlNPTiB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHF1ZXJ5QnVpbGRlciBmcm9tICcuL3F1ZXJ5QnVpbGRlcic7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogUGluIEpvYnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gZmlsdGVyc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkpvYnMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgbGV0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5Kb2JzYDtcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIGVuZHBvaW50ID0gcXVlcnlCdWlsZGVyKGVuZHBvaW50LCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHBpbiBqb2JzOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuLyoqXG4gKiBRdWVyeSBCdWlkbGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVybFxuICogQHBhcmFtIHsqfSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xuICAgIH1cblxuICAgIGxldCBuZXdVcmwgPSBiYXNlVXJsO1xuXG4gICAgbGV0IGZpcnN0RmlsdGVyQXBwbGllZCA9IGZhbHNlOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBcIj9cIiBjaGFyYWN0ZXIgaXMgb25seSBhcHBsaWVkIG9uY2VcblxuICAgIGZ1bmN0aW9uIGFkZEZpbHRlcihuZXdGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGZpcnN0RmlsdGVyQXBwbGllZCkge1xuICAgICAgICAgICAgbmV3VXJsID0gYCR7bmV3VXJsfSYke25ld0ZpbHRlcn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RGaWx0ZXJBcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0/JHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuc29ydCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc29ydCA9PT0gJ0FTQycgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnNvcnQgPT09ICdERVNDJykge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc29ydD0ke2ZpbHRlcnMuc29ydH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvcnQgdmFsdWU6ICR7ZmlsdGVycy5zb3J0fSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgPT09ICdzZWFyY2hpbmcnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdleHBpcmVkJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9mcmVlX2xpbWl0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9tYXhfc2l6ZScgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2ludmFsaWRfb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnYmFkX2hvc3Rfbm9kZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0dXMgdmFsdWU6ICR7ZmlsdGVycy5zdGF0dXN9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSB7XG4gICAgICAgICAgICBpZiAoaXNJUEZTLmNpZChmaWx0ZXJzLmlwZnNfcGluX2hhc2gpKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBpcGZzX3Bpbl9oYXNoPSR7ZmlsdGVycy5pcGZzX3Bpbl9oYXNofWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSVBGUyBoYXNoOiAke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJzLmxpbWl0KSAmJiAoZmlsdGVycy5saW1pdCA+IDApICYmIChmaWx0ZXJzLmxpbWl0IDwgMTAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgbGltaXQ9JHtmaWx0ZXJzLmxpbWl0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7ZmlsdGVycy5saW1pdH0uIFZhbGlkIGxpbWl0cyBhcmUgMS0xMDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLm9mZnNldCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5vZmZzZXQpICYmIChmaWx0ZXJzLm9mZnNldCA+IDApKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBvZmZzZXQ9JHtmaWx0ZXJzLm9mZnNldH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9mZnNldDogJHtmaWx0ZXJzLm9mZnNldH0uIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgaW50ZWdlciBmb3IgdGhlIG9mZnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFVucGluXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFRvVW5waW5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnBpbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvVW5waW4pIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9VbnBpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1VucGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciByZW1vdmluZyBhIHBpbiBmcm9tIFBpbmF0YScpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvVW5waW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtoYXNoVG9VbnBpbn0gaXMgYW4gaW52YWxpZCBJUEZTIENJRGApO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy91bnBpbi8ke2hhc2hUb1VucGlufWA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5kZWxldGUoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSByZW1vdmluZyBwaW4gZnJvbSBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbiBQb2xpY3lcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3VzZXJQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIG5ld1BpblBvbGljeTogbmV3UGluUG9saWN5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBwaW4gcG9saWN5IGZvciB1c2VyOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0IGNvbnN0IGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkucGluYXRhLmNsb3VkJztcbiIsImltcG9ydCBwaW5CeUhhc2ggZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkJ5SGFzaCc7XG5pbXBvcnQgaGFzaE1ldGFkYXRhIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9oYXNoTWV0YWRhdGEnO1xuaW1wb3J0IGhhc2hQaW5Qb2xpY3kgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL2hhc2hQaW5Qb2xpY3knO1xuaW1wb3J0IHBpbkZpbGVUb0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMnO1xuaW1wb3J0IHBpbkZyb21GUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRnJvbUZTJztcbmltcG9ydCBwaW5KU09OVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTJztcbmltcG9ydCBwaW5Kb2JzIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMnO1xuaW1wb3J0IHVucGluIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy91bnBpbic7XG5pbXBvcnQgdXNlclBpblBvbGljeSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvdXNlclBpblBvbGljeSc7XG5pbXBvcnQgdGVzdEF1dGhlbnRpY2F0aW9uIGZyb20gJy4vY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHBpbkxpc3QgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcGluTGlzdCc7XG5pbXBvcnQgdXNlclBpbm5lZERhdGFUb3RhbCBmcm9tICcuL2NvbW1hbmRzL2RhdGEvdXNlclBpbm5lZERhdGFUb3RhbCc7XG5cbi8vIE9QVElPTlNcblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD59IFBpbmF0YU1ldGFkYXRhXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFNZXRhZGF0YUZpbHRlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZywgb3A6IHN0cmluZ30+fSBrZXl2YWx1ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZywgZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQ6IG51bWJlcn19IFBpbmF0YVBpblBvbGljeUl0ZW1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkJ5SGFzaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtob3N0Tm9kZXNdXG4gKiBAcHJvcGVydHkge3tyZWdpb25zOiBQaW5hdGFQaW5Qb2xpY3lJdGVtW119fSBbY3VzdG9tUGluUG9saWN5XVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluQnlIYXNoUGluT3B0aW9uc1xuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YX0gW3BpbmF0YU1ldGFkYXRhXVxuICogQHByb3BlcnR5IHtQaW5hdGFQaW5CeUhhc2hPcHRpb25zfSBbcGluYXRhT3B0aW9uc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7MCB8IDF9IFtjaWRWZXJzaW9uXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbd3JhcFdpdGhEaXJlY3RvcnldXG4gKiBAcHJvcGVydHkge3tyZWdpb25zOiBQaW5hdGFQaW5Qb2xpY3lJdGVtW119fSBbY3VzdG9tUGluUG9saWN5XVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluT3B0aW9uc1xuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YX0gW3BpbmF0YU1ldGFkYXRhXVxuICogQHByb3BlcnR5IHtQaW5hdGFPcHRpb25zfSBbcGluYXRhT3B0aW9uc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkpvYnNGaWx0ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkgeydBU0MnIHwgJ0RFU0MnfSBzb3J0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaXBmc19waW5faGFzaF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGltaXRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29mZnNldF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkxpc3RGaWx0ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hhc2hDb250YWluc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGluU3RhcnRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BpbkVuZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdW5waW5TdGFydF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdW5waW5FbmRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BpblNpemVNaW5dXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BpblNpemVNYXhdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c11cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZUxpbWl0XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlT2Zmc2V0XVxuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YUZpbHRlcn0gW21ldGFkYXRhXVxuICovXG5cbi8vIFJFU1BPTlNFU1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkJ5SGFzaFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpcGZzSGFzaFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0YXR1c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpblJlc3BvbnNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSXBmc0hhc2hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQaW5TaXplXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVGltZXN0YW1wXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5Kb2JzUmVzcG9uc2VSb3dcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlwZnNfcGluX2hhc2hcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRlX3F1ZXVlZFxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsfSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhdHVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5Kb2JzUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtQaW5hdGFQaW5Kb2JzUmVzcG9uc2VSb3dbXX0gcm93c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluTGlzdFJlc3BvbnNlUm93XG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpcGZzX3Bpbl9oYXNoXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2l6ZVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IHVzZXJfaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRlX3Bpbm5lZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGVfdW5waW5uZWRcbiAqIEBwcm9wZXJ0eSB7UGluYXRhTWV0YWRhdGF9IG1ldGFkYXRhXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5MaXN0UmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtQaW5hdGFQaW5MaXN0UmVzcG9uc2VSb3dbXX0gcm93c1xuICovXG5cbi8vIE1FVEhPRFNcblxuLyoqXG4gKiBIYXNoIG1ldGEgZGF0YVxuICogQGNhbGxiYWNrIGhhc2hNZXRhZGF0YVxuICogQHBhcmFtIHtzdHJpbmd9IGlwZnNQaW5IYXNoXG4gKiBAcGFyYW0ge1BpbmF0YU1ldGFkYXRhfSBtZXRhZGF0YVxuICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAqL1xuXG4vKipcbiAqIEhhc2ggcGluIHBvbGljeVxuICogQGNhbGxiYWNrIGhhc2hQaW5Qb2xpY3lcbiAqIEBwYXJhbSB7c3RyaW5nfSBpcGZzUGluSGFzaFxuICogQHBhcmFtIHt7cmVnaW9uczogUGluYXRhUGluUG9saWN5SXRlbVtdfX0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogUGluIGJ5IGhhc2hcbiAqIEBjYWxsYmFjayBwaW5CeUhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoVG9QaW5cbiAqIEBwYXJhbSB7UGluYXRhUGluQnlIYXNoUGluT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5CeUhhc2hSZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBQaW4gZmlsZSB0byBJUEZTXG4gKiBAY2FsbGJhY2sgcGluRmlsZVRvSVBGU1xuICogQHBhcmFtIHtSZWFkU3RyZWFtfSByZWFkYWJsZVN0cmVhbVxuICogQHBhcmFtIHtQaW5hdGFQaW5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpblJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFBpbiBmcm9tIEZTXG4gKiBAY2FsbGJhY2sgcGluRnJvbUZTXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICogQHBhcmFtIHtQaW5hdGFQaW5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpblJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFBpbiBKb2JzXG4gKiBAY2FsbGJhY2sgcGluSm9ic1xuICogQHBhcmFtIHtQaW5hdGFQaW5Kb2JzRmlsdGVyT3B0aW9uc30gW2ZpbHRlcnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5Kb2JzUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogUGluIEpTT04gdG8gSVBGU1xuICogQGNhbGxiYWNrIHBpbkpTT05Ub0lQRlNcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge1BpbmF0YVBpbk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogVW5waW5cbiAqIEBjYWxsYmFjayB1bnBpblxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hUb1VucGluXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogVXNlciBQaW4gUG9saWN5XG4gKiBAY2FsbGJhY2sgdXNlclBpblBvbGljeVxuICogQHBhcmFtIHt7cmVnaW9uczogUGluYXRhUGluUG9saWN5SXRlbVtdfX0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogVGVzdCBBdXRoZW50aWNhdGlvblxuICogQGNhbGxiYWNrIHRlc3RBdXRoZW50aWNhdGlvblxuICogQHJldHVybnMge1Byb21pc2U8e2F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW59Pn1cbiAqL1xuXG4vKipcbiAqIFBpbiBMaXN0XG4gKiBAY2FsbGJhY2sgcGluTGlzdFxuICogQHBhcmFtIHtQaW5hdGFQaW5MaXN0RmlsdGVyT3B0aW9uc30gW2ZpbHRlcnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5MaXN0UmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogVXNlciBQaW5uZWQgRGF0YSBUb3RhbFxuICogQGNhbGxiYWNrIHVzZXJQaW5uZWREYXRhVG90YWxcbiAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFDbGllbnRcbiAqIEBwcm9wZXJ0eSB7cGluQnlIYXNofSBwaW5CeUhhc2hcbiAqIEBwcm9wZXJ0eSB7aGFzaE1ldGFkYXRhfSBoYXNoTWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7aGFzaFBpblBvbGljeX0gaGFzaFBpblBvbGljeVxuICogQHByb3BlcnR5IHtwaW5GaWxlVG9JUEZTfSBwaW5GaWxlVG9JUEZTXG4gKiBAcHJvcGVydHkge3BpbkZyb21GU30gcGluRnJvbUZTXG4gKiBAcHJvcGVydHkge3BpbkpTT05Ub0lQRlN9IHBpbkpTT05Ub0lQRlNcbiAqIEBwcm9wZXJ0eSB7cGluSm9ic30gcGluSm9ic1xuICogQHByb3BlcnR5IHt1bnBpbn0gdW5waW5cbiAqIEBwcm9wZXJ0eSB7dXNlclBpblBvbGljeX0gdXNlclBpblBvbGljeVxuICogQHByb3BlcnR5IHt0ZXN0QXV0aGVudGljYXRpb259IHRlc3RBdXRoZW50aWNhdGlvblxuICogQHByb3BlcnR5IHtwaW5MaXN0fSBwaW5MaXN0XG4gKiBAcHJvcGVydHkge3VzZXJQaW5uZWREYXRhVG90YWx9IHVzZXJQaW5uZWREYXRhVG90YWxcbiAqL1xuXG4vKipcbiAqIFBpbmF0YSBDbGllbnRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UGluYXRhQ2xpZW50fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5hdGFDbGllbnQocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICBsZXQgY2xpZW50ID0ge307XG5cbiAgICAvLyAgc2V0dGluZyB1cCB0aGUgYWN0dWFsIGNhbGxzIHlvdSBjYW4gbWFrZSB1c2luZyB0aGlzIHBhY2thZ2VcbiAgICBjbGllbnQucGluQnlIYXNoID0gZnVuY3Rpb24gKGhhc2hUb1Bpbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50Lmhhc2hNZXRhZGF0YSA9IGZ1bmN0aW9uIChpcGZzUGluSGFzaCwgbWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hNZXRhZGF0YShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaXBmc1Bpbkhhc2gsIG1ldGFkYXRhKTtcbiAgICB9O1xuICAgIGNsaWVudC5oYXNoUGluUG9saWN5ID0gZnVuY3Rpb24gKGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZpbGVUb0lQRlMgPSBmdW5jdGlvbiAocmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5Gcm9tRlMgPSBmdW5jdGlvbiAoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5KU09OVG9JUEZTID0gZnVuY3Rpb24gKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkpTT05Ub0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGJvZHksIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpvYnMgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudW5waW4gPSBmdW5jdGlvbiAoaGFzaFRvVW5waW4pIHtcbiAgICAgICAgcmV0dXJuIHVucGluKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9VbnBpbik7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpblBvbGljeSA9IGZ1bmN0aW9uIChuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIHVzZXJQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIG5ld1BpblBvbGljeSk7XG4gICAgfTtcbiAgICBjbGllbnQudGVzdEF1dGhlbnRpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5MaXN0ID0gZnVuY3Rpb24gKGZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpO1xuICAgIH07XG4gICAgY2xpZW50LnVzZXJQaW5uZWREYXRhVG90YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1c2VyUGlubmVkRGF0YVRvdGFsKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIHJldHVybiBjbGllbnQ7XG59XG4iLCJleHBvcnQgY29uc3QgaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgIHJldHVybiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yO1xuICB9IGVsc2UgaWYgKGVycm9yLmRhdGEgJiYgZXJyb3IuZGF0YS5lcnJvcikge1xuICAgIHJldHVybiBlcnJvci5kYXRhLmVycm9yO1xuICB9IGVsc2UgaWYgKGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLnJlc3BvbnNlLmVycm9yO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCJpbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG4vKipcbiAqIFZhbGlkYXRlIEFQSSBLZXlzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICBpZiAoIXBpbmF0YUFwaUtleSB8fCBwaW5hdGFBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhQXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBhcGkga2V5IGFzIGFuIGFyZ3VtZW50IHdoZW4geW91IHN0YXJ0IHRoaXMgc2NyaXB0Jyk7XG4gICAgfVxuICAgIGlmICghcGluYXRhU2VjcmV0QXBpS2V5IHx8IHBpbmF0YVNlY3JldEFwaUtleSA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwaW5hdGFTZWNyZXRBcGlLZXkgcHJvdmlkZWQhIFBsZWFzZSBwcm92aWRlIHlvdXIgcGluYXRhIHNlY3JldCBhcGkga2V5IGFzIGFuIGFyZ3VtZW50IHdoZW4geW91IHN0YXJ0IHRoaXMgc2NyaXB0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGhvc3QgTm9kZXNcbiAqIEBwYXJhbSB7Kn0gaG9zdE5vZGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUhvc3ROb2Rlcyhob3N0Tm9kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaG9zdE5vZGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvc3Rfbm9kZXMgdmFsdWUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBob3N0Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAoIWlzSVBGUy5wZWVyTXVsdGlhZGRyKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGhvc3Rfbm9kZSBhcnJheSBlbnRyeTogJHtub2RlfSBpcyBub3QgYSB2YWxpZCBwZWVyIG11bHRpYWRkcmApO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgTWV0YURhdGFcbiAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICBpZiAobWV0YWRhdGEubmFtZSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbWV0YWRhdGEubmFtZSA9PT0gJ3N0cmluZycgfHwgbWV0YWRhdGEubmFtZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgbmFtZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5rZXl2YWx1ZXMgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhdGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpID4gOSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9yZSB0aGFuIDEwIGtleXZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgZm9yIG1ldGFkYXRhIGVudHJpZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhIHN0cmluZywgYSBib29sZWFuLCBvciBhIG51bWJlciwgc28gd2UgZG9uJ3QgZ2V0IGFuIG9iamVjdCBwYXNzZWQgaW4gYnkgYWNjaWRlbnRcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiBrZXlWYWx1ZVsxXSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleVZhbHVlWzFdID09PSAnYm9vbGVhbicgfHwgIWlzTmFOKGtleVZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBQaW4gUG9saWN5IFN0cnVjdHVyZVxuICogQHBhcmFtIHsqfSBwaW5Qb2xpY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKHBpblBvbGljeSkge1xuICAgIC8vdGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIHBpbiBwb2xpY3kgYW5kIGNoZWNrcyB0aGUgSlNPTiBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWRcbiAgICBpZiAoIXBpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbiBwb2xpY3kgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXBpblBvbGljeS5yZWdpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaW9ucyBwcm92aWRlZCBpbiBwaW4gcG9saWN5Jyk7XG4gICAgfVxuICAgIGlmIChwaW5Qb2xpY3kucmVnaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcGluUG9saWN5LnJlZ2lvbnMuZm9yRWFjaCgocmVnaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlZ2lvbi5pZCB8fCAhKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZWdpb24uaWQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lvbiBpZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCB8fCByZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgPT09IDApIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc2lyZWRSZXBsaWNhdGlvbkNvdW50IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgUGluYXRhIE9wdGlvbnNcbiAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob3B0aW9ucy5jaWRWZXJzaW9uICE9IDAgJiYgb3B0aW9ucy5jaWRWZXJzaW9uICE9IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBjaWRWZXJzaW9uJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSAhPT0gdHJ1ZSAmJiBvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cmFwV2l0aERpcmVjdG9yeSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSBvZiB0cnVlIG9yIGZhbHNlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5ob3N0Tm9kZXMpIHtcbiAgICAgICAgdmFsaWRhdGVIb3N0Tm9kZXMob3B0aW9ucy5ob3N0Tm9kZXMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmN1c3RvbVBpblBvbGljeSkge1xuICAgICAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShvcHRpb25zLmN1c3RvbVBpblBvbGljeSk7XG4gICAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXNzZXJ0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJ1ZmZlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInR0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6bGliXCIpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Jhc2UtcGF0aC1jb252ZXJ0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXgvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYnM1OC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY2lkcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jbGFzcy1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYXR0ZW4taW50by1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgudW11bGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcuYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9zaGltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbS9saWIvZGVsYXllZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2RlYnVnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9wb3B1bGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2hhcy1mbGFnL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGktYmFzZTMyL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC1yZWdleC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lwL2xpYi9pcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lzLWlwL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXMtaXBmcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tYWZtdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9jb2RlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29udmVydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL3Byb3RvY29scy10YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTE2LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvaW50LXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvcHJpbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy91dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdmFyaW50LXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGloYXNoZXMvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvY3BkaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVjdXJzaXZlLWZzL2xpYi9yZWFkZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvcm1kaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9kZWNvZGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZW5jb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2xlbmd0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3Bpbkxpc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcXVlcnlCdWlsZGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL2hhc2hNZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaFBpblBvbGljeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluQnlIYXNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5GaWxlVG9JUEZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Gcm9tRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpTT05Ub0lQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcGluSm9icy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9xdWVyeUJ1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3VucGluLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy91c2VyUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy91dGlsL2Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy91dGlsL3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImFzc2VydFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJidWZmZXJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJvc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInN0cmVhbVwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ0dHlcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwidXJsXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInV0aWxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiemxpYlwiIl0sIm5hbWVzIjpbInBpbkxpc3QiLCJwaW5hdGFBcGlLZXkiLCJwaW5hdGFTZWNyZXRBcGlLZXkiLCJmaWx0ZXJzIiwiYmFzZUVuZHBvaW50IiwiYmFzZVVybCIsImVuZHBvaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJheGlvcyIsImdldCIsIndpdGhDcmVkZW50aWFscyIsImhlYWRlcnMiLCJ0aGVuIiwicmVzdWx0Iiwic3RhdHVzIiwiRXJyb3IiLCJkYXRhIiwiZXJyb3IiLCJmb3JtYXR0ZWRFcnJvciIsInZhbGlkYXRlQW5kUmV0dXJuRGF0ZSIsImRhdGVUb1ZhbGlkYXRlIiwiZGF0ZVBhcnNlZCIsIkRhdGUiLCJwYXJzZSIsInRvSVNPU3RyaW5nIiwiZSIsInF1ZXJ5QnVpbGRlciIsImZpbHRlclF1ZXJ5IiwibWV0YWRhdGFRdWVyeSIsImhhc2hDb250YWlucyIsInBpblN0YXJ0IiwicGluRW5kIiwidW5waW5TdGFydCIsInVucGluRW5kIiwicGluU2l6ZU1pbiIsImlzTmFOIiwicGluU2l6ZU1heCIsInBhZ2VMaW1pdCIsInBhcnNlSW50IiwicGFnZU9mZnNldCIsIm1ldGFkYXRhIiwibmFtZSIsImtleXZhbHVlcyIsInBydW5lZEtleVZhbHVlcyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5VmFsdWUiLCJrZXkiLCJ2YWx1ZSIsIm9wIiwic2Vjb25kVmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwidGVzdEF1dGhlbnRpY2F0aW9uIiwiYXV0aGVudGljYXRlZCIsInVzZXJQaW5uZWREYXRhVG90YWwiLCJoYXNoTWV0YWRhdGEiLCJpcGZzUGluSGFzaCIsImlzSVBGUyIsImNpZCIsImJvZHkiLCJwdXQiLCJoYXNoUGluUG9saWN5IiwibmV3UGluUG9saWN5IiwicGluQnlIYXNoIiwiaGFzaFRvUGluIiwib3B0aW9ucyIsInBpbmF0YU9wdGlvbnMiLCJwaW5hdGFNZXRhZGF0YSIsInBvc3QiLCJwaW5GaWxlVG9JUEZTIiwicmVhZFN0cmVhbSIsIk5vZGVGb3JtRGF0YSIsImFwcGVuZCIsInN0cmVhbSIsIlJlYWRhYmxlIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJfYm91bmRhcnkiLCJmcyIsInJlcXVpcmUiLCJyZWN1cnNpdmUiLCJwaW5Gcm9tRlMiLCJzb3VyY2VQYXRoIiwic3RhdCIsImVyciIsInN0YXRzIiwiaXNGaWxlIiwiY3JlYXRlUmVhZFN0cmVhbSIsInJlYWRkaXJyIiwiZGlycyIsImZpbGVzIiwiZmlsZSIsImZpbGVwYXRoIiwicGluSlNPTlRvSVBGUyIsInJlcXVlc3RCb2R5IiwicGluYXRhQ29udGVudCIsInBpbkpvYnMiLCJuZXdVcmwiLCJmaXJzdEZpbHRlckFwcGxpZWQiLCJhZGRGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJzb3J0IiwiaXBmc19waW5faGFzaCIsImxpbWl0IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwib2Zmc2V0IiwidW5waW4iLCJoYXNoVG9VbnBpbiIsInVzZXJQaW5Qb2xpY3kiLCJwaW5hdGFDbGllbnQiLCJjbGllbnQiLCJyZWFkYWJsZVN0cmVhbSIsImhhbmRsZUVycm9yIiwicmVzcG9uc2UiLCJ2YWxpZGF0ZUFwaUtleXMiLCJ2YWxpZGF0ZUhvc3ROb2RlcyIsImhvc3ROb2RlcyIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGUiLCJwZWVyTXVsdGlhZGRyIiwidmFsaWRhdGVNZXRhZGF0YSIsIlN0cmluZyIsImkiLCJ2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSIsInBpblBvbGljeSIsInJlZ2lvbnMiLCJsZW5ndGgiLCJyZWdpb24iLCJpZCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiY2lkVmVyc2lvbiIsIndyYXBXaXRoRGlyZWN0b3J5IiwiY3VzdG9tUGluUG9saWN5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FB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QUNBO0FBQ0EsZUFBZSxtREFBbUQ7QUFDbEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUNuQyxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtB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QUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNFQUFvQjtBQUM1QixtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxnRUFBaUI7Ozs7Ozs7Ozs7OztBQ3JNMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLG9EQUFVOztBQUVuQyxPQUFPLFdBQVc7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDM1FBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFPLENBQUMsc0NBQUk7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxjQUFjO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixzQkFBc0I7QUFDdkM7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxpQ0FBaUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVDQUF1QyxFQUFFO0FBQy9ELEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLHVFQUF1RTtBQUN2RixZQUFZLG1FQUFtRTtBQUMvRSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xEOzs7Ozs7Ozs7Ozs7QUN2ZkEscUJBQXFCLG1CQUFPLENBQUMsOEVBQWlCO0FBQzlDLFdBQVcsbUJBQU8sQ0FBQyxrQkFBTTtBQUN6QixXQUFXLG1CQUFPLENBQUMsa0JBQU07QUFDekIsV0FBVyxtQkFBTyxDQUFDLGtCQUFNO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxvQkFBTztBQUMzQixlQUFlLG1CQUFPLENBQUMsZ0JBQUs7QUFDNUIsU0FBUyxtQkFBTyxDQUFDLGNBQUk7QUFDckIsV0FBVyxtQkFBTyxDQUFDLHNEQUFZO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxrREFBVTtBQUNqQyxlQUFlLG1CQUFPLENBQUMsK0RBQWU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNB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QTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFEQUFxRCxXQUFXO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix5QkFBeUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQsV0FBVztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsTUFBTSxtQ0FBTztBQUNiO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0S0FBNEs7QUFDNUs7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxjQUFjO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixVQUFVLHlCQUF5QixHQUFHO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFD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bUJBQU8sQ0FBQyxrREFBVTs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLEdBQUc7QUFDcEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNsSUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDNUJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUN6QkE7QUFDQSxZQUFZLG1CQUFPLENBQUMsb0RBQWE7QUFDakMsWUFBWSxt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QUErRTtBQUMzRSxZQUFNLElBQUk1SCxLQUFKLENBQVUsNERBQVYsQ0FBTjtBQUNIO0FBQ0o7O0FBRUQsTUFBSW9ELE9BQU8sQ0FBQ29ELFNBQVosRUFBdUI7QUFDbkJELHFCQUFpQixDQUFDbkQsT0FBTyxDQUFDb0QsU0FBVCxDQUFqQjtBQUNIOztBQUVELE1BQUlwRCxPQUFPLENBQUN5RSxlQUFaLEVBQTZCO0FBQ3pCYiw4QkFBMEIsQ0FBQzVELE9BQU8sQ0FBQ3lFLGVBQVQsQ0FBMUI7QUFDSDtBQUNKLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JIRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxrQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSxnQzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxpQyIsImZpbGUiOiJwaW5hdGEtc2RrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJwaW5hdGEtc2RrXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBpbmF0YS1zZGtcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGluYXRhLXNka1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBzZXJpYWxPcmRlcmVkID0gcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICByZXR1cm4gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgbnVsbCwgY2FsbGJhY2spO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBsb2NhdGlvbikge1xuICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG5cbiAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICBpZiAocHJveHkuYXV0aCkge1xuICAgIHZhciBiYXNlNjQgPSBCdWZmZXIuZnJvbShwcm94eS5hdXRoLnVzZXJuYW1lICsgJzonICsgcHJveHkuYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgfVxuXG4gIC8vIElmIGEgcHJveHkgaXMgdXNlZCwgYW55IHJlZGlyZWN0cyBtdXN0IGFsc28gcGFzcyB0aHJvdWdoIHRoZSBwcm94eVxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3Rpb24pIHtcbiAgICByZWRpcmVjdGlvbi5oZWFkZXJzLmhvc3QgPSByZWRpcmVjdGlvbi5ob3N0O1xuICAgIHNldFByb3h5KHJlZGlyZWN0aW9uLCBwcm94eSwgcmVkaXJlY3Rpb24uaHJlZik7XG4gIH07XG59XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpIHtcbiAgICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICAgIHJlamVjdFByb21pc2UodmFsdWUpO1xuICAgIH07XG4gICAgdmFyIGRhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCFoZWFkZXJzWydVc2VyLUFnZW50J10gJiYgIWhlYWRlcnNbJ3VzZXItYWdlbnQnXSkge1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBwa2cudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXlCdWZmZXIsIGEgQnVmZmVyLCBvciBhIFN0cmVhbScsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIHZhciBhdXRoID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIGF1dGggPSB1c2VybmFtZSArICc6JyArIHBhc3N3b3JkO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHZhciBwYXJzZWQgPSB1cmwucGFyc2UoZnVsbFBhdGgpO1xuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonO1xuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC5hdXRoKSB7XG4gICAgICB2YXIgdXJsQXV0aCA9IHBhcnNlZC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgdXJsVXNlcm5hbWUgPSB1cmxBdXRoWzBdIHx8ICcnO1xuICAgICAgdmFyIHVybFBhc3N3b3JkID0gdXJsQXV0aFsxXSB8fCAnJztcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmIChhdXRoKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIHZhciBpc0h0dHBzUmVxdWVzdCA9IGlzSHR0cHMudGVzdChwcm90b2NvbCk7XG4gICAgdmFyIGFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiBhZ2VudCxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGg6IGF1dGhcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRQYXRoKSB7XG4gICAgICBvcHRpb25zLnNvY2tldFBhdGggPSBjb25maWcuc29ja2V0UGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHBhcnNlZC5wb3J0O1xuICAgIH1cblxuICAgIHZhciBwcm94eSA9IGNvbmZpZy5wcm94eTtcbiAgICBpZiAoIXByb3h5ICYmIHByb3h5ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIHByb3h5RW52ID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpICsgJ19wcm94eSc7XG4gICAgICB2YXIgcHJveHlVcmwgPSBwcm9jZXNzLmVudltwcm94eUVudl0gfHwgcHJvY2Vzcy5lbnZbcHJveHlFbnYudG9VcHBlckNhc2UoKV07XG4gICAgICBpZiAocHJveHlVcmwpIHtcbiAgICAgICAgdmFyIHBhcnNlZFByb3h5VXJsID0gdXJsLnBhcnNlKHByb3h5VXJsKTtcbiAgICAgICAgdmFyIG5vUHJveHlFbnYgPSBwcm9jZXNzLmVudi5ub19wcm94eSB8fCBwcm9jZXNzLmVudi5OT19QUk9YWTtcbiAgICAgICAgdmFyIHNob3VsZFByb3h5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAobm9Qcm94eUVudikge1xuICAgICAgICAgIHZhciBub1Byb3h5ID0gbm9Qcm94eUVudi5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiB0cmltKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNob3VsZFByb3h5ID0gIW5vUHJveHkuc29tZShmdW5jdGlvbiBwcm94eU1hdGNoKHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudCA9PT0gJyonKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudFswXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgcGFyc2VkLmhvc3RuYW1lLnN1YnN0cihwYXJzZWQuaG9zdG5hbWUubGVuZ3RoIC0gcHJveHlFbGVtZW50Lmxlbmd0aCkgPT09IHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZC5ob3N0bmFtZSA9PT0gcHJveHlFbGVtZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFByb3h5KSB7XG4gICAgICAgICAgcHJveHkgPSB7XG4gICAgICAgICAgICBob3N0OiBwYXJzZWRQcm94eVVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnQsXG4gICAgICAgICAgICBwcm90b2NvbDogcGFyc2VkUHJveHlVcmwucHJvdG9jb2xcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHBhcnNlZFByb3h5VXJsLmF1dGgpIHtcbiAgICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBwcm94eS5hdXRoID0ge1xuICAgICAgICAgICAgICB1c2VybmFtZTogcHJveHlVcmxBdXRoWzBdLFxuICAgICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aCk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zcG9ydDtcbiAgICB2YXIgaXNIdHRwc1Byb3h5ID0gaXNIdHRwc1JlcXVlc3QgJiYgKHByb3h5ID8gaXNIdHRwcy50ZXN0KHByb3h5LnByb3RvY29sKSA6IHRydWUpO1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUHJveHkgPyBodHRwc0ZvbGxvdyA6IGh0dHBGb2xsb3c7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEpIHtcbiAgICAgIG9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IGNvbmZpZy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHZhciByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuXG4gICAgICAvLyBpZiBubyBjb250ZW50LCBpcyBIRUFEIHJlcXVlc3Qgb3IgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0ICYmIGxhc3RSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1EYXRhKGNodW5rKSB7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpLmxlbmd0aCA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIGNvbmZpZywgbnVsbCwgbGFzdFJlcXVlc3QpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YS50b1N0cmluZyhjb25maWcucmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNwb25zZUVuY29kaW5nIHx8IGNvbmZpZy5yZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gdXRpbHMuc3RyaXBCT00ocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RFcnJvcihlcnIpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCAmJiBlcnIuY29kZSAhPT0gJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnKSByZXR1cm47XG4gICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCByZXEpKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSByZXF1ZXN0IHRpbWVvdXRcbiAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3JpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dChjb25maWcudGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGRhdGEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRXJyb3IoZXJyKSB7XG4gICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgICAgfSkucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZVxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhY29uZmlnLnJlc3BvbnNlVHlwZSB8fCBjb25maWcucmVzcG9uc2VUeXBlID09PSAndGV4dCcgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcih0aW1lb3V0RXJyb3JNZXNzYWdlLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCkge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZVxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgdmFyIHZhbHVlRnJvbUNvbmZpZzJLZXlzID0gWyd1cmwnLCAnbWV0aG9kJywgJ2RhdGEnXTtcbiAgdmFyIG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzID0gWydoZWFkZXJzJywgJ2F1dGgnLCAncHJveHknLCAncGFyYW1zJ107XG4gIHZhciBkZWZhdWx0VG9Db25maWcyS2V5cyA9IFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3RpbWVvdXRNZXNzYWdlJywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ2RlY29tcHJlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ21heEJvZHlMZW5ndGgnLCAnbWF4UmVkaXJlY3RzJywgJ3RyYW5zcG9ydCcsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnLCAncmVzcG9uc2VFbmNvZGluZydcbiAgXTtcbiAgdmFyIGRpcmVjdE1lcmdlS2V5cyA9IFsndmFsaWRhdGVTdGF0dXMnXTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHV0aWxzLmZvckVhY2godmFsdWVGcm9tQ29uZmlnMktleXMsIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzLCBtZXJnZURlZXBQcm9wZXJ0aWVzKTtcblxuICB1dGlscy5mb3JFYWNoKGRlZmF1bHRUb0NvbmZpZzJLZXlzLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChkaXJlY3RNZXJnZUtleXMsIGZ1bmN0aW9uIG1lcmdlKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBheGlvc0tleXMgPSB2YWx1ZUZyb21Db25maWcyS2V5c1xuICAgIC5jb25jYXQobWVyZ2VEZWVwUHJvcGVydGllc0tleXMpXG4gICAgLmNvbmNhdChkZWZhdWx0VG9Db25maWcyS2V5cylcbiAgICAuY29uY2F0KGRpcmVjdE1lcmdlS2V5cyk7XG5cbiAgdmFyIG90aGVyS2V5cyA9IE9iamVjdFxuICAgIC5rZXlzKGNvbmZpZzEpXG4gICAgLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSlcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIGZpbHRlckF4aW9zS2V5cyhrZXkpIHtcbiAgICAgIHJldHVybiBheGlvc0tleXMuaW5kZXhPZihrZXkpID09PSAtMTtcbiAgICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG90aGVyS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4oZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuICh0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLypnbG9iYWwgdG9TdHJpbmc6dHJ1ZSovXG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT01cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsImZ1bmN0aW9uIGNvbnZlcnRGaWxlUGF0aFRvQmFzZURpcmVjdG9yeVBhdGgoc291cmNlUGF0aCwgZmlsZVBhdGgpIHtcbiAgICBsZXQgbmV3U3RyaW5nID0gKHNvdXJjZVBhdGguc3RhcnRzV2l0aCgnLi8nKSA/IHNvdXJjZVBhdGguc3Vic3RyaW5nKDIpIDogc291cmNlUGF0aCk7XG4gICAgLy9tYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYSBkYW5nbGluZyAvIHRvIHRocm93IGEgZmFsc2UgcG9zaXRpdmUgaW50byB0aGUgbWl4XG4gICAgY29uc3QgbGFzdEluZGV4T2ZEaXJlY3RvcnkgPSBuZXdTdHJpbmcubGFzdEluZGV4T2YoJy8nKTtcbiAgICBpZihsYXN0SW5kZXhPZkRpcmVjdG9yeSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBsZW5ndGhPZlNvdXJjZSA9IHNvdXJjZVBhdGgubGVuZ3RoO1xuICAgIC8vb25seSB0cmltIGlmIHRoZSAvIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nXG4gICAgaWYgKGxhc3RJbmRleE9mRGlyZWN0b3J5ID09PSAobGVuZ3RoT2ZTb3VyY2UgLSAxKSkge1xuICAgICAgICBuZXdTdHJpbmcgPSBzb3VyY2VQYXRoLnNsaWNlKDAsLTEpO1xuICAgIH1cblxuICAgIC8vbm93IHRoYXQgd2UncmUgc3VyZSBvZiBubyBmYWxzZSBwb3NpdGl2ZSwgbGV0J3MgY2hlY2sgYW5kIHNlZSB3aGVyZSB0aGUgXCJyb290XCIgZGlyZWN0b3J5IGlzXG4gICAgY29uc3QgbmV3TGFzdEluZGV4ID0gbmV3U3RyaW5nLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYgKCBuZXdMYXN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGF0aEdhcmJhZ2UgPSBuZXdTdHJpbmcuc3Vic3RyaW5nKDAsIG5ld0xhc3RJbmRleCArIDEpO1xuICAgICAgICBuZXdTdHJpbmcgPSBmaWxlUGF0aC5zcGxpdChwYXRoR2FyYmFnZSlbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0RmlsZVBhdGhUb0Jhc2VEaXJlY3RvcnlQYXRoIiwiJ3VzZSBzdHJpY3QnXG4vLyBiYXNlLXggZW5jb2RpbmcgLyBkZWNvZGluZ1xuLy8gQ29weXJpZ2h0IChjKSAyMDE4IGJhc2UteCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFRoZSBCaXRjb2luIENvcmUgZGV2ZWxvcGVycyAoYmFzZTU4LmNwcClcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgc29mdHdhcmUgbGljZW5zZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmdcbi8vIGZpbGUgTElDRU5TRSBvciBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocC5cbi8vIEB0cy1pZ25vcmVcbnZhciBfQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbmZ1bmN0aW9uIGJhc2UgKEFMUEhBQkVUKSB7XG4gIGlmIChBTFBIQUJFVC5sZW5ndGggPj0gMjU1KSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscGhhYmV0IHRvbyBsb25nJykgfVxuICB2YXIgQkFTRV9NQVAgPSBuZXcgVWludDhBcnJheSgyNTYpXG4gIGZvciAodmFyIGogPSAwOyBqIDwgQkFTRV9NQVAubGVuZ3RoOyBqKyspIHtcbiAgICBCQVNFX01BUFtqXSA9IDI1NVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQUxQSEFCRVQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgeCA9IEFMUEhBQkVULmNoYXJBdChpKVxuICAgIHZhciB4YyA9IHguY2hhckNvZGVBdCgwKVxuICAgIGlmIChCQVNFX01BUFt4Y10gIT09IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIGFtYmlndW91cycpIH1cbiAgICBCQVNFX01BUFt4Y10gPSBpXG4gIH1cbiAgdmFyIEJBU0UgPSBBTFBIQUJFVC5sZW5ndGhcbiAgdmFyIExFQURFUiA9IEFMUEhBQkVULmNoYXJBdCgwKVxuICB2YXIgRkFDVE9SID0gTWF0aC5sb2coQkFTRSkgLyBNYXRoLmxvZygyNTYpIC8vIGxvZyhCQVNFKSAvIGxvZygyNTYpLCByb3VuZGVkIHVwXG4gIHZhciBpRkFDVE9SID0gTWF0aC5sb2coMjU2KSAvIE1hdGgubG9nKEJBU0UpIC8vIGxvZygyNTYpIC8gbG9nKEJBU0UpLCByb3VuZGVkIHVwXG4gIGZ1bmN0aW9uIGVuY29kZSAoc291cmNlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSB8fCBzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7IHNvdXJjZSA9IF9CdWZmZXIuZnJvbShzb3VyY2UpIH1cbiAgICBpZiAoIV9CdWZmZXIuaXNCdWZmZXIoc291cmNlKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBCdWZmZXInKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnIH1cbiAgICAgICAgLy8gU2tpcCAmIGNvdW50IGxlYWRpbmcgemVyb2VzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB2YXIgcGJlZ2luID0gMFxuICAgIHZhciBwZW5kID0gc291cmNlLmxlbmd0aFxuICAgIHdoaWxlIChwYmVnaW4gIT09IHBlbmQgJiYgc291cmNlW3BiZWdpbl0gPT09IDApIHtcbiAgICAgIHBiZWdpbisrXG4gICAgICB6ZXJvZXMrK1xuICAgIH1cbiAgICAgICAgLy8gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGluIGJpZy1lbmRpYW4gYmFzZTU4IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKChwZW5kIC0gcGJlZ2luKSAqIGlGQUNUT1IgKyAxKSA+Pj4gMFxuICAgIHZhciBiNTggPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBieXRlcy5cbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kKSB7XG4gICAgICB2YXIgY2FycnkgPSBzb3VyY2VbcGJlZ2luXVxuICAgICAgICAgICAgLy8gQXBwbHkgXCJiNTggPSBiNTggKiAyNTYgKyBjaFwiLlxuICAgICAgdmFyIGkgPSAwXG4gICAgICBmb3IgKHZhciBpdDEgPSBzaXplIC0gMTsgKGNhcnJ5ICE9PSAwIHx8IGkgPCBsZW5ndGgpICYmIChpdDEgIT09IC0xKTsgaXQxLS0sIGkrKykge1xuICAgICAgICBjYXJyeSArPSAoMjU2ICogYjU4W2l0MV0pID4+PiAwXG4gICAgICAgIGI1OFtpdDFdID0gKGNhcnJ5ICUgQkFTRSkgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSA+Pj4gMFxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7IHRocm93IG5ldyBFcnJvcignTm9uLXplcm8gY2FycnknKSB9XG4gICAgICBsZW5ndGggPSBpXG4gICAgICBwYmVnaW4rK1xuICAgIH1cbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lcyBpbiBiYXNlNTggcmVzdWx0LlxuICAgIHZhciBpdDIgPSBzaXplIC0gbGVuZ3RoXG4gICAgd2hpbGUgKGl0MiAhPT0gc2l6ZSAmJiBiNThbaXQyXSA9PT0gMCkge1xuICAgICAgaXQyKytcbiAgICB9XG4gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgcmVzdWx0IGludG8gYSBzdHJpbmcuXG4gICAgdmFyIHN0ciA9IExFQURFUi5yZXBlYXQoemVyb2VzKVxuICAgIGZvciAoOyBpdDIgPCBzaXplOyArK2l0MikgeyBzdHIgKz0gQUxQSEFCRVQuY2hhckF0KGI1OFtpdDJdKSB9XG4gICAgcmV0dXJuIHN0clxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZVVuc2FmZSAoc291cmNlKSB7XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFN0cmluZycpIH1cbiAgICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gX0J1ZmZlci5hbGxvYygwKSB9XG4gICAgdmFyIHBzeiA9IDBcbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGFuZCBjb3VudCBsZWFkaW5nICcxJ3MuXG4gICAgdmFyIHplcm9lcyA9IDBcbiAgICB2YXIgbGVuZ3RoID0gMFxuICAgIHdoaWxlIChzb3VyY2VbcHN6XSA9PT0gTEVBREVSKSB7XG4gICAgICB6ZXJvZXMrK1xuICAgICAgcHN6KytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2UyNTYgcmVwcmVzZW50YXRpb24uXG4gICAgdmFyIHNpemUgPSAoKChzb3VyY2UubGVuZ3RoIC0gcHN6KSAqIEZBQ1RPUikgKyAxKSA+Pj4gMCAvLyBsb2coNTgpIC8gbG9nKDI1NiksIHJvdW5kZWQgdXAuXG4gICAgdmFyIGIyNTYgPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBjaGFyYWN0ZXJzLlxuICAgIHdoaWxlIChzb3VyY2VbcHN6XSkge1xuICAgICAgICAgICAgLy8gRGVjb2RlIGNoYXJhY3RlclxuICAgICAgdmFyIGNhcnJ5ID0gQkFTRV9NQVBbc291cmNlLmNoYXJDb2RlQXQocHN6KV1cbiAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyXG4gICAgICBpZiAoY2FycnkgPT09IDI1NSkgeyByZXR1cm4gfVxuICAgICAgdmFyIGkgPSAwXG4gICAgICBmb3IgKHZhciBpdDMgPSBzaXplIC0gMTsgKGNhcnJ5ICE9PSAwIHx8IGkgPCBsZW5ndGgpICYmIChpdDMgIT09IC0xKTsgaXQzLS0sIGkrKykge1xuICAgICAgICBjYXJyeSArPSAoQkFTRSAqIGIyNTZbaXQzXSkgPj4+IDBcbiAgICAgICAgYjI1NltpdDNdID0gKGNhcnJ5ICUgMjU2KSA+Pj4gMFxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIDI1NikgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcHN6KytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgdHJhaWxpbmcgc3BhY2VzLlxuICAgIGlmIChzb3VyY2VbcHN6XSA9PT0gJyAnKSB7IHJldHVybiB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYjI1Ni5cbiAgICB2YXIgaXQ0ID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDQgIT09IHNpemUgJiYgYjI1NltpdDRdID09PSAwKSB7XG4gICAgICBpdDQrK1xuICAgIH1cbiAgICB2YXIgdmNoID0gX0J1ZmZlci5hbGxvY1Vuc2FmZSh6ZXJvZXMgKyAoc2l6ZSAtIGl0NCkpXG4gICAgdmNoLmZpbGwoMHgwMCwgMCwgemVyb2VzKVxuICAgIHZhciBqID0gemVyb2VzXG4gICAgd2hpbGUgKGl0NCAhPT0gc2l6ZSkge1xuICAgICAgdmNoW2orK10gPSBiMjU2W2l0NCsrXVxuICAgIH1cbiAgICByZXR1cm4gdmNoXG4gIH1cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSB7IHJldHVybiBidWZmZXIgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm9uLWJhc2UnICsgQkFTRSArICcgY2hhcmFjdGVyJylcbiAgfVxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gYmFzZVxuIiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuXG52YXIgQ0lEVXRpbCA9IHtcbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGlzIG5vdC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgaXQgaXMgYSB2YWxpZCBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tDSURDb21wb25lbnRzOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsIHZhbHVlcyBhcmUgbm90IHZhbGlkIENJRHMnXG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIudmVyc2lvbiA9PT0gMCB8fCBvdGhlci52ZXJzaW9uID09PSAxKSkge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIHZlcnNpb24sIG11c3QgYmUgYSBudW1iZXIgZXF1YWwgdG8gMSBvciAwJ1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3RoZXIuY29kZWMgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ2NvZGVjIG11c3QgYmUgc3RyaW5nJ1xuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAob3RoZXIuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICAgIHJldHVybiBcImNvZGVjIG11c3QgYmUgJ2RhZy1wYicgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlci5tdWx0aWJhc2VOYW1lICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICByZXR1cm4gXCJtdWx0aWJhc2VOYW1lIG11c3QgYmUgJ2Jhc2U1OGJ0YycgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlci5tdWx0aWhhc2gpKSB7XG4gICAgICByZXR1cm4gJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBtaC52YWxpZGF0ZShvdGhlci5tdWx0aWhhc2gpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgZXJyb3JNc2cgPSBlcnIubWVzc2FnZVxuICAgICAgaWYgKCFlcnJvck1zZykgeyAvLyBKdXN0IGluIGNhc2UgbWgudmFsaWRhdGUoKSB0aHJvd3MgYW4gZXJyb3Igd2l0aCBlbXB0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGVycm9yTXNnID0gJ011bHRpaGFzaCB2YWxpZGF0aW9uIGZhaWxlZCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvck1zZ1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENJRFV0aWxcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBtaCA9IHJlcXVpcmUoJ211bHRpaGFzaGVzJylcbmNvbnN0IG11bHRpYmFzZSA9IHJlcXVpcmUoJ211bHRpYmFzZScpXG5jb25zdCBtdWx0aWNvZGVjID0gcmVxdWlyZSgnbXVsdGljb2RlYycpXG5jb25zdCBjb2RlY3MgPSByZXF1aXJlKCdtdWx0aWNvZGVjL3NyYy9iYXNlLXRhYmxlLmpzb24nKVxuY29uc3QgQ0lEVXRpbCA9IHJlcXVpcmUoJy4vY2lkLXV0aWwnKVxuY29uc3Qgd2l0aElzID0gcmVxdWlyZSgnY2xhc3MtaXMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6ZWRDSURcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlY1xuICogQHBhcmFtIHtudW1iZXJ9IHZlcnNpb25cbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqL1xuXG4vKipcbiAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgQ0lELlxuICogQGZ1bmN0aW9uIGlzQ0lEXG4gKiBAbWVtYmVyb2YgQ0lEXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAqIEByZXR1cm5zIHtib29sfVxuICovXG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgQ0lEIGA8bWJhc2U+PHZlcnNpb24+PG1jb2RlYz48bWhhc2g+YFxuICogLCBhcyBkZWZpbmVkIGluIFtpcGxkL2NpZF0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9jaWQpLlxuICogQGNsYXNzIENJRFxuICovXG5jbGFzcyBDSUQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENJRC5cbiAgICpcbiAgICogVGhlIGFsZ29yaXRobSBmb3IgYXJndW1lbnQgaW5wdXQgaXMgcm91Z2hseTpcbiAgICogYGBgXG4gICAqIGlmIChjaWQpXG4gICAqICAgLT4gY3JlYXRlIGEgY29weVxuICAgKiBlbHNlIGlmIChzdHIpXG4gICAqICAgaWYgKDFzdCBjaGFyIGlzIG9uIG11bHRpYmFzZSB0YWJsZSkgLT4gQ0lEIFN0cmluZ1xuICAgKiAgIGVsc2UgLT4gYnM1OCBlbmNvZGVkIG11bHRpaGFzaFxuICAgKiBlbHNlIGlmIChCdWZmZXIpXG4gICAqICAgaWYgKDFzdCBieXRlIGlzIDAgb3IgMSkgLT4gQ0lEXG4gICAqICAgZWxzZSAtPiBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoTnVtYmVyKVxuICAgKiAgIC0+IGNvbnN0cnVjdCBDSUQgYnkgcGFydHNcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcnxDSUR9IHZlcnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlY11cbiAgICogQHBhcmFtIHtCdWZmZXJ9IFttdWx0aWhhc2hdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbXVsdGliYXNlTmFtZV1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IENJRCg8dmVyc2lvbj4sIDxjb2RlYz4sIDxtdWx0aWhhc2g+LCA8bXVsdGliYXNlTmFtZT4pXG4gICAqIG5ldyBDSUQoPGNpZFN0cj4pXG4gICAqIG5ldyBDSUQoPGNpZC5idWZmZXI+KVxuICAgKiBuZXcgQ0lEKDxtdWx0aWhhc2g+KVxuICAgKiBuZXcgQ0lEKDxiczU4IGVuY29kZWQgbXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8Y2lkPilcbiAgICovXG4gIGNvbnN0cnVjdG9yICh2ZXJzaW9uLCBjb2RlYywgbXVsdGloYXNoLCBtdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKF9DSUQuaXNDSUQodmVyc2lvbikpIHtcbiAgICAgIC8vIHZlcnNpb24gaXMgYW4gZXhpc2luZyBDSUQgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGNpZCA9IHZlcnNpb25cbiAgICAgIHRoaXMudmVyc2lvbiA9IGNpZC52ZXJzaW9uXG4gICAgICB0aGlzLmNvZGVjID0gY2lkLmNvZGVjXG4gICAgICB0aGlzLm11bHRpaGFzaCA9IEJ1ZmZlci5mcm9tKGNpZC5tdWx0aWhhc2gpXG4gICAgICAvLyBEZWZhdWx0IGd1YXJkIGZvciB3aGVuIGEgQ0lEIDwgMC43IGlzIHBhc3NlZCB3aXRoIG5vIG11bHRpYmFzZU5hbWVcbiAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IGNpZC5tdWx0aWJhc2VOYW1lIHx8IChjaWQudmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBlLmcuICdiYXNlMzInIG9yIGZhbHNlXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IG11bHRpYmFzZS5pc0VuY29kZWQodmVyc2lvbilcbiAgICAgIGlmIChiYXNlTmFtZSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIFN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlLCBzbyB2MVxuICAgICAgICBjb25zdCBjaWQgPSBtdWx0aWJhc2UuZGVjb2RlKHZlcnNpb24pXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHBhcnNlSW50KGNpZC5zbGljZSgwLCAxKS50b1N0cmluZygnaGV4JyksIDE2KVxuICAgICAgICB0aGlzLmNvZGVjID0gbXVsdGljb2RlYy5nZXRDb2RlYyhjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGljb2RlYy5ybVByZWZpeChjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IGJhc2VOYW1lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgYmFzZTU4YnRjIHN0cmluZyBtdWx0aWhhc2gsIHNvIHYwXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDBcbiAgICAgICAgdGhpcy5jb2RlYyA9ICdkYWctcGInXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbWguZnJvbUI1OFN0cmluZyh2ZXJzaW9uKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTU4YnRjJ1xuICAgICAgfVxuICAgICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0cmluZycsIHsgdmFsdWU6IHZlcnNpb24gfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmVyc2lvbikpIHtcbiAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IHZlcnNpb24uc2xpY2UoMCwgMSlcbiAgICAgIGNvbnN0IHYgPSBwYXJzZUludChmaXJzdEJ5dGUudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgIGlmICh2ID09PSAxKSB7XG4gICAgICAgIC8vIHZlcnNpb24gaXMgYSBDSUQgYnVmZmVyXG4gICAgICAgIGNvbnN0IGNpZCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdlxuICAgICAgICB0aGlzLmNvZGVjID0gbXVsdGljb2RlYy5nZXRDb2RlYyhjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGljb2RlYy5ybVByZWZpeChjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9ICdiYXNlMzInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgcmF3IG11bHRpaGFzaCBidWZmZXIsIHNvIHYwXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDBcbiAgICAgICAgdGhpcy5jb2RlYyA9ICdkYWctcGInXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gdmVyc2lvblxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTU4YnRjJ1xuICAgICAgfVxuICAgICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGFzc2VtYmxlIHRoZSBDSUQgZnJvbSB0aGUgcGFyYW1ldGVyc1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY29kZWMgPSBjb2RlY1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpaGFzaFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBtdWx0aWJhc2VOYW1lIHx8ICh2ZXJzaW9uID09PSAwID8gJ2Jhc2U1OGJ0YycgOiAnYmFzZTMyJylcblxuICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDSUQgYXMgYSBgQnVmZmVyYFxuICAgKlxuICAgKiBAcmV0dXJuIHtCdWZmZXJ9XG4gICAqIEByZWFkb25seVxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ0lEXG4gICAqL1xuICBnZXQgYnVmZmVyICgpIHtcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5fYnVmZmVyXG5cbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgICBidWZmZXIgPSB0aGlzLm11bHRpaGFzaFxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgQnVmZmVyLmZyb20oJzAxJywgJ2hleCcpLFxuICAgICAgICAgIG11bHRpY29kZWMuZ2V0Q29kZVZhcmludCh0aGlzLmNvZGVjKSxcbiAgICAgICAgICB0aGlzLm11bHRpaGFzaFxuICAgICAgICBdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2ZXJzaW9uJylcbiAgICAgIH1cblxuICAgICAgLy8gQ2FjaGUgdGhpcyBidWZmZXIgc28gaXQgZG9lc24ndCBoYXZlIHRvIGJlIHJlY3JlYXRlZFxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfYnVmZmVyJywgeyB2YWx1ZTogYnVmZmVyIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlZml4IG9mIHRoZSBDSUQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHByZWZpeCAoKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20oYDAke3RoaXMudmVyc2lvbn1gLCAnaGV4JyksXG4gICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICBtaC5wcmVmaXgodGhpcy5tdWx0aWhhc2gpXG4gICAgXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDBgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMCAoKSB7XG4gICAgaWYgKHRoaXMuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgbm9uIGRhZy1wYiBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgbmFtZSwgbGVuZ3RoIH0gPSBtaC5kZWNvZGUodGhpcy5tdWx0aWhhc2gpXG5cbiAgICBpZiAobmFtZSAhPT0gJ3NoYTItMjU2Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBub24gc2hhMi0yNTYgbXVsdGloYXNoIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgaWYgKGxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIDMyIGJ5dGUgbXVsdGloYXNoIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQ0lEKDAsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gYSBDSUQgb2YgdmVyc2lvbiBgMWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDSUR9XG4gICAqL1xuICB0b1YxICgpIHtcbiAgICByZXR1cm4gbmV3IF9DSUQoMSwgdGhpcy5jb2RlYywgdGhpcy5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIHRoZSBDSUQgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlPXRoaXMubXVsdGliYXNlTmFtZV0gLSBCYXNlIGVuY29kaW5nIHRvIHVzZS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvQmFzZUVuY29kZWRTdHJpbmcgKGJhc2UgPSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICBpZiAodGhpcy5zdHJpbmcgJiYgYmFzZSA9PT0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmdcbiAgICB9XG4gICAgbGV0IHN0ciA9IG51bGxcbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAoYmFzZSAhPT0gJ2Jhc2U1OGJ0YycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3Qgc3VwcG9ydGVkIHdpdGggQ0lEdjAsIHRvIHN1cHBvcnQgZGlmZmVyZW50IGJhc2VzLCBwbGVhc2UgbWlncmF0ZSB0aGUgaW5zdGFuY2UgZG8gQ0lEdjEsIHlvdSBjYW4gZG8gdGhhdCB0aHJvdWdoIGNpZC50b1YxKCknKVxuICAgICAgfVxuICAgICAgc3RyID0gbWgudG9CNThTdHJpbmcodGhpcy5tdWx0aWhhc2gpXG4gICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHtcbiAgICAgIHN0ciA9IG11bHRpYmFzZS5lbmNvZGUoYmFzZSwgdGhpcy5idWZmZXIpLnRvU3RyaW5nKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2ZXJzaW9uJylcbiAgICB9XG4gICAgaWYgKGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgLy8gY2FjaGUgdGhlIHN0cmluZyB2YWx1ZVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiBzdHIgfSlcbiAgICB9XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgdG9TdHJpbmcgKGJhc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b0Jhc2VFbmNvZGVkU3RyaW5nKGJhc2UpXG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIGEgcGxhaW4gb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VyaWFsaXplZENJRH1cbiAgICovXG4gIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVjOiB0aGlzLmNvZGVjLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgaGFzaDogdGhpcy5tdWx0aWhhc2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBlcXVhbGl0eSB3aXRoIGFub3RoZXIgQ0lELlxuICAgKlxuICAgKiBAcGFyYW0ge0NJRH0gb3RoZXJcbiAgICogQHJldHVybnMge2Jvb2x9XG4gICAqL1xuICBlcXVhbHMgKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZWMgPT09IG90aGVyLmNvZGVjICYmXG4gICAgICB0aGlzLnZlcnNpb24gPT09IG90aGVyLnZlcnNpb24gJiZcbiAgICAgIHRoaXMubXVsdGloYXNoLmVxdWFscyhvdGhlci5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgYSB2YWxpZCBDSUQgb2JqZWN0LlxuICAgKiBUaHJvd3MgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVDSUQgKG90aGVyKSB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBDSURVdGlsLmNoZWNrQ0lEQ29tcG9uZW50cyhvdGhlcilcbiAgICBpZiAoZXJyb3JNc2cpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZylcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgX0NJRCA9IHdpdGhJcyhDSUQsIHtcbiAgY2xhc3NOYW1lOiAnQ0lEJyxcbiAgc3ltYm9sTmFtZTogJ0BpcGxkL2pzLWNpZC9DSUQnXG59KVxuXG5fQ0lELmNvZGVjcyA9IGNvZGVjc1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9DSURcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gd2l0aElzKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIGNvbnN0IENsYXNzSXNXcmFwcGVyID0ge1xuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3NpZ25zIHRoZSBjbGFzcyB3cmFwcGVyIHRvIGFuIG9iamVjdCB0byB0cmlja1xuICAgICAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZXMgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgY2xhc3Mgd2hlblxuICAgICAgICAvLyBsb2dnaW5nIGFuIGluc3RhbmNlcy5cbiAgICAgICAgLy8gV2UgYXJlIGFzc2lnbmluZyBhbiBhbm9ueW1vdXMgY2xhc3MgKGNsYXNzIHdyYXBwZXIpIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gd2l0aCBrZXkgYGNsYXNzTmFtZWAgdG8ga2VlcCB0aGUgY29ycmVjdCBuYW1lLlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaXQgZmFsbHMgYmFjayB0byBsb2dnaW5nIGBDbGFzc0lzV3JhcHBlcmAuXG4gICAgICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHdpdGhJc1Byb3RvKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSwgd2l0aG91dE5ldyB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1zaG9ydGhhbmQgKi9cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAod2l0aG91dE5ldyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBDbGFzc0lzV3JhcHBlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzSXNXcmFwcGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IENsYXNzLmNhbGwodGhpcywgLi4uYXJncykgfHwgdGhpcztcblxuICAgICAgICAgICAgaWYgKF90aGlzICYmICFfdGhpc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG4gICAgLyogZXNsaW50LWVuYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG5cbiAgICBDbGFzc0lzV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSk7XG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3NJc1dyYXBwZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIENsYXNzSXNXcmFwcGVyW2BpcyR7Y2xhc3NOYW1lfWBdID0gKG9iaikgPT4gISEob2JqICYmIG9ialtzeW1ib2xdKTtcblxuICAgIHJldHVybiBDbGFzc0lzV3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoSXM7XG5tb2R1bGUuZXhwb3J0cy5wcm90byA9IHdpdGhJc1Byb3RvO1xuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiBlbmFibGVPdmVycmlkZSA9PT0gbnVsbCA/IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKSA6IGVuYWJsZU92ZXJyaWRlLFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcbnRyeSB7XG4gIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbn1cbmNhdGNoIChlcnJvcikge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZGVidWc7XG4iLCJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBVUkwgPSB1cmwuVVJMO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50SGFuZGxlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuW1wiYWJvcnRcIiwgXCJhYm9ydGVkXCIsIFwiY29ubmVjdFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RhYmxlLmVtaXQoZXZlbnQsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICB9O1xufSk7XG5cbi8vIEVycm9yIHR5cGVzIHdpdGggY29kZXNcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiXCJcbik7XG52YXIgVG9vTWFueVJlZGlyZWN0c0Vycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFNcIixcbiAgXCJNYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgZXhjZWVkZWRcIlxuKTtcbnZhciBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfTUFYX0JPRFlfTEVOR1RIX0VYQ0VFREVEXCIsXG4gIFwiUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXRcIlxuKTtcbnZhciBXcml0ZUFmdGVyRW5kRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkRcIixcbiAgXCJ3cml0ZSBhZnRlciBlbmRcIlxuKTtcblxuLy8gQW4gSFRUUChTKSByZXF1ZXN0IHRoYXQgY2FuIGJlIHJlZGlyZWN0ZWRcbmZ1bmN0aW9uIFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgcmVzcG9uc2VDYWxsYmFjaykge1xuICAvLyBJbml0aWFsaXplIHRoZSByZXF1ZXN0XG4gIFdyaXRhYmxlLmNhbGwodGhpcyk7XG4gIHRoaXMuX3Nhbml0aXplT3B0aW9ucyhvcHRpb25zKTtcbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuX2VuZGVkID0gZmFsc2U7XG4gIHRoaXMuX2VuZGluZyA9IGZhbHNlO1xuICB0aGlzLl9yZWRpcmVjdENvdW50ID0gMDtcbiAgdGhpcy5fcmVkaXJlY3RzID0gW107XG4gIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoID0gMDtcbiAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChyZXNwb25zZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInJlc3BvbnNlXCIsIHJlc3BvbnNlQ2FsbGJhY2spO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gcmVzcG9uc2VzIG9mIG5hdGl2ZSByZXF1ZXN0c1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBzZWxmLl9wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9O1xuXG4gIC8vIFBlcmZvcm0gdGhlIGZpcnN0IHJlcXVlc3RcbiAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbn1cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZS5wcm90b3R5cGUpO1xuXG4vLyBXcml0ZXMgYnVmZmVyZWQgZGF0YSB0byB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFdyaXRpbmcgaXMgbm90IGFsbG93ZWQgaWYgZW5kIGhhcyBiZWVuIGNhbGxlZFxuICBpZiAodGhpcy5fZW5kaW5nKSB7XG4gICAgdGhyb3cgbmV3IFdyaXRlQWZ0ZXJFbmRFcnJvcigpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIChcImxlbmd0aFwiIGluIGRhdGEpKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIHNob3VsZCBiZSBhIHN0cmluZywgQnVmZmVyIG9yIFVpbnQ4QXJyYXlcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBJZ25vcmUgZW1wdHkgYnVmZmVycywgc2luY2Ugd3JpdGluZyB0aGVtIGRvZXNuJ3QgaW52b2tlIHRoZSBjYWxsYmFja1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzIyMDY2XG4gIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE9ubHkgd3JpdGUgd2hlbiB3ZSBkb24ndCBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgaWYgKHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICsgZGF0YS5sZW5ndGggPD0gdGhpcy5fb3B0aW9ucy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzLnB1c2goeyBkYXRhOiBkYXRhLCBlbmNvZGluZzogZW5jb2RpbmcgfSk7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qud3JpdGUoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxuICAvLyBFcnJvciB3aGVuIHdlIGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBlbHNlIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IoKSk7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG59O1xuXG4vLyBFbmRzIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBkYXRhO1xuICAgIGRhdGEgPSBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIFdyaXRlIGRhdGEgaWYgbmVlZGVkIGFuZCBlbmRcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhpcy5fZW5kZWQgPSB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBjdXJyZW50UmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0O1xuICAgIHRoaXMud3JpdGUoZGF0YSwgZW5jb2RpbmcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2VuZGVkID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLy8gU2V0cyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xufTtcblxuLy8gQ2xlYXJzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWxldGUgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVIZWFkZXIobmFtZSk7XG59O1xuXG4vLyBHbG9iYWwgdGltZW91dCBmb3IgYWxsIHVuZGVybHlpbmcgcmVxdWVzdHNcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAobXNlY3MsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMub25jZShcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgc3RhcnRUaW1lcih0aGlzLCBtc2Vjcyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uY2UoXCJzb2NrZXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc3RhcnRUaW1lcihzZWxmLCBtc2Vjcyk7XG4gICAgfSk7XG4gIH1cblxuICB0aGlzLm9uY2UoXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbmNlKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBzdGFydFRpbWVyKHJlcXVlc3QsIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChyZXF1ZXN0Ll90aW1lb3V0KTtcbiAgcmVxdWVzdC5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHJlcXVlc3QuZW1pdChcInRpbWVvdXRcIik7XG4gIH0sIG1zZWNzKTtcbn1cblxuZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xufVxuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImFib3J0XCIsIFwiZmx1c2hIZWFkZXJzXCIsIFwiZ2V0SGVhZGVyXCIsXG4gIFwic2V0Tm9EZWxheVwiLCBcInNldFNvY2tldEtlZXBBbGl2ZVwiLFxuXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXF1ZXN0W21ldGhvZF0oYSwgYik7XG4gIH07XG59KTtcblxuLy8gUHJveHkgYWxsIHB1YmxpYyBDbGllbnRSZXF1ZXN0IHByb3BlcnRpZXNcbltcImFib3J0ZWRcIiwgXCJjb25uZWN0aW9uXCIsIFwic29ja2V0XCJdLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSwgcHJvcGVydHksIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXF1ZXN0W3Byb3BlcnR5XTsgfSxcbiAgfSk7XG59KTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Nhbml0aXplT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8vIEVuc3VyZSBoZWFkZXJzIGFyZSBhbHdheXMgcHJlc2VudFxuICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gU2luY2UgaHR0cC5yZXF1ZXN0IHRyZWF0cyBob3N0IGFzIGFuIGFsaWFzIG9mIGhvc3RuYW1lLFxuICAvLyBidXQgdGhlIHVybCBtb2R1bGUgaW50ZXJwcmV0cyBob3N0IGFzIGhvc3RuYW1lIHBsdXMgcG9ydCxcbiAgLy8gZWxpbWluYXRlIHRoZSBob3N0IHByb3BlcnR5IHRvIGF2b2lkIGNvbmZ1c2lvbi5cbiAgaWYgKG9wdGlvbnMuaG9zdCkge1xuICAgIC8vIFVzZSBob3N0bmFtZSBpZiBzZXQsIGJlY2F1c2UgaXQgaGFzIHByZWNlZGVuY2VcbiAgICBpZiAoIW9wdGlvbnMuaG9zdG5hbWUpIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBvcHRpb25zLmhvc3Q7XG4gICAgfVxuICAgIGRlbGV0ZSBvcHRpb25zLmhvc3Q7XG4gIH1cblxuICAvLyBDb21wbGV0ZSB0aGUgVVJMIG9iamVjdCB3aGVuIG5lY2Vzc2FyeVxuICBpZiAoIW9wdGlvbnMucGF0aG5hbWUgJiYgb3B0aW9ucy5wYXRoKSB7XG4gICAgdmFyIHNlYXJjaFBvcyA9IG9wdGlvbnMucGF0aC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoUG9zIDwgMCkge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZygwLCBzZWFyY2hQb3MpO1xuICAgICAgb3B0aW9ucy5zZWFyY2ggPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKHNlYXJjaFBvcyk7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vIEV4ZWN1dGVzIHRoZSBuZXh0IG5hdGl2ZSByZXF1ZXN0IChpbml0aWFsIG9yIHJlZGlyZWN0KVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3BlcmZvcm1SZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBMb2FkIHRoZSBuYXRpdmUgcHJvdG9jb2xcbiAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5wcm90b2NvbDtcbiAgdmFyIG5hdGl2ZVByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5uYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdO1xuICBpZiAoIW5hdGl2ZVByb3RvY29sKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIHByb3RvY29sIFwiICsgcHJvdG9jb2wpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc3Vic3RyKDAsIHByb3RvY29sLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdFxuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgdGhpcy5fY3VycmVudFVybCA9IHVybC5mb3JtYXQodGhpcy5fb3B0aW9ucyk7XG5cbiAgLy8gU2V0IHVwIGV2ZW50IGhhbmRsZXJzXG4gIHJlcXVlc3QuX3JlZGlyZWN0YWJsZSA9IHRoaXM7XG4gIGZvciAodmFyIGV2ZW50IGluIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudCkge1xuICAgICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuZCBhIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICAvLyAoVGhlIGZpcnN0IHJlcXVlc3QgbXVzdCBiZSBlbmRlZCBleHBsaWNpdGx5IHdpdGggUmVkaXJlY3RhYmxlUmVxdWVzdCNlbmQpXG4gIGlmICh0aGlzLl9pc1JlZGlyZWN0KSB7XG4gICAgLy8gV3JpdGUgdGhlIHJlcXVlc3QgZW50aXR5IGFuZCBlbmQuXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycztcbiAgICAoZnVuY3Rpb24gd3JpdGVOZXh0KGVycm9yKSB7XG4gICAgICAvLyBPbmx5IHdyaXRlIGlmIHRoaXMgcmVxdWVzdCBoYXMgbm90IGJlZW4gcmVkaXJlY3RlZCB5ZXRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocmVxdWVzdCA9PT0gc2VsZi5fY3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgLy8gUmVwb3J0IGFueSB3cml0ZSBlcnJvcnNcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXcml0ZSB0aGUgbmV4dCBidWZmZXIgaWYgdGhlcmUgYXJlIHN0aWxsIGxlZnRcbiAgICAgICAgZWxzZSBpZiAoaSA8IGJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICghcmVxdWVzdC5maW5pc2hlZCkge1xuICAgICAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QgaWYgYGVuZGAgaGFzIGJlZW4gY2FsbGVkIG9uIHVzXG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2VuZGVkKSB7XG4gICAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0oKSk7XG4gIH1cbn07XG5cbi8vIFByb2Nlc3NlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wcm9jZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgLy8gU3RvcmUgdGhlIHJlZGlyZWN0ZWQgcmVzcG9uc2VcbiAgdmFyIHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAobG9jYXRpb24gJiYgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgIT09IGZhbHNlICYmXG4gICAgICBzdGF0dXNDb2RlID49IDMwMCAmJiBzdGF0dXNDb2RlIDwgNDAwKSB7XG4gICAgLy8gQWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuYWJvcnQoKTtcbiAgICAvLyBEaXNjYXJkIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlc3BvbnNlIHRvIGF2b2lkIHdhaXRpbmcgZm9yIGRhdGFcbiAgICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgICAvLyBSRkM3MjMxwqc2LjQ6IEEgY2xpZW50IFNIT1VMRCBkZXRlY3QgYW5kIGludGVydmVuZVxuICAgIC8vIGluIGN5Y2xpY2FsIHJlZGlyZWN0aW9ucyAoaS5lLiwgXCJpbmZpbml0ZVwiIHJlZGlyZWN0aW9uIGxvb3BzKS5cbiAgICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUb29NYW55UmVkaXJlY3RzRXJyb3IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gICAgLy8gY2FyZSBmb3IgbWV0aG9kcyBub3Qga25vd24gdG8gYmUgc2FmZSwgW+KApl1cbiAgICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gICAgLy8gdGhlIHJlcXVlc3QgbWV0aG9kIGZyb20gUE9TVCB0byBHRVQgZm9yIHRoZSBzdWJzZXF1ZW50IHJlcXVlc3QuXG4gICAgaWYgKChzdGF0dXNDb2RlID09PSAzMDEgfHwgc3RhdHVzQ29kZSA9PT0gMzAyKSAmJiB0aGlzLl9vcHRpb25zLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHxcbiAgICAgICAgLy8gUkZDNzIzMcKnNi40LjQ6IFRoZSAzMDMgKFNlZSBPdGhlcikgc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoYXRcbiAgICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgICAvLyBBIHVzZXIgYWdlbnQgY2FuIHBlcmZvcm0gYSByZXRyaWV2YWwgcmVxdWVzdCB0YXJnZXRpbmcgdGhhdCBVUklcbiAgICAgICAgLy8gKGEgR0VUIG9yIEhFQUQgcmVxdWVzdCBpZiB1c2luZyBIVFRQKSBb4oCmXVxuICAgICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgICAgdGhpcy5fb3B0aW9ucy5tZXRob2QgPSBcIkdFVFwiO1xuICAgICAgLy8gRHJvcCBhIHBvc3NpYmxlIGVudGl0eSBhbmQgaGVhZGVycyByZWxhdGVkIHRvIGl0XG4gICAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmNvbnRlbnQtL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuXG4gICAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgICB2YXIgcHJldmlvdXNIb3N0TmFtZSA9IHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmhvc3QkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycykgfHxcbiAgICAgIHVybC5wYXJzZSh0aGlzLl9jdXJyZW50VXJsKS5ob3N0bmFtZTtcblxuICAgIC8vIENyZWF0ZSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gICAgdmFyIHJlZGlyZWN0VXJsID0gdXJsLnJlc29sdmUodGhpcy5fY3VycmVudFVybCwgbG9jYXRpb24pO1xuICAgIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwpO1xuICAgIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICAgIHZhciByZWRpcmVjdFVybFBhcnRzID0gdXJsLnBhcnNlKHJlZGlyZWN0VXJsKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHJlZGlyZWN0VXJsUGFydHMpO1xuXG4gICAgLy8gRHJvcCB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgcmVkaXJlY3RpbmcgdG8gYW5vdGhlciBob3N0XG4gICAgaWYgKHJlZGlyZWN0VXJsUGFydHMuaG9zdG5hbWUgIT09IHByZXZpb3VzSG9zdE5hbWUpIHtcbiAgICAgIHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmF1dGhvcml6YXRpb24kL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuXG4gICAgLy8gRXZhbHVhdGUgdGhlIGJlZm9yZVJlZGlyZWN0IGNhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhciByZXNwb25zZURldGFpbHMgPSB7IGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMuYmVmb3JlUmVkaXJlY3QuY2FsbChudWxsLCB0aGlzLl9vcHRpb25zLCByZXNwb25zZURldGFpbHMpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG4gICAgfVxuICAgIGNhdGNoIChjYXVzZSkge1xuICAgICAgdmFyIGVycm9yID0gbmV3IFJlZGlyZWN0aW9uRXJyb3IoXCJSZWRpcmVjdGVkIHJlcXVlc3QgZmFpbGVkOiBcIiArIGNhdXNlLm1lc3NhZ2UpO1xuICAgICAgZXJyb3IuY2F1c2UgPSBjYXVzZTtcbiAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gVGhlIHJlc3BvbnNlIGlzIG5vdCBhIHJlZGlyZWN0OyByZXR1cm4gaXQgYXMtaXNcbiAgICByZXNwb25zZS5yZXNwb25zZVVybCA9IHRoaXMuX2N1cnJlbnRVcmw7XG4gICAgcmVzcG9uc2UucmVkaXJlY3RzID0gdGhpcy5fcmVkaXJlY3RzO1xuICAgIHRoaXMuZW1pdChcInJlc3BvbnNlXCIsIHJlc3BvbnNlKTtcblxuICAgIC8vIENsZWFuIHVwXG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG4gIH1cbn07XG5cbi8vIFdyYXBzIHRoZSBrZXkvdmFsdWUgb2JqZWN0IG9mIHByb3RvY29scyB3aXRoIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHlcbmZ1bmN0aW9uIHdyYXAocHJvdG9jb2xzKSB7XG4gIC8vIERlZmF1bHQgc2V0dGluZ3NcbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgbWF4UmVkaXJlY3RzOiAyMSxcbiAgICBtYXhCb2R5TGVuZ3RoOiAxMCAqIDEwMjQgKiAxMDI0LFxuICB9O1xuXG4gIC8vIFdyYXAgZWFjaCBwcm90b2NvbFxuICB2YXIgbmF0aXZlUHJvdG9jb2xzID0ge307XG4gIE9iamVjdC5rZXlzKHByb3RvY29scykuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1lKSB7XG4gICAgdmFyIHByb3RvY29sID0gc2NoZW1lICsgXCI6XCI7XG4gICAgdmFyIG5hdGl2ZVByb3RvY29sID0gbmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXSA9IHByb3RvY29sc1tzY2hlbWVdO1xuICAgIHZhciB3cmFwcGVkUHJvdG9jb2wgPSBleHBvcnRzW3NjaGVtZV0gPSBPYmplY3QuY3JlYXRlKG5hdGl2ZVByb3RvY29sKTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgcmVxdWVzdCwgZm9sbG93aW5nIHJlZGlyZWN0c1xuICAgIGZ1bmN0aW9uIHJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAvLyBQYXJzZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciB1cmxTdHIgPSBpbnB1dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhuZXcgVVJMKHVybFN0cikpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlucHV0ID0gdXJsLnBhcnNlKHVybFN0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFVSTCAmJiAoaW5wdXQgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICAgIGlucHV0ID0gdXJsVG9PcHRpb25zKGlucHV0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBpbnB1dDtcbiAgICAgICAgaW5wdXQgPSB7IHByb3RvY29sOiBwcm90b2NvbCB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG1heFJlZGlyZWN0czogZXhwb3J0cy5tYXhSZWRpcmVjdHMsXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgIH0sIGlucHV0LCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMubmF0aXZlUHJvdG9jb2xzID0gbmF0aXZlUHJvdG9jb2xzO1xuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBub29wKCkgeyAvKiBlbXB0eSAqLyB9XG5cbi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC91cmwuanNcbmZ1bmN0aW9uIHVybFRvT3B0aW9ucyh1cmxPYmplY3QpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgcHJvdG9jb2w6IHVybE9iamVjdC5wcm90b2NvbCxcbiAgICBob3N0bmFtZTogdXJsT2JqZWN0Lmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpID9cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUuc2xpY2UoMSwgLTEpIDpcbiAgICAgIHVybE9iamVjdC5ob3N0bmFtZSxcbiAgICBoYXNoOiB1cmxPYmplY3QuaGFzaCxcbiAgICBzZWFyY2g6IHVybE9iamVjdC5zZWFyY2gsXG4gICAgcGF0aG5hbWU6IHVybE9iamVjdC5wYXRobmFtZSxcbiAgICBwYXRoOiB1cmxPYmplY3QucGF0aG5hbWUgKyB1cmxPYmplY3Quc2VhcmNoLFxuICAgIGhyZWY6IHVybE9iamVjdC5ocmVmLFxuICB9O1xuICBpZiAodXJsT2JqZWN0LnBvcnQgIT09IFwiXCIpIHtcbiAgICBvcHRpb25zLnBvcnQgPSBOdW1iZXIodXJsT2JqZWN0LnBvcnQpO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNYXRjaGluZ0hlYWRlcnMocmVnZXgsIGhlYWRlcnMpIHtcbiAgdmFyIGxhc3RWYWx1ZTtcbiAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICBpZiAocmVnZXgudGVzdChoZWFkZXIpKSB7XG4gICAgICBsYXN0VmFsdWUgPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGFzdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZGVmYXVsdE1lc3NhZ2U7XG4gIH1cbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEN1c3RvbUVycm9yO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUubmFtZSA9IFwiRXJyb3IgW1wiICsgY29kZSArIFwiXVwiO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGU7XG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSB3cmFwKHsgaHR0cDogaHR0cCwgaHR0cHM6IGh0dHBzIH0pO1xubW9kdWxlLmV4cG9ydHMud3JhcCA9IHdyYXA7XG4iLCJ2YXIgQ29tYmluZWRTdHJlYW0gPSByZXF1aXJlKCdjb21iaW5lZC1zdHJlYW0nKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgbWltZSA9IHJlcXVpcmUoJ21pbWUtdHlwZXMnKTtcbnZhciBhc3luY2tpdCA9IHJlcXVpcmUoJ2FzeW5ja2l0Jyk7XG52YXIgcG9wdWxhdGUgPSByZXF1aXJlKCcuL3BvcHVsYXRlLmpzJyk7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gRm9ybURhdGE7XG5cbi8vIG1ha2UgaXQgYSBTdHJlYW1cbnV0aWwuaW5oZXJpdHMoRm9ybURhdGEsIENvbWJpbmVkU3RyZWFtKTtcblxuLyoqXG4gKiBDcmVhdGUgcmVhZGFibGUgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgc3RyZWFtcy5cbiAqIENhbiBiZSB1c2VkIHRvIHN1Ym1pdCBmb3Jtc1xuICogYW5kIGZpbGUgdXBsb2FkcyB0byBvdGhlciB3ZWIgYXBwbGljYXRpb25zLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBQcm9wZXJ0aWVzIHRvIGJlIGFkZGVkL292ZXJyaWRlbiBmb3IgRm9ybURhdGEgYW5kIENvbWJpbmVkU3RyZWFtXG4gKi9cbmZ1bmN0aW9uIEZvcm1EYXRhKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgIHJldHVybiBuZXcgRm9ybURhdGEoKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlXG4gIGlmICghdmFsdWUgfHwgKCAhdmFsdWUucGF0aCAmJiAhKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSApKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2JvdW5kYXJ5KSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YUJ1ZmZlciA9IG5ldyBCdWZmZXIuYWxsb2MoIDAgKTtcbiAgdmFyIGJvdW5kYXJ5ID0gdGhpcy5nZXRCb3VuZGFyeSgpO1xuXG4gIC8vIENyZWF0ZSB0aGUgZm9ybSBjb250ZW50LiBBZGQgTGluZSBicmVha3MgdG8gdGhlIGVuZCBvZiBkYXRhLlxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fc3RyZWFtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAvLyBBZGQgY29udGVudCB0byB0aGUgYnVmZmVyLlxuICAgICAgaWYoQnVmZmVyLmlzQnVmZmVyKHRoaXMuX3N0cmVhbXNbaV0pKSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgdGhpcy5fc3RyZWFtc1tpXV0pO1xuICAgICAgfWVsc2Uge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX3N0cmVhbXNbaV0pXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBicmVhayBhZnRlciBjb250ZW50LlxuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnc3RyaW5nJyB8fCB0aGlzLl9zdHJlYW1zW2ldLnN1YnN0cmluZyggMiwgYm91bmRhcnkubGVuZ3RoICsgMiApICE9PSBib3VuZGFyeSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKEZvcm1EYXRhLkxJTkVfQlJFQUspXSApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGUgZm9vdGVyIGFuZCByZXR1cm4gdGhlIEJ1ZmZlciBvYmplY3QuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fbGFzdEJvdW5kYXJ5KCkpXSApO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZW5lcmF0ZUJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIC8vIFRoaXMgZ2VuZXJhdGVzIGEgNTAgY2hhcmFjdGVyIGJvdW5kYXJ5IHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieSBGaXJlZm94LlxuICAvLyBUaGV5IGFyZSBvcHRpbWl6ZWQgZm9yIGJveWVyLW1vb3JlIHBhcnNpbmcuXG4gIHZhciBib3VuZGFyeSA9ICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgIGJvdW5kYXJ5ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKS50b1N0cmluZygxNik7XG4gIH1cblxuICB0aGlzLl9ib3VuZGFyeSA9IGJvdW5kYXJ5O1xufTtcblxuLy8gTm90ZTogZ2V0TGVuZ3RoU3luYyBET0VTTidUIGNhbGN1bGF0ZSBzdHJlYW1zIGxlbmd0aFxuLy8gQXMgd29ya2Fyb3VuZCBvbmUgY2FuIGNhbGN1bGF0ZSBmaWxlIHNpemUgbWFudWFsbHlcbi8vIGFuZCBhZGQgaXQgYXMga25vd25MZW5ndGggb3B0aW9uXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoU3luYyA9IGZ1bmN0aW9uKCkge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIC8vIERvbid0IGdldCBjb25mdXNlZCwgdGhlcmUgYXJlIDMgXCJpbnRlcm5hbFwiIHN0cmVhbXMgZm9yIGVhY2gga2V5dmFsIHBhaXJcbiAgLy8gc28gaXQgYmFzaWNhbGx5IGNoZWNrcyBpZiB0aGVyZSBpcyBhbnkgdmFsdWUgYWRkZWQgdG8gdGhlIGZvcm1cbiAgaWYgKHRoaXMuX3N0cmVhbXMubGVuZ3RoKSB7XG4gICAga25vd25MZW5ndGggKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCkubGVuZ3RoO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzQwXG4gIGlmICghdGhpcy5oYXNLbm93bkxlbmd0aCgpKSB7XG4gICAgLy8gU29tZSBhc3luYyBsZW5ndGggcmV0cmlldmVycyBhcmUgcHJlc2VudFxuICAgIC8vIHRoZXJlZm9yZSBzeW5jaHJvbm91cyBsZW5ndGggY2FsY3VsYXRpb24gaXMgZmFsc2UuXG4gICAgLy8gUGxlYXNlIHVzZSBnZXRMZW5ndGgoY2FsbGJhY2spIHRvIGdldCBwcm9wZXIgbGVuZ3RoXG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHByb3BlciBsZW5ndGggaW4gc3luY2hyb25vdXMgd2F5LicpKTtcbiAgfVxuXG4gIHJldHVybiBrbm93bkxlbmd0aDtcbn07XG5cbi8vIFB1YmxpYyBBUEkgdG8gY2hlY2sgaWYgbGVuZ3RoIG9mIGFkZGVkIHZhbHVlcyBpcyBrbm93blxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzE5NlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzI2MlxuRm9ybURhdGEucHJvdG90eXBlLmhhc0tub3duTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoYXNLbm93bkxlbmd0aCA9IHRydWU7XG5cbiAgaWYgKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBoYXNLbm93bkxlbmd0aCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGhhc0tub3duTGVuZ3RoO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aCA9IGZ1bmN0aW9uKGNiKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgaWYgKHRoaXMuX3N0cmVhbXMubGVuZ3RoKSB7XG4gICAga25vd25MZW5ndGggKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCkubGVuZ3RoO1xuICB9XG5cbiAgaWYgKCF0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYi5iaW5kKHRoaXMsIG51bGwsIGtub3duTGVuZ3RoKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmNraXQucGFyYWxsZWwodGhpcy5fdmFsdWVzVG9NZWFzdXJlLCB0aGlzLl9sZW5ndGhSZXRyaWV2ZXIsIGZ1bmN0aW9uKGVyciwgdmFsdWVzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgIGtub3duTGVuZ3RoICs9IGxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNiKG51bGwsIGtub3duTGVuZ3RoKTtcbiAgfSk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24ocGFyYW1zLCBjYikge1xuICB2YXIgcmVxdWVzdFxuICAgICwgb3B0aW9uc1xuICAgICwgZGVmYXVsdHMgPSB7bWV0aG9kOiAncG9zdCd9XG4gICAgO1xuXG4gIC8vIHBhcnNlIHByb3ZpZGVkIHVybCBpZiBpdCdzIHN0cmluZ1xuICAvLyBvciB0cmVhdCBpdCBhcyBvcHRpb25zIG9iamVjdFxuICBpZiAodHlwZW9mIHBhcmFtcyA9PSAnc3RyaW5nJykge1xuXG4gICAgcGFyYW1zID0gcGFyc2VVcmwocGFyYW1zKTtcbiAgICBvcHRpb25zID0gcG9wdWxhdGUoe1xuICAgICAgcG9ydDogcGFyYW1zLnBvcnQsXG4gICAgICBwYXRoOiBwYXJhbXMucGF0aG5hbWUsXG4gICAgICBob3N0OiBwYXJhbXMuaG9zdG5hbWUsXG4gICAgICBwcm90b2NvbDogcGFyYW1zLnByb3RvY29sXG4gICAgfSwgZGVmYXVsdHMpO1xuXG4gIC8vIHVzZSBjdXN0b20gcGFyYW1zXG4gIH0gZWxzZSB7XG5cbiAgICBvcHRpb25zID0gcG9wdWxhdGUocGFyYW1zLCBkZWZhdWx0cyk7XG4gICAgLy8gaWYgbm8gcG9ydCBwcm92aWRlZCB1c2UgZGVmYXVsdCBvbmVcbiAgICBpZiAoIW9wdGlvbnMucG9ydCkge1xuICAgICAgb3B0aW9ucy5wb3J0ID0gb3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICAgIH1cbiAgfVxuXG4gIC8vIHB1dCB0aGF0IGdvb2QgY29kZSBpbiBnZXRIZWFkZXJzIHRvIHNvbWUgdXNlXG4gIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycyhwYXJhbXMuaGVhZGVycyk7XG5cbiAgLy8gaHR0cHMgaWYgc3BlY2lmaWVkLCBmYWxsYmFjayB0byBodHRwIGluIGFueSBvdGhlciBjYXNlXG4gIGlmIChvcHRpb25zLnByb3RvY29sID09ICdodHRwczonKSB7XG4gICAgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmVxdWVzdCA9IGh0dHAucmVxdWVzdChvcHRpb25zKTtcbiAgfVxuXG4gIC8vIGdldCBjb250ZW50IGxlbmd0aCBhbmQgZmlyZSBhd2F5XG4gIHRoaXMuZ2V0TGVuZ3RoKGZ1bmN0aW9uKGVyciwgbGVuZ3RoKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgY29udGVudCBsZW5ndGhcbiAgICByZXF1ZXN0LnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBsZW5ndGgpO1xuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCBjYik7XG4gICAgICByZXF1ZXN0Lm9uKCdyZXNwb25zZScsIGNiLmJpbmQodGhpcywgbnVsbCkpO1xuICAgIH1cbiAgfS5iaW5kKHRoaXMpKTtcblxuICByZXR1cm4gcmVxdWVzdDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgaWYgKCF0aGlzLmVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycjtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59O1xuIiwiLy8gcG9wdWxhdGVzIG1pc3NpbmcgdmFsdWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRzdCwgc3JjKSB7XG5cbiAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApXG4gIHtcbiAgICBkc3RbcHJvcF0gPSBkc3RbcHJvcF0gfHwgc3JjW3Byb3BdO1xuICB9KTtcblxuICByZXR1cm4gZHN0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YpID0+IHtcblx0YXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvcyA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsIi8qXG4gKiBbaGktYmFzZTMyXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2hpLWJhc2UzMn1cbiAqXG4gKiBAdmVyc2lvbiAwLjUuMFxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE4XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB7fTtcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fTk9ERV9KUyAmJiB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gIGlmIChOT0RFX0pTKSB7XG4gICAgcm9vdCA9IGdsb2JhbDtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSElfQkFTRTMyX05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEJBU0UzMl9FTkNPREVfQ0hBUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nycuc3BsaXQoJycpO1xuICB2YXIgQkFTRTMyX0RFQ09ERV9DSEFSID0ge1xuICAgICdBJzogMCwgJ0InOiAxLCAnQyc6IDIsICdEJzogMywgJ0UnOiA0LCAnRic6IDUsICdHJzogNiwgJ0gnOiA3LCAnSSc6IDgsXG4gICAgJ0onOiA5LCAnSyc6IDEwLCAnTCc6IDExLCAnTSc6IDEyLCAnTic6IDEzLCAnTyc6IDE0LCAnUCc6IDE1LCAnUSc6IDE2LFxuICAgICdSJzogMTcsICdTJzogMTgsICdUJzogMTksICdVJzogMjAsICdWJzogMjEsICdXJzogMjIsICdYJzogMjMsICdZJzogMjQsXG4gICAgJ1onOiAyNSwgJzInOiAyNiwgJzMnOiAyNywgJzQnOiAyOCwgJzUnOiAyOSwgJzYnOiAzMCwgJzcnOiAzMVxuICB9O1xuXG4gIHZhciBibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgdmFyIHRocm93SW52YWxpZFV0ZjggPSBmdW5jdGlvbiAocG9zaXRpb24sIHBhcnRpYWwpIHtcbiAgICBpZiAocGFydGlhbC5sZW5ndGggPiAxMCkge1xuICAgICAgcGFydGlhbCA9ICcuLi4nICsgcGFydGlhbC5zdWJzdHIoLTEwKTtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignRGVjb2RlZCBkYXRhIGlzIG5vdCB2YWxpZCBVVEYtOC4nXG4gICAgICArICcgTWF5YmUgdHJ5IGJhc2UzMi5kZWNvZGUuYXNCeXRlcygpPydcbiAgICAgICsgJyBQYXJ0aWFsIGRhdGEgYWZ0ZXIgcmVhZGluZyAnICsgcG9zaXRpb24gKyAnIGJ5dGVzOiAnICsgcGFydGlhbCArICcgPC0nKTtcbiAgICBlcnIucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aHJvdyBlcnI7XG4gIH07XG5cbiAgdmFyIHRvVXRmOFN0cmluZyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoLCBpID0gMCwgZm9sbG93aW5nQ2hhcnMgPSAwLCBiLCBjO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgIGlmIChiIDw9IDB4N0YpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChiID4gMHhCRiAmJiBiIDw9IDB4REYpIHtcbiAgICAgICAgYyA9IGIgJiAweDFGO1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGIgPD0gMHhFRikge1xuICAgICAgICBjID0gYiAmIDB4MEY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEY3KSB7XG4gICAgICAgIGMgPSBiICYgMHgwNztcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGxvd2luZ0NoYXJzOyArK2opIHtcbiAgICAgICAgYiA9IGJ5dGVzW2krK107XG4gICAgICAgIGlmIChiIDwgMHg4MCB8fCBiID4gMHhCRikge1xuICAgICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjIDw8PSA2O1xuICAgICAgICBjICs9IGIgJiAweDNGO1xuICAgICAgfVxuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjID4gMHgxMEZGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEwKSArIDB4RDgwMCk7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZGVjb2RlQXNCeXRlcyA9IGZ1bmN0aW9uIChiYXNlMzJTdHIpIHtcbiAgICBpZiAoIS9eW0EtWjItNz1dKyQvLnRlc3QoYmFzZTMyU3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGJhc2UzMlN0ciA9IGJhc2UzMlN0ci5yZXBsYWNlKC89L2csICcnKTtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBieXRlcyA9IFtdLCBpbmRleCA9IDAsIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG5cbiAgICAvLyA0IGNoYXIgdG8gMyBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjcgPDwgNSB8IHY4KSAmIDI1NTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfTtcblxuICB2YXIgZW5jb2RlQXNjaWkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gcGFyc2VJbnQobGVuZ3RoIC8gNSkgKiA1OyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGNoYXJcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMSkge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICc9PT09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAnPT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDMpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICc9PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlVXRmOCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBjb2RlLCBlbmQgPSBmYWxzZSwgYmFzZTMyU3RyID0gJycsXG4gICAgICBpbmRleCA9IDAsIGksIHN0YXJ0ID0gMCwgYnl0ZXMgPSAwLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGRvIHtcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1s1XTtcbiAgICAgIGJsb2Nrc1sxXSA9IGJsb2Nrc1s2XTtcbiAgICAgIGJsb2Nrc1syXSA9IGJsb2Nrc1s3XTtcbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNTsgKytpbmRleCkge1xuICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGMwIHwgKGNvZGUgPj4gNik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGUwIHwgKGNvZGUgPj4gMTIpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2luZGV4KSAmIDB4M2ZmKSk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGYwIHwgKGNvZGUgPj4gMTgpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBieXRlcyArPSBpIC0gc3RhcnQ7XG4gICAgICBzdGFydCA9IGkgLSA1O1xuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IGxlbmd0aCAmJiBpIDwgNikge1xuICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdjEgPSBibG9ja3NbMF07XG4gICAgICBpZiAoaSA+IDQpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgdjUgPSBibG9ja3NbNF07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAxKSB7XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgICAnPT09PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAgICc9PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAgICc9PT0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICAgJz0nO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKCFlbmQpO1xuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZUJ5dGVzID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY1ID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQsIGFzY2lpT25seSkge1xuICAgIHZhciBub3RTdHJpbmcgPSB0eXBlb2YoaW5wdXQpICE9PSAnc3RyaW5nJztcbiAgICBpZiAobm90U3RyaW5nICYmIGlucHV0LmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgaW5wdXQgPSBuZXcgVWludDhBcnJheShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyhpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiBlbmNvZGVBc2NpaShpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVVdGY4KGlucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChiYXNlMzJTdHIsIGFzY2lpT25seSkge1xuICAgIGlmICghYXNjaWlPbmx5KSB7XG4gICAgICByZXR1cm4gdG9VdGY4U3RyaW5nKGRlY29kZUFzQnl0ZXMoYmFzZTMyU3RyKSk7XG4gICAgfVxuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgc3RyID0gJycsIGxlbmd0aCA9IGJhc2UzMlN0ci5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gLTEpIHtcbiAgICAgIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gOCBjaGFyIHRvIDUgYnl0ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBsZW5ndGggPj4gMyA8PCAzOyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjggPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjcgPDwgNSB8IHY4KSAmIDI1NSk7XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGJ5dGVzXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA3KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlOiBkZWNvZGVcbiAgfTtcbiAgZGVjb2RlLmFzQnl0ZXMgPSBkZWNvZGVBc0J5dGVzO1xuXG4gIGlmIChDT01NT05fSlMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5iYXNlMzIgPSBleHBvcnRzO1xuICAgIGlmIChBTUQpIHtcbiAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdvcmQgPSAnW2EtZkEtRlxcXFxkOl0nO1xuY29uc3QgYiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmluY2x1ZGVCb3VuZGFyaWVzID9cblx0YCg/Oig/PD1cXFxcc3xeKSg/PSR7d29yZH0pfCg/PD0ke3dvcmR9KSg/PVxcXFxzfCQpKWAgOlxuXHQnJztcblxuY29uc3QgdjQgPSAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuXG5jb25zdCB2NnNlZyA9ICdbYS1mQS1GXFxcXGRdezEsNH0nO1xuY29uc3QgdjYgPSBgXG4oXG4oPzoke3Y2c2VnfTopezd9KD86JHt2NnNlZ318Oil8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo3OjogIDE6MjozOjQ6NTo2Ojc6OFxuKD86JHt2NnNlZ306KXs2fSg/OiR7djR9fDoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjY6OiAgICAxOjI6Mzo0OjU6Njo6OCAgIDE6MjozOjQ6NTo2Ojo4ICAxOjI6Mzo0OjU6Njo6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs1fSg/Ojoke3Y0fXwoOiR7djZzZWd9KXsxLDJ9fDopfCAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjogICAgICAxOjI6Mzo0OjU6Ojc6OCAgIDE6MjozOjQ6NTo6OCAgICAxOjI6Mzo0OjU6Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs0fSg/Oig6JHt2NnNlZ30pezAsMX06JHt2NH18KDoke3Y2c2VnfSl7MSwzfXw6KXwgLy8gMToyOjM6NDo6ICAgICAgICAxOjI6Mzo0Ojo2Ojc6OCAgIDE6MjozOjQ6OjggICAgICAxOjI6Mzo0Ojo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXszfSg/Oig6JHt2NnNlZ30pezAsMn06JHt2NH18KDoke3Y2c2VnfSl7MSw0fXw6KXwgLy8gMToyOjM6OiAgICAgICAgICAxOjI6Mzo6NTo2Ojc6OCAgIDE6MjozOjo4ICAgICAgICAxOjI6Mzo6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsyfSg/Oig6JHt2NnNlZ30pezAsM306JHt2NH18KDoke3Y2c2VnfSl7MSw1fXw6KXwgLy8gMToyOjogICAgICAgICAgICAxOjI6OjQ6NTo2Ojc6OCAgIDE6Mjo6OCAgICAgICAgICAxOjI6OjQ6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsxfSg/Oig6JHt2NnNlZ30pezAsNH06JHt2NH18KDoke3Y2c2VnfSl7MSw2fXw6KXwgLy8gMTo6ICAgICAgICAgICAgICAxOjozOjQ6NTo2Ojc6OCAgIDE6OjggICAgICAgICAgICAxOjozOjQ6NTo2Ojc6MS4yLjMuNFxuKD86OigoPzo6JHt2NnNlZ30pezAsNX06JHt2NH18KD86OiR7djZzZWd9KXsxLDd9fDopKSAgICAgICAgICAgLy8gOjoyOjM6NDo1OjY6Nzo4ICA6OjI6Mzo0OjU6Njo3OjggIDo6OCAgICAgICAgICAgICA6OjEuMi4zLjRcbikoJVswLTlhLXpBLVpdezEsfSk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICVldGgwICAgICAgICAgICAgJTFcbmAucmVwbGFjZSgvXFxzKlxcL1xcLy4qJC9nbSwgJycpLnJlcGxhY2UoL1xcbi9nLCAnJykudHJpbSgpO1xuXG5jb25zdCBpcCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID9cblx0bmV3IFJlZ0V4cChgKD86XiR7djR9JCl8KD86XiR7djZ9JClgKSA6XG5cdG5ldyBSZWdFeHAoYCg/OiR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX0pfCg/OiR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX0pYCwgJ2cnKTtcblxuaXAudjQgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y0fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX1gLCAnZycpO1xuaXAudjYgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y2fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX1gLCAnZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlwO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXAgPSBleHBvcnRzO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5cbmlwLnRvQnVmZmVyID0gZnVuY3Rpb24oaXAsIGJ1ZmYsIG9mZnNldCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcblxuICB2YXIgcmVzdWx0O1xuXG4gIGlmICh0aGlzLmlzVjRGb3JtYXQoaXApKSB7XG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDQpO1xuICAgIGlwLnNwbGl0KC9cXC4vZykubWFwKGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSBwYXJzZUludChieXRlLCAxMCkgJiAweGZmO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNWNkZvcm1hdChpcCkpIHtcbiAgICB2YXIgc2VjdGlvbnMgPSBpcC5zcGxpdCgnOicsIDgpO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXN2NCA9IHRoaXMuaXNWNEZvcm1hdChzZWN0aW9uc1tpXSk7XG4gICAgICB2YXIgdjRCdWZmZXI7XG5cbiAgICAgIGlmIChpc3Y0KSB7XG4gICAgICAgIHY0QnVmZmVyID0gdGhpcy50b0J1ZmZlcihzZWN0aW9uc1tpXSk7XG4gICAgICAgIHNlY3Rpb25zW2ldID0gdjRCdWZmZXIuc2xpY2UoMCwgMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodjRCdWZmZXIgJiYgKytpIDwgOCkge1xuICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaSwgMCwgdjRCdWZmZXIuc2xpY2UoMiwgNCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VjdGlvbnNbMF0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMudW5zaGlmdCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMucHVzaCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnMubGVuZ3RoIDwgOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9uc1tpXSAhPT0gJyc7IGkrKyk7XG4gICAgICB2YXIgYXJndiA9IFsgaSwgMSBdO1xuICAgICAgZm9yIChpID0gOSAtIHNlY3Rpb25zLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICBhcmd2LnB1c2goJzAnKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25zLnNwbGljZS5hcHBseShzZWN0aW9ucywgYXJndik7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDE2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gcGFyc2VJbnQoc2VjdGlvbnNbaV0sIDE2KTtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gd29yZCAmIDB4ZmY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCBpcCBhZGRyZXNzOiAnICsgaXApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmlwLnRvU3RyaW5nID0gZnVuY3Rpb24oYnVmZiwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gfn5vZmZzZXQ7XG4gIGxlbmd0aCA9IGxlbmd0aCB8fCAoYnVmZi5sZW5ndGggLSBvZmZzZXQpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKGxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChidWZmW29mZnNldCArIGldKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJy4nKTtcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IDE2KSB7XG4gICAgLy8gSVB2NlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmYucmVhZFVJbnQxNkJFKG9mZnNldCArIGkpLnRvU3RyaW5nKDE2KSk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5qb2luKCc6Jyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyhefDopMCg6MCkqOjAoOnwkKS8sICckMTo6JDMnKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOnszLDR9LywgJzo6Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGlwdjRSZWdleCA9IC9eKFxcZHsxLDN9XFwuKXszLDN9XFxkezEsM30kLztcbnZhciBpcHY2UmVnZXggPVxuICAgIC9eKDo6KT8oKChcXGR7MSwzfVxcLil7M30oXFxkezEsM30pezF9KT8oWzAtOWEtZl0pezAsNH06ezAsMn0pezEsOH0oOjopPyQvaTtcblxuaXAuaXNWNEZvcm1hdCA9IGZ1bmN0aW9uKGlwKSB7XG4gIHJldHVybiBpcHY0UmVnZXgudGVzdChpcCk7XG59O1xuXG5pcC5pc1Y2Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjZSZWdleC50ZXN0KGlwKTtcbn07XG5mdW5jdGlvbiBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSkge1xuICByZXR1cm4gZmFtaWx5ID8gZmFtaWx5LnRvTG93ZXJDYXNlKCkgOiAnaXB2NCc7XG59XG5cbmlwLmZyb21QcmVmaXhMZW4gPSBmdW5jdGlvbihwcmVmaXhsZW4sIGZhbWlseSkge1xuICBpZiAocHJlZml4bGVuID4gMzIpIHtcbiAgICBmYW1pbHkgPSAnaXB2Nic7XG4gIH0gZWxzZSB7XG4gICAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuICB9XG5cbiAgdmFyIGxlbiA9IDQ7XG4gIGlmIChmYW1pbHkgPT09ICdpcHY2Jykge1xuICAgIGxlbiA9IDE2O1xuICB9XG4gIHZhciBidWZmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gYnVmZi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgYml0cyA9IDg7XG4gICAgaWYgKHByZWZpeGxlbiA8IDgpIHtcbiAgICAgIGJpdHMgPSBwcmVmaXhsZW47XG4gICAgfVxuICAgIHByZWZpeGxlbiAtPSBiaXRzO1xuXG4gICAgYnVmZltpXSA9IH4oMHhmZiA+PiBiaXRzKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG59O1xuXG5pcC5tYXNrID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICBhZGRyID0gaXAudG9CdWZmZXIoYWRkcik7XG4gIG1hc2sgPSBpcC50b0J1ZmZlcihtYXNrKTtcblxuICB2YXIgcmVzdWx0ID0gbmV3IEJ1ZmZlcihNYXRoLm1heChhZGRyLmxlbmd0aCwgbWFzay5sZW5ndGgpKTtcblxuICB2YXIgaSA9IDA7XG4gIC8vIFNhbWUgcHJvdG9jb2wgLSBkbyBiaXR3aXNlIGFuZFxuICBpZiAoYWRkci5sZW5ndGggPT09IG1hc2subGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGFkZHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXNrLmxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjYgYWRkcmVzcyBhbmQgSVB2NCBtYXNrXG4gICAgLy8gKE1hc2sgbG93IGJpdHMpXG4gICAgZm9yIChpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbYWRkci5sZW5ndGggLSA0ICArIGldICYgbWFza1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSVB2NiBtYXNrIGFuZCBJUHY0IGFkZHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGggLSA2OyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gOjpmZmZmOmlwdjRcbiAgICByZXN1bHRbMTBdID0gMHhmZjtcbiAgICByZXN1bHRbMTFdID0gMHhmZjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2kgKyAxMl0gPSBhZGRyW2ldICYgbWFza1tpICsgMTJdO1xuICAgIH1cbiAgICBpID0gaSArIDEyO1xuICB9XG4gIGZvciAoOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKVxuICAgIHJlc3VsdFtpXSA9IDA7XG5cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKHJlc3VsdCk7XG59O1xuXG5pcC5jaWRyID0gZnVuY3Rpb24oY2lkclN0cmluZykge1xuICB2YXIgY2lkclBhcnRzID0gY2lkclN0cmluZy5zcGxpdCgnLycpO1xuXG4gIHZhciBhZGRyID0gY2lkclBhcnRzWzBdO1xuICBpZiAoY2lkclBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ0lEUiBzdWJuZXQ6ICcgKyBhZGRyKTtcblxuICB2YXIgbWFzayA9IGlwLmZyb21QcmVmaXhMZW4ocGFyc2VJbnQoY2lkclBhcnRzWzFdLCAxMCkpO1xuXG4gIHJldHVybiBpcC5tYXNrKGFkZHIsIG1hc2spO1xufTtcblxuaXAuc3VibmV0ID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICB2YXIgbmV0d29ya0FkZHJlc3MgPSBpcC50b0xvbmcoaXAubWFzayhhZGRyLCBtYXNrKSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBtYXNrJ3MgbGVuZ3RoLlxuICB2YXIgbWFza0J1ZmZlciA9IGlwLnRvQnVmZmVyKG1hc2spO1xuICB2YXIgbWFza0xlbmd0aCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1hc2tCdWZmZXJbaV0gPT09IDB4ZmYpIHtcbiAgICAgIG1hc2tMZW5ndGggKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9jdGV0ID0gbWFza0J1ZmZlcltpXSAmIDB4ZmY7XG4gICAgICB3aGlsZSAob2N0ZXQpIHtcbiAgICAgICAgb2N0ZXQgPSAob2N0ZXQgPDwgMSkgJiAweGZmO1xuICAgICAgICBtYXNrTGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG51bWJlck9mQWRkcmVzc2VzID0gTWF0aC5wb3coMiwgMzIgLSBtYXNrTGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIG5ldHdvcmtBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyksXG4gICAgZmlyc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyAxKSxcbiAgICBsYXN0QWRkcmVzczogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAyKSxcbiAgICBicm9hZGNhc3RBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMSksXG4gICAgc3VibmV0TWFzazogbWFzayxcbiAgICBzdWJuZXRNYXNrTGVuZ3RoOiBtYXNrTGVuZ3RoLFxuICAgIG51bUhvc3RzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICBudW1iZXJPZkFkZHJlc3NlcyA6IG51bWJlck9mQWRkcmVzc2VzIC0gMixcbiAgICBsZW5ndGg6IG51bWJlck9mQWRkcmVzc2VzLFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgcmV0dXJuIG5ldHdvcmtBZGRyZXNzID09PSBpcC50b0xvbmcoaXAubWFzayhvdGhlciwgbWFzaykpO1xuICAgIH1cbiAgfTtcbn07XG5cbmlwLmNpZHJTdWJuZXQgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLnN1Ym5ldChhZGRyLCBtYXNrKTtcbn07XG5cbmlwLm5vdCA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgdmFyIGJ1ZmYgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgYnVmZltpXSA9IDB4ZmYgXiBidWZmW2ldO1xuICB9XG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm9yID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBzYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFbaV0gfD0gYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGEpO1xuXG4gIC8vIG1peGVkIHByb3RvY29sc1xuICB9IGVsc2Uge1xuICAgIHZhciBidWZmID0gYTtcbiAgICB2YXIgb3RoZXIgPSBiO1xuICAgIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICBidWZmID0gYjtcbiAgICAgIG90aGVyID0gYTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBvdGhlci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGJ1ZmYubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZbaV0gfD0gb3RoZXJbaSAtIG9mZnNldF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xuICB9XG59O1xuXG5pcC5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBTYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3dhcFxuICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgdCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICAvLyBhIC0gSVB2NCwgYiAtIElQdjZcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKGJbaV0gIT09IDApIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB3b3JkID0gYi5yZWFkVUludDE2QkUoMTApO1xuICBpZiAod29yZCAhPT0gMCAmJiB3b3JkICE9PSAweGZmZmYpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2kgKyAxMl0pIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuaXAuaXNQcml2YXRlID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTBcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTkyXFwuMTY4XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNzJcXC4oMVs2LTldfDJcXGR8MzB8MzEpXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTY5XFwuMjU0XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXmZbY2RdWzAtOWEtZl17Mn06L2kudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDovaS50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5pc1B1YmxpYyA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuICFpcC5pc1ByaXZhdGUoYWRkcik7XG59O1xuXG5pcC5pc0xvb3BiYWNrID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pL1xuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXmZlODA6OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5sb29wYmFjayA9IGZ1bmN0aW9uKGZhbWlseSkge1xuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgaWYgKGZhbWlseSAhPT0gJ2lwdjQnICYmIGZhbWlseSAhPT0gJ2lwdjYnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYW1pbHkgbXVzdCBiZSBpcHY0IG9yIGlwdjYnKTtcbiAgfVxuXG4gIHJldHVybiBmYW1pbHkgPT09ICdpcHY0JyA/ICcxMjcuMC4wLjEnIDogJ2ZlODA6OjEnO1xufTtcblxuLy9cbi8vICMjIyBmdW5jdGlvbiBhZGRyZXNzIChuYW1lLCBmYW1pbHkpXG4vLyAjIyMjIEBuYW1lIHtzdHJpbmd8J3B1YmxpYyd8J3ByaXZhdGUnfSAqKk9wdGlvbmFsKiogTmFtZSBvciBzZWN1cml0eVxuLy8gICAgICBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UuXG4vLyAjIyMjIEBmYW1pbHkge2lwdjR8aXB2Nn0gKipPcHRpb25hbCoqIElQIGZhbWlseSBvZiB0aGUgYWRkcmVzcyAoZGVmYXVsdHNcbi8vICAgICAgdG8gaXB2NCkuXG4vL1xuLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB3aXRoXG4vLyB0aGUgc3BlY2lmaWVkIGBuYW1lYDpcbi8vICAgKiBTdHJpbmc6IEZpcnN0IGBmYW1pbHlgIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS5cbi8vICAgICAgICAgICAgIElmIG5vdCBmb3VuZCBzZWUgYHVuZGVmaW5lZGAuXG4vLyAgICogJ3B1YmxpYyc6IHRoZSBmaXJzdCBwdWJsaWMgaXAgYWRkcmVzcyBvZiBmYW1pbHkuXG4vLyAgICogJ3ByaXZhdGUnOiB0aGUgZmlyc3QgcHJpdmF0ZSBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiB1bmRlZmluZWQ6IEZpcnN0IGFkZHJlc3Mgd2l0aCBgaXB2NGAgb3IgbG9vcGJhY2sgYWRkcmVzcyBgMTI3LjAuMC4xYC5cbi8vXG5pcC5hZGRyZXNzID0gZnVuY3Rpb24obmFtZSwgZmFtaWx5KSB7XG4gIHZhciBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTtcbiAgdmFyIGFsbDtcblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgLy9cbiAgLy8gSWYgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBoYXMgYmVlbiBuYW1lZCxcbiAgLy8gcmV0dXJuIHRoZSBhZGRyZXNzLlxuICAvL1xuICBpZiAobmFtZSAmJiBuYW1lICE9PSAncHJpdmF0ZScgJiYgbmFtZSAhPT0gJ3B1YmxpYycpIHtcbiAgICB2YXIgcmVzID0gaW50ZXJmYWNlc1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24oZGV0YWlscykge1xuICAgICAgdmFyIGl0ZW1GYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGl0ZW1GYW1pbHkgPT09IGZhbWlseTtcbiAgICB9KTtcbiAgICBpZiAocmVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc1swXS5hZGRyZXNzO1xuICB9XG5cbiAgdmFyIGFsbCA9IE9iamVjdC5rZXlzKGludGVyZmFjZXMpLm1hcChmdW5jdGlvbiAobmljKSB7XG4gICAgLy9cbiAgICAvLyBOb3RlOiBuYW1lIHdpbGwgb25seSBiZSBgcHVibGljYCBvciBgcHJpdmF0ZWBcbiAgICAvLyB3aGVuIHRoaXMgaXMgY2FsbGVkLlxuICAgIC8vXG4gICAgdmFyIGFkZHJlc3NlcyA9IGludGVyZmFjZXNbbmljXS5maWx0ZXIoZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMuZmFtaWx5ID0gZGV0YWlscy5mYW1pbHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChkZXRhaWxzLmZhbWlseSAhPT0gZmFtaWx5IHx8IGlwLmlzTG9vcGJhY2soZGV0YWlscy5hZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZSA9PT0gJ3B1YmxpYycgPyBpcC5pc1ByaXZhdGUoZGV0YWlscy5hZGRyZXNzKSA6XG4gICAgICAgICAgaXAuaXNQdWJsaWMoZGV0YWlscy5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhZGRyZXNzZXMubGVuZ3RoID8gYWRkcmVzc2VzWzBdLmFkZHJlc3MgOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4gIWFsbC5sZW5ndGggPyBpcC5sb29wYmFjayhmYW1pbHkpIDogYWxsWzBdO1xufTtcblxuaXAudG9Mb25nID0gZnVuY3Rpb24oaXApIHtcbiAgdmFyIGlwbCA9IDA7XG4gIGlwLnNwbGl0KCcuJykuZm9yRWFjaChmdW5jdGlvbihvY3RldCkge1xuICAgIGlwbCA8PD0gODtcbiAgICBpcGwgKz0gcGFyc2VJbnQob2N0ZXQpO1xuICB9KTtcbiAgcmV0dXJuKGlwbCA+Pj4gMCk7XG59O1xuXG5pcC5mcm9tTG9uZyA9IGZ1bmN0aW9uKGlwbCkge1xuICByZXR1cm4gKChpcGwgPj4+IDI0KSArICcuJyArXG4gICAgICAoaXBsID4+IDE2ICYgMjU1KSArICcuJyArXG4gICAgICAoaXBsID4+IDggJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgJiAyNTUpICk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgaXBSZWdleCA9IHJlcXVpcmUoJ2lwLXJlZ2V4Jyk7XG5cbmNvbnN0IGlzSXAgPSBzdHJpbmcgPT4gaXBSZWdleCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY0ID0gc3RyaW5nID0+IGlwUmVnZXgudjQoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52NiA9IHN0cmluZyA9PiBpcFJlZ2V4LnY2KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudmVyc2lvbiA9IHN0cmluZyA9PiBpc0lwKHN0cmluZykgPyAoaXNJcC52NChzdHJpbmcpID8gNCA6IDYpIDogdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXA7XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTU4ID0gcmVxdWlyZSgnYnM1OCcpXG5jb25zdCBtdWx0aWhhc2ggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgTXVsdGlhZGRyID0gcmVxdWlyZSgnbXVsdGlhZGRyJylcbmNvbnN0IG1hZm10ID0gcmVxdWlyZSgnbWFmbXQnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5cbmNvbnN0IHVybFBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC9bXi9dK1xcLyhpcChmfG4pcylcXC8oKFxcdyspLiopL1xuY29uc3QgcGF0aFBhdHRlcm4gPSAvXlxcLyhpcChmfG4pcylcXC8oKFxcdyspLiopL1xuY29uc3QgZGVmYXVsdFByb3RvY29sTWF0Y2ggPSAxXG5jb25zdCBkZWZhdWx0SGFzaE1hdGggPSA0XG5cbmNvbnN0IGZxZG5QYXR0ZXJuID0gL15odHRwcz86XFwvXFwvKFteL10rKVxcLihpcCg/OmZ8bilzKVxcLlteL10rL1xuY29uc3QgZnFkbkhhc2hNYXRjaCA9IDFcbmNvbnN0IGZxZG5Qcm90b2NvbE1hdGNoID0gMlxuXG5mdW5jdGlvbiBpc011bHRpaGFzaCAoaGFzaCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaGFzaClcbiAgdHJ5IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNTguZGVjb2RlKGZvcm1hdHRlZCkpXG4gICAgbXVsdGloYXNoLmRlY29kZShidWZmZXIpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTXVsdGliYXNlIChoYXNoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG11bHRpYmFzZS5pc0VuY29kZWQoaGFzaClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ0lEIChoYXNoKSB7XG4gIHRyeSB7XG4gICAgbmV3IENJRChoYXNoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYWRkciAoaW5wdXQpIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGZhbHNlXG4gIGlmIChNdWx0aWFkZHIuaXNNdWx0aWFkZHIoaW5wdXQpKSByZXR1cm4gdHJ1ZVxuICB0cnkge1xuICAgIG5ldyBNdWx0aWFkZHIoaW5wdXQpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGVlck11bHRpYWRkciAoaW5wdXQpIHtcbiAgcmV0dXJuIGlzTXVsdGlhZGRyKGlucHV0KSAmJiBtYWZtdC5JUEZTLm1hdGNoZXMoaW5wdXQpXG59XG5cbmZ1bmN0aW9uIGlzSXBmcyAoaW5wdXQsIHBhdHRlcm4sIHByb3RvY29sTWF0Y2ggPSBkZWZhdWx0UHJvdG9jb2xNYXRjaCwgaGFzaE1hdGNoID0gZGVmYXVsdEhhc2hNYXRoKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dClcbiAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwZnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsZXQgaGFzaCA9IG1hdGNoW2hhc2hNYXRjaF1cblxuICBpZiAoaGFzaCAmJiBwYXR0ZXJuID09PSBmcWRuUGF0dGVybikge1xuICAgIC8vIHdoZW4gZG9pbmcgY2hlY2tzIGZvciBzdWJkb21haW4gY29udGV4dFxuICAgIC8vIGVuc3VyZSBoYXNoIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyAoYnJvd3NlcnMgZm9yY2UtbG93ZXJjYXNlIGF1dGhvcml0eSBjb21wb3RlbnQgYW55d2F5KVxuICAgIGhhc2ggPSBoYXNoLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBpc0NJRChoYXNoKVxufVxuXG5mdW5jdGlvbiBpc0lwbnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBmb3JtYXR0ZWQubWF0Y2gocGF0dGVybilcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1hdGNoW3Byb3RvY29sTWF0Y2hdICE9PSAnaXBucycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChoYXNoTWF0Y2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICBsZXQgaGFzaCA9IG1hdGNoW2hhc2hNYXRjaF1cbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gICAgcmV0dXJuIGlzQ0lEKGhhc2gpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZyAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbn1cblxuZnVuY3Rpb24gY29udmVydFRvU3RyaW5nIChpbnB1dCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBiYXNlNTguZW5jb2RlKGlucHV0KVxuICB9XG5cbiAgaWYgKGlzU3RyaW5nKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dFxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IGlwZnNTdWJkb21haW4gPSAodXJsKSA9PiBpc0lwZnModXJsLCBmcWRuUGF0dGVybiwgZnFkblByb3RvY29sTWF0Y2gsIGZxZG5IYXNoTWF0Y2gpXG5jb25zdCBpcG5zU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcG5zKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbXVsdGloYXNoOiBpc011bHRpaGFzaCxcbiAgbXVsdGlhZGRyOiBpc011bHRpYWRkcixcbiAgcGVlck11bHRpYWRkcjogaXNQZWVyTXVsdGlhZGRyLFxuICBjaWQ6IGlzQ0lELFxuICBiYXNlMzJjaWQ6IChjaWQpID0+IChpc011bHRpYmFzZShjaWQpID09PSAnYmFzZTMyJyAmJiBpc0NJRChjaWQpKSxcbiAgaXBmc1N1YmRvbWFpbjogaXBmc1N1YmRvbWFpbixcbiAgaXBuc1N1YmRvbWFpbjogaXBuc1N1YmRvbWFpbixcbiAgc3ViZG9tYWluOiAodXJsKSA9PiAoaXBmc1N1YmRvbWFpbih1cmwpIHx8IGlwbnNTdWJkb21haW4odXJsKSksXG4gIHN1YmRvbWFpblBhdHRlcm46IGZxZG5QYXR0ZXJuLFxuICBpcGZzVXJsOiAodXJsKSA9PiBpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSxcbiAgaXBuc1VybDogKHVybCkgPT4gaXNJcG5zKHVybCwgdXJsUGF0dGVybiksXG4gIHVybDogKHVybCkgPT4gKGlzSXBmcyh1cmwsIHVybFBhdHRlcm4pIHx8IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pKSxcbiAgdXJsUGF0dGVybjogdXJsUGF0dGVybixcbiAgaXBmc1BhdGg6IChwYXRoKSA9PiBpc0lwZnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBpcG5zUGF0aDogKHBhdGgpID0+IGlzSXBucyhwYXRoLCBwYXRoUGF0dGVybiksXG4gIHBhdGg6IChwYXRoKSA9PiAoaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pKSxcbiAgcGF0aFBhdHRlcm46IHBhdGhQYXR0ZXJuLFxuICB1cmxPclBhdGg6ICh4KSA9PiAoaXNJcGZzKHgsIHVybFBhdHRlcm4pIHx8IGlzSXBucyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwZnMoeCwgcGF0aFBhdHRlcm4pIHx8IGlzSXBucyh4LCBwYXRoUGF0dGVybikpLFxuICBjaWRQYXRoOiBwYXRoID0+IGlzU3RyaW5nKHBhdGgpICYmICFpc0NJRChwYXRoKSAmJiBpc0lwZnMoYC9pcGZzLyR7cGF0aH1gLCBwYXRoUGF0dGVybilcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBtdWx0aWFkZHIgPSByZXF1aXJlKCdtdWx0aWFkZHInKVxuXG4vKlxuICogVmFsaWQgY29tYmluYXRpb25zXG4gKi9cbmNvbnN0IEROUzQgPSBiYXNlKCdkbnM0JylcbmNvbnN0IEROUzYgPSBiYXNlKCdkbnM2JylcbmNvbnN0IEROUyA9IG9yKFxuICBiYXNlKCdkbnMnKSxcbiAgYmFzZSgnZG5zYWRkcicpLFxuICBETlM0LFxuICBETlM2XG4pXG5cbmNvbnN0IElQID0gb3IoYmFzZSgnaXA0JyksIGJhc2UoJ2lwNicpKVxuY29uc3QgVENQID0gb3IoXG4gIGFuZChJUCwgYmFzZSgndGNwJykpLFxuICBhbmQoRE5TLCBiYXNlKCd0Y3AnKSlcbilcbmNvbnN0IFVEUCA9IGFuZChJUCwgYmFzZSgndWRwJykpXG5jb25zdCBVVFAgPSBhbmQoVURQLCBiYXNlKCd1dHAnKSlcblxuY29uc3QgV2ViU29ja2V0cyA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCd3cycpKSxcbiAgYW5kKEROUywgYmFzZSgnd3MnKSlcbilcblxuY29uc3QgV2ViU29ja2V0c1NlY3VyZSA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCd3c3MnKSksXG4gIGFuZChETlMsIGJhc2UoJ3dzcycpKVxuKVxuXG5jb25zdCBIVFRQID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ2h0dHAnKSksXG4gIGFuZChJUCwgYmFzZSgnaHR0cCcpKSxcbiAgYW5kKEROUywgYmFzZSgnaHR0cCcpKVxuKVxuXG5jb25zdCBIVFRQUyA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCdodHRwcycpKSxcbiAgYW5kKElQLCBiYXNlKCdodHRwcycpKSxcbiAgYW5kKEROUywgYmFzZSgnaHR0cHMnKSlcbilcblxuY29uc3QgV2ViUlRDU3RhciA9IG9yKFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSlcbilcblxuY29uc3QgV2ViU29ja2V0U3RhciA9IG9yKFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSlcbilcblxuY29uc3QgV2ViUlRDRGlyZWN0ID0gb3IoXG4gIGFuZChIVFRQLCBiYXNlKCdwMnAtd2VicnRjLWRpcmVjdCcpKSxcbiAgYW5kKEhUVFBTLCBiYXNlKCdwMnAtd2VicnRjLWRpcmVjdCcpKVxuKVxuXG5jb25zdCBSZWxpYWJsZSA9IG9yKFxuICBXZWJTb2NrZXRzLFxuICBXZWJTb2NrZXRzU2VjdXJlLFxuICBIVFRQLFxuICBIVFRQUyxcbiAgV2ViUlRDU3RhcixcbiAgV2ViUlRDRGlyZWN0LFxuICBUQ1AsXG4gIFVUUFxuKVxuXG4vLyBVbmxpa2Ugd3Mtc3Rhciwgc3RhcmR1c3QgY2FuIHJ1biBvdmVyIGFueSB0cmFuc3BvcnQgdGh1cyByZW1vdmluZyB0aGUgcmVxdWlyZW1lbnQgZm9yIHdlYnNvY2tldHMgKGJ1dCBkb24ndCBldmVuIHRoaW5rIGFib3V0IHJ1bm5pbmcgYSBzdGFyZHVzdCBzZXJ2ZXIgb3ZlciB3ZWJydGMtc3RhciA7KSApXG5jb25zdCBTdGFyZHVzdCA9IG9yKFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycC1zdGFyZHVzdCcpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLXN0YXJkdXN0JykpXG4pXG5cbmNvbnN0IF9QMlAgPSBvcihcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAnKSksXG4gIFdlYlJUQ1N0YXIsXG4gIGJhc2UoJ3AycCcpXG4pXG5cbmNvbnN0IF9DaXJjdWl0ID0gb3IoXG4gIGFuZChfUDJQLCBiYXNlKCdwMnAtY2lyY3VpdCcpLCBfUDJQKSxcbiAgYW5kKF9QMlAsIGJhc2UoJ3AycC1jaXJjdWl0JykpLFxuICBhbmQoYmFzZSgncDJwLWNpcmN1aXQnKSwgX1AyUCksXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLWNpcmN1aXQnKSksXG4gIGFuZChiYXNlKCdwMnAtY2lyY3VpdCcpLCBSZWxpYWJsZSksXG4gIGJhc2UoJ3AycC1jaXJjdWl0JylcbilcblxuY29uc3QgQ2lyY3VpdFJlY3Vyc2l2ZSA9ICgpID0+IG9yKFxuICBhbmQoX0NpcmN1aXQsIENpcmN1aXRSZWN1cnNpdmUpLFxuICBfQ2lyY3VpdFxuKVxuXG5jb25zdCBDaXJjdWl0ID0gQ2lyY3VpdFJlY3Vyc2l2ZSgpXG5cbmNvbnN0IFAyUCA9IG9yKFxuICBhbmQoQ2lyY3VpdCwgX1AyUCwgQ2lyY3VpdCksXG4gIGFuZChfUDJQLCBDaXJjdWl0KSxcbiAgYW5kKENpcmN1aXQsIF9QMlApLFxuICBDaXJjdWl0LFxuICBfUDJQXG4pXG5cbmV4cG9ydHMuRE5TID0gRE5TXG5leHBvcnRzLkROUzQgPSBETlM0XG5leHBvcnRzLkROUzYgPSBETlM2XG5leHBvcnRzLklQID0gSVBcbmV4cG9ydHMuVENQID0gVENQXG5leHBvcnRzLlVEUCA9IFVEUFxuZXhwb3J0cy5VVFAgPSBVVFBcbmV4cG9ydHMuSFRUUCA9IEhUVFBcbmV4cG9ydHMuSFRUUFMgPSBIVFRQU1xuZXhwb3J0cy5XZWJTb2NrZXRzID0gV2ViU29ja2V0c1xuZXhwb3J0cy5XZWJTb2NrZXRzU2VjdXJlID0gV2ViU29ja2V0c1NlY3VyZVxuZXhwb3J0cy5XZWJTb2NrZXRTdGFyID0gV2ViU29ja2V0U3RhclxuZXhwb3J0cy5XZWJSVENTdGFyID0gV2ViUlRDU3RhclxuZXhwb3J0cy5XZWJSVENEaXJlY3QgPSBXZWJSVENEaXJlY3RcbmV4cG9ydHMuUmVsaWFibGUgPSBSZWxpYWJsZVxuZXhwb3J0cy5TdGFyZHVzdCA9IFN0YXJkdXN0XG5leHBvcnRzLkNpcmN1aXQgPSBDaXJjdWl0XG5leHBvcnRzLlAyUCA9IFAyUFxuZXhwb3J0cy5JUEZTID0gUDJQXG5cbi8qXG4gKiBWYWxpZGF0aW9uIGZ1bmNzXG4gKi9cblxuZnVuY3Rpb24gbWFrZU1hdGNoZXNGdW5jdGlvbiAocGFydGlhbE1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtYXRjaGVzIChhKSB7XG4gICAgaWYgKCFtdWx0aWFkZHIuaXNNdWx0aWFkZHIoYSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBtdWx0aWFkZHIoYSlcbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvLyBjYXRjaCBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2UgLy8gYWxzbyBpZiBpdCdzIGludmFsaWQgaXQncyBwcm9wYWJseSBub3QgbWF0Y2hpbmcgYXMgd2VsbCBzbyByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3V0ID0gcGFydGlhbE1hdGNoKGEucHJvdG9OYW1lcygpKVxuICAgIGlmIChvdXQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gb3V0Lmxlbmd0aCA9PT0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIGFuZCAoKSB7XG4gIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cylcbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChhKSB7XG4gICAgaWYgKGEubGVuZ3RoIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGFyZ3Muc29tZSgoYXJnKSA9PiB7XG4gICAgICBhID0gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGFyZygpLnBhcnRpYWxNYXRjaChhKVxuICAgICAgICA6IGFyZy5wYXJ0aWFsTWF0Y2goYSlcblxuICAgICAgaWYgKGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd7ICcgKyBhcmdzLmpvaW4oJyAnKSArICcgfScgfSxcbiAgICBpbnB1dDogYXJncyxcbiAgICBtYXRjaGVzOiBtYWtlTWF0Y2hlc0Z1bmN0aW9uKHBhcnRpYWxNYXRjaCksXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxufVxuXG5mdW5jdGlvbiBvciAoKSB7XG4gIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cylcblxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKGEpIHtcbiAgICBsZXQgb3V0ID0gbnVsbFxuICAgIGFyZ3Muc29tZSgoYXJnKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYXJnKCkucGFydGlhbE1hdGNoKGEpXG4gICAgICAgIDogYXJnLnBhcnRpYWxNYXRjaChhKVxuICAgICAgaWYgKHJlcykge1xuICAgICAgICBvdXQgPSByZXNcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAneyAnICsgYXJncy5qb2luKCcgJykgKyAnIH0nIH0sXG4gICAgaW5wdXQ6IGFyZ3MsXG4gICAgbWF0Y2hlczogbWFrZU1hdGNoZXNGdW5jdGlvbihwYXJ0aWFsTWF0Y2gpLFxuICAgIHBhcnRpYWxNYXRjaDogcGFydGlhbE1hdGNoXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGJhc2UgKG4pIHtcbiAgY29uc3QgbmFtZSA9IG5cblxuICBmdW5jdGlvbiBtYXRjaGVzIChhKSB7XG4gICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IG11bHRpYWRkcihhKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7IC8vIGNhdGNoIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZSAvLyBhbHNvIGlmIGl0J3MgaW52YWxpZCBpdCdzIHByb3BhYmx5IG5vdCBtYXRjaGluZyBhcyB3ZWxsIHNvIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBuYW1lcyA9IGEucHJvdG9OYW1lcygpXG4gICAgaWYgKHBuYW1lcy5sZW5ndGggPT09IDEgJiYgcG5hbWVzWzBdID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAocHJvdG9zKSB7XG4gICAgaWYgKHByb3Rvcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKHByb3Rvc1swXSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHByb3Rvcy5zbGljZSgxKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZSB9LFxuICAgIG1hdGNoZXM6IG1hdGNoZXMsXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxufVxuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIGlmIChtcyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtcyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICByZXR1cm4gcGx1cmFsKG1zLCBkLCAnZGF5JykgfHxcbiAgICBwbHVyYWwobXMsIGgsICdob3VyJykgfHxcbiAgICBwbHVyYWwobXMsIG0sICdtaW51dGUnKSB8fFxuICAgIHBsdXJhbChtcywgcywgJ3NlY29uZCcpIHx8XG4gICAgbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG4sIG5hbWUpIHtcbiAgaWYgKG1zIDwgbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobXMgPCBuICogMS41KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobXMgLyBuKSArICcgJyArIG5hbWU7XG4gIH1cbiAgcmV0dXJuIE1hdGguY2VpbChtcyAvIG4pICsgJyAnICsgbmFtZSArICdzJztcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb252ZXJ0ID0gcmVxdWlyZSgnLi9jb252ZXJ0JylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbi8vIGV4cG9ydCBjb2RlY1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0cmluZ1RvU3RyaW5nVHVwbGVzOiBzdHJpbmdUb1N0cmluZ1R1cGxlcyxcbiAgc3RyaW5nVHVwbGVzVG9TdHJpbmc6IHN0cmluZ1R1cGxlc1RvU3RyaW5nLFxuXG4gIHR1cGxlc1RvU3RyaW5nVHVwbGVzOiB0dXBsZXNUb1N0cmluZ1R1cGxlcyxcbiAgc3RyaW5nVHVwbGVzVG9UdXBsZXM6IHN0cmluZ1R1cGxlc1RvVHVwbGVzLFxuXG4gIGJ1ZmZlclRvVHVwbGVzOiBidWZmZXJUb1R1cGxlcyxcbiAgdHVwbGVzVG9CdWZmZXI6IHR1cGxlc1RvQnVmZmVyLFxuXG4gIGJ1ZmZlclRvU3RyaW5nOiBidWZmZXJUb1N0cmluZyxcbiAgc3RyaW5nVG9CdWZmZXI6IHN0cmluZ1RvQnVmZmVyLFxuXG4gIGZyb21TdHJpbmc6IGZyb21TdHJpbmcsXG4gIGZyb21CdWZmZXI6IGZyb21CdWZmZXIsXG4gIHZhbGlkYXRlQnVmZmVyOiB2YWxpZGF0ZUJ1ZmZlcixcbiAgaXNWYWxpZEJ1ZmZlcjogaXNWYWxpZEJ1ZmZlcixcbiAgY2xlYW5QYXRoOiBjbGVhblBhdGgsXG5cbiAgUGFyc2VFcnJvcjogUGFyc2VFcnJvcixcbiAgcHJvdG9Gcm9tVHVwbGU6IHByb3RvRnJvbVR1cGxlLFxuXG4gIHNpemVGb3JBZGRyOiBzaXplRm9yQWRkclxufVxuXG4vLyBzdHJpbmcgLT4gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF1cbmZ1bmN0aW9uIHN0cmluZ1RvU3RyaW5nVHVwbGVzIChzdHIpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgY29uc3QgcGFydHMgPSBzdHIuc3BsaXQoJy8nKS5zbGljZSgxKSAvLyBza2lwIGZpcnN0IGVtcHR5IGVsZW1cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSAmJiBwYXJ0c1swXSA9PT0gJycpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGZvciAobGV0IHAgPSAwOyBwIDwgcGFydHMubGVuZ3RoOyBwKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbcF1cbiAgICBjb25zdCBwcm90byA9IHByb3RvY29scyhwYXJ0KVxuXG4gICAgaWYgKHByb3RvLnNpemUgPT09IDApIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtwYXJ0XSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcCsrIC8vIGFkdmFuY2UgYWRkciBwYXJ0XG4gICAgaWYgKHAgPj0gcGFydHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdpbnZhbGlkIGFkZHJlc3M6ICcgKyBzdHIpXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBhIHBhdGggcHJvdG8sIHRha2UgdGhlIHJlc3RcbiAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgdHVwbGVzLnB1c2goW1xuICAgICAgICBwYXJ0LFxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgbmVlZCB0byBjaGVjayBlYWNoIHBhdGggcGFydCB0byBzZWUgaWYgaXQncyBhIHByb3RvP1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGFsbG93IGZvciBvdGhlciBwcm90b2NvbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgYSB1bml4IHBhdGgsXG4gICAgICAgIC8vIGhvd2V2ZXIgaXQgd291bGQgaGF2ZSBpc3N1ZXMgaWYgdGhlIHBhdGggaGFkIGEgcHJvdG9jb2wgbmFtZSBpbiB0aGUgcGF0aFxuICAgICAgICBjbGVhblBhdGgocGFydHMuc2xpY2UocCkuam9pbignLycpKVxuICAgICAgXSlcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgdHVwbGVzLnB1c2goW3BhcnQsIHBhcnRzW3BdXSlcbiAgfVxuXG4gIHJldHVybiB0dXBsZXNcbn1cblxuLy8gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF0gLT4gc3RyaW5nXG5mdW5jdGlvbiBzdHJpbmdUdXBsZXNUb1N0cmluZyAodHVwbGVzKSB7XG4gIGNvbnN0IHBhcnRzID0gW11cbiAgdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIHBhcnRzLnB1c2gocHJvdG8ubmFtZSlcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhcnRzLnB1c2godHVwWzFdKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gY2xlYW5QYXRoKHBhcnRzLmpvaW4oJy8nKSlcbn1cblxuLy8gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF0gLT4gW1tpbnQgY29kZSwgQnVmZmVyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUdXBsZXNUb1R1cGxlcyAodHVwbGVzKSB7XG4gIHJldHVybiB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR1cCkpIHtcbiAgICAgIHR1cCA9IFt0dXBdXG4gICAgfVxuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvQnVmZmVyKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyXS4uLiBdIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiB0dXBsZXNUb1N0cmluZ1R1cGxlcyAodHVwbGVzKSB7XG4gIHJldHVybiB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gW3Byb3RvLmNvZGUsIGNvbnZlcnQudG9TdHJpbmcocHJvdG8uY29kZSwgdHVwWzFdKV1cbiAgICB9XG4gICAgcmV0dXJuIFtwcm90by5jb2RlXVxuICB9KVxufVxuXG4vLyBbW2ludCBjb2RlLCBCdWZmZXIgXS4uLiBdIC0+IEJ1ZmZlclxuZnVuY3Rpb24gdHVwbGVzVG9CdWZmZXIgKHR1cGxlcykge1xuICByZXR1cm4gZnJvbUJ1ZmZlcihCdWZmZXIuY29uY2F0KHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBsZXQgYnVmID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShwcm90by5jb2RlKSlcblxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgYnVmID0gQnVmZmVyLmNvbmNhdChbYnVmLCB0dXBbMV1dKSAvLyBhZGQgYWRkcmVzcyBidWZmZXJcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmXG4gIH0pKSlcbn1cblxuZnVuY3Rpb24gc2l6ZUZvckFkZHIgKHAsIGFkZHIpIHtcbiAgaWYgKHAuc2l6ZSA+IDApIHtcbiAgICByZXR1cm4gcC5zaXplIC8gOFxuICB9IGVsc2UgaWYgKHAuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYWRkcilcbiAgICByZXR1cm4gc2l6ZSArIHZhcmludC5kZWNvZGUuYnl0ZXNcbiAgfVxufVxuXG4vLyBCdWZmZXIgLT4gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXVxuZnVuY3Rpb24gYnVmZmVyVG9UdXBsZXMgKGJ1Zikge1xuICBjb25zdCB0dXBsZXMgPSBbXVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG5cbiAgICBjb25zdCBzaXplID0gc2l6ZUZvckFkZHIocCwgYnVmLnNsaWNlKGkgKyBuKSlcblxuICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbY29kZV0pXG4gICAgICBpICs9IG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYWRkciA9IGJ1Zi5zbGljZShpICsgbiwgaSArIG4gKyBzaXplKVxuXG4gICAgaSArPSAoc2l6ZSArIG4pXG5cbiAgICBpZiAoaSA+IGJ1Zi5sZW5ndGgpIHsgLy8gZGlkIG5vdCBlbmQgX2V4YWN0bHlfIGF0IGJ1ZmZlci5sZW5ndGhcbiAgICAgIHRocm93IFBhcnNlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyBidWZmZXI6ICcgKyBidWYudG9TdHJpbmcoJ2hleCcpKVxuICAgIH1cblxuICAgIC8vIG9rLCB0dXBsZSBzZWVtcyBnb29kLlxuICAgIHR1cGxlcy5wdXNoKFtjb2RlLCBhZGRyXSlcbiAgfVxuXG4gIHJldHVybiB0dXBsZXNcbn1cblxuLy8gQnVmZmVyIC0+IFN0cmluZ1xuZnVuY3Rpb24gYnVmZmVyVG9TdHJpbmcgKGJ1Zikge1xuICBjb25zdCBhID0gYnVmZmVyVG9UdXBsZXMoYnVmKVxuICBjb25zdCBiID0gdHVwbGVzVG9TdHJpbmdUdXBsZXMoYSlcbiAgcmV0dXJuIHN0cmluZ1R1cGxlc1RvU3RyaW5nKGIpXG59XG5cbi8vIFN0cmluZyAtPiBCdWZmZXJcbmZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyIChzdHIpIHtcbiAgc3RyID0gY2xlYW5QYXRoKHN0cilcbiAgY29uc3QgYSA9IHN0cmluZ1RvU3RyaW5nVHVwbGVzKHN0cilcbiAgY29uc3QgYiA9IHN0cmluZ1R1cGxlc1RvVHVwbGVzKGEpXG5cbiAgcmV0dXJuIHR1cGxlc1RvQnVmZmVyKGIpXG59XG5cbi8vIFN0cmluZyAtPiBCdWZmZXJcbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyaW5nVG9CdWZmZXIoc3RyKVxufVxuXG4vLyBCdWZmZXIgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tQnVmZmVyIChidWYpIHtcbiAgY29uc3QgZXJyID0gdmFsaWRhdGVCdWZmZXIoYnVmKVxuICBpZiAoZXJyKSB0aHJvdyBlcnJcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZikgLy8gY29weVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJ1ZmZlciAoYnVmKSB7XG4gIHRyeSB7XG4gICAgYnVmZmVyVG9UdXBsZXMoYnVmKSAvLyB0cnkgdG8gcGFyc2UuIHdpbGwgdGhyb3cgaWYgYnJlYWtzXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBlcnJcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkQnVmZmVyIChidWYpIHtcbiAgcmV0dXJuIHZhbGlkYXRlQnVmZmVyKGJ1ZikgPT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjbGVhblBhdGggKHN0cikge1xuICByZXR1cm4gJy8nICsgc3RyLnRyaW0oKS5zcGxpdCgnLycpLmZpbHRlcihhID0+IGEpLmpvaW4oJy8nKVxufVxuXG5mdW5jdGlvbiBQYXJzZUVycm9yIChzdHIpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcignRXJyb3IgcGFyc2luZyBhZGRyZXNzOiAnICsgc3RyKVxufVxuXG5mdW5jdGlvbiBwcm90b0Zyb21UdXBsZSAodHVwKSB7XG4gIGNvbnN0IHByb3RvID0gcHJvdG9jb2xzKHR1cFswXSlcbiAgcmV0dXJuIHByb3RvXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgaXAgPSByZXF1aXJlKCdpcCcpXG5jb25zdCBpc0lwID0gcmVxdWlyZSgnaXMtaXAnKVxuY29uc3QgcHJvdG9jb2xzID0gcmVxdWlyZSgnLi9wcm90b2NvbHMtdGFibGUnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCBiYXNlMzIgPSByZXF1aXJlKCdoaS1iYXNlMzInKVxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSBDb252ZXJ0XG5cbi8vIGNvbnZlcnRzIChzZXJpYWxpemVzKSBhZGRyZXNzZXNcbmZ1bmN0aW9uIENvbnZlcnQgKHByb3RvLCBhKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIENvbnZlcnQudG9TdHJpbmcocHJvdG8sIGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIENvbnZlcnQudG9CdWZmZXIocHJvdG8sIGEpXG4gIH1cbn1cblxuQ29udmVydC50b1N0cmluZyA9IGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAocHJvdG8sIGJ1Zikge1xuICBwcm90byA9IHByb3RvY29scyhwcm90bylcbiAgc3dpdGNoIChwcm90by5jb2RlKSB7XG4gICAgY2FzZSA0OiAvLyBpcHY0XG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGJ1ZjJpcChidWYpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBidWYycG9ydChidWYpXG5cbiAgICBjYXNlIDUzOiAvLyBkbnNcbiAgICBjYXNlIDU0OiAvLyBkbnM0XG4gICAgY2FzZSA1NTogLy8gZG5zNlxuICAgIGNhc2UgNTY6IC8vIGRuc2FkZHJcbiAgICBjYXNlIDQwMDogLy8gdW5peFxuICAgICAgcmV0dXJuIGJ1ZjJzdHIoYnVmKVxuXG4gICAgY2FzZSA0MjE6IC8vIGlwZnNcbiAgICAgIHJldHVybiBidWYybWgoYnVmKVxuICAgIGNhc2UgNDQ0OiAvLyBvbmlvblxuICAgICAgcmV0dXJuIGJ1ZjJvbmlvbihidWYpXG4gICAgY2FzZSA0NDU6IC8vIG9uaW9uM1xuICAgICAgcmV0dXJuIGJ1ZjJvbmlvbihidWYpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBidWYudG9TdHJpbmcoJ2hleCcpIC8vIG5vIGNsdWUuIGNvbnZlcnQgdG8gaGV4XG4gIH1cbn1cblxuQ29udmVydC50b0J1ZmZlciA9IGZ1bmN0aW9uIGNvbnZlcnRUb0J1ZmZlciAocHJvdG8sIHN0cikge1xuICBwcm90byA9IHByb3RvY29scyhwcm90bylcbiAgc3dpdGNoIChwcm90by5jb2RlKSB7XG4gICAgY2FzZSA0OiAvLyBpcHY0XG4gICAgICByZXR1cm4gaXAyYnVmKHN0cilcbiAgICBjYXNlIDQxOiAvLyBpcHY2XG4gICAgICByZXR1cm4gaXAyYnVmKHN0cilcblxuICAgIGNhc2UgNjogLy8gdGNwXG4gICAgY2FzZSAyNzM6IC8vIHVkcFxuICAgIGNhc2UgMzM6IC8vIGRjY3BcbiAgICBjYXNlIDEzMjogLy8gc2N0cFxuICAgICAgcmV0dXJuIHBvcnQyYnVmKHBhcnNlSW50KHN0ciwgMTApKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBzdHIyYnVmKHN0cilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gbWgyYnVmKHN0cilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBvbmlvbjJidWYoc3RyKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBvbmlvbjMyYnVmKHN0cilcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2hleCcpIC8vIG5vIGNsdWUuIGNvbnZlcnQgZnJvbSBoZXhcbiAgfVxufVxuXG5mdW5jdGlvbiBpcDJidWYgKGlwU3RyaW5nKSB7XG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwLnRvQnVmZmVyKGlwU3RyaW5nKVxufVxuXG5mdW5jdGlvbiBidWYyaXAgKGlwQnVmZikge1xuICBjb25zdCBpcFN0cmluZyA9IGlwLnRvU3RyaW5nKGlwQnVmZilcbiAgaWYgKCFpc0lwKGlwU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpcCBhZGRyZXNzJylcbiAgfVxuICByZXR1cm4gaXBTdHJpbmdcbn1cblxuZnVuY3Rpb24gcG9ydDJidWYgKHBvcnQpIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIpXG4gIGJ1Zi53cml0ZVVJbnQxNkJFKHBvcnQsIDApXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gYnVmMnBvcnQgKGJ1Zikge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRSgwKVxufVxuXG5mdW5jdGlvbiBzdHIyYnVmIChzdHIpIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyKVxuICBjb25zdCBzaXplID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWYubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIGJ1Zl0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJzdHIgKGJ1Zikge1xuICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShidWYpXG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnVmLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gbWgyYnVmIChoYXNoKSB7XG4gIC8vIHRoZSBhZGRyZXNzIGlzIGEgdmFyaW50IHByZWZpeGVkIG11bHRpaGFzaCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgY29uc3QgbWggPSBuZXcgQ0lEKGhhc2gpLm11bHRpaGFzaFxuICBjb25zdCBzaXplID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShtaC5sZW5ndGgpKVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbc2l6ZSwgbWhdKVxufVxuXG5mdW5jdGlvbiBidWYybWggKGJ1Zikge1xuICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShidWYpXG4gIGNvbnN0IGFkZHJlc3MgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYWRkcmVzcy5sZW5ndGggIT09IHNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29uc2lzdGVudCBsZW5ndGhzJylcbiAgfVxuXG4gIHJldHVybiBiczU4LmVuY29kZShhZGRyZXNzKVxufVxuXG5mdW5jdGlvbiBvbmlvbjJidWYgKHN0cikge1xuICBjb25zdCBhZGRyID0gc3RyLnNwbGl0KCc6JylcbiAgaWYgKGFkZHIubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHIgKyAnIGRvZXMgbm90IGNvbnRhaW4gYSBwb3J0IG51bWJlcicpXG4gIH1cbiAgaWYgKGFkZHJbMF0ubGVuZ3RoICE9PSAxNikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyWzBdICsgJyBub3QgYSBUb3Igb25pb24gYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBvbmlvbjMyYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uMyBhZGRyZXNzLicpXG4gIH1cbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oYmFzZTMyLmRlY29kZS5hc0J5dGVzKGFkZHJbMF0udG9VcHBlckNhc2UoKSkpXG5cbiAgLy8gb25pb24gcG9ydCBudW1iZXJcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGFkZHJbMV0sIDEwKVxuICBpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQb3J0IG51bWJlciBpcyBub3QgaW4gcmFuZ2UoMSwgNjU1MzYpJylcbiAgfVxuICBjb25zdCBwb3J0QnVmID0gcG9ydDJidWYocG9ydClcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgcG9ydEJ1Zl0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJvbmlvbiAoYnVmKSB7XG4gIGNvbnN0IGFkZHJCeXRlcyA9IGJ1Zi5zbGljZSgwLCBidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgcG9ydEJ5dGVzID0gYnVmLnNsaWNlKGJ1Zi5sZW5ndGggLSAyKVxuICBjb25zdCBhZGRyID0gYmFzZTMyLmVuY29kZShhZGRyQnl0ZXMpLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgcG9ydCA9IGJ1ZjJwb3J0KHBvcnRCeXRlcylcbiAgcmV0dXJuIGFkZHIgKyAnOicgKyBwb3J0XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgY29kZWMgPSByZXF1aXJlKCcuL2NvZGVjJylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5jb25zdCBiczU4ID0gcmVxdWlyZSgnYnM1OCcpXG5jb25zdCBDSUQgPSByZXF1aXJlKCdjaWRzJylcbmNvbnN0IHdpdGhJcyA9IHJlcXVpcmUoJ2NsYXNzLWlzJylcbmNvbnN0IGluc3BlY3QgPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXG5cbi8qKlxuICogQ3JlYXRlcyBhIFttdWx0aWFkZHJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyKSBmcm9tXG4gKiBhIEJ1ZmZlciwgU3RyaW5nIG9yIGFub3RoZXIgTXVsdGlhZGRyIGluc3RhbmNlXG4gKiBwdWJsaWMga2V5LlxuICogQGNsYXNzIE11bHRpYWRkclxuICogQHBhcmFtIHsoU3RyaW5nfEJ1ZmZlcnxNdWx0aWFkZHIpfSBhZGRyIC0gSWYgU3RyaW5nIG9yIEJ1ZmZlciwgbmVlZHMgdG8gYWRoZXJlXG4gKiB0byB0aGUgYWRkcmVzcyBmb3JtYXQgb2YgYSBbbXVsdGlhZGRyXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkciNzdHJpbmctZm9ybWF0KVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKi9cbmNvbnN0IE11bHRpYWRkciA9IHdpdGhJcy5wcm90byhmdW5jdGlvbiAoYWRkcikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTXVsdGlhZGRyKSkge1xuICAgIHJldHVybiBuZXcgTXVsdGlhZGRyKGFkZHIpXG4gIH1cblxuICAvLyBkZWZhdWx0XG4gIGlmIChhZGRyID09IG51bGwpIHtcbiAgICBhZGRyID0gJydcbiAgfVxuXG4gIGlmIChhZGRyIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0J1ZmZlcn0gLSBUaGUgcmF3IGJ5dGVzIHJlcHJlc2VudGluZyB0aGlzIG11bHRpYWRkcmVzc1xuICAgICAqL1xuICAgIHRoaXMuYnVmZmVyID0gY29kZWMuZnJvbUJ1ZmZlcihhZGRyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhZGRyID09PSAnc3RyaW5nJyB8fCBhZGRyIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKGFkZHIubGVuZ3RoID4gMCAmJiBhZGRyLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpYWRkciBcIiR7YWRkcn1cIiBtdXN0IHN0YXJ0IHdpdGggYSBcIi9cImApXG4gICAgfVxuICAgIHRoaXMuYnVmZmVyID0gY29kZWMuZnJvbVN0cmluZyhhZGRyKVxuICB9IGVsc2UgaWYgKGFkZHIuYnVmZmVyICYmIGFkZHIucHJvdG9zICYmIGFkZHIucHJvdG9Db2RlcykgeyAvLyBNdWx0aWFkZHJcbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21CdWZmZXIoYWRkci5idWZmZXIpIC8vIHZhbGlkYXRlICsgY29weSBidWZmZXJcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZHIgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBvciBhbm90aGVyIE11bHRpYWRkcicpXG4gIH1cbn0sIHsgY2xhc3NOYW1lOiAnTXVsdGlhZGRyJywgc3ltYm9sTmFtZTogJ0BtdWx0aWZvcm1hdHMvanMtbXVsdGlhZGRyL211bHRpYWRkcicgfSlcblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIFN0cmluZ1xuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgcmV0dXJuIGNvZGVjLmJ1ZmZlclRvU3RyaW5nKHRoaXMuYnVmZmVyKVxufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgSlNPTiBlbmNvZGVkIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogSlNPTi5zdHJpbmdpZnkoTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpKVxuICogLy8gJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnRvSlNPTiA9IE11bHRpYWRkci5wcm90b3R5cGUudG9TdHJpbmdcblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIGNvbnZpbmllbnQgb3B0aW9ucyBvYmplY3QgdG8gYmUgdXNlZCB3aXRoIG5ldC5jcmVhdGVDb25uZWN0aW9uXG4gKlxuICogQHJldHVybnMge3tmYW1pbHk6IFN0cmluZywgaG9zdDogU3RyaW5nLCB0cmFuc3BvcnQ6IFN0cmluZywgcG9ydDogTnVtYmVyfX1cbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykudG9PcHRpb25zKClcbiAqIC8vIHsgZmFtaWx5OiAnaXB2NCcsIGhvc3Q6ICcxMjcuMC4wLjEnLCB0cmFuc3BvcnQ6ICd0Y3AnLCBwb3J0OiA0MDAxIH1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b09wdGlvbnMgPSBmdW5jdGlvbiB0b09wdGlvbnMgKCkge1xuICBjb25zdCBvcHRzID0ge31cbiAgY29uc3QgcGFyc2VkID0gdGhpcy50b1N0cmluZygpLnNwbGl0KCcvJylcbiAgb3B0cy5mYW1pbHkgPSBwYXJzZWRbMV0gPT09ICdpcDQnID8gJ2lwdjQnIDogJ2lwdjYnXG4gIG9wdHMuaG9zdCA9IHBhcnNlZFsyXVxuICBvcHRzLnRyYW5zcG9ydCA9IHBhcnNlZFszXVxuICBvcHRzLnBvcnQgPSBwYXJzZUludChwYXJzZWRbNF0pXG4gIHJldHVybiBvcHRzXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBGb3IgcG9zdCBOb2RlLmpzIHYxMC4wLjAuXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL2RlcHJlY2F0aW9ucy5odG1sI2RlcHJlY2F0aW9uc19kZXAwMDc5X2N1c3RvbV9pbnNwZWN0aW9uX2Z1bmN0aW9uX29uX29iamVjdHNfdmlhX2luc3BlY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIGNvbnNvbGUubG9nKE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKSlcbiAqIC8vICc8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT4nXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGVbaW5zcGVjdF0gPSBmdW5jdGlvbiBpbnNwZWN0Q3VzdG9tICgpIHtcbiAgcmV0dXJuICc8TXVsdGlhZGRyICcgK1xuICAgIHRoaXMuYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSArICcgLSAnICtcbiAgICBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcikgKyAnPidcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqIEZhbGxiYWNrIGZvciBwcmUgTm9kZS5qcyB2MTAuMC4wLlxuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDA3OV9jdXN0b21faW5zcGVjdGlvbl9mdW5jdGlvbl9vbl9vYmplY3RzX3ZpYV9pbnNwZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykuaW5zcGVjdCgpXG4gKiAvLyAnPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+J1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgcmV0dXJuICc8TXVsdGlhZGRyICcgK1xuICAgIHRoaXMuYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSArICcgLSAnICtcbiAgICBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcikgKyAnPidcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm90b2NvbHMgdGhlIE11bHRpYWRkciBpcyBkZWZpbmVkIHdpdGgsIGFzIGFuIGFycmF5IG9mIG9iamVjdHMsIGluXG4gKiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLiBFYWNoIG9iamVjdCBjb250YWlucyB0aGUgcHJvdG9jb2wgY29kZSwgcHJvdG9jb2wgbmFtZSxcbiAqIGFuZCB0aGUgc2l6ZSBvZiBpdHMgYWRkcmVzcyBzcGFjZSBpbiBiaXRzLlxuICogW1NlZSBsaXN0IG9mIHByb3RvY29sc10oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdilcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPE9iamVjdD59IHByb3RvY29scyAtIEFsbCB0aGUgcHJvdG9jb2xzIHRoZSBhZGRyZXNzIGlzIGNvbXBvc2VkIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBwcm90b2NvbHNbXS5jb2RlXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBwcm90b2NvbHNbXS5zaXplXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBwcm90b2NvbHNbXS5uYW1lXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnByb3RvcygpXG4gKiAvLyBbIHsgY29kZTogNCwgc2l6ZTogMzIsIG5hbWU6ICdpcDQnIH0sXG4gKiAvLyAgIHsgY29kZTogNiwgc2l6ZTogMTYsIG5hbWU6ICd0Y3AnIH0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvcyA9IGZ1bmN0aW9uIHByb3RvcyAoKSB7XG4gIHJldHVybiB0aGlzLnByb3RvQ29kZXMoKS5tYXAoY29kZSA9PiBPYmplY3QuYXNzaWduKHt9LCBwcm90b2NvbHMoY29kZSkpKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvZGVzIG9mIHRoZSBwcm90b2NvbHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybnMge0FycmF5LjxOdW1iZXI+fSBwcm90b2NvbCBjb2Rlc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b0NvZGVzKClcbiAqIC8vIFsgNCwgNiBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUucHJvdG9Db2RlcyA9IGZ1bmN0aW9uIHByb3RvQ29kZXMgKCkge1xuICBjb25zdCBjb2RlcyA9IFtdXG4gIGNvbnN0IGJ1ZiA9IHRoaXMuYnVmZmVyXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGJ1Zi5sZW5ndGgpIHtcbiAgICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShidWYsIGkpXG4gICAgY29uc3QgbiA9IHZhcmludC5kZWNvZGUuYnl0ZXNcblxuICAgIGNvbnN0IHAgPSBwcm90b2NvbHMoY29kZSlcbiAgICBjb25zdCBzaXplID0gY29kZWMuc2l6ZUZvckFkZHIocCwgYnVmLnNsaWNlKGkgKyBuKSlcblxuICAgIGkgKz0gKHNpemUgKyBuKVxuICAgIGNvZGVzLnB1c2goY29kZSlcbiAgfVxuXG4gIHJldHVybiBjb2Rlc1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSBwcm90b2NvbHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybiB7QXJyYXkuPFN0cmluZz59IHByb3RvY29sIG5hbWVzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnByb3RvTmFtZXMoKVxuICogLy8gWyAnaXA0JywgJ3RjcCcgXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvTmFtZXMgPSBmdW5jdGlvbiBwcm90b05hbWVzICgpIHtcbiAgcmV0dXJuIHRoaXMucHJvdG9zKCkubWFwKHByb3RvID0+IHByb3RvLm5hbWUpXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHR1cGxlIG9mIHBhcnRzXG4gKlxuICogQHJldHVybiB7QXJyYXkuPEFycmF5Pn0gdHVwbGVzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHR1cGxlc1tdLjAgY29kZSBvZiBwcm90b2NvbFxuICogQHJldHVybiB7QnVmZmVyfSB0dXBsZXNbXS4xIGNvbnRlbnRzIG9mIGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoXCIvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMVwiKS50dXBsZXMoKVxuICogLy8gWyBbIDQsIDxCdWZmZXIgN2YgMDAgMDAgMDE+IF0sIFsgNiwgPEJ1ZmZlciAwZiBhMT4gXSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudHVwbGVzID0gZnVuY3Rpb24gdHVwbGVzICgpIHtcbiAgcmV0dXJuIGNvZGVjLmJ1ZmZlclRvVHVwbGVzKHRoaXMuYnVmZmVyKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBzdHJpbmcvbnVtYmVyIHBhcnRzXG4gKlxuICogQHJldHVybiB7QXJyYXkuPEFycmF5Pn0gdHVwbGVzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHR1cGxlc1tdLjAgY29kZSBvZiBwcm90b2NvbFxuICogQHJldHVybiB7KFN0cmluZ3xOdW1iZXIpfSB0dXBsZXNbXS4xIGNvbnRlbnRzIG9mIGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoXCIvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMVwiKS5zdHJpbmdUdXBsZXMoKVxuICogLy8gWyBbIDQsICcxMjcuMC4wLjEnIF0sIFsgNiwgNDAwMSBdIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5zdHJpbmdUdXBsZXMgPSBmdW5jdGlvbiBzdHJpbmdUdXBsZXMgKCkge1xuICBjb25zdCB0ID0gY29kZWMuYnVmZmVyVG9UdXBsZXModGhpcy5idWZmZXIpXG4gIHJldHVybiBjb2RlYy50dXBsZXNUb1N0cmluZ1R1cGxlcyh0KVxufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhIE11bHRpYWRkciBpbiBhbm90aGVyIE11bHRpYWRkclxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyIC0gTXVsdGlhZGRyIHRvIGFkZCBpbnRvIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzODA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBtaDMudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvOC44LjguOC90Y3AvMTA4MC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmVuY2Fwc3VsYXRlID0gZnVuY3Rpb24gZW5jYXBzdWxhdGUgKGFkZHIpIHtcbiAgYWRkciA9IE11bHRpYWRkcihhZGRyKVxuICByZXR1cm4gTXVsdGlhZGRyKHRoaXMudG9TdHJpbmcoKSArIGFkZHIudG9TdHJpbmcoKSlcbn1cblxuLyoqXG4gKiBEZWNhcHN1bGF0ZXMgYSBNdWx0aWFkZHIgZnJvbSBhbm90aGVyIE11bHRpYWRkclxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyIC0gTXVsdGlhZGRyIHRvIHJlbW92ZSBmcm9tIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzODA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBtaDMuZGVjYXBzdWxhdGUobWgyKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC84LjguOC44L3RjcC8xMDgwJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmRlY2Fwc3VsYXRlID0gZnVuY3Rpb24gZGVjYXBzdWxhdGUgKGFkZHIpIHtcbiAgYWRkciA9IGFkZHIudG9TdHJpbmcoKVxuICBjb25zdCBzID0gdGhpcy50b1N0cmluZygpXG4gIGNvbnN0IGkgPSBzLmxhc3RJbmRleE9mKGFkZHIpXG4gIGlmIChpIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWRkcmVzcyAnICsgdGhpcyArICcgZG9lcyBub3QgY29udGFpbiBzdWJhZGRyZXNzOiAnICsgYWRkcilcbiAgfVxuICByZXR1cm4gTXVsdGlhZGRyKHMuc2xpY2UoMCwgaSkpXG59XG5cbi8qKlxuICogQSBtb3JlIHJlbGlhYmxlIHZlcnNpb24gb2YgYGRlY2Fwc3VsYXRlYCBpZiB5b3UgYXJlIHRhcmdldGluZyBhXG4gKiBzcGVjaWZpYyBjb2RlLCBzdWNoIGFzIDQyMSAodGhlIGBwMnBgIHByb3RvY29sIGNvZGUpLiBUaGUgbGFzdCBpbmRleCBvZiB0aGUgY29kZVxuICogd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGBNdWx0aWFkZHJgLCBhbmQgYSBuZXcgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZC5cbiAqIElmIHRoZSBjb2RlIGlzIG5vdCBwcmVzZW50LCB0aGUgb3JpZ2luYWwgYE11bHRpYWRkcmAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGUgVGhlIGNvZGUgb2YgdGhlIHByb3RvY29sIHRvIGRlY2Fwc3VsYXRlIGZyb20gdGhpcyBNdWx0aWFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhZGRyID0gTXVsdGlhZGRyKCcvaXA0LzAuMC4wLjAvdGNwLzgwODAvcDJwL1FtY2dwc3lXZ0g4WThhakp6MUN1NzJLblM1dW8yQWEyTHB6VTdraW5TdXBOS0MnKVxuICogLy8gPE11bHRpYWRkciAwNDAwLi4uIC0gL2lwNC8wLjAuMC4wL3RjcC84MDgwL3AycC9RbWNncHN5V2dIOFk4YWpKejFDdTcyS25TNXVvMkFhMkxwelU3a2luU3VwTktDPlxuICpcbiAqIGFkZHIuZGVjYXBzdWxhdGVDb2RlKDQyMSkudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvMC4wLjAuMC90Y3AvODA4MCdcbiAqXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC84MDgwJykuZGVjYXBzdWxhdGVDb2RlKDQyMSkudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvMTI3LjAuMC4xL3RjcC84MDgwJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmRlY2Fwc3VsYXRlQ29kZSA9IGZ1bmN0aW9uIGRlY2Fwc3VsYXRlQ29kZSAoY29kZSkge1xuICBjb25zdCB0dXBsZXMgPSB0aGlzLnR1cGxlcygpXG4gIGZvciAobGV0IGkgPSB0dXBsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAodHVwbGVzW2ldWzBdID09PSBjb2RlKSB7XG4gICAgICByZXR1cm4gTXVsdGlhZGRyKGNvZGVjLnR1cGxlc1RvQnVmZmVyKHR1cGxlcy5zbGljZSgwLCBpKSkpXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGVlcklkIGlmIHRoZSBtdWx0aWFkZHIgY29udGFpbnMgb25lXG4gKlxuICogQHJldHVybiB7U3RyaW5nfG51bGx9IHBlZXJJZCAtIFRoZSBpZCBvZiB0aGUgcGVlciBvciBudWxsIGlmIGludmFsaWQgb3IgbWlzc2luZyBmcm9tIHRoZSBtYVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwL2lwZnMvUW1WYWxpZEJhc2U1OHN0cmluZycpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODAvaXBmcy9RbVZhbGlkQmFzZTU4c3RyaW5nPlxuICpcbiAqIC8vIHNob3VsZCByZXR1cm4gUW1WYWxpZEJhc2U1OHN0cmluZyBvciBudWxsIGlmIHRoZSBpZCBpcyBtaXNzaW5nIG9yIGludmFsaWRcbiAqIGNvbnN0IHBlZXJJZCA9IG1oMS5nZXRQZWVySWQoKVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmdldFBlZXJJZCA9IGZ1bmN0aW9uIGdldFBlZXJJZCAoKSB7XG4gIGxldCBiNThzdHIgPSBudWxsXG4gIHRyeSB7XG4gICAgY29uc3QgdHVwbGVzID0gdGhpcy5zdHJpbmdUdXBsZXMoKS5maWx0ZXIoKHR1cGxlKSA9PiB7XG4gICAgICBpZiAodHVwbGVbMF0gPT09IHByb3RvY29scy5uYW1lcy5pcGZzLmNvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gR2V0IHRoZSBsYXN0IGlkXG4gICAgYjU4c3RyID0gdHVwbGVzLnBvcCgpWzFdXG4gICAgLy8gR2V0IG11bHRpaGFzaCwgdW53cmFwIGZyb20gQ0lEIGlmIG5lZWRlZFxuICAgIGI1OHN0ciA9IGJzNTguZW5jb2RlKG5ldyBDSUQoYjU4c3RyKS5tdWx0aWhhc2gpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBiNThzdHIgPSBudWxsXG4gIH1cblxuICByZXR1cm4gYjU4c3RyXG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcGF0aCBpZiB0aGUgbXVsdGlhZGRyIGNvbnRhaW5zIG9uZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIG11bHRpYWRkciwgb3IgbnVsbCBpZiBubyBwYXRoIHByb3RvY29sIGlzIHByZXNlbnRcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MC91bml4L3RtcC9wMnAuc29jaycpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODAvdW5peC90bXAvcDJwLnNvY2s+XG4gKlxuICogLy8gc2hvdWxkIHJldHVybiB1dGY4IHN0cmluZyBvciBudWxsIGlmIHRoZSBpZCBpcyBtaXNzaW5nIG9yIGludmFsaWRcbiAqIGNvbnN0IHBhdGggPSBtaDEuZ2V0UGF0aCgpXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uIGdldFBhdGggKCkge1xuICBsZXQgcGF0aCA9IG51bGxcbiAgdHJ5IHtcbiAgICBwYXRoID0gdGhpcy5zdHJpbmdUdXBsZXMoKS5maWx0ZXIoKHR1cGxlKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IHByb3RvY29scyh0dXBsZVswXSlcbiAgICAgIGlmIChwcm90by5wYXRoKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlbMF1bMV1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhdGggPSBudWxsXG4gIH1cblxuICByZXR1cm4gcGF0aFxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0d28gTXVsdGlhZGRycyBhcmUgdGhlIHNhbWVcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7Qm9vbH1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODA+XG4gKlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBtaDEuZXF1YWxzKG1oMSlcbiAqIC8vIHRydWVcbiAqXG4gKiBtaDEuZXF1YWxzKG1oMilcbiAqIC8vIGZhbHNlXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChhZGRyKSB7XG4gIHJldHVybiB0aGlzLmJ1ZmZlci5lcXVhbHMoYWRkci5idWZmZXIpXG59XG5cbi8qKlxuICogR2V0cyBhIE11bHRpYWRkcnMgbm9kZS1mcmllbmRseSBhZGRyZXNzIG9iamVjdC4gTm90ZSB0aGF0IHByb3RvY29sIGluZm9ybWF0aW9uXG4gKiBpcyBsZWZ0IG91dDogaW4gTm9kZSAoYW5kIG1vc3QgbmV0d29yayBzeXN0ZW1zKSB0aGUgcHJvdG9jb2wgaXMgdW5rbm93YWJsZVxuICogZ2l2ZW4gb25seSB0aGUgYWRkcmVzcy5cbiAqXG4gKiBIYXMgdG8gYmUgYSBUaGluV2Fpc3QgQWRkcmVzcywgb3RoZXJ3aXNlIHRocm93cyBlcnJvclxuICpcbiAqIEByZXR1cm5zIHt7ZmFtaWx5OiBTdHJpbmcsIGFkZHJlc3M6IFN0cmluZywgcG9ydDogTnVtYmVyfX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgTXVsdGlhZGRyIGlzIG5vdCBhIFRoaW4gV2Fpc3QgYWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5ub2RlQWRkcmVzcygpXG4gKiAvLyB7ZmFtaWx5OiAnSVB2NCcsIGFkZHJlc3M6ICcxMjcuMC4wLjEnLCBwb3J0OiAnNDAwMSd9XG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUubm9kZUFkZHJlc3MgPSBmdW5jdGlvbiBub2RlQWRkcmVzcyAoKSB7XG4gIGNvbnN0IGNvZGVzID0gdGhpcy5wcm90b0NvZGVzKClcbiAgY29uc3QgbmFtZXMgPSB0aGlzLnByb3RvTmFtZXMoKVxuICBjb25zdCBwYXJ0cyA9IHRoaXMudG9TdHJpbmcoKS5zcGxpdCgnLycpLnNsaWNlKDEpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpYWRkciBtdXN0IGhhdmUgYSB2YWxpZCBmb3JtYXQ6IFwiL3tpcDQsIGlwNiwgZG5zNCwgZG5zNn0ve2FkZHJlc3N9L3t0Y3AsIHVkcH0ve3BvcnR9XCIuJylcbiAgfSBlbHNlIGlmIChjb2Rlc1swXSAhPT0gNCAmJiBjb2Rlc1swXSAhPT0gNDEgJiYgY29kZXNbMF0gIT09IDU0ICYmIGNvZGVzWzBdICE9PSA1NSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gcHJvdG9jb2wgd2l0aCBuYW1lOiBcIicke25hbWVzWzBdfSdcIi4gTXVzdCBoYXZlIGEgdmFsaWQgZmFtaWx5IG5hbWU6IFwie2lwNCwgaXA2LCBkbnM0LCBkbnM2fVwiLmApXG4gIH0gZWxzZSBpZiAocGFydHNbMl0gIT09ICd0Y3AnICYmIHBhcnRzWzJdICE9PSAndWRwJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gcHJvdG9jb2wgd2l0aCBuYW1lOiBcIicke25hbWVzWzFdfSdcIi4gTXVzdCBoYXZlIGEgdmFsaWQgdHJhbnNwb3J0IHByb3RvY29sOiBcInt0Y3AsIHVkcH1cIi5gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmYW1pbHk6IChjb2Rlc1swXSA9PT0gNDEgfHwgY29kZXNbMF0gPT09IDU1KSA/IDYgOiA0LFxuICAgIGFkZHJlc3M6IHBhcnRzWzFdLCAvLyBpcCBhZGRyXG4gICAgcG9ydDogcGFyc2VJbnQocGFydHNbM10pIC8vIHRjcCBvciB1ZHAgcG9ydFxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIE11bHRpYWRkciBmcm9tIGEgbm9kZS1mcmllbmRseSBhZGRyZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7e2ZhbWlseTogU3RyaW5nLCBhZGRyZXNzOiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19IGFkZHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0cmFuc3BvcnRcbiAqIEByZXR1cm5zIHtNdWx0aWFkZHJ9IG11bHRpYWRkclxuICogQHRocm93cyB7RXJyb3J9IFRocm93cyBlcnJvciBpZiBhZGRyIGlzIG5vdCB0cnV0aHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgdHJhbnNwb3J0IGlzIG5vdCB0cnV0aHlcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIuZnJvbU5vZGVBZGRyZXNzKHthZGRyZXNzOiAnMTI3LjAuMC4xJywgcG9ydDogJzQwMDEnfSwgJ3RjcCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqL1xuTXVsdGlhZGRyLmZyb21Ob2RlQWRkcmVzcyA9IGZ1bmN0aW9uIGZyb21Ob2RlQWRkcmVzcyAoYWRkciwgdHJhbnNwb3J0KSB7XG4gIGlmICghYWRkcikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyBub2RlIGFkZHJlc3Mgb2JqZWN0JylcbiAgaWYgKCF0cmFuc3BvcnQpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgdHJhbnNwb3J0IHByb3RvY29sJylcbiAgY29uc3QgaXAgPSAoYWRkci5mYW1pbHkgPT09ICdJUHY2JykgPyAnaXA2JyA6ICdpcDQnXG4gIHJldHVybiBNdWx0aWFkZHIoJy8nICsgW2lwLCBhZGRyLmFkZHJlc3MsIHRyYW5zcG9ydCwgYWRkci5wb3J0XS5qb2luKCcvJykpXG59XG5cbi8vIFRPRE8gZmluZCBhIGJldHRlciBleGFtcGxlLCBub3Qgc3VyZSBhYm91dCBpdCdzIGdvb2QgZW5vdWdoXG4vKipcbiAqIFJldHVybnMgaWYgYSBNdWx0aWFkZHIgaXMgYSBUaGluIFdhaXN0IGFkZHJlc3Mgb3Igbm90LlxuICpcbiAqIFRoaW4gV2Fpc3QgaXMgaWYgYSBNdWx0aWFkZHIgYWRoZXJlcyB0byB0aGUgc3RhbmRhcmQgY29tYmluYXRpb24gb2Y6XG4gKlxuICogYHtJUHY0LCBJUHY2fS97VENQLCBVRFB9YFxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBbYWRkcl0gLSBEZWZhdWx0cyB0byB1c2luZyBgdGhpc2AgaW5zdGFuY2VcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpc1RoaW5XYWlzdEFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDRjMGE4MDIwMTA2MTM4OSAtIC9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDE+XG4gKiBjb25zdCBtaDMgPSBtaDEuZW5jYXBzdWxhdGUobWgyKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExMDRjMGE4MDIwMTA2MTM4OSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMT5cbiAqIG1oMS5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gdHJ1ZVxuICogbWgyLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyB0cnVlXG4gKiBtaDMuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIGZhbHNlXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuaXNUaGluV2Fpc3RBZGRyZXNzID0gZnVuY3Rpb24gaXNUaGluV2Fpc3RBZGRyZXNzIChhZGRyKSB7XG4gIGNvbnN0IHByb3RvcyA9IChhZGRyIHx8IHRoaXMpLnByb3RvcygpXG5cbiAgaWYgKHByb3Rvcy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChwcm90b3NbMF0uY29kZSAhPT0gNCAmJiBwcm90b3NbMF0uY29kZSAhPT0gNDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAocHJvdG9zWzFdLmNvZGUgIT09IDYgJiYgcHJvdG9zWzFdLmNvZGUgIT09IDI3Mykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogT2JqZWN0IGNvbnRhaW5pbmcgdGFibGUsIG5hbWVzIGFuZCBjb2RlcyBvZiBhbGwgc3VwcG9ydGVkIHByb3RvY29scy5cbiAqIFRvIGdldCB0aGUgcHJvdG9jb2wgdmFsdWVzIGZyb20gYSBNdWx0aWFkZHIsIHlvdSBjYW4gdXNlXG4gKiBbYC5wcm90b3MoKWBdKCNtdWx0aWFkZHJwcm90b3MpLFxuICogW2AucHJvdG9Db2RlcygpYF0oI211bHRpYWRkcnByb3RvY29kZXMpIG9yXG4gKiBbYC5wcm90b05hbWVzKClgXSgjbXVsdGlhZGRycHJvdG9uYW1lcylcbiAqXG4gKiBAaW5zdGFuY2VcbiAqIEByZXR1cm5zIHt7dGFibGU6IEFycmF5LCBuYW1lczogT2JqZWN0LCBjb2RlczogT2JqZWN0fX1cbiAqXG4gKi9cbk11bHRpYWRkci5wcm90b2NvbHMgPSBwcm90b2NvbHNcblxuLyoqXG4gKiBSZXR1cm5zIGlmIHNvbWV0aGluZyBpcyBhIE11bHRpYWRkciB0aGF0IGlzIGEgbmFtZVxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyXG4gKiBAcmV0dXJuIHtCb29sfSBpc05hbWVcbiAqL1xuTXVsdGlhZGRyLmlzTmFtZSA9IGZ1bmN0aW9uIGlzTmFtZSAoYWRkcikge1xuICBpZiAoIU11bHRpYWRkci5pc011bHRpYWRkcihhZGRyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gaWYgYSBwYXJ0IG9mIHRoZSBtdWx0aWFkZHIgaXMgcmVzb2x2YWJsZSwgdGhlbiByZXR1cm4gdHJ1ZVxuICByZXR1cm4gYWRkci5wcm90b3MoKS5zb21lKChwcm90bykgPT4gcHJvdG8ucmVzb2x2YWJsZSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIG11bHRpYWRkcnMsIGJ5IHJlc29sdmluZyB0aGUgbXVsdGlhZGRyIHRoYXQgaXMgYSBuYW1lXG4gKlxuICogQGFzeW5jXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyW119XG4gKi9cbk11bHRpYWRkci5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSAoYWRkcikge1xuICBpZiAoIU11bHRpYWRkci5pc011bHRpYWRkcihhZGRyKSB8fCAhTXVsdGlhZGRyLmlzTmFtZShhZGRyKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChFcnJvcignbm90IGEgdmFsaWQgbmFtZScpKVxuICB9XG5cbiAgLypcbiAgICogTmVlZHMgbW9yZSBjb25zaWRlcmF0aW9uIGZyb20gc3BlYyBkZXNpZ246XG4gICAqICAgLSB3aGF0IHRvIHJldHVyblxuICAgKiAgIC0gaG93IHRvIGFjaGlldmUgaXQgaW4gdGhlIGJyb3dzZXI/XG4gICAqL1xuICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQgeWV0JykpXG59XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IE11bHRpYWRkclxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIFByb3RvY29scyAocHJvdG8pIHtcbiAgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnbnVtYmVyJykge1xuICAgIGlmIChQcm90b2NvbHMuY29kZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLmNvZGVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBjb2RlOiAnICsgcHJvdG8pXG4gIH0gZWxzZSBpZiAodHlwZW9mIChwcm90bykgPT09ICdzdHJpbmcnIHx8IHByb3RvIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKFByb3RvY29scy5uYW1lc1twcm90b10pIHtcbiAgICAgIHJldHVybiBQcm90b2NvbHMubmFtZXNbcHJvdG9dXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm90b2NvbCB3aXRoIG5hbWU6ICcgKyBwcm90bylcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcm90b2NvbCBpZCB0eXBlOiAnICsgcHJvdG8pXG59XG5cbmNvbnN0IFYgPSAtMVxuUHJvdG9jb2xzLmxlbmd0aFByZWZpeGVkVmFyU2l6ZSA9IFZcblByb3RvY29scy5WID0gVlxuXG5Qcm90b2NvbHMudGFibGUgPSBbXG4gIFs0LCAzMiwgJ2lwNCddLFxuICBbNiwgMTYsICd0Y3AnXSxcbiAgWzMzLCAxNiwgJ2RjY3AnXSxcbiAgWzQxLCAxMjgsICdpcDYnXSxcbiAgWzQyLCBWLCAnaXA2em9uZSddLFxuICBbNTMsIFYsICdkbnMnLCAncmVzb2x2YWJsZSddLFxuICBbNTQsIFYsICdkbnM0JywgJ3Jlc29sdmFibGUnXSxcbiAgWzU1LCBWLCAnZG5zNicsICdyZXNvbHZhYmxlJ10sXG4gIFs1NiwgViwgJ2Ruc2FkZHInLCAncmVzb2x2YWJsZSddLFxuICBbMTMyLCAxNiwgJ3NjdHAnXSxcbiAgWzI3MywgMTYsICd1ZHAnXSxcbiAgWzI3NSwgMCwgJ3AycC13ZWJydGMtc3RhciddLFxuICBbMjc2LCAwLCAncDJwLXdlYnJ0Yy1kaXJlY3QnXSxcbiAgWzI3NywgMCwgJ3AycC1zdGFyZHVzdCddLFxuICBbMjkwLCAwLCAncDJwLWNpcmN1aXQnXSxcbiAgWzMwMSwgMCwgJ3VkdCddLFxuICBbMzAyLCAwLCAndXRwJ10sXG4gIFs0MDAsIFYsICd1bml4JywgZmFsc2UsICdwYXRoJ10sXG4gIC8vIGBpcGZzYCBpcyBhZGRlZCBiZWZvcmUgYHAycGAgZm9yIGxlZ2FjeSBzdXBwb3J0LlxuICAvLyBBbGwgdGV4dCByZXByZXNlbnRhdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGBwMnBgLCBidXQgYGlwZnNgIHdpbGxcbiAgLy8gc3RpbGwgYmUgc3VwcG9ydGVkXG4gIFs0MjEsIFYsICdpcGZzJ10sXG4gIC8vIGBwMnBgIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgNDIxLCBhbmQgaXMgbm93IHRoZSBkZWZhdWx0XG4gIFs0MjEsIFYsICdwMnAnXSxcbiAgWzQ0MywgMCwgJ2h0dHBzJ10sXG4gIFs0NDQsIDk2LCAnb25pb24nXSxcbiAgWzQ0NSwgMjk2LCAnb25pb24zJ10sXG4gIFs0NDYsIFYsICdnYXJsaWM2NCddLFxuICBbNDYwLCAwLCAncXVpYyddLFxuICBbNDc3LCAwLCAnd3MnXSxcbiAgWzQ3OCwgMCwgJ3dzcyddLFxuICBbNDc5LCAwLCAncDJwLXdlYnNvY2tldC1zdGFyJ10sXG4gIFs0ODAsIDAsICdodHRwJ11cbl1cblxuUHJvdG9jb2xzLm5hbWVzID0ge31cblByb3RvY29scy5jb2RlcyA9IHt9XG5cbi8vIHBvcHVsYXRlIHRhYmxlc1xuUHJvdG9jb2xzLnRhYmxlLm1hcChyb3cgPT4ge1xuICBjb25zdCBwcm90byA9IHAuYXBwbHkobnVsbCwgcm93KVxuICBQcm90b2NvbHMuY29kZXNbcHJvdG8uY29kZV0gPSBwcm90b1xuICBQcm90b2NvbHMubmFtZXNbcHJvdG8ubmFtZV0gPSBwcm90b1xufSlcblxuUHJvdG9jb2xzLm9iamVjdCA9IHBcblxuZnVuY3Rpb24gcCAoY29kZSwgc2l6ZSwgbmFtZSwgcmVzb2x2YWJsZSwgcGF0aCkge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlc29sdmFibGU6IEJvb2xlYW4ocmVzb2x2YWJsZSksXG4gICAgcGF0aDogQm9vbGVhbihwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvdG9jb2xzXG4iLCIndXNlIHN0cmljdCdcblxuY2xhc3MgQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChuYW1lLCBjb2RlLCBpbXBsZW1lbnRhdGlvbiwgYWxwaGFiZXQpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdGhpcy5jb2RlID0gY29kZVxuICAgIHRoaXMuYWxwaGFiZXQgPSBhbHBoYWJldFxuICAgIGlmIChpbXBsZW1lbnRhdGlvbiAmJiBhbHBoYWJldCkge1xuICAgICAgdGhpcy5lbmdpbmUgPSBpbXBsZW1lbnRhdGlvbihhbHBoYWJldClcbiAgICB9XG4gIH1cblxuICBlbmNvZGUgKHN0cmluZ09yQnVmZmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLmVuY29kZShzdHJpbmdPckJ1ZmZlcilcbiAgfVxuXG4gIGRlY29kZSAoc3RyaW5nT3JCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuZGVjb2RlKHN0cmluZ09yQnVmZmVyKVxuICB9XG5cbiAgaXNJbXBsZW1lbnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYXNlXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlMTYgKGFscGhhYmV0KSB7XG4gIHJldHVybiB7XG4gICAgZW5jb2RlIChpbnB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0KS50b1N0cmluZygnaGV4JylcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnB1dC50b1N0cmluZygnaGV4JylcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2UxNiBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQsICdoZXgnKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGRlY29kZSAoaW5wdXQsIGFscGhhYmV0KSB7XG4gIGlucHV0ID0gaW5wdXQucmVwbGFjZShuZXcgUmVnRXhwKCc9JywgJ2cnKSwgJycpXG4gIGxldCBsZW5ndGggPSBpbnB1dC5sZW5ndGhcblxuICBsZXQgYml0cyA9IDBcbiAgbGV0IHZhbHVlID0gMFxuXG4gIGxldCBpbmRleCA9IDBcbiAgbGV0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KChsZW5ndGggKiA1IC8gOCkgfCAwKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA1KSB8IGFscGhhYmV0LmluZGV4T2YoaW5wdXRbaV0pXG4gICAgYml0cyArPSA1XG5cbiAgICBpZiAoYml0cyA+PSA4KSB7XG4gICAgICBvdXRwdXRbaW5kZXgrK10gPSAodmFsdWUgPj4+IChiaXRzIC0gOCkpICYgMjU1XG4gICAgICBiaXRzIC09IDhcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0LmJ1ZmZlclxufVxuXG5mdW5jdGlvbiBlbmNvZGUgKGJ1ZmZlciwgYWxwaGFiZXQpIHtcbiAgbGV0IGxlbmd0aCA9IGJ1ZmZlci5ieXRlTGVuZ3RoXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKVxuICBsZXQgcGFkZGluZyA9IGFscGhhYmV0LmluZGV4T2YoJz0nKSA9PT0gYWxwaGFiZXQubGVuZ3RoIC0gMVxuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgYWxwaGFiZXQgPSBhbHBoYWJldC5zdWJzdHJpbmcoMCwgYWxwaGFiZXQubGVuZ3RoIC0gMilcbiAgfVxuXG4gIGxldCBiaXRzID0gMFxuICBsZXQgdmFsdWUgPSAwXG4gIGxldCBvdXRwdXQgPSAnJ1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSB8IHZpZXdbaV1cbiAgICBiaXRzICs9IDhcblxuICAgIHdoaWxlIChiaXRzID49IDUpIHtcbiAgICAgIG91dHB1dCArPSBhbHBoYWJldFsodmFsdWUgPj4+IChiaXRzIC0gNSkpICYgMzFdXG4gICAgICBiaXRzIC09IDVcbiAgICB9XG4gIH1cblxuICBpZiAoYml0cyA+IDApIHtcbiAgICBvdXRwdXQgKz0gYWxwaGFiZXRbKHZhbHVlIDw8ICg1IC0gYml0cykpICYgMzFdXG4gIH1cblxuICBpZiAocGFkZGluZykge1xuICAgIHdoaWxlICgob3V0cHV0Lmxlbmd0aCAlIDgpICE9PSAwKSB7XG4gICAgICBvdXRwdXQgKz0gJz0nXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UzMiAoYWxwaGFiZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZW5jb2RlKEJ1ZmZlci5mcm9tKGlucHV0KSwgYWxwaGFiZXQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbmNvZGUoaW5wdXQsIGFscGhhYmV0KVxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlY29kZShpbnB1dCwgYWxwaGFiZXQpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlNjQgKGFscGhhYmV0KSB7XG4gIC8vIFRoZSBhbHBoYWJldCBpcyBvbmx5IHVzZWQgdG8ga25vdzpcbiAgLy8gICAxLiBJZiBwYWRkaW5nIGlzIGVuYWJsZWQgKG11c3QgY29udGFpbiAnPScpXG4gIC8vICAgMi4gSWYgdGhlIG91dHB1dCBtdXN0IGJlIHVybC1zYWZlIChtdXN0IGNvbnRhaW4gJy0nIGFuZCAnXycpXG4gIC8vICAgMy4gSWYgdGhlIGlucHV0IG9mIHRoZSBvdXRwdXQgZnVuY3Rpb24gaXMgdmFsaWRcbiAgLy8gVGhlIGFscGhhYmV0cyBmcm9tIFJGQyA0NjQ4IGFyZSBhbHdheXMgdXNlZC5cbiAgY29uc3QgcGFkZGluZyA9IGFscGhhYmV0LmluZGV4T2YoJz0nKSA+IC0xXG4gIGNvbnN0IHVybCA9IGFscGhhYmV0LmluZGV4T2YoJy0nKSA+IC0xICYmIGFscGhhYmV0LmluZGV4T2YoJ18nKSA+IC0xXG5cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBsZXQgb3V0cHV0ID0gJydcblxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3V0cHV0ID0gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0ID0gaW5wdXQudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZCA9IG91dHB1dC5pbmRleE9mKCc9JylcbiAgICAgIGlmIChwYWQgPiAwICYmICFwYWRkaW5nKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5zdWJzdHJpbmcoMCwgcGFkKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3V0cHV0XG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlNjQgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQsICdiYXNlNjQnKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJhc2UgPSByZXF1aXJlKCcuL2Jhc2UuanMnKVxuY29uc3QgYmFzZVggPSByZXF1aXJlKCdiYXNlLXgnKVxuY29uc3QgYmFzZTE2ID0gcmVxdWlyZSgnLi9iYXNlMTYnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnLi9iYXNlMzInKVxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKVxuXG4vLyBuYW1lLCBjb2RlLCBpbXBsZW1lbnRhdGlvbiwgYWxwaGFiZXRcbmNvbnN0IGNvbnN0YW50cyA9IFtcbiAgWydiYXNlMScsICcxJywgJycsICcxJ10sXG4gIFsnYmFzZTInLCAnMCcsIGJhc2VYLCAnMDEnXSxcbiAgWydiYXNlOCcsICc3JywgYmFzZVgsICcwMTIzNDU2NyddLFxuICBbJ2Jhc2UxMCcsICc5JywgYmFzZVgsICcwMTIzNDU2Nzg5J10sXG4gIFsnYmFzZTE2JywgJ2YnLCBiYXNlMTYsICcwMTIzNDU2Nzg5YWJjZGVmJ10sXG4gIFsnYmFzZTMyJywgJ2InLCBiYXNlMzIsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2NyddLFxuICBbJ2Jhc2UzMnBhZCcsICdjJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1Njc9J10sXG4gIFsnYmFzZTMyaGV4JywgJ3YnLCBiYXNlMzIsICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1diddLFxuICBbJ2Jhc2UzMmhleHBhZCcsICd0JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXY9J10sXG4gIFsnYmFzZTMyeicsICdoJywgYmFzZTMyLCAneWJuZHJmZzhlamttY3BxeG90MXV3aXN6YTM0NWg3NjknXSxcbiAgWydiYXNlNThmbGlja3InLCAnWicsIGJhc2VYLCAnMTIzNDU2Nzg5YWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWiddLFxuICBbJ2Jhc2U1OGJ0YycsICd6JywgYmFzZVgsICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J10sXG4gIFsnYmFzZTY0JywgJ20nLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ10sXG4gIFsnYmFzZTY0cGFkJywgJ00nLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSddLFxuICBbJ2Jhc2U2NHVybCcsICd1JywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyddLFxuICBbJ2Jhc2U2NHVybHBhZCcsICdVJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz0nXVxuXVxuXG5jb25zdCBuYW1lcyA9IGNvbnN0YW50cy5yZWR1Y2UoKHByZXYsIHR1cHBsZSkgPT4ge1xuICBwcmV2W3R1cHBsZVswXV0gPSBuZXcgQmFzZSh0dXBwbGVbMF0sIHR1cHBsZVsxXSwgdHVwcGxlWzJdLCB0dXBwbGVbM10pXG4gIHJldHVybiBwcmV2XG59LCB7fSlcblxuY29uc3QgY29kZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMV1dID0gbmFtZXNbdHVwcGxlWzBdXVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBuYW1lczogbmFtZXMsXG4gIGNvZGVzOiBjb2Rlc1xufVxuIiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW211bHRpYmFzZV0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWJhc2UpIHNwZWNpZmljYXRpb24uXG4gKiBAbW9kdWxlIE11bHRpYmFzZVxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBtdWx0aWJhc2VcbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlXG5leHBvcnRzLmRlY29kZSA9IGRlY29kZVxuZXhwb3J0cy5pc0VuY29kZWQgPSBpc0VuY29kZWRcbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5uYW1lcykpXG5leHBvcnRzLmNvZGVzID0gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhjb25zdGFudHMuY29kZXMpKVxuXG5jb25zdCBlcnJOb3RTdXBwb3J0ZWQgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVuY29kaW5nJylcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgYnVmZmVyIHdpdGggdGhlIG11bHRpYmFzZSB2YXJpbnQrY29kZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgcHJlZml4ZWQgd2l0aCBtdWx0aWJhc2UuXG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5mdW5jdGlvbiBtdWx0aWJhc2UgKG5hbWVPckNvZGUsIGJ1Zikge1xuICBpZiAoIWJ1Zikge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgYW4gZW5jb2RlZCBidWZmZXInKVxuICB9XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IGNvZGVCdWYgPSBCdWZmZXIuZnJvbShiYXNlLmNvZGUpXG5cbiAgY29uc3QgbmFtZSA9IGJhc2UubmFtZVxuICB2YWxpZEVuY29kZShuYW1lLCBidWYpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtjb2RlQnVmLCBidWZdKVxufVxuXG4vKipcbiAqIEVuY29kZSBkYXRhIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlIGFuZCBhZGQgdGhlIG11bHRpYmFzZSBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBuYW1lT3JDb2RlIC0gVGhlIG11bHRpYmFzZSBuYW1lIG9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZiAtIFRoZSBkYXRhIHRvIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICogQG1lbWJlcm9mIE11bHRpYmFzZVxuICovXG5mdW5jdGlvbiBlbmNvZGUgKG5hbWVPckNvZGUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lT3JDb2RlKVxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG5cbiAgcmV0dXJuIG11bHRpYmFzZShuYW1lLCBCdWZmZXIuZnJvbShiYXNlLmVuY29kZShidWYpKSlcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGJ1ZmZlciBvciBzdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSBoZWFkZXIsIGRlY29kZXMgaXQgYW5kXG4gKiByZXR1cm5zIHRoZSBkZWNvZGVkIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gYnVmT3JTdHJpbmdcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKlxuICovXG5mdW5jdGlvbiBkZWNvZGUgKGJ1Zk9yU3RyaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JTdHJpbmcpKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy50b1N0cmluZygpXG4gIH1cblxuICBjb25zdCBjb2RlID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDAsIDEpXG4gIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDEsIGJ1Zk9yU3RyaW5nLmxlbmd0aClcblxuICBpZiAodHlwZW9mIGJ1Zk9yU3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgIGJ1Zk9yU3RyaW5nID0gQnVmZmVyLmZyb20oYnVmT3JTdHJpbmcpXG4gIH1cblxuICBjb25zdCBiYXNlID0gZ2V0QmFzZShjb2RlKVxuICByZXR1cm4gQnVmZmVyLmZyb20oYmFzZS5kZWNvZGUoYnVmT3JTdHJpbmcudG9TdHJpbmcoKSkpXG59XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIGRhdGEgbXVsdGliYXNlIGVuY29kZWQ/XG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGlzRW5jb2RlZCAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIEVuc3VyZSBidWZPclN0cmluZyBpcyBhIHN0cmluZ1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJ1Zk9yU3RyaW5nKSAhPT0gJ1tvYmplY3QgU3RyaW5nXScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlID0gZ2V0QmFzZShjb2RlKVxuICAgIHJldHVybiBiYXNlLm5hbWVcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkRW5jb2RlIChuYW1lLCBidWYpIHtcbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZSlcbiAgYmFzZS5kZWNvZGUoYnVmLnRvU3RyaW5nKCkpXG59XG5cbmZ1bmN0aW9uIGdldEJhc2UgKG5hbWVPckNvZGUpIHtcbiAgbGV0IGJhc2VcblxuICBpZiAoY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5uYW1lc1tuYW1lT3JDb2RlXVxuICB9IGVsc2UgaWYgKGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXSkge1xuICAgIGJhc2UgPSBjb25zdGFudHMuY29kZXNbbmFtZU9yQ29kZV1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnJOb3RTdXBwb3J0ZWRcbiAgfVxuXG4gIGlmICghYmFzZS5pc0ltcGxlbWVudGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgJyArIG5hbWVPckNvZGUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKVxuICB9XG5cbiAgcmV0dXJuIGJhc2Vcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB0YWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBjb2RlY0NvbnN0YW50IC0+IGNvZGVcbmNvbnN0IGNvbnN0YW50cyA9IHt9XG5cbmZvciAoY29uc3QgW25hbWUsIGNvZGVdIG9mIE9iamVjdC5lbnRyaWVzKHRhYmxlKSkge1xuICBjb25zdGFudHNbbmFtZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLy0vZywgJ18nKV0gPSBjb2RlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZShjb25zdGFudHMpXG4iLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBtdWx0aWNvZGVjIHNwZWNpZmljYXRpb24uXG4gKlxuICogQG1vZHVsZSBtdWx0aWNvZGVjXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuICpcbiAqIGNvbnN0IHByZWZpeGVkUHJvdG9idWYgPSBtdWx0aWNvZGVjLmFkZFByZWZpeCgncHJvdG9idWYnLCBwcm90b2J1ZkJ1ZmZlcilcbiAqIC8vIHByZWZpeGVkUHJvdG9idWYgMHg1MC4uLlxuICpcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5jb25zdCBpbnRUYWJsZSA9IHJlcXVpcmUoJy4vaW50LXRhYmxlJylcbmNvbnN0IGNvZGVjTmFtZVRvQ29kZVZhcmludCA9IHJlcXVpcmUoJy4vdmFyaW50LXRhYmxlJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHNcblxuLyoqXG4gKiBQcmVmaXggYSBidWZmZXIgd2l0aCBhIG11bHRpY29kZWMtcGFja2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbXVsdGljb2RlY1N0ck9yQ29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuYWRkUHJlZml4ID0gKG11bHRpY29kZWNTdHJPckNvZGUsIGRhdGEpID0+IHtcbiAgbGV0IHByZWZpeFxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIobXVsdGljb2RlY1N0ck9yQ29kZSkpIHtcbiAgICBwcmVmaXggPSB1dGlsLnZhcmludEJ1ZmZlckVuY29kZShtdWx0aWNvZGVjU3RyT3JDb2RlKVxuICB9IGVsc2Uge1xuICAgIGlmIChjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV0pIHtcbiAgICAgIHByZWZpeCA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFttdWx0aWNvZGVjU3RyT3JDb2RlXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpY29kZWMgbm90IHJlY29nbml6ZWQnKVxuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbcHJlZml4LCBkYXRhXSlcbn1cblxuLyoqXG4gKiBEZWNhcHN1bGF0ZSB0aGUgbXVsdGljb2RlYy1wYWNrZWQgcHJlZml4IGZyb20gdGhlIGRhdGEuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMucm1QcmVmaXggPSAoZGF0YSkgPT4ge1xuICB2YXJpbnQuZGVjb2RlKGRhdGEpXG4gIHJldHVybiBkYXRhLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlYyBvZiB0aGUgcHJlZml4ZWQgZGF0YS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwcmVmaXhlZERhdGFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZWMgPSAocHJlZml4ZWREYXRhKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKHByZWZpeGVkRGF0YSlcbiAgY29uc3QgY29kZWNOYW1lID0gaW50VGFibGUuZ2V0KGNvZGUpXG4gIGlmIChjb2RlY05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29kZSAke2NvZGV9IG5vdCBmb3VuZGApXG4gIH1cbiAgcmV0dXJuIGNvZGVjTmFtZVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmFtZSBvZiB0aGUgY29kZWMuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZWNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZ2V0TmFtZSA9IChjb2RlYykgPT4ge1xuICByZXR1cm4gaW50VGFibGUuZ2V0KGNvZGVjKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZSBvZiB0aGUgY29kZWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmdldE51bWJlciA9IChuYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbmFtZV1cbiAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29kZWMgYCcgKyBuYW1lICsgJ2Agbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gdXRpbC52YXJpbnRCdWZmZXJEZWNvZGUoY29kZSlbMF1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmdldENvZGUgPSAocHJlZml4ZWREYXRhKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZGVjb2RlKHByZWZpeGVkRGF0YSlcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgYXMgdmFyaW50IG9mIGEgY29kZWMgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlY05hbWVcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZVZhcmludCA9IChjb2RlY05hbWUpID0+IHtcbiAgY29uc3QgY29kZSA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFtjb2RlY05hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgY29kZWNOYW1lICsgJ2Agbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFyaW50IG9mIGEgY29kZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gKi9cbmV4cG9ydHMuZ2V0VmFyaW50ID0gKGNvZGUpID0+IHtcbiAgcmV0dXJuIHZhcmludC5lbmNvZGUoY29kZSlcbn1cblxuLy8gTWFrZSB0aGUgY29uc3RhbnRzIHRvcC1sZXZlbCBjb25zdGFudHNcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbk9iamVjdC5hc3NpZ24oZXhwb3J0cywgY29uc3RhbnRzKVxuXG4vLyBIdW1hbiBmcmllbmRseSBuYW1lcyBmb3IgcHJpbnRpbmcsIGUuZy4gaW4gZXJyb3IgbWVzc2FnZXNcbmV4cG9ydHMucHJpbnQgPSByZXF1aXJlKCcuL3ByaW50JylcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgYmFzZVRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGhleFN0cmluZyAtPiBjb2RlY05hbWVcbmNvbnN0IG5hbWVUYWJsZSA9IG5ldyBNYXAoKVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIG5hbWVUYWJsZS5zZXQoY29kZSwgZW5jb2RpbmdOYW1lKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUobmFtZVRhYmxlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGUgLT4gcHJpbnQgZnJpZW5kbHkgbmFtZVxuY29uc3QgdGFibGVCeUNvZGUgPSB7fVxuXG5mb3IgKGNvbnN0IFtuYW1lLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyh0YWJsZSkpIHtcbiAgaWYgKHRhYmxlQnlDb2RlW2NvZGVdID09PSB1bmRlZmluZWQpIHRhYmxlQnlDb2RlW2NvZGVdID0gbmFtZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUodGFibGVCeUNvZGUpXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBudW1iZXJUb0J1ZmZlcixcbiAgYnVmZmVyVG9OdW1iZXIsXG4gIHZhcmludEJ1ZmZlckVuY29kZSxcbiAgdmFyaW50QnVmZmVyRGVjb2RlLFxuICB2YXJpbnRFbmNvZGVcbn1cblxuZnVuY3Rpb24gYnVmZmVyVG9OdW1iZXIgKGJ1Zikge1xuICByZXR1cm4gcGFyc2VJbnQoYnVmLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG59XG5cbmZ1bmN0aW9uIG51bWJlclRvQnVmZmVyIChudW0pIHtcbiAgbGV0IGhleFN0cmluZyA9IG51bS50b1N0cmluZygxNilcbiAgaWYgKGhleFN0cmluZy5sZW5ndGggJSAyID09PSAxKSB7XG4gICAgaGV4U3RyaW5nID0gJzAnICsgaGV4U3RyaW5nXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleFN0cmluZywgJ2hleCcpXG59XG5cbmZ1bmN0aW9uIHZhcmludEJ1ZmZlckVuY29kZSAoaW5wdXQpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmZmVyVG9OdW1iZXIoaW5wdXQpKSlcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRGVjb2RlIChpbnB1dCkge1xuICByZXR1cm4gbnVtYmVyVG9CdWZmZXIodmFyaW50LmRlY29kZShpbnB1dCkpXG59XG5cbmZ1bmN0aW9uIHZhcmludEVuY29kZSAobnVtKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKG51bSkpXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZVRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuY29uc3QgdmFyaW50RW5jb2RlID0gcmVxdWlyZSgnLi91dGlsJykudmFyaW50RW5jb2RlXG5cbi8vIG1hcCBmb3IgY29kZWNOYW1lIC0+IGNvZGVWYXJpbnRCdWZmZXJcbmNvbnN0IHZhcmludFRhYmxlID0ge31cblxuZm9yIChjb25zdCBlbmNvZGluZ05hbWUgaW4gYmFzZVRhYmxlKSB7XG4gIGNvbnN0IGNvZGUgPSBiYXNlVGFibGVbZW5jb2RpbmdOYW1lXVxuICB2YXJpbnRUYWJsZVtlbmNvZGluZ05hbWVdID0gdmFyaW50RW5jb2RlKGNvZGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh2YXJpbnRUYWJsZSlcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogb2ZmICovXG4vKiBlc2xpbnQga2V5LXNwYWNpbmc6IG9mZiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgJ2lkZW50aXR5JzogICAweDAsXG4gICdzaGExJzogICAgICAgMHgxMSxcbiAgJ3NoYTItMjU2JzogICAweDEyLFxuICAnc2hhMi01MTInOiAgIDB4MTMsXG4gICdkYmwtc2hhMi0yNTYnOiAweDU2LFxuICAnc2hhMy0yMjQnOiAgIDB4MTcsXG4gICdzaGEzLTI1Nic6ICAgMHgxNixcbiAgJ3NoYTMtMzg0JzogICAweDE1LFxuICAnc2hhMy01MTInOiAgIDB4MTQsXG4gICdzaGFrZS0xMjgnOiAgMHgxOCxcbiAgJ3NoYWtlLTI1Nic6ICAweDE5LFxuICAna2VjY2FrLTIyNCc6IDB4MUEsXG4gICdrZWNjYWstMjU2JzogMHgxQixcbiAgJ2tlY2Nhay0zODQnOiAweDFDLFxuICAna2VjY2FrLTUxMic6IDB4MUQsXG4gICdtdXJtdXIzLTEyOCc6IDB4MjIsXG4gICdtdXJtdXIzLTMyJzogIDB4MjMsXG4gICdibGFrZTJiLTgnOiAgIDB4YjIwMSxcbiAgJ2JsYWtlMmItMTYnOiAgMHhiMjAyLFxuICAnYmxha2UyYi0yNCc6ICAweGIyMDMsXG4gICdibGFrZTJiLTMyJzogIDB4YjIwNCxcbiAgJ2JsYWtlMmItNDAnOiAgMHhiMjA1LFxuICAnYmxha2UyYi00OCc6ICAweGIyMDYsXG4gICdibGFrZTJiLTU2JzogIDB4YjIwNyxcbiAgJ2JsYWtlMmItNjQnOiAgMHhiMjA4LFxuICAnYmxha2UyYi03Mic6ICAweGIyMDksXG4gICdibGFrZTJiLTgwJzogIDB4YjIwYSxcbiAgJ2JsYWtlMmItODgnOiAgMHhiMjBiLFxuICAnYmxha2UyYi05Nic6ICAweGIyMGMsXG4gICdibGFrZTJiLTEwNCc6IDB4YjIwZCxcbiAgJ2JsYWtlMmItMTEyJzogMHhiMjBlLFxuICAnYmxha2UyYi0xMjAnOiAweGIyMGYsXG4gICdibGFrZTJiLTEyOCc6IDB4YjIxMCxcbiAgJ2JsYWtlMmItMTM2JzogMHhiMjExLFxuICAnYmxha2UyYi0xNDQnOiAweGIyMTIsXG4gICdibGFrZTJiLTE1Mic6IDB4YjIxMyxcbiAgJ2JsYWtlMmItMTYwJzogMHhiMjE0LFxuICAnYmxha2UyYi0xNjgnOiAweGIyMTUsXG4gICdibGFrZTJiLTE3Nic6IDB4YjIxNixcbiAgJ2JsYWtlMmItMTg0JzogMHhiMjE3LFxuICAnYmxha2UyYi0xOTInOiAweGIyMTgsXG4gICdibGFrZTJiLTIwMCc6IDB4YjIxOSxcbiAgJ2JsYWtlMmItMjA4JzogMHhiMjFhLFxuICAnYmxha2UyYi0yMTYnOiAweGIyMWIsXG4gICdibGFrZTJiLTIyNCc6IDB4YjIxYyxcbiAgJ2JsYWtlMmItMjMyJzogMHhiMjFkLFxuICAnYmxha2UyYi0yNDAnOiAweGIyMWUsXG4gICdibGFrZTJiLTI0OCc6IDB4YjIxZixcbiAgJ2JsYWtlMmItMjU2JzogMHhiMjIwLFxuICAnYmxha2UyYi0yNjQnOiAweGIyMjEsXG4gICdibGFrZTJiLTI3Mic6IDB4YjIyMixcbiAgJ2JsYWtlMmItMjgwJzogMHhiMjIzLFxuICAnYmxha2UyYi0yODgnOiAweGIyMjQsXG4gICdibGFrZTJiLTI5Nic6IDB4YjIyNSxcbiAgJ2JsYWtlMmItMzA0JzogMHhiMjI2LFxuICAnYmxha2UyYi0zMTInOiAweGIyMjcsXG4gICdibGFrZTJiLTMyMCc6IDB4YjIyOCxcbiAgJ2JsYWtlMmItMzI4JzogMHhiMjI5LFxuICAnYmxha2UyYi0zMzYnOiAweGIyMmEsXG4gICdibGFrZTJiLTM0NCc6IDB4YjIyYixcbiAgJ2JsYWtlMmItMzUyJzogMHhiMjJjLFxuICAnYmxha2UyYi0zNjAnOiAweGIyMmQsXG4gICdibGFrZTJiLTM2OCc6IDB4YjIyZSxcbiAgJ2JsYWtlMmItMzc2JzogMHhiMjJmLFxuICAnYmxha2UyYi0zODQnOiAweGIyMzAsXG4gICdibGFrZTJiLTM5Mic6IDB4YjIzMSxcbiAgJ2JsYWtlMmItNDAwJzogMHhiMjMyLFxuICAnYmxha2UyYi00MDgnOiAweGIyMzMsXG4gICdibGFrZTJiLTQxNic6IDB4YjIzNCxcbiAgJ2JsYWtlMmItNDI0JzogMHhiMjM1LFxuICAnYmxha2UyYi00MzInOiAweGIyMzYsXG4gICdibGFrZTJiLTQ0MCc6IDB4YjIzNyxcbiAgJ2JsYWtlMmItNDQ4JzogMHhiMjM4LFxuICAnYmxha2UyYi00NTYnOiAweGIyMzksXG4gICdibGFrZTJiLTQ2NCc6IDB4YjIzYSxcbiAgJ2JsYWtlMmItNDcyJzogMHhiMjNiLFxuICAnYmxha2UyYi00ODAnOiAweGIyM2MsXG4gICdibGFrZTJiLTQ4OCc6IDB4YjIzZCxcbiAgJ2JsYWtlMmItNDk2JzogMHhiMjNlLFxuICAnYmxha2UyYi01MDQnOiAweGIyM2YsXG4gICdibGFrZTJiLTUxMic6IDB4YjI0MCxcbiAgJ2JsYWtlMnMtOCc6ICAgMHhiMjQxLFxuICAnYmxha2Uycy0xNic6ICAweGIyNDIsXG4gICdibGFrZTJzLTI0JzogIDB4YjI0MyxcbiAgJ2JsYWtlMnMtMzInOiAgMHhiMjQ0LFxuICAnYmxha2Uycy00MCc6ICAweGIyNDUsXG4gICdibGFrZTJzLTQ4JzogIDB4YjI0NixcbiAgJ2JsYWtlMnMtNTYnOiAgMHhiMjQ3LFxuICAnYmxha2Uycy02NCc6ICAweGIyNDgsXG4gICdibGFrZTJzLTcyJzogIDB4YjI0OSxcbiAgJ2JsYWtlMnMtODAnOiAgMHhiMjRhLFxuICAnYmxha2Uycy04OCc6ICAweGIyNGIsXG4gICdibGFrZTJzLTk2JzogIDB4YjI0YyxcbiAgJ2JsYWtlMnMtMTA0JzogMHhiMjRkLFxuICAnYmxha2Uycy0xMTInOiAweGIyNGUsXG4gICdibGFrZTJzLTEyMCc6IDB4YjI0ZixcbiAgJ2JsYWtlMnMtMTI4JzogMHhiMjUwLFxuICAnYmxha2Uycy0xMzYnOiAweGIyNTEsXG4gICdibGFrZTJzLTE0NCc6IDB4YjI1MixcbiAgJ2JsYWtlMnMtMTUyJzogMHhiMjUzLFxuICAnYmxha2Uycy0xNjAnOiAweGIyNTQsXG4gICdibGFrZTJzLTE2OCc6IDB4YjI1NSxcbiAgJ2JsYWtlMnMtMTc2JzogMHhiMjU2LFxuICAnYmxha2Uycy0xODQnOiAweGIyNTcsXG4gICdibGFrZTJzLTE5Mic6IDB4YjI1OCxcbiAgJ2JsYWtlMnMtMjAwJzogMHhiMjU5LFxuICAnYmxha2Uycy0yMDgnOiAweGIyNWEsXG4gICdibGFrZTJzLTIxNic6IDB4YjI1YixcbiAgJ2JsYWtlMnMtMjI0JzogMHhiMjVjLFxuICAnYmxha2Uycy0yMzInOiAweGIyNWQsXG4gICdibGFrZTJzLTI0MCc6IDB4YjI1ZSxcbiAgJ2JsYWtlMnMtMjQ4JzogMHhiMjVmLFxuICAnYmxha2Uycy0yNTYnOiAweGIyNjAsXG4gICdTa2VpbjI1Ni04JzogMHhiMzAxLFxuICAnU2tlaW4yNTYtMTYnOiAweGIzMDIsXG4gICdTa2VpbjI1Ni0yNCc6IDB4YjMwMyxcbiAgJ1NrZWluMjU2LTMyJzogMHhiMzA0LFxuICAnU2tlaW4yNTYtNDAnOiAweGIzMDUsXG4gICdTa2VpbjI1Ni00OCc6IDB4YjMwNixcbiAgJ1NrZWluMjU2LTU2JzogMHhiMzA3LFxuICAnU2tlaW4yNTYtNjQnOiAweGIzMDgsXG4gICdTa2VpbjI1Ni03Mic6IDB4YjMwOSxcbiAgJ1NrZWluMjU2LTgwJzogMHhiMzBhLFxuICAnU2tlaW4yNTYtODgnOiAweGIzMGIsXG4gICdTa2VpbjI1Ni05Nic6IDB4YjMwYyxcbiAgJ1NrZWluMjU2LTEwNCc6IDB4YjMwZCxcbiAgJ1NrZWluMjU2LTExMic6IDB4YjMwZSxcbiAgJ1NrZWluMjU2LTEyMCc6IDB4YjMwZixcbiAgJ1NrZWluMjU2LTEyOCc6IDB4YjMxMCxcbiAgJ1NrZWluMjU2LTEzNic6IDB4YjMxMSxcbiAgJ1NrZWluMjU2LTE0NCc6IDB4YjMxMixcbiAgJ1NrZWluMjU2LTE1Mic6IDB4YjMxMyxcbiAgJ1NrZWluMjU2LTE2MCc6IDB4YjMxNCxcbiAgJ1NrZWluMjU2LTE2OCc6IDB4YjMxNSxcbiAgJ1NrZWluMjU2LTE3Nic6IDB4YjMxNixcbiAgJ1NrZWluMjU2LTE4NCc6IDB4YjMxNyxcbiAgJ1NrZWluMjU2LTE5Mic6IDB4YjMxOCxcbiAgJ1NrZWluMjU2LTIwMCc6IDB4YjMxOSxcbiAgJ1NrZWluMjU2LTIwOCc6IDB4YjMxYSxcbiAgJ1NrZWluMjU2LTIxNic6IDB4YjMxYixcbiAgJ1NrZWluMjU2LTIyNCc6IDB4YjMxYyxcbiAgJ1NrZWluMjU2LTIzMic6IDB4YjMxZCxcbiAgJ1NrZWluMjU2LTI0MCc6IDB4YjMxZSxcbiAgJ1NrZWluMjU2LTI0OCc6IDB4YjMxZixcbiAgJ1NrZWluMjU2LTI1Nic6IDB4YjMyMCxcbiAgJ1NrZWluNTEyLTgnOiAweGIzMjEsXG4gICdTa2VpbjUxMi0xNic6IDB4YjMyMixcbiAgJ1NrZWluNTEyLTI0JzogMHhiMzIzLFxuICAnU2tlaW41MTItMzInOiAweGIzMjQsXG4gICdTa2VpbjUxMi00MCc6IDB4YjMyNSxcbiAgJ1NrZWluNTEyLTQ4JzogMHhiMzI2LFxuICAnU2tlaW41MTItNTYnOiAweGIzMjcsXG4gICdTa2VpbjUxMi02NCc6IDB4YjMyOCxcbiAgJ1NrZWluNTEyLTcyJzogMHhiMzI5LFxuICAnU2tlaW41MTItODAnOiAweGIzMmEsXG4gICdTa2VpbjUxMi04OCc6IDB4YjMyYixcbiAgJ1NrZWluNTEyLTk2JzogMHhiMzJjLFxuICAnU2tlaW41MTItMTA0JzogMHhiMzJkLFxuICAnU2tlaW41MTItMTEyJzogMHhiMzJlLFxuICAnU2tlaW41MTItMTIwJzogMHhiMzJmLFxuICAnU2tlaW41MTItMTI4JzogMHhiMzMwLFxuICAnU2tlaW41MTItMTM2JzogMHhiMzMxLFxuICAnU2tlaW41MTItMTQ0JzogMHhiMzMyLFxuICAnU2tlaW41MTItMTUyJzogMHhiMzMzLFxuICAnU2tlaW41MTItMTYwJzogMHhiMzM0LFxuICAnU2tlaW41MTItMTY4JzogMHhiMzM1LFxuICAnU2tlaW41MTItMTc2JzogMHhiMzM2LFxuICAnU2tlaW41MTItMTg0JzogMHhiMzM3LFxuICAnU2tlaW41MTItMTkyJzogMHhiMzM4LFxuICAnU2tlaW41MTItMjAwJzogMHhiMzM5LFxuICAnU2tlaW41MTItMjA4JzogMHhiMzNhLFxuICAnU2tlaW41MTItMjE2JzogMHhiMzNiLFxuICAnU2tlaW41MTItMjI0JzogMHhiMzNjLFxuICAnU2tlaW41MTItMjMyJzogMHhiMzNkLFxuICAnU2tlaW41MTItMjQwJzogMHhiMzNlLFxuICAnU2tlaW41MTItMjQ4JzogMHhiMzNmLFxuICAnU2tlaW41MTItMjU2JzogMHhiMzQwLFxuICAnU2tlaW41MTItMjY0JzogMHhiMzQxLFxuICAnU2tlaW41MTItMjcyJzogMHhiMzQyLFxuICAnU2tlaW41MTItMjgwJzogMHhiMzQzLFxuICAnU2tlaW41MTItMjg4JzogMHhiMzQ0LFxuICAnU2tlaW41MTItMjk2JzogMHhiMzQ1LFxuICAnU2tlaW41MTItMzA0JzogMHhiMzQ2LFxuICAnU2tlaW41MTItMzEyJzogMHhiMzQ3LFxuICAnU2tlaW41MTItMzIwJzogMHhiMzQ4LFxuICAnU2tlaW41MTItMzI4JzogMHhiMzQ5LFxuICAnU2tlaW41MTItMzM2JzogMHhiMzRhLFxuICAnU2tlaW41MTItMzQ0JzogMHhiMzRiLFxuICAnU2tlaW41MTItMzUyJzogMHhiMzRjLFxuICAnU2tlaW41MTItMzYwJzogMHhiMzRkLFxuICAnU2tlaW41MTItMzY4JzogMHhiMzRlLFxuICAnU2tlaW41MTItMzc2JzogMHhiMzRmLFxuICAnU2tlaW41MTItMzg0JzogMHhiMzUwLFxuICAnU2tlaW41MTItMzkyJzogMHhiMzUxLFxuICAnU2tlaW41MTItNDAwJzogMHhiMzUyLFxuICAnU2tlaW41MTItNDA4JzogMHhiMzUzLFxuICAnU2tlaW41MTItNDE2JzogMHhiMzU0LFxuICAnU2tlaW41MTItNDI0JzogMHhiMzU1LFxuICAnU2tlaW41MTItNDMyJzogMHhiMzU2LFxuICAnU2tlaW41MTItNDQwJzogMHhiMzU3LFxuICAnU2tlaW41MTItNDQ4JzogMHhiMzU4LFxuICAnU2tlaW41MTItNDU2JzogMHhiMzU5LFxuICAnU2tlaW41MTItNDY0JzogMHhiMzVhLFxuICAnU2tlaW41MTItNDcyJzogMHhiMzViLFxuICAnU2tlaW41MTItNDgwJzogMHhiMzVjLFxuICAnU2tlaW41MTItNDg4JzogMHhiMzVkLFxuICAnU2tlaW41MTItNDk2JzogMHhiMzVlLFxuICAnU2tlaW41MTItNTA0JzogMHhiMzVmLFxuICAnU2tlaW41MTItNTEyJzogMHhiMzYwLFxuICAnU2tlaW4xMDI0LTgnOiAweGIzNjEsXG4gICdTa2VpbjEwMjQtMTYnOiAweGIzNjIsXG4gICdTa2VpbjEwMjQtMjQnOiAweGIzNjMsXG4gICdTa2VpbjEwMjQtMzInOiAweGIzNjQsXG4gICdTa2VpbjEwMjQtNDAnOiAweGIzNjUsXG4gICdTa2VpbjEwMjQtNDgnOiAweGIzNjYsXG4gICdTa2VpbjEwMjQtNTYnOiAweGIzNjcsXG4gICdTa2VpbjEwMjQtNjQnOiAweGIzNjgsXG4gICdTa2VpbjEwMjQtNzInOiAweGIzNjksXG4gICdTa2VpbjEwMjQtODAnOiAweGIzNmEsXG4gICdTa2VpbjEwMjQtODgnOiAweGIzNmIsXG4gICdTa2VpbjEwMjQtOTYnOiAweGIzNmMsXG4gICdTa2VpbjEwMjQtMTA0JzogMHhiMzZkLFxuICAnU2tlaW4xMDI0LTExMic6IDB4YjM2ZSxcbiAgJ1NrZWluMTAyNC0xMjAnOiAweGIzNmYsXG4gICdTa2VpbjEwMjQtMTI4JzogMHhiMzcwLFxuICAnU2tlaW4xMDI0LTEzNic6IDB4YjM3MSxcbiAgJ1NrZWluMTAyNC0xNDQnOiAweGIzNzIsXG4gICdTa2VpbjEwMjQtMTUyJzogMHhiMzczLFxuICAnU2tlaW4xMDI0LTE2MCc6IDB4YjM3NCxcbiAgJ1NrZWluMTAyNC0xNjgnOiAweGIzNzUsXG4gICdTa2VpbjEwMjQtMTc2JzogMHhiMzc2LFxuICAnU2tlaW4xMDI0LTE4NCc6IDB4YjM3NyxcbiAgJ1NrZWluMTAyNC0xOTInOiAweGIzNzgsXG4gICdTa2VpbjEwMjQtMjAwJzogMHhiMzc5LFxuICAnU2tlaW4xMDI0LTIwOCc6IDB4YjM3YSxcbiAgJ1NrZWluMTAyNC0yMTYnOiAweGIzN2IsXG4gICdTa2VpbjEwMjQtMjI0JzogMHhiMzdjLFxuICAnU2tlaW4xMDI0LTIzMic6IDB4YjM3ZCxcbiAgJ1NrZWluMTAyNC0yNDAnOiAweGIzN2UsXG4gICdTa2VpbjEwMjQtMjQ4JzogMHhiMzdmLFxuICAnU2tlaW4xMDI0LTI1Nic6IDB4YjM4MCxcbiAgJ1NrZWluMTAyNC0yNjQnOiAweGIzODEsXG4gICdTa2VpbjEwMjQtMjcyJzogMHhiMzgyLFxuICAnU2tlaW4xMDI0LTI4MCc6IDB4YjM4MyxcbiAgJ1NrZWluMTAyNC0yODgnOiAweGIzODQsXG4gICdTa2VpbjEwMjQtMjk2JzogMHhiMzg1LFxuICAnU2tlaW4xMDI0LTMwNCc6IDB4YjM4NixcbiAgJ1NrZWluMTAyNC0zMTInOiAweGIzODcsXG4gICdTa2VpbjEwMjQtMzIwJzogMHhiMzg4LFxuICAnU2tlaW4xMDI0LTMyOCc6IDB4YjM4OSxcbiAgJ1NrZWluMTAyNC0zMzYnOiAweGIzOGEsXG4gICdTa2VpbjEwMjQtMzQ0JzogMHhiMzhiLFxuICAnU2tlaW4xMDI0LTM1Mic6IDB4YjM4YyxcbiAgJ1NrZWluMTAyNC0zNjAnOiAweGIzOGQsXG4gICdTa2VpbjEwMjQtMzY4JzogMHhiMzhlLFxuICAnU2tlaW4xMDI0LTM3Nic6IDB4YjM4ZixcbiAgJ1NrZWluMTAyNC0zODQnOiAweGIzOTAsXG4gICdTa2VpbjEwMjQtMzkyJzogMHhiMzkxLFxuICAnU2tlaW4xMDI0LTQwMCc6IDB4YjM5MixcbiAgJ1NrZWluMTAyNC00MDgnOiAweGIzOTMsXG4gICdTa2VpbjEwMjQtNDE2JzogMHhiMzk0LFxuICAnU2tlaW4xMDI0LTQyNCc6IDB4YjM5NSxcbiAgJ1NrZWluMTAyNC00MzInOiAweGIzOTYsXG4gICdTa2VpbjEwMjQtNDQwJzogMHhiMzk3LFxuICAnU2tlaW4xMDI0LTQ0OCc6IDB4YjM5OCxcbiAgJ1NrZWluMTAyNC00NTYnOiAweGIzOTksXG4gICdTa2VpbjEwMjQtNDY0JzogMHhiMzlhLFxuICAnU2tlaW4xMDI0LTQ3Mic6IDB4YjM5YixcbiAgJ1NrZWluMTAyNC00ODAnOiAweGIzOWMsXG4gICdTa2VpbjEwMjQtNDg4JzogMHhiMzlkLFxuICAnU2tlaW4xMDI0LTQ5Nic6IDB4YjM5ZSxcbiAgJ1NrZWluMTAyNC01MDQnOiAweGIzOWYsXG4gICdTa2VpbjEwMjQtNTEyJzogMHhiM2EwLFxuICAnU2tlaW4xMDI0LTUyMCc6IDB4YjNhMSxcbiAgJ1NrZWluMTAyNC01MjgnOiAweGIzYTIsXG4gICdTa2VpbjEwMjQtNTM2JzogMHhiM2EzLFxuICAnU2tlaW4xMDI0LTU0NCc6IDB4YjNhNCxcbiAgJ1NrZWluMTAyNC01NTInOiAweGIzYTUsXG4gICdTa2VpbjEwMjQtNTYwJzogMHhiM2E2LFxuICAnU2tlaW4xMDI0LTU2OCc6IDB4YjNhNyxcbiAgJ1NrZWluMTAyNC01NzYnOiAweGIzYTgsXG4gICdTa2VpbjEwMjQtNTg0JzogMHhiM2E5LFxuICAnU2tlaW4xMDI0LTU5Mic6IDB4YjNhYSxcbiAgJ1NrZWluMTAyNC02MDAnOiAweGIzYWIsXG4gICdTa2VpbjEwMjQtNjA4JzogMHhiM2FjLFxuICAnU2tlaW4xMDI0LTYxNic6IDB4YjNhZCxcbiAgJ1NrZWluMTAyNC02MjQnOiAweGIzYWUsXG4gICdTa2VpbjEwMjQtNjMyJzogMHhiM2FmLFxuICAnU2tlaW4xMDI0LTY0MCc6IDB4YjNiMCxcbiAgJ1NrZWluMTAyNC02NDgnOiAweGIzYjEsXG4gICdTa2VpbjEwMjQtNjU2JzogMHhiM2IyLFxuICAnU2tlaW4xMDI0LTY2NCc6IDB4YjNiMyxcbiAgJ1NrZWluMTAyNC02NzInOiAweGIzYjQsXG4gICdTa2VpbjEwMjQtNjgwJzogMHhiM2I1LFxuICAnU2tlaW4xMDI0LTY4OCc6IDB4YjNiNixcbiAgJ1NrZWluMTAyNC02OTYnOiAweGIzYjcsXG4gICdTa2VpbjEwMjQtNzA0JzogMHhiM2I4LFxuICAnU2tlaW4xMDI0LTcxMic6IDB4YjNiOSxcbiAgJ1NrZWluMTAyNC03MjAnOiAweGIzYmEsXG4gICdTa2VpbjEwMjQtNzI4JzogMHhiM2JiLFxuICAnU2tlaW4xMDI0LTczNic6IDB4YjNiYyxcbiAgJ1NrZWluMTAyNC03NDQnOiAweGIzYmQsXG4gICdTa2VpbjEwMjQtNzUyJzogMHhiM2JlLFxuICAnU2tlaW4xMDI0LTc2MCc6IDB4YjNiZixcbiAgJ1NrZWluMTAyNC03NjgnOiAweGIzYzAsXG4gICdTa2VpbjEwMjQtNzc2JzogMHhiM2MxLFxuICAnU2tlaW4xMDI0LTc4NCc6IDB4YjNjMixcbiAgJ1NrZWluMTAyNC03OTInOiAweGIzYzMsXG4gICdTa2VpbjEwMjQtODAwJzogMHhiM2M0LFxuICAnU2tlaW4xMDI0LTgwOCc6IDB4YjNjNSxcbiAgJ1NrZWluMTAyNC04MTYnOiAweGIzYzYsXG4gICdTa2VpbjEwMjQtODI0JzogMHhiM2M3LFxuICAnU2tlaW4xMDI0LTgzMic6IDB4YjNjOCxcbiAgJ1NrZWluMTAyNC04NDAnOiAweGIzYzksXG4gICdTa2VpbjEwMjQtODQ4JzogMHhiM2NhLFxuICAnU2tlaW4xMDI0LTg1Nic6IDB4YjNjYixcbiAgJ1NrZWluMTAyNC04NjQnOiAweGIzY2MsXG4gICdTa2VpbjEwMjQtODcyJzogMHhiM2NkLFxuICAnU2tlaW4xMDI0LTg4MCc6IDB4YjNjZSxcbiAgJ1NrZWluMTAyNC04ODgnOiAweGIzY2YsXG4gICdTa2VpbjEwMjQtODk2JzogMHhiM2QwLFxuICAnU2tlaW4xMDI0LTkwNCc6IDB4YjNkMSxcbiAgJ1NrZWluMTAyNC05MTInOiAweGIzZDIsXG4gICdTa2VpbjEwMjQtOTIwJzogMHhiM2QzLFxuICAnU2tlaW4xMDI0LTkyOCc6IDB4YjNkNCxcbiAgJ1NrZWluMTAyNC05MzYnOiAweGIzZDUsXG4gICdTa2VpbjEwMjQtOTQ0JzogMHhiM2Q2LFxuICAnU2tlaW4xMDI0LTk1Mic6IDB4YjNkNyxcbiAgJ1NrZWluMTAyNC05NjAnOiAweGIzZDgsXG4gICdTa2VpbjEwMjQtOTY4JzogMHhiM2Q5LFxuICAnU2tlaW4xMDI0LTk3Nic6IDB4YjNkYSxcbiAgJ1NrZWluMTAyNC05ODQnOiAweGIzZGIsXG4gICdTa2VpbjEwMjQtOTkyJzogMHhiM2RjLFxuICAnU2tlaW4xMDI0LTEwMDAnOiAweGIzZGQsXG4gICdTa2VpbjEwMjQtMTAwOCc6IDB4YjNkZSxcbiAgJ1NrZWluMTAyNC0xMDE2JzogMHhiM2RmLFxuICAnU2tlaW4xMDI0LTEwMjQnOiAweGIzZTBcbn0pXG5cbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgwOiAnaWRlbnRpdHknLFxuXG4gIC8vIHNoYSBmYW1pbHlcbiAgMHgxMTogJ3NoYTEnLFxuICAweDEyOiAnc2hhMi0yNTYnLFxuICAweDEzOiAnc2hhMi01MTInLFxuICAweDU2OiAnZGJsLXNoYTItMjU2JyxcbiAgMHgxNzogJ3NoYTMtMjI0JyxcbiAgMHgxNjogJ3NoYTMtMjU2JyxcbiAgMHgxNTogJ3NoYTMtMzg0JyxcbiAgMHgxNDogJ3NoYTMtNTEyJyxcbiAgMHgxODogJ3NoYWtlLTEyOCcsXG4gIDB4MTk6ICdzaGFrZS0yNTYnLFxuICAweDFBOiAna2VjY2FrLTIyNCcsXG4gIDB4MUI6ICdrZWNjYWstMjU2JyxcbiAgMHgxQzogJ2tlY2Nhay0zODQnLFxuICAweDFEOiAna2VjY2FrLTUxMicsXG5cbiAgMHgyMjogJ211cm11cjMtMTI4JyxcbiAgMHgyMzogJ211cm11cjMtMzInLFxuXG4gIC8vIGJsYWtlMlxuICAweGIyMDE6ICdibGFrZTJiLTgnLFxuICAweGIyMDI6ICdibGFrZTJiLTE2JyxcbiAgMHhiMjAzOiAnYmxha2UyYi0yNCcsXG4gIDB4YjIwNDogJ2JsYWtlMmItMzInLFxuICAweGIyMDU6ICdibGFrZTJiLTQwJyxcbiAgMHhiMjA2OiAnYmxha2UyYi00OCcsXG4gIDB4YjIwNzogJ2JsYWtlMmItNTYnLFxuICAweGIyMDg6ICdibGFrZTJiLTY0JyxcbiAgMHhiMjA5OiAnYmxha2UyYi03MicsXG4gIDB4YjIwYTogJ2JsYWtlMmItODAnLFxuICAweGIyMGI6ICdibGFrZTJiLTg4JyxcbiAgMHhiMjBjOiAnYmxha2UyYi05NicsXG4gIDB4YjIwZDogJ2JsYWtlMmItMTA0JyxcbiAgMHhiMjBlOiAnYmxha2UyYi0xMTInLFxuICAweGIyMGY6ICdibGFrZTJiLTEyMCcsXG4gIDB4YjIxMDogJ2JsYWtlMmItMTI4JyxcbiAgMHhiMjExOiAnYmxha2UyYi0xMzYnLFxuICAweGIyMTI6ICdibGFrZTJiLTE0NCcsXG4gIDB4YjIxMzogJ2JsYWtlMmItMTUyJyxcbiAgMHhiMjE0OiAnYmxha2UyYi0xNjAnLFxuICAweGIyMTU6ICdibGFrZTJiLTE2OCcsXG4gIDB4YjIxNjogJ2JsYWtlMmItMTc2JyxcbiAgMHhiMjE3OiAnYmxha2UyYi0xODQnLFxuICAweGIyMTg6ICdibGFrZTJiLTE5MicsXG4gIDB4YjIxOTogJ2JsYWtlMmItMjAwJyxcbiAgMHhiMjFhOiAnYmxha2UyYi0yMDgnLFxuICAweGIyMWI6ICdibGFrZTJiLTIxNicsXG4gIDB4YjIxYzogJ2JsYWtlMmItMjI0JyxcbiAgMHhiMjFkOiAnYmxha2UyYi0yMzInLFxuICAweGIyMWU6ICdibGFrZTJiLTI0MCcsXG4gIDB4YjIxZjogJ2JsYWtlMmItMjQ4JyxcbiAgMHhiMjIwOiAnYmxha2UyYi0yNTYnLFxuICAweGIyMjE6ICdibGFrZTJiLTI2NCcsXG4gIDB4YjIyMjogJ2JsYWtlMmItMjcyJyxcbiAgMHhiMjIzOiAnYmxha2UyYi0yODAnLFxuICAweGIyMjQ6ICdibGFrZTJiLTI4OCcsXG4gIDB4YjIyNTogJ2JsYWtlMmItMjk2JyxcbiAgMHhiMjI2OiAnYmxha2UyYi0zMDQnLFxuICAweGIyMjc6ICdibGFrZTJiLTMxMicsXG4gIDB4YjIyODogJ2JsYWtlMmItMzIwJyxcbiAgMHhiMjI5OiAnYmxha2UyYi0zMjgnLFxuICAweGIyMmE6ICdibGFrZTJiLTMzNicsXG4gIDB4YjIyYjogJ2JsYWtlMmItMzQ0JyxcbiAgMHhiMjJjOiAnYmxha2UyYi0zNTInLFxuICAweGIyMmQ6ICdibGFrZTJiLTM2MCcsXG4gIDB4YjIyZTogJ2JsYWtlMmItMzY4JyxcbiAgMHhiMjJmOiAnYmxha2UyYi0zNzYnLFxuICAweGIyMzA6ICdibGFrZTJiLTM4NCcsXG4gIDB4YjIzMTogJ2JsYWtlMmItMzkyJyxcbiAgMHhiMjMyOiAnYmxha2UyYi00MDAnLFxuICAweGIyMzM6ICdibGFrZTJiLTQwOCcsXG4gIDB4YjIzNDogJ2JsYWtlMmItNDE2JyxcbiAgMHhiMjM1OiAnYmxha2UyYi00MjQnLFxuICAweGIyMzY6ICdibGFrZTJiLTQzMicsXG4gIDB4YjIzNzogJ2JsYWtlMmItNDQwJyxcbiAgMHhiMjM4OiAnYmxha2UyYi00NDgnLFxuICAweGIyMzk6ICdibGFrZTJiLTQ1NicsXG4gIDB4YjIzYTogJ2JsYWtlMmItNDY0JyxcbiAgMHhiMjNiOiAnYmxha2UyYi00NzInLFxuICAweGIyM2M6ICdibGFrZTJiLTQ4MCcsXG4gIDB4YjIzZDogJ2JsYWtlMmItNDg4JyxcbiAgMHhiMjNlOiAnYmxha2UyYi00OTYnLFxuICAweGIyM2Y6ICdibGFrZTJiLTUwNCcsXG4gIDB4YjI0MDogJ2JsYWtlMmItNTEyJyxcbiAgMHhiMjQxOiAnYmxha2Uycy04JyxcbiAgMHhiMjQyOiAnYmxha2Uycy0xNicsXG4gIDB4YjI0MzogJ2JsYWtlMnMtMjQnLFxuICAweGIyNDQ6ICdibGFrZTJzLTMyJyxcbiAgMHhiMjQ1OiAnYmxha2Uycy00MCcsXG4gIDB4YjI0NjogJ2JsYWtlMnMtNDgnLFxuICAweGIyNDc6ICdibGFrZTJzLTU2JyxcbiAgMHhiMjQ4OiAnYmxha2Uycy02NCcsXG4gIDB4YjI0OTogJ2JsYWtlMnMtNzInLFxuICAweGIyNGE6ICdibGFrZTJzLTgwJyxcbiAgMHhiMjRiOiAnYmxha2Uycy04OCcsXG4gIDB4YjI0YzogJ2JsYWtlMnMtOTYnLFxuICAweGIyNGQ6ICdibGFrZTJzLTEwNCcsXG4gIDB4YjI0ZTogJ2JsYWtlMnMtMTEyJyxcbiAgMHhiMjRmOiAnYmxha2Uycy0xMjAnLFxuICAweGIyNTA6ICdibGFrZTJzLTEyOCcsXG4gIDB4YjI1MTogJ2JsYWtlMnMtMTM2JyxcbiAgMHhiMjUyOiAnYmxha2Uycy0xNDQnLFxuICAweGIyNTM6ICdibGFrZTJzLTE1MicsXG4gIDB4YjI1NDogJ2JsYWtlMnMtMTYwJyxcbiAgMHhiMjU1OiAnYmxha2Uycy0xNjgnLFxuICAweGIyNTY6ICdibGFrZTJzLTE3NicsXG4gIDB4YjI1NzogJ2JsYWtlMnMtMTg0JyxcbiAgMHhiMjU4OiAnYmxha2Uycy0xOTInLFxuICAweGIyNTk6ICdibGFrZTJzLTIwMCcsXG4gIDB4YjI1YTogJ2JsYWtlMnMtMjA4JyxcbiAgMHhiMjViOiAnYmxha2Uycy0yMTYnLFxuICAweGIyNWM6ICdibGFrZTJzLTIyNCcsXG4gIDB4YjI1ZDogJ2JsYWtlMnMtMjMyJyxcbiAgMHhiMjVlOiAnYmxha2Uycy0yNDAnLFxuICAweGIyNWY6ICdibGFrZTJzLTI0OCcsXG4gIDB4YjI2MDogJ2JsYWtlMnMtMjU2JyxcblxuICAvLyBza2VpblxuICAweGIzMDE6ICdTa2VpbjI1Ni04JyxcbiAgMHhiMzAyOiAnU2tlaW4yNTYtMTYnLFxuICAweGIzMDM6ICdTa2VpbjI1Ni0yNCcsXG4gIDB4YjMwNDogJ1NrZWluMjU2LTMyJyxcbiAgMHhiMzA1OiAnU2tlaW4yNTYtNDAnLFxuICAweGIzMDY6ICdTa2VpbjI1Ni00OCcsXG4gIDB4YjMwNzogJ1NrZWluMjU2LTU2JyxcbiAgMHhiMzA4OiAnU2tlaW4yNTYtNjQnLFxuICAweGIzMDk6ICdTa2VpbjI1Ni03MicsXG4gIDB4YjMwYTogJ1NrZWluMjU2LTgwJyxcbiAgMHhiMzBiOiAnU2tlaW4yNTYtODgnLFxuICAweGIzMGM6ICdTa2VpbjI1Ni05NicsXG4gIDB4YjMwZDogJ1NrZWluMjU2LTEwNCcsXG4gIDB4YjMwZTogJ1NrZWluMjU2LTExMicsXG4gIDB4YjMwZjogJ1NrZWluMjU2LTEyMCcsXG4gIDB4YjMxMDogJ1NrZWluMjU2LTEyOCcsXG4gIDB4YjMxMTogJ1NrZWluMjU2LTEzNicsXG4gIDB4YjMxMjogJ1NrZWluMjU2LTE0NCcsXG4gIDB4YjMxMzogJ1NrZWluMjU2LTE1MicsXG4gIDB4YjMxNDogJ1NrZWluMjU2LTE2MCcsXG4gIDB4YjMxNTogJ1NrZWluMjU2LTE2OCcsXG4gIDB4YjMxNjogJ1NrZWluMjU2LTE3NicsXG4gIDB4YjMxNzogJ1NrZWluMjU2LTE4NCcsXG4gIDB4YjMxODogJ1NrZWluMjU2LTE5MicsXG4gIDB4YjMxOTogJ1NrZWluMjU2LTIwMCcsXG4gIDB4YjMxYTogJ1NrZWluMjU2LTIwOCcsXG4gIDB4YjMxYjogJ1NrZWluMjU2LTIxNicsXG4gIDB4YjMxYzogJ1NrZWluMjU2LTIyNCcsXG4gIDB4YjMxZDogJ1NrZWluMjU2LTIzMicsXG4gIDB4YjMxZTogJ1NrZWluMjU2LTI0MCcsXG4gIDB4YjMxZjogJ1NrZWluMjU2LTI0OCcsXG4gIDB4YjMyMDogJ1NrZWluMjU2LTI1NicsXG4gIDB4YjMyMTogJ1NrZWluNTEyLTgnLFxuICAweGIzMjI6ICdTa2VpbjUxMi0xNicsXG4gIDB4YjMyMzogJ1NrZWluNTEyLTI0JyxcbiAgMHhiMzI0OiAnU2tlaW41MTItMzInLFxuICAweGIzMjU6ICdTa2VpbjUxMi00MCcsXG4gIDB4YjMyNjogJ1NrZWluNTEyLTQ4JyxcbiAgMHhiMzI3OiAnU2tlaW41MTItNTYnLFxuICAweGIzMjg6ICdTa2VpbjUxMi02NCcsXG4gIDB4YjMyOTogJ1NrZWluNTEyLTcyJyxcbiAgMHhiMzJhOiAnU2tlaW41MTItODAnLFxuICAweGIzMmI6ICdTa2VpbjUxMi04OCcsXG4gIDB4YjMyYzogJ1NrZWluNTEyLTk2JyxcbiAgMHhiMzJkOiAnU2tlaW41MTItMTA0JyxcbiAgMHhiMzJlOiAnU2tlaW41MTItMTEyJyxcbiAgMHhiMzJmOiAnU2tlaW41MTItMTIwJyxcbiAgMHhiMzMwOiAnU2tlaW41MTItMTI4JyxcbiAgMHhiMzMxOiAnU2tlaW41MTItMTM2JyxcbiAgMHhiMzMyOiAnU2tlaW41MTItMTQ0JyxcbiAgMHhiMzMzOiAnU2tlaW41MTItMTUyJyxcbiAgMHhiMzM0OiAnU2tlaW41MTItMTYwJyxcbiAgMHhiMzM1OiAnU2tlaW41MTItMTY4JyxcbiAgMHhiMzM2OiAnU2tlaW41MTItMTc2JyxcbiAgMHhiMzM3OiAnU2tlaW41MTItMTg0JyxcbiAgMHhiMzM4OiAnU2tlaW41MTItMTkyJyxcbiAgMHhiMzM5OiAnU2tlaW41MTItMjAwJyxcbiAgMHhiMzNhOiAnU2tlaW41MTItMjA4JyxcbiAgMHhiMzNiOiAnU2tlaW41MTItMjE2JyxcbiAgMHhiMzNjOiAnU2tlaW41MTItMjI0JyxcbiAgMHhiMzNkOiAnU2tlaW41MTItMjMyJyxcbiAgMHhiMzNlOiAnU2tlaW41MTItMjQwJyxcbiAgMHhiMzNmOiAnU2tlaW41MTItMjQ4JyxcbiAgMHhiMzQwOiAnU2tlaW41MTItMjU2JyxcbiAgMHhiMzQxOiAnU2tlaW41MTItMjY0JyxcbiAgMHhiMzQyOiAnU2tlaW41MTItMjcyJyxcbiAgMHhiMzQzOiAnU2tlaW41MTItMjgwJyxcbiAgMHhiMzQ0OiAnU2tlaW41MTItMjg4JyxcbiAgMHhiMzQ1OiAnU2tlaW41MTItMjk2JyxcbiAgMHhiMzQ2OiAnU2tlaW41MTItMzA0JyxcbiAgMHhiMzQ3OiAnU2tlaW41MTItMzEyJyxcbiAgMHhiMzQ4OiAnU2tlaW41MTItMzIwJyxcbiAgMHhiMzQ5OiAnU2tlaW41MTItMzI4JyxcbiAgMHhiMzRhOiAnU2tlaW41MTItMzM2JyxcbiAgMHhiMzRiOiAnU2tlaW41MTItMzQ0JyxcbiAgMHhiMzRjOiAnU2tlaW41MTItMzUyJyxcbiAgMHhiMzRkOiAnU2tlaW41MTItMzYwJyxcbiAgMHhiMzRlOiAnU2tlaW41MTItMzY4JyxcbiAgMHhiMzRmOiAnU2tlaW41MTItMzc2JyxcbiAgMHhiMzUwOiAnU2tlaW41MTItMzg0JyxcbiAgMHhiMzUxOiAnU2tlaW41MTItMzkyJyxcbiAgMHhiMzUyOiAnU2tlaW41MTItNDAwJyxcbiAgMHhiMzUzOiAnU2tlaW41MTItNDA4JyxcbiAgMHhiMzU0OiAnU2tlaW41MTItNDE2JyxcbiAgMHhiMzU1OiAnU2tlaW41MTItNDI0JyxcbiAgMHhiMzU2OiAnU2tlaW41MTItNDMyJyxcbiAgMHhiMzU3OiAnU2tlaW41MTItNDQwJyxcbiAgMHhiMzU4OiAnU2tlaW41MTItNDQ4JyxcbiAgMHhiMzU5OiAnU2tlaW41MTItNDU2JyxcbiAgMHhiMzVhOiAnU2tlaW41MTItNDY0JyxcbiAgMHhiMzViOiAnU2tlaW41MTItNDcyJyxcbiAgMHhiMzVjOiAnU2tlaW41MTItNDgwJyxcbiAgMHhiMzVkOiAnU2tlaW41MTItNDg4JyxcbiAgMHhiMzVlOiAnU2tlaW41MTItNDk2JyxcbiAgMHhiMzVmOiAnU2tlaW41MTItNTA0JyxcbiAgMHhiMzYwOiAnU2tlaW41MTItNTEyJyxcbiAgMHhiMzYxOiAnU2tlaW4xMDI0LTgnLFxuICAweGIzNjI6ICdTa2VpbjEwMjQtMTYnLFxuICAweGIzNjM6ICdTa2VpbjEwMjQtMjQnLFxuICAweGIzNjQ6ICdTa2VpbjEwMjQtMzInLFxuICAweGIzNjU6ICdTa2VpbjEwMjQtNDAnLFxuICAweGIzNjY6ICdTa2VpbjEwMjQtNDgnLFxuICAweGIzNjc6ICdTa2VpbjEwMjQtNTYnLFxuICAweGIzNjg6ICdTa2VpbjEwMjQtNjQnLFxuICAweGIzNjk6ICdTa2VpbjEwMjQtNzInLFxuICAweGIzNmE6ICdTa2VpbjEwMjQtODAnLFxuICAweGIzNmI6ICdTa2VpbjEwMjQtODgnLFxuICAweGIzNmM6ICdTa2VpbjEwMjQtOTYnLFxuICAweGIzNmQ6ICdTa2VpbjEwMjQtMTA0JyxcbiAgMHhiMzZlOiAnU2tlaW4xMDI0LTExMicsXG4gIDB4YjM2ZjogJ1NrZWluMTAyNC0xMjAnLFxuICAweGIzNzA6ICdTa2VpbjEwMjQtMTI4JyxcbiAgMHhiMzcxOiAnU2tlaW4xMDI0LTEzNicsXG4gIDB4YjM3MjogJ1NrZWluMTAyNC0xNDQnLFxuICAweGIzNzM6ICdTa2VpbjEwMjQtMTUyJyxcbiAgMHhiMzc0OiAnU2tlaW4xMDI0LTE2MCcsXG4gIDB4YjM3NTogJ1NrZWluMTAyNC0xNjgnLFxuICAweGIzNzY6ICdTa2VpbjEwMjQtMTc2JyxcbiAgMHhiMzc3OiAnU2tlaW4xMDI0LTE4NCcsXG4gIDB4YjM3ODogJ1NrZWluMTAyNC0xOTInLFxuICAweGIzNzk6ICdTa2VpbjEwMjQtMjAwJyxcbiAgMHhiMzdhOiAnU2tlaW4xMDI0LTIwOCcsXG4gIDB4YjM3YjogJ1NrZWluMTAyNC0yMTYnLFxuICAweGIzN2M6ICdTa2VpbjEwMjQtMjI0JyxcbiAgMHhiMzdkOiAnU2tlaW4xMDI0LTIzMicsXG4gIDB4YjM3ZTogJ1NrZWluMTAyNC0yNDAnLFxuICAweGIzN2Y6ICdTa2VpbjEwMjQtMjQ4JyxcbiAgMHhiMzgwOiAnU2tlaW4xMDI0LTI1NicsXG4gIDB4YjM4MTogJ1NrZWluMTAyNC0yNjQnLFxuICAweGIzODI6ICdTa2VpbjEwMjQtMjcyJyxcbiAgMHhiMzgzOiAnU2tlaW4xMDI0LTI4MCcsXG4gIDB4YjM4NDogJ1NrZWluMTAyNC0yODgnLFxuICAweGIzODU6ICdTa2VpbjEwMjQtMjk2JyxcbiAgMHhiMzg2OiAnU2tlaW4xMDI0LTMwNCcsXG4gIDB4YjM4NzogJ1NrZWluMTAyNC0zMTInLFxuICAweGIzODg6ICdTa2VpbjEwMjQtMzIwJyxcbiAgMHhiMzg5OiAnU2tlaW4xMDI0LTMyOCcsXG4gIDB4YjM4YTogJ1NrZWluMTAyNC0zMzYnLFxuICAweGIzOGI6ICdTa2VpbjEwMjQtMzQ0JyxcbiAgMHhiMzhjOiAnU2tlaW4xMDI0LTM1MicsXG4gIDB4YjM4ZDogJ1NrZWluMTAyNC0zNjAnLFxuICAweGIzOGU6ICdTa2VpbjEwMjQtMzY4JyxcbiAgMHhiMzhmOiAnU2tlaW4xMDI0LTM3NicsXG4gIDB4YjM5MDogJ1NrZWluMTAyNC0zODQnLFxuICAweGIzOTE6ICdTa2VpbjEwMjQtMzkyJyxcbiAgMHhiMzkyOiAnU2tlaW4xMDI0LTQwMCcsXG4gIDB4YjM5MzogJ1NrZWluMTAyNC00MDgnLFxuICAweGIzOTQ6ICdTa2VpbjEwMjQtNDE2JyxcbiAgMHhiMzk1OiAnU2tlaW4xMDI0LTQyNCcsXG4gIDB4YjM5NjogJ1NrZWluMTAyNC00MzInLFxuICAweGIzOTc6ICdTa2VpbjEwMjQtNDQwJyxcbiAgMHhiMzk4OiAnU2tlaW4xMDI0LTQ0OCcsXG4gIDB4YjM5OTogJ1NrZWluMTAyNC00NTYnLFxuICAweGIzOWE6ICdTa2VpbjEwMjQtNDY0JyxcbiAgMHhiMzliOiAnU2tlaW4xMDI0LTQ3MicsXG4gIDB4YjM5YzogJ1NrZWluMTAyNC00ODAnLFxuICAweGIzOWQ6ICdTa2VpbjEwMjQtNDg4JyxcbiAgMHhiMzllOiAnU2tlaW4xMDI0LTQ5NicsXG4gIDB4YjM5ZjogJ1NrZWluMTAyNC01MDQnLFxuICAweGIzYTA6ICdTa2VpbjEwMjQtNTEyJyxcbiAgMHhiM2ExOiAnU2tlaW4xMDI0LTUyMCcsXG4gIDB4YjNhMjogJ1NrZWluMTAyNC01MjgnLFxuICAweGIzYTM6ICdTa2VpbjEwMjQtNTM2JyxcbiAgMHhiM2E0OiAnU2tlaW4xMDI0LTU0NCcsXG4gIDB4YjNhNTogJ1NrZWluMTAyNC01NTInLFxuICAweGIzYTY6ICdTa2VpbjEwMjQtNTYwJyxcbiAgMHhiM2E3OiAnU2tlaW4xMDI0LTU2OCcsXG4gIDB4YjNhODogJ1NrZWluMTAyNC01NzYnLFxuICAweGIzYTk6ICdTa2VpbjEwMjQtNTg0JyxcbiAgMHhiM2FhOiAnU2tlaW4xMDI0LTU5MicsXG4gIDB4YjNhYjogJ1NrZWluMTAyNC02MDAnLFxuICAweGIzYWM6ICdTa2VpbjEwMjQtNjA4JyxcbiAgMHhiM2FkOiAnU2tlaW4xMDI0LTYxNicsXG4gIDB4YjNhZTogJ1NrZWluMTAyNC02MjQnLFxuICAweGIzYWY6ICdTa2VpbjEwMjQtNjMyJyxcbiAgMHhiM2IwOiAnU2tlaW4xMDI0LTY0MCcsXG4gIDB4YjNiMTogJ1NrZWluMTAyNC02NDgnLFxuICAweGIzYjI6ICdTa2VpbjEwMjQtNjU2JyxcbiAgMHhiM2IzOiAnU2tlaW4xMDI0LTY2NCcsXG4gIDB4YjNiNDogJ1NrZWluMTAyNC02NzInLFxuICAweGIzYjU6ICdTa2VpbjEwMjQtNjgwJyxcbiAgMHhiM2I2OiAnU2tlaW4xMDI0LTY4OCcsXG4gIDB4YjNiNzogJ1NrZWluMTAyNC02OTYnLFxuICAweGIzYjg6ICdTa2VpbjEwMjQtNzA0JyxcbiAgMHhiM2I5OiAnU2tlaW4xMDI0LTcxMicsXG4gIDB4YjNiYTogJ1NrZWluMTAyNC03MjAnLFxuICAweGIzYmI6ICdTa2VpbjEwMjQtNzI4JyxcbiAgMHhiM2JjOiAnU2tlaW4xMDI0LTczNicsXG4gIDB4YjNiZDogJ1NrZWluMTAyNC03NDQnLFxuICAweGIzYmU6ICdTa2VpbjEwMjQtNzUyJyxcbiAgMHhiM2JmOiAnU2tlaW4xMDI0LTc2MCcsXG4gIDB4YjNjMDogJ1NrZWluMTAyNC03NjgnLFxuICAweGIzYzE6ICdTa2VpbjEwMjQtNzc2JyxcbiAgMHhiM2MyOiAnU2tlaW4xMDI0LTc4NCcsXG4gIDB4YjNjMzogJ1NrZWluMTAyNC03OTInLFxuICAweGIzYzQ6ICdTa2VpbjEwMjQtODAwJyxcbiAgMHhiM2M1OiAnU2tlaW4xMDI0LTgwOCcsXG4gIDB4YjNjNjogJ1NrZWluMTAyNC04MTYnLFxuICAweGIzYzc6ICdTa2VpbjEwMjQtODI0JyxcbiAgMHhiM2M4OiAnU2tlaW4xMDI0LTgzMicsXG4gIDB4YjNjOTogJ1NrZWluMTAyNC04NDAnLFxuICAweGIzY2E6ICdTa2VpbjEwMjQtODQ4JyxcbiAgMHhiM2NiOiAnU2tlaW4xMDI0LTg1NicsXG4gIDB4YjNjYzogJ1NrZWluMTAyNC04NjQnLFxuICAweGIzY2Q6ICdTa2VpbjEwMjQtODcyJyxcbiAgMHhiM2NlOiAnU2tlaW4xMDI0LTg4MCcsXG4gIDB4YjNjZjogJ1NrZWluMTAyNC04ODgnLFxuICAweGIzZDA6ICdTa2VpbjEwMjQtODk2JyxcbiAgMHhiM2QxOiAnU2tlaW4xMDI0LTkwNCcsXG4gIDB4YjNkMjogJ1NrZWluMTAyNC05MTInLFxuICAweGIzZDM6ICdTa2VpbjEwMjQtOTIwJyxcbiAgMHhiM2Q0OiAnU2tlaW4xMDI0LTkyOCcsXG4gIDB4YjNkNTogJ1NrZWluMTAyNC05MzYnLFxuICAweGIzZDY6ICdTa2VpbjEwMjQtOTQ0JyxcbiAgMHhiM2Q3OiAnU2tlaW4xMDI0LTk1MicsXG4gIDB4YjNkODogJ1NrZWluMTAyNC05NjAnLFxuICAweGIzZDk6ICdTa2VpbjEwMjQtOTY4JyxcbiAgMHhiM2RhOiAnU2tlaW4xMDI0LTk3NicsXG4gIDB4YjNkYjogJ1NrZWluMTAyNC05ODQnLFxuICAweGIzZGM6ICdTa2VpbjEwMjQtOTkyJyxcbiAgMHhiM2RkOiAnU2tlaW4xMDI0LTEwMDAnLFxuICAweGIzZGU6ICdTa2VpbjEwMjQtMTAwOCcsXG4gIDB4YjNkZjogJ1NrZWluMTAyNC0xMDE2JyxcbiAgMHhiM2UwOiAnU2tlaW4xMDI0LTEwMjQnXG59KVxuXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIDB4MTE6IDIwLFxuICAweDEyOiAzMixcbiAgMHgxMzogNjQsXG4gIDB4NTY6IDMyLFxuICAweDE3OiAyOCxcbiAgMHgxNjogMzIsXG4gIDB4MTU6IDQ4LFxuICAweDE0OiA2NCxcbiAgMHgxODogMzIsXG4gIDB4MTk6IDY0LFxuICAweDFBOiAyOCxcbiAgMHgxQjogMzIsXG4gIDB4MUM6IDQ4LFxuICAweDFEOiA2NCxcbiAgMHgyMjogMzIsXG5cbiAgMHhiMjAxOiAweDAxLFxuICAweGIyMDI6IDB4MDIsXG4gIDB4YjIwMzogMHgwMyxcbiAgMHhiMjA0OiAweDA0LFxuICAweGIyMDU6IDB4MDUsXG4gIDB4YjIwNjogMHgwNixcbiAgMHhiMjA3OiAweDA3LFxuICAweGIyMDg6IDB4MDgsXG4gIDB4YjIwOTogMHgwOSxcbiAgMHhiMjBhOiAweDBhLFxuICAweGIyMGI6IDB4MGIsXG4gIDB4YjIwYzogMHgwYyxcbiAgMHhiMjBkOiAweDBkLFxuICAweGIyMGU6IDB4MGUsXG4gIDB4YjIwZjogMHgwZixcbiAgMHhiMjEwOiAweDEwLFxuICAweGIyMTE6IDB4MTEsXG4gIDB4YjIxMjogMHgxMixcbiAgMHhiMjEzOiAweDEzLFxuICAweGIyMTQ6IDB4MTQsXG4gIDB4YjIxNTogMHgxNSxcbiAgMHhiMjE2OiAweDE2LFxuICAweGIyMTc6IDB4MTcsXG4gIDB4YjIxODogMHgxOCxcbiAgMHhiMjE5OiAweDE5LFxuICAweGIyMWE6IDB4MWEsXG4gIDB4YjIxYjogMHgxYixcbiAgMHhiMjFjOiAweDFjLFxuICAweGIyMWQ6IDB4MWQsXG4gIDB4YjIxZTogMHgxZSxcbiAgMHhiMjFmOiAweDFmLFxuICAweGIyMjA6IDB4MjAsXG4gIDB4YjIyMTogMHgyMSxcbiAgMHhiMjIyOiAweDIyLFxuICAweGIyMjM6IDB4MjMsXG4gIDB4YjIyNDogMHgyNCxcbiAgMHhiMjI1OiAweDI1LFxuICAweGIyMjY6IDB4MjYsXG4gIDB4YjIyNzogMHgyNyxcbiAgMHhiMjI4OiAweDI4LFxuICAweGIyMjk6IDB4MjksXG4gIDB4YjIyYTogMHgyYSxcbiAgMHhiMjJiOiAweDJiLFxuICAweGIyMmM6IDB4MmMsXG4gIDB4YjIyZDogMHgyZCxcbiAgMHhiMjJlOiAweDJlLFxuICAweGIyMmY6IDB4MmYsXG4gIDB4YjIzMDogMHgzMCxcbiAgMHhiMjMxOiAweDMxLFxuICAweGIyMzI6IDB4MzIsXG4gIDB4YjIzMzogMHgzMyxcbiAgMHhiMjM0OiAweDM0LFxuICAweGIyMzU6IDB4MzUsXG4gIDB4YjIzNjogMHgzNixcbiAgMHhiMjM3OiAweDM3LFxuICAweGIyMzg6IDB4MzgsXG4gIDB4YjIzOTogMHgzOSxcbiAgMHhiMjNhOiAweDNhLFxuICAweGIyM2I6IDB4M2IsXG4gIDB4YjIzYzogMHgzYyxcbiAgMHhiMjNkOiAweDNkLFxuICAweGIyM2U6IDB4M2UsXG4gIDB4YjIzZjogMHgzZixcbiAgMHhiMjQwOiAweDQwLFxuICAweGIyNDE6IDB4MDEsXG4gIDB4YjI0MjogMHgwMixcbiAgMHhiMjQzOiAweDAzLFxuICAweGIyNDQ6IDB4MDQsXG4gIDB4YjI0NTogMHgwNSxcbiAgMHhiMjQ2OiAweDA2LFxuICAweGIyNDc6IDB4MDcsXG4gIDB4YjI0ODogMHgwOCxcbiAgMHhiMjQ5OiAweDA5LFxuICAweGIyNGE6IDB4MGEsXG4gIDB4YjI0YjogMHgwYixcbiAgMHhiMjRjOiAweDBjLFxuICAweGIyNGQ6IDB4MGQsXG4gIDB4YjI0ZTogMHgwZSxcbiAgMHhiMjRmOiAweDBmLFxuICAweGIyNTA6IDB4MTAsXG4gIDB4YjI1MTogMHgxMSxcbiAgMHhiMjUyOiAweDEyLFxuICAweGIyNTM6IDB4MTMsXG4gIDB4YjI1NDogMHgxNCxcbiAgMHhiMjU1OiAweDE1LFxuICAweGIyNTY6IDB4MTYsXG4gIDB4YjI1NzogMHgxNyxcbiAgMHhiMjU4OiAweDE4LFxuICAweGIyNTk6IDB4MTksXG4gIDB4YjI1YTogMHgxYSxcbiAgMHhiMjViOiAweDFiLFxuICAweGIyNWM6IDB4MWMsXG4gIDB4YjI1ZDogMHgxZCxcbiAgMHhiMjVlOiAweDFlLFxuICAweGIyNWY6IDB4MWYsXG4gIDB4YjI2MDogMHgyMCxcbiAgMHhiMzAxOiAweDAxLFxuICAweGIzMDI6IDB4MDIsXG4gIDB4YjMwMzogMHgwMyxcbiAgMHhiMzA0OiAweDA0LFxuICAweGIzMDU6IDB4MDUsXG4gIDB4YjMwNjogMHgwNixcbiAgMHhiMzA3OiAweDA3LFxuICAweGIzMDg6IDB4MDgsXG4gIDB4YjMwOTogMHgwOSxcbiAgMHhiMzBhOiAweDBhLFxuICAweGIzMGI6IDB4MGIsXG4gIDB4YjMwYzogMHgwYyxcbiAgMHhiMzBkOiAweDBkLFxuICAweGIzMGU6IDB4MGUsXG4gIDB4YjMwZjogMHgwZixcbiAgMHhiMzEwOiAweDEwLFxuICAweGIzMTE6IDB4MTEsXG4gIDB4YjMxMjogMHgxMixcbiAgMHhiMzEzOiAweDEzLFxuICAweGIzMTQ6IDB4MTQsXG4gIDB4YjMxNTogMHgxNSxcbiAgMHhiMzE2OiAweDE2LFxuICAweGIzMTc6IDB4MTcsXG4gIDB4YjMxODogMHgxOCxcbiAgMHhiMzE5OiAweDE5LFxuICAweGIzMWE6IDB4MWEsXG4gIDB4YjMxYjogMHgxYixcbiAgMHhiMzFjOiAweDFjLFxuICAweGIzMWQ6IDB4MWQsXG4gIDB4YjMxZTogMHgxZSxcbiAgMHhiMzFmOiAweDFmLFxuICAweGIzMjA6IDB4MjAsXG4gIDB4YjMyMTogMHgwMSxcbiAgMHhiMzIyOiAweDAyLFxuICAweGIzMjM6IDB4MDMsXG4gIDB4YjMyNDogMHgwNCxcbiAgMHhiMzI1OiAweDA1LFxuICAweGIzMjY6IDB4MDYsXG4gIDB4YjMyNzogMHgwNyxcbiAgMHhiMzI4OiAweDA4LFxuICAweGIzMjk6IDB4MDksXG4gIDB4YjMyYTogMHgwYSxcbiAgMHhiMzJiOiAweDBiLFxuICAweGIzMmM6IDB4MGMsXG4gIDB4YjMyZDogMHgwZCxcbiAgMHhiMzJlOiAweDBlLFxuICAweGIzMmY6IDB4MGYsXG4gIDB4YjMzMDogMHgxMCxcbiAgMHhiMzMxOiAweDExLFxuICAweGIzMzI6IDB4MTIsXG4gIDB4YjMzMzogMHgxMyxcbiAgMHhiMzM0OiAweDE0LFxuICAweGIzMzU6IDB4MTUsXG4gIDB4YjMzNjogMHgxNixcbiAgMHhiMzM3OiAweDE3LFxuICAweGIzMzg6IDB4MTgsXG4gIDB4YjMzOTogMHgxOSxcbiAgMHhiMzNhOiAweDFhLFxuICAweGIzM2I6IDB4MWIsXG4gIDB4YjMzYzogMHgxYyxcbiAgMHhiMzNkOiAweDFkLFxuICAweGIzM2U6IDB4MWUsXG4gIDB4YjMzZjogMHgxZixcbiAgMHhiMzQwOiAweDIwLFxuICAweGIzNDE6IDB4MjEsXG4gIDB4YjM0MjogMHgyMixcbiAgMHhiMzQzOiAweDIzLFxuICAweGIzNDQ6IDB4MjQsXG4gIDB4YjM0NTogMHgyNSxcbiAgMHhiMzQ2OiAweDI2LFxuICAweGIzNDc6IDB4MjcsXG4gIDB4YjM0ODogMHgyOCxcbiAgMHhiMzQ5OiAweDI5LFxuICAweGIzNGE6IDB4MmEsXG4gIDB4YjM0YjogMHgyYixcbiAgMHhiMzRjOiAweDJjLFxuICAweGIzNGQ6IDB4MmQsXG4gIDB4YjM0ZTogMHgyZSxcbiAgMHhiMzRmOiAweDJmLFxuICAweGIzNTA6IDB4MzAsXG4gIDB4YjM1MTogMHgzMSxcbiAgMHhiMzUyOiAweDMyLFxuICAweGIzNTM6IDB4MzMsXG4gIDB4YjM1NDogMHgzNCxcbiAgMHhiMzU1OiAweDM1LFxuICAweGIzNTY6IDB4MzYsXG4gIDB4YjM1NzogMHgzNyxcbiAgMHhiMzU4OiAweDM4LFxuICAweGIzNTk6IDB4MzksXG4gIDB4YjM1YTogMHgzYSxcbiAgMHhiMzViOiAweDNiLFxuICAweGIzNWM6IDB4M2MsXG4gIDB4YjM1ZDogMHgzZCxcbiAgMHhiMzVlOiAweDNlLFxuICAweGIzNWY6IDB4M2YsXG4gIDB4YjM2MDogMHg0MCxcbiAgMHhiMzYxOiAweDAxLFxuICAweGIzNjI6IDB4MDIsXG4gIDB4YjM2MzogMHgwMyxcbiAgMHhiMzY0OiAweDA0LFxuICAweGIzNjU6IDB4MDUsXG4gIDB4YjM2NjogMHgwNixcbiAgMHhiMzY3OiAweDA3LFxuICAweGIzNjg6IDB4MDgsXG4gIDB4YjM2OTogMHgwOSxcbiAgMHhiMzZhOiAweDBhLFxuICAweGIzNmI6IDB4MGIsXG4gIDB4YjM2YzogMHgwYyxcbiAgMHhiMzZkOiAweDBkLFxuICAweGIzNmU6IDB4MGUsXG4gIDB4YjM2ZjogMHgwZixcbiAgMHhiMzcwOiAweDEwLFxuICAweGIzNzE6IDB4MTEsXG4gIDB4YjM3MjogMHgxMixcbiAgMHhiMzczOiAweDEzLFxuICAweGIzNzQ6IDB4MTQsXG4gIDB4YjM3NTogMHgxNSxcbiAgMHhiMzc2OiAweDE2LFxuICAweGIzNzc6IDB4MTcsXG4gIDB4YjM3ODogMHgxOCxcbiAgMHhiMzc5OiAweDE5LFxuICAweGIzN2E6IDB4MWEsXG4gIDB4YjM3YjogMHgxYixcbiAgMHhiMzdjOiAweDFjLFxuICAweGIzN2Q6IDB4MWQsXG4gIDB4YjM3ZTogMHgxZSxcbiAgMHhiMzdmOiAweDFmLFxuICAweGIzODA6IDB4MjAsXG4gIDB4YjM4MTogMHgyMSxcbiAgMHhiMzgyOiAweDIyLFxuICAweGIzODM6IDB4MjMsXG4gIDB4YjM4NDogMHgyNCxcbiAgMHhiMzg1OiAweDI1LFxuICAweGIzODY6IDB4MjYsXG4gIDB4YjM4NzogMHgyNyxcbiAgMHhiMzg4OiAweDI4LFxuICAweGIzODk6IDB4MjksXG4gIDB4YjM4YTogMHgyYSxcbiAgMHhiMzhiOiAweDJiLFxuICAweGIzOGM6IDB4MmMsXG4gIDB4YjM4ZDogMHgyZCxcbiAgMHhiMzhlOiAweDJlLFxuICAweGIzOGY6IDB4MmYsXG4gIDB4YjM5MDogMHgzMCxcbiAgMHhiMzkxOiAweDMxLFxuICAweGIzOTI6IDB4MzIsXG4gIDB4YjM5MzogMHgzMyxcbiAgMHhiMzk0OiAweDM0LFxuICAweGIzOTU6IDB4MzUsXG4gIDB4YjM5NjogMHgzNixcbiAgMHhiMzk3OiAweDM3LFxuICAweGIzOTg6IDB4MzgsXG4gIDB4YjM5OTogMHgzOSxcbiAgMHhiMzlhOiAweDNhLFxuICAweGIzOWI6IDB4M2IsXG4gIDB4YjM5YzogMHgzYyxcbiAgMHhiMzlkOiAweDNkLFxuICAweGIzOWU6IDB4M2UsXG4gIDB4YjM5ZjogMHgzZixcbiAgMHhiM2EwOiAweDQwLFxuICAweGIzYTE6IDB4NDEsXG4gIDB4YjNhMjogMHg0MixcbiAgMHhiM2EzOiAweDQzLFxuICAweGIzYTQ6IDB4NDQsXG4gIDB4YjNhNTogMHg0NSxcbiAgMHhiM2E2OiAweDQ2LFxuICAweGIzYTc6IDB4NDcsXG4gIDB4YjNhODogMHg0OCxcbiAgMHhiM2E5OiAweDQ5LFxuICAweGIzYWE6IDB4NGEsXG4gIDB4YjNhYjogMHg0YixcbiAgMHhiM2FjOiAweDRjLFxuICAweGIzYWQ6IDB4NGQsXG4gIDB4YjNhZTogMHg0ZSxcbiAgMHhiM2FmOiAweDRmLFxuICAweGIzYjA6IDB4NTAsXG4gIDB4YjNiMTogMHg1MSxcbiAgMHhiM2IyOiAweDUyLFxuICAweGIzYjM6IDB4NTMsXG4gIDB4YjNiNDogMHg1NCxcbiAgMHhiM2I1OiAweDU1LFxuICAweGIzYjY6IDB4NTYsXG4gIDB4YjNiNzogMHg1NyxcbiAgMHhiM2I4OiAweDU4LFxuICAweGIzYjk6IDB4NTksXG4gIDB4YjNiYTogMHg1YSxcbiAgMHhiM2JiOiAweDViLFxuICAweGIzYmM6IDB4NWMsXG4gIDB4YjNiZDogMHg1ZCxcbiAgMHhiM2JlOiAweDVlLFxuICAweGIzYmY6IDB4NWYsXG4gIDB4YjNjMDogMHg2MCxcbiAgMHhiM2MxOiAweDYxLFxuICAweGIzYzI6IDB4NjIsXG4gIDB4YjNjMzogMHg2MyxcbiAgMHhiM2M0OiAweDY0LFxuICAweGIzYzU6IDB4NjUsXG4gIDB4YjNjNjogMHg2NixcbiAgMHhiM2M3OiAweDY3LFxuICAweGIzYzg6IDB4NjgsXG4gIDB4YjNjOTogMHg2OSxcbiAgMHhiM2NhOiAweDZhLFxuICAweGIzY2I6IDB4NmIsXG4gIDB4YjNjYzogMHg2YyxcbiAgMHhiM2NkOiAweDZkLFxuICAweGIzY2U6IDB4NmUsXG4gIDB4YjNjZjogMHg2ZixcbiAgMHhiM2QwOiAweDcwLFxuICAweGIzZDE6IDB4NzEsXG4gIDB4YjNkMjogMHg3MixcbiAgMHhiM2QzOiAweDczLFxuICAweGIzZDQ6IDB4NzQsXG4gIDB4YjNkNTogMHg3NSxcbiAgMHhiM2Q2OiAweDc2LFxuICAweGIzZDc6IDB4NzcsXG4gIDB4YjNkODogMHg3OCxcbiAgMHhiM2Q5OiAweDc5LFxuICAweGIzZGE6IDB4N2EsXG4gIDB4YjNkYjogMHg3YixcbiAgMHhiM2RjOiAweDdjLFxuICAweGIzZGQ6IDB4N2QsXG4gIDB4YjNkZTogMHg3ZSxcbiAgMHhiM2RmOiAweDdmLFxuICAweGIzZTA6IDB4ODBcbn0pXG4iLCIvKipcbiAqIE11bHRpaGFzaCBpbXBsZW1lbnRhdGlvbiBpbiBKYXZhU2NyaXB0LlxuICpcbiAqIEBtb2R1bGUgbXVsdGloYXNoXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiczU4ID0gcmVxdWlyZSgnYnM1OCcpXG5cbmNvbnN0IGNzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5leHBvcnRzLm5hbWVzID0gY3MubmFtZXNcbmV4cG9ydHMuY29kZXMgPSBjcy5jb2Rlc1xuZXhwb3J0cy5kZWZhdWx0TGVuZ3RocyA9IGNzLmRlZmF1bHRMZW5ndGhzXG5cbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gbXVsdGloYXNoIHRvIGEgaGV4IGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLnRvSGV4U3RyaW5nID0gZnVuY3Rpb24gdG9IZXhTdHJpbmcgKGhhc2gpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFzaCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgYmUgcGFzc2VkIGEgYnVmZmVyJylcbiAgfVxuXG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKCdoZXgnKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGhleCBlbmNvZGVkIHN0cmluZyB0byBhIG11bHRpaGFzaC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5mcm9tSGV4U3RyaW5nID0gZnVuY3Rpb24gZnJvbUhleFN0cmluZyAoaGFzaCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20oaGFzaCwgJ2hleCcpXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gbXVsdGloYXNoIHRvIGEgYmFzZTU4IGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLnRvQjU4U3RyaW5nID0gZnVuY3Rpb24gdG9CNThTdHJpbmcgKGhhc2gpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoaGFzaCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211c3QgYmUgcGFzc2VkIGEgYnVmZmVyJylcbiAgfVxuXG4gIHJldHVybiBiczU4LmVuY29kZShoYXNoKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJhc2U1OCBlbmNvZGVkIHN0cmluZyB0byBhIG11bHRpaGFzaC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZnJvbUI1OFN0cmluZyA9IGZ1bmN0aW9uIGZyb21CNThTdHJpbmcgKGhhc2gpIHtcbiAgbGV0IGVuY29kZWQgPSBoYXNoXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaGFzaCkpIHtcbiAgICBlbmNvZGVkID0gaGFzaC50b1N0cmluZygpXG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmZyb20oYnM1OC5kZWNvZGUoZW5jb2RlZCkpXG59XG5cbi8qKlxuICogRGVjb2RlIGEgaGFzaCBmcm9tIHRoZSBnaXZlbiBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZlxuICogQHJldHVybnMge3tjb2RlOiBudW1iZXIsIG5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIGRpZ2VzdDogQnVmZmVyfX0gcmVzdWx0XG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlIChidWYpIHtcbiAgaWYgKCEoQnVmZmVyLmlzQnVmZmVyKGJ1ZikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoYnVmLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpaGFzaCB0b28gc2hvcnQuIG11c3QgYmUgPiAzIGJ5dGVzLicpXG4gIH1cblxuICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShidWYpXG4gIGlmICghZXhwb3J0cy5pc1ZhbGlkQ29kZShjb2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIHVua25vd24gZnVuY3Rpb24gY29kZTogMHgke2NvZGUudG9TdHJpbmcoMTYpfWApXG4gIH1cbiAgYnVmID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgY29uc3QgbGVuID0gdmFyaW50LmRlY29kZShidWYpXG4gIGlmIChsZW4gPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWhhc2ggaW52YWxpZCBsZW5ndGg6IDB4JHtsZW4udG9TdHJpbmcoMTYpfWApXG4gIH1cbiAgYnVmID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGJ1Zi5sZW5ndGggIT09IGxlbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIGxlbmd0aCBpbmNvbnNpc3RlbnQ6IDB4JHtidWYudG9TdHJpbmcoJ2hleCcpfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgbmFtZTogY3MuY29kZXNbY29kZV0sXG4gICAgbGVuZ3RoOiBsZW4sXG4gICAgZGlnZXN0OiBidWZcbiAgfVxufVxuXG4vKipcbiAqICBFbmNvZGUgYSBoYXNoIGRpZ2VzdCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gY29kZS5cbiAqXG4gKiA+ICoqTm90ZToqKiB0aGUgbGVuZ3RoIGlzIGRlcml2ZWQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBkaWdlc3QgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBkaWdlc3RcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gY29kZVxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZSAoZGlnZXN0LCBjb2RlLCBsZW5ndGgpIHtcbiAgaWYgKCFkaWdlc3QgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggZW5jb2RlIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBhcmdzOiBkaWdlc3QsIGNvZGUnKVxuICB9XG5cbiAgLy8gZW5zdXJlIGl0J3MgYSBoYXNoZnVuY3Rpb24gY29kZS5cbiAgY29uc3QgaGFzaGZuID0gZXhwb3J0cy5jb2VyY2VDb2RlKGNvZGUpXG5cbiAgaWYgKCEoQnVmZmVyLmlzQnVmZmVyKGRpZ2VzdCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkaWdlc3Qgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChsZW5ndGggPT0gbnVsbCkge1xuICAgIGxlbmd0aCA9IGRpZ2VzdC5sZW5ndGhcbiAgfVxuXG4gIGlmIChsZW5ndGggJiYgZGlnZXN0Lmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkaWdlc3QgbGVuZ3RoIHNob3VsZCBiZSBlcXVhbCB0byBzcGVjaWZpZWQgbGVuZ3RoLicpXG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShoYXNoZm4pKSxcbiAgICBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKGxlbmd0aCkpLFxuICAgIGRpZ2VzdFxuICBdKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgaGFzaCBmdW5jdGlvbiBuYW1lIGludG8gdGhlIG1hdGNoaW5nIGNvZGUuXG4gKiBJZiBwYXNzZWQgYSBudW1iZXIgaXQgd2lsbCByZXR1cm4gdGhlIG51bWJlciBpZiBpdCdzIGEgdmFsaWQgY29kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5jb2VyY2VDb2RlID0gZnVuY3Rpb24gY29lcmNlQ29kZSAobmFtZSkge1xuICBsZXQgY29kZSA9IG5hbWVcblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGNzLm5hbWVzW25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZnVuY3Rpb24gbmFtZWQ6ICR7bmFtZX1gKVxuICAgIH1cbiAgICBjb2RlID0gY3MubmFtZXNbbmFtZV1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29kZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhhc2ggZnVuY3Rpb24gY29kZSBzaG91bGQgYmUgYSBudW1iZXIuIEdvdDogJHtjb2RlfWApXG4gIH1cblxuICBpZiAoY3MuY29kZXNbY29kZV0gPT09IHVuZGVmaW5lZCAmJiAhZXhwb3J0cy5pc0FwcENvZGUoY29kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBmdW5jdGlvbiBjb2RlOiAke2NvZGV9YClcbiAgfVxuXG4gIHJldHVybiBjb2RlXG59XG5cbi8qKlxuICogQ2hlY2tzIHdldGhlciBhIGNvZGUgaXMgcGFydCBvZiB0aGUgYXBwIHJhbmdlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLmlzQXBwQ29kZSA9IGZ1bmN0aW9uIGFwcENvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPiAwICYmIGNvZGUgPCAweDEwXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBtdWx0aWhhc2ggY29kZSBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuaXNWYWxpZENvZGUgPSBmdW5jdGlvbiB2YWxpZENvZGUgKGNvZGUpIHtcbiAgaWYgKGV4cG9ydHMuaXNBcHBDb2RlKGNvZGUpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChjcy5jb2Rlc1tjb2RlXSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gYnVmZmVyIGlzIGEgdmFsaWQgbXVsdGloYXNoLiBUaHJvd3MgYW4gZXJyb3IgaWYgaXQgaXMgbm90IHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGUgKG11bHRpaGFzaCkge1xuICBleHBvcnRzLmRlY29kZShtdWx0aWhhc2gpIC8vIHRocm93cyBpZiBiYWQuXG59XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGVcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJlZml4IGZyb20gYSB2YWxpZCBtdWx0aWhhc2guIFRocm93cyBhbiBlcnJvciBpZiBpdCBpcyBub3QgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IG11bHRpaGFzaFxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnRzLnByZWZpeCA9IGZ1bmN0aW9uIHByZWZpeCAobXVsdGloYXNoKSB7XG4gIHZhbGlkYXRlKG11bHRpaGFzaClcblxuICByZXR1cm4gbXVsdGloYXNoLnNsaWNlKDAsIDIpXG59XG4iLCJcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkZGlycjogcmVxdWlyZSgnLi9saWIvcmVhZGRpcnInKS5yZWFkZGlycixcblxuICBybWRpcnI6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycixcbiAgcm1kaXJzOiByZXF1aXJlKCcuL2xpYi9ybWRpcnInKS5ybWRpcnMsXG4gIHJtZmlsZXM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZmlsZXMsXG5cbiAgY3BkaXJyOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnIsXG4gIGNwZGlyczogcmVxdWlyZSgnLi9saWIvY3BkaXJyJykuY3BkaXJzLFxuICBjcGZpbGVzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGZpbGVzXG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIENvcHkgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJyID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgY2IpIHtcbiAgcmVhZGRpcnIoc3BhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBleHBvcnRzLmNwZGlycyhzcGF0aCwgdHBhdGgsIGRpcnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBleHBvcnRzLmNwZmlsZXMoc3BhdGgsIHRwYXRoLCBmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBjYigpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGRpcnMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIHZhciBycGF0aCA9IHBhdGgucmVsYXRpdmUoc3BhdGgsIGRpcnNbaW5kZXhdKVxuICAgIHJwYXRoID0gcGF0aC5qb2luKHRwYXRoLCBycGF0aClcbiAgICBmcy5leGlzdHMocnBhdGgsIGZ1bmN0aW9uIChleGlzdHMpIHtcbiAgICAgIGlmIChleGlzdHMpIHJldHVybiBsb29wKCsraW5kZXgpXG4gICAgICBmcy5ta2RpcihycGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZmlsZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BmaWxlcyA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGZpbGVzLCBjYikge1xuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5yZWFkRmlsZShmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBmaWxlc1tpbmRleF0pXG4gICAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgICBmcy53cml0ZUZpbGUocnBhdGgsIGRhdGEsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG5cbi8qKlxuICogUmVhZCBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheXN9IGRpcnMgJiBmaWxlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJlYWRkaXJyID0gZnVuY3Rpb24gKGRwYXRoLCBjYikge1xuICB2YXIgZGlycyA9IFtdLCBmaWxlcyA9IFtdXG4gIGRpcnMucHVzaChkcGF0aClcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKG51bGwsIGRpcnMsIGZpbGVzKVxuICAgIGZzLnJlYWRkaXIoZGlyc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIF9maWxlcykge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGdldHN0YXQoZGlyc1tpbmRleF0sIF9maWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG5cbiAgLyoqXG4gICAqIEdldCBzdGF0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldHN0YXQgKGRwYXRoLCBfZmlsZXMsIGNiKSB7XG4gICAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09IF9maWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgICB2YXIgZnBhdGggPSBwYXRoLmpvaW4oZHBhdGgsIF9maWxlc1tpbmRleF0pXG4gICAgICBmcy5zdGF0KGZwYXRoLCBmdW5jdGlvbiAoZXJyLCBzdGF0cykge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGRpcnMucHVzaChmcGF0aClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlcy5wdXNoKGZwYXRoKVxuICAgICAgICB9XG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSgwKSlcbiAgfVxufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIFJlbW92ZSBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1kaXJyID0gZnVuY3Rpb24gKGRwYXRoLCBjYikge1xuICByZWFkZGlycihkcGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGV4cG9ydHMucm1maWxlcyhmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGV4cG9ydHMucm1kaXJzKGRpcnMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVtb3ZlIGEgbGlzdCBvZiBmaWxlc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZmlsZXMgPSBmdW5jdGlvbiAoZmlsZXMsIGNiKSB7XG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZmlsZXMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIGZzLnVubGluayhmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBsb29wKCsraW5kZXgpXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnMgPSBmdW5jdGlvbiAoZGlycywgY2IpIHtcbiAgZGlycy5zb3J0KGRlc2MpXG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZGlycy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMucm1kaXIoZGlyc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBsb29wKCsraW5kZXgpXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBTb3J0IGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYVxuICogQHBhcmFtIHtTdHJpbmd9IGJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGRlc2MoYSwgYikge1xuICBpZiAoYSA+IGIpIHJldHVybiAtMVxuICBpZiAoYSA8IGIpIHJldHVybiAgMVxuICByZXR1cm4gMFxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCdWZmZXIucHJvdG90eXBlKVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG5cdGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKHN0cmVhbSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChzdHJlYW0gJiYgIXN0cmVhbS5pc1RUWSAmJiBmb3JjZUNvbG9yICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG5cdFx0Ly8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcblx0XHQvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcblx0XHQvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93c1xuXHRcdC8vIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlXG5cdFx0Ly8gdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKVswXSkgPj0gOCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVycilcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlYWRcblxudmFyIE1TQiA9IDB4ODBcbiAgLCBSRVNUID0gMHg3RlxuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciByZXMgICAgPSAwXG4gICAgLCBvZmZzZXQgPSBvZmZzZXQgfHwgMFxuICAgICwgc2hpZnQgID0gMFxuICAgICwgY291bnRlciA9IG9mZnNldFxuICAgICwgYlxuICAgICwgbCA9IGJ1Zi5sZW5ndGhcblxuICBkbyB7XG4gICAgaWYgKGNvdW50ZXIgPj0gbCkge1xuICAgICAgcmVhZC5ieXRlcyA9IDBcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb3VsZCBub3QgZGVjb2RlIHZhcmludCcpXG4gICAgfVxuICAgIGIgPSBidWZbY291bnRlcisrXVxuICAgIHJlcyArPSBzaGlmdCA8IDI4XG4gICAgICA/IChiICYgUkVTVCkgPDwgc2hpZnRcbiAgICAgIDogKGIgJiBSRVNUKSAqIE1hdGgucG93KDIsIHNoaWZ0KVxuICAgIHNoaWZ0ICs9IDdcbiAgfSB3aGlsZSAoYiA+PSBNU0IpXG5cbiAgcmVhZC5ieXRlcyA9IGNvdW50ZXIgLSBvZmZzZXRcblxuICByZXR1cm4gcmVzXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGVuY29kZVxuXG52YXIgTVNCID0gMHg4MFxuICAsIFJFU1QgPSAweDdGXG4gICwgTVNCQUxMID0gflJFU1RcbiAgLCBJTlQgPSBNYXRoLnBvdygyLCAzMSlcblxuZnVuY3Rpb24gZW5jb2RlKG51bSwgb3V0LCBvZmZzZXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdXG4gIG9mZnNldCA9IG9mZnNldCB8fCAwXG4gIHZhciBvbGRPZmZzZXQgPSBvZmZzZXRcblxuICB3aGlsZShudW0gPj0gSU5UKSB7XG4gICAgb3V0W29mZnNldCsrXSA9IChudW0gJiAweEZGKSB8IE1TQlxuICAgIG51bSAvPSAxMjhcbiAgfVxuICB3aGlsZShudW0gJiBNU0JBTEwpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtID4+Pj0gN1xuICB9XG4gIG91dFtvZmZzZXRdID0gbnVtIHwgMFxuICBcbiAgZW5jb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0ICsgMVxuICBcbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiByZXF1aXJlKCcuL2VuY29kZS5qcycpXG4gICwgZGVjb2RlOiByZXF1aXJlKCcuL2RlY29kZS5qcycpXG4gICwgZW5jb2RpbmdMZW5ndGg6IHJlcXVpcmUoJy4vbGVuZ3RoLmpzJylcbn1cbiIsIlxudmFyIE4xID0gTWF0aC5wb3coMiwgIDcpXG52YXIgTjIgPSBNYXRoLnBvdygyLCAxNClcbnZhciBOMyA9IE1hdGgucG93KDIsIDIxKVxudmFyIE40ID0gTWF0aC5wb3coMiwgMjgpXG52YXIgTjUgPSBNYXRoLnBvdygyLCAzNSlcbnZhciBONiA9IE1hdGgucG93KDIsIDQyKVxudmFyIE43ID0gTWF0aC5wb3coMiwgNDkpXG52YXIgTjggPSBNYXRoLnBvdygyLCA1NilcbnZhciBOOSA9IE1hdGgucG93KDIsIDYzKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIDwgTjEgPyAxXG4gIDogdmFsdWUgPCBOMiA/IDJcbiAgOiB2YWx1ZSA8IE4zID8gM1xuICA6IHZhbHVlIDwgTjQgPyA0XG4gIDogdmFsdWUgPCBONSA/IDVcbiAgOiB2YWx1ZSA8IE42ID8gNlxuICA6IHZhbHVlIDwgTjcgPyA3XG4gIDogdmFsdWUgPCBOOCA/IDhcbiAgOiB2YWx1ZSA8IE45ID8gOVxuICA6ICAgICAgICAgICAgICAxMFxuICApXG59XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuaW1wb3J0IHF1ZXJ5QnVpbGRlciBmcm9tICcuL3F1ZXJ5QnVpbGRlcic7XG5cbi8qKlxuICogUGluIExpc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluTGlzdChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBjb25zdCBiYXNlRW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3Bpbkxpc3RgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcXVlcnlCdWlsZGVyKGJhc2VFbmRwb2ludCwgZmlsdGVycyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHVzZXIgcGluIGxpc3Q6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCIvKipcbiAqIFZhbGlkYXRlIGFuZCByZXR1cm4gZGF0YVxuICogQHBhcmFtIHsqfSBkYXRlVG9WYWxpZGF0ZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kUmV0dXJuRGF0ZShkYXRlVG9WYWxpZGF0ZSkge1xuICAgIGxldCBkYXRlUGFyc2VkID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlVG9WYWxpZGF0ZSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGRhdGVQYXJzZWQudG9JU09TdHJpbmcoKSA9PT0gZGF0ZVRvVmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlVG9WYWxpZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGVzIG11c3QgYmUgaW4gdmFsaWQgSVNPXzg2MDEgZm9ybWF0Jyk7XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0ZXMgbXVzdCBiZSBpbiB2YWxpZCBJU09fODYwMSBmb3JtYXQnKTtcbiAgICB9XG59XG5cbi8qKlxuICogUXVlcnkgQnVpbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVcmxcbiAqIEBwYXJhbSB7Kn0gZmlsdGVyc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gIHByZXNldCBmaWx0ZXIgdmFsdWVzXG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gJz8nO1xuXG4gICAgbGV0IG1ldGFkYXRhUXVlcnkgPSAnJztcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuaGFzaENvbnRhaW5zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMuaGFzaENvbnRhaW5zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaENvbnRhaW5zIHZhbHVlIGlzIG5vdCBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBoYXNoQ29udGFpbnM9JHtmaWx0ZXJzLmhhc2hDb250YWluc30mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TdGFydD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluRW5kPSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpblN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHVucGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpbkVuZCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnVucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWluKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWluKSB8fCBmaWx0ZXJzLnBpblNpemVNaW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWluIGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWluPSR7ZmlsdGVycy5waW5TaXplTWlufSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNYXgpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNYXgpIHx8IGZpbHRlcnMucGluU2l6ZU1heCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNYXggaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpblNpemVNYXg9JHtmaWx0ZXJzLnBpblNpemVNYXh9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgIT09ICdhbGwnICYmIGZpbHRlcnMuc3RhdHVzICE9PSAncGlubmVkJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3VucGlubmVkJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdHVzIHZhbHVlIG11c3QgYmUgZWl0aGVyOiBhbGwsIHBpbm5lZCwgb3IgdW5waW5uZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZUxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5wYWdlTGltaXQpIHx8IGZpbHRlcnMucGFnZUxpbWl0IDw9IDAgfHwgZmlsdGVycy5wYWdlTGltaXQgPiAxMDAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlTGltaXQgaXMgYSB2YWxpZCBpbnRlZ2VyIGJldHdlZW4gMS0xMDAwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VMaW1pdD0ke3BhcnNlSW50KGZpbHRlcnMucGFnZUxpbWl0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZU9mZnNldCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZU9mZnNldCkgfHwgZmlsdGVycy5wYWdlT2Zmc2V0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VPZmZzZXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VPZmZzZXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VPZmZzZXQpfSZgOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGRlY2ltYWxzIGdldCByb3VuZGVkIHRvIGludGVnZXJzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IGBtZXRhZGF0YVtuYW1lXT0ke2ZpbHRlcnMubWV0YWRhdGEubmFtZX0mYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IG1ldGFkYXRhUXVlcnkgKyAnbWV0YWRhdGFba2V5dmFsdWVzXT0nO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSBrZXl2YWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcnVuZWRLZXlWYWx1ZXMgPSB7fTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UncmUgb25seSBncmFiYmluZyB0aGUgdmFsdWVzIHdlIHdhbnQgZm9yIHRoZSBxdWVyeSwgYW5kIG5vdGhpbmcgZXh0cmFcblxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKS5mb3JFYWNoKChrZXlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBrZXlWYWx1ZVsxXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZTogJHtrZXl9IGlzIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS52YWx1ZSB8fCAhdmFsdWUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBtdXN0IGhhdmUgYm90aCB2YWx1ZSBhbmQgb3AgYXR0cmlidXRlc2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncywgYm9vbGVhbnMsIG9yIG51bWJlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBjaGVja3MgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aGUga2V5dmFsdWVzIGFyZSB2YWxpZFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3JlYXRlciB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2UgYmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RCZXR3ZWVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnNlY29uZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmVjYXVzZSBub3RCZXR3ZWVuIG9wIGNvZGUgd2FzIHBhc3NlZCBpbiwga2V5VmFsdWU6ICR7a2V5VmFsdWVbMF19IG11c3QgaGF2ZSBib3RoIGFsc28gaW5jbHVkZSBhIHNlY29uZFZhbHVlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSBzZWNvbmRWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nLCBib29sZWFuLCBvciBudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbm90IGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdElMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lSZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWUgb3A6ICR7dmFsdWUub3B9IGlzIG5vdCBhIHZhbGlkIG9wIGNvZGVgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IG1ldGFkYXRhUXVlcnkgKyBgJHtKU09OLnN0cmluZ2lmeShwcnVuZWRLZXlWYWx1ZXMpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHtmaWx0ZXJRdWVyeX0ke21ldGFkYXRhUXVlcnl9YDtcbn1cblxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5c30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBUZXN0IEF1dGhlbnRpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIC8vICB0ZXN0IGF1dGhlbnRpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyJ3MgcHJvdmlkZWQga2V5cyBhcmUgbGVnaXRcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbm5lZCBEYXRhIFRvdGFsXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogSGFzaCBNZXRhIERhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gaXBmc1Bpbkhhc2hcbiAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoTWV0YWRhdGEocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBtZXRhZGF0YSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBpZiAoIWlwZnNQaW5IYXNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXBmc1Bpbkhhc2ggdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0lQRlMuY2lkKGlwZnNQaW5IYXNoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIGFuIGludmFsaWQgSVBGUyBDSUQnKTtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gbWV0YWRhdGEgb2JqZWN0IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvaGFzaE1ldGFkYXRhYDtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBpcGZzUGluSGFzaDogaXBmc1Bpbkhhc2hcbiAgICB9O1xuXG4gICAgaWYgKG1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgYm9keS5uYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGJvZHkua2V5dmFsdWVzID0gbWV0YWRhdGEua2V5dmFsdWVzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBtZXRhZGF0YSBmb3IgaGFzaDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIEhhc2ggUGluIFBvbGljeVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBpcGZzUGluSGFzaFxuICogQHBhcmFtIHsqfSBuZXdQaW5Qb2xpY3lcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFpcGZzUGluSGFzaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGlmICghaXNJUEZTLmNpZChpcGZzUGluSGFzaCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL2hhc2hQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGlwZnNQaW5IYXNoOiBpcGZzUGluSGFzaCxcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIGhhc2g6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBCeSBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0geyp9IGhhc2hUb1BpblxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9QaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgcmVxdWlyZWQgZm9yIHBpbm5pbmcgYnkgaGFzaCcpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvUGluKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1BpbiB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkJ5SGFzaGA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaGFzaFRvUGluOiBoYXNoVG9QaW4sXG4gICAgICAgIHBpbmF0YU9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhZGRpbmcgdG8gcGluIHF1ZXVlOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBGaWxlIHRvIElQRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gcmVhZFN0cmVhbVxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRmlsZVRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgcmVhZFN0cmVhbSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCByZWFkU3RyZWFtKTtcblxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluRmlsZVRvSVBGU2A7XG5cbiAgICAgICAgaWYgKCEocmVhZFN0cmVhbSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZSB8fCByZWFkU3RyZWFtIGluc3RhbmNlb2YgTm9kZUZvcm1EYXRhKSkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigncmVhZFN0cmVhbSBpcyBub3QgYSByZWFkYWJsZSBzdHJlYW0gb3IgZm9ybSBkYXRhJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU9wdGlvbnMnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlYWRTdHJlYW0gaW5zdGFuY2VvZiBOb2RlRm9ybURhdGEgPyByZWFkU3RyZWFtIDogZGF0YSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JywgLy90aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGF4aW9zIGZyb20gZXJyb3Jpbmcgb3V0IHdpdGggbGFyZ2UgZmlsZXNcbiAgICAgICAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiAnSW5maW5pdHknLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHt2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlTWV0YWRhdGEsIHZhbGlkYXRlUGluYXRhT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBiYXNlUGF0aENvbnZlcnRlciBmcm9tICdiYXNlLXBhdGgtY29udmVydGVyJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IHJlY3Vyc2l2ZSA9IHJlcXVpcmUoJ3JlY3Vyc2l2ZS1mcycpO1xuXG4vKipcbiAqIFBpbkZyb21GU1xuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGhcbiAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZyb21GUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluRmlsZVRvSVBGU2A7XG5cbiAgICAgICAgZnMuc3RhdChzb3VyY2VQYXRoLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgLy93ZSBuZWVkIHRvIGNyZWF0ZSBhIHNpbmdsZSByZWFkIHN0cmVhbSBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnZmlsZScsIGZzLmNyZWF0ZVJlYWRTdHJlYW0oc291cmNlUGF0aCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhT3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6ICdJbmZpbml0eScsIC8vdGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBheGlvcyBmcm9tIGVycm9yaW5nIG91dCB3aXRoIGxhcmdlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiAnSW5maW5pdHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9ICR7ZGF0YS5fYm91bmRhcnl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBGaWxlIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZS5yZWFkZGlycihzb3VyY2VQYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgZWFjaCBmaWxlIHN0cmVhbSwgd2UgbmVlZCB0byBpbmNsdWRlIHRoZSBjb3JyZWN0IHJlbGF0aXZlIGZpbGUgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGUpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGg6IGJhc2VQYXRoQ29udmVydGVyKHNvdXJjZVBhdGgsIGZpbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU9wdGlvbnMnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6ICdJbmZpbml0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm9keUxlbmd0aDogJ0luZmluaXR5JywgLy90aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGF4aW9zIGZyb20gZXJyb3Jpbmcgb3V0IHdpdGggbGFyZ2UgZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9ICR7ZGF0YS5fYm91bmRhcnl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBGaWxlIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlTWV0YWRhdGEsIHZhbGlkYXRlUGluYXRhT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogUGluIEpTT04gdG8gSVBGU1xuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBib2R5XG4gKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5KU09OVG9JUEZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBib2R5LCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGxldCByZXF1ZXN0Qm9keSA9IGJvZHk7XG5cbiAgICBpZiAodHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm9keSBtdXN0IGJlIGEgdmFsaWQgSlNPTiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHBpbmF0YUNvbnRlbnQ6IGJvZHlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5waW5hdGFNZXRhZGF0YSA9IG9wdGlvbnMucGluYXRhTWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5waW5hdGFPcHRpb25zID0gb3B0aW9ucy5waW5hdGFPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkpTT05Ub0lQRlNgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBKU09OIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgcXVlcnlCdWlsZGVyIGZyb20gJy4vcXVlcnlCdWlsZGVyJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBQaW4gSm9ic1xuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkpvYnNgO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgICAgZW5kcG9pbnQgPSBxdWVyeUJ1aWxkZXIoZW5kcG9pbnQsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgcGluIGpvYnM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG4vKipcbiAqIFF1ZXJ5IEJ1aWRsZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVXJsXG4gKiBAcGFyYW0geyp9IGZpbHRlcnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWVyeUJ1aWxkZXIoYmFzZVVybCwgZmlsdGVycykge1xuICAgIGlmICghYmFzZVVybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGJhc2VVcmwgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VVcmw7XG4gICAgfVxuXG4gICAgbGV0IG5ld1VybCA9IGJhc2VVcmw7XG5cbiAgICBsZXQgZmlyc3RGaWx0ZXJBcHBsaWVkID0gZmFsc2U7IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFwiP1wiIGNoYXJhY3RlciBpcyBvbmx5IGFwcGxpZWQgb25jZVxuXG4gICAgZnVuY3Rpb24gYWRkRmlsdGVyKG5ld0ZpbHRlcikge1xuICAgICAgICBpZiAoZmlyc3RGaWx0ZXJBcHBsaWVkKSB7XG4gICAgICAgICAgICBuZXdVcmwgPSBgJHtuZXdVcmx9JiR7bmV3RmlsdGVyfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEZpbHRlckFwcGxpZWQgPSB0cnVlO1xuICAgICAgICAgICAgbmV3VXJsID0gYCR7bmV3VXJsfT8ke25ld0ZpbHRlcn1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgICAgLy8gIG5vdyB3ZSBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgYWN0dWFsIFVSTCBiYXNlZCBvbiB0aGUgZ2l2ZW4gZmlsdGVycyBwcm92aWRlZFxuICAgICAgICBpZiAoZmlsdGVycy5zb3J0KSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zb3J0ID09PSAnQVNDJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc29ydCA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBzb3J0PSR7ZmlsdGVycy5zb3J0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc29ydCB2YWx1ZTogJHtmaWx0ZXJzLnNvcnR9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cyA9PT0gJ3NlYXJjaGluZycgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2V4cGlyZWQnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdvdmVyX2ZyZWVfbGltaXQnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdvdmVyX21heF9zaXplJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnaW52YWxpZF9vYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdiYWRfaG9zdF9ub2RlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBzdGF0dXM9JHtmaWx0ZXJzLnN0YXR1c31gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN0YXR1cyB2YWx1ZTogJHtmaWx0ZXJzLnN0YXR1c30gcHJvdmlkZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmlwZnNfcGluX2hhc2gpIHtcbiAgICAgICAgICAgIGlmIChpc0lQRlMuY2lkKGZpbHRlcnMuaXBmc19waW5faGFzaCkpIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYGlwZnNfcGluX2hhc2g9JHtmaWx0ZXJzLmlwZnNfcGluX2hhc2h9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBJUEZTIGhhc2g6ICR7ZmlsdGVycy5pcGZzX3Bpbl9oYXNofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMubGltaXQpIHtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGZpbHRlcnMubGltaXQpICYmIChmaWx0ZXJzLmxpbWl0ID4gMCkgJiYgKGZpbHRlcnMubGltaXQgPCAxMDApKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBsaW1pdD0ke2ZpbHRlcnMubGltaXR9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsaW1pdDogJHtmaWx0ZXJzLmxpbWl0fS4gVmFsaWQgbGltaXRzIGFyZSAxLTEwMGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMub2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJzLm9mZnNldCkgJiYgKGZpbHRlcnMub2Zmc2V0ID4gMCkpIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYG9mZnNldD0ke2ZpbHRlcnMub2Zmc2V0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb2Zmc2V0OiAke2ZpbHRlcnMub2Zmc2V0fS4gUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZvciB0aGUgb2Zmc2V0YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1VybDtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogVW5waW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoVG9VbnBpblxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVucGluKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9VbnBpbikge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBpZiAoIWhhc2hUb1VucGluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaFRvVW5waW4gdmFsdWUgaXMgcmVxdWlyZWQgZm9yIHJlbW92aW5nIGEgcGluIGZyb20gUGluYXRhJyk7XG4gICAgfVxuICAgIGlmICghaXNJUEZTLmNpZChoYXNoVG9VbnBpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2hhc2hUb1VucGlufSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3VucGluLyR7aGFzaFRvVW5waW59YDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmRlbGV0ZShcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHJlbW92aW5nIHBpbiBmcm9tIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFVzZXIgUGluIFBvbGljeVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBuZXdQaW5Qb2xpY3lcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VyUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBuZXdQaW5Qb2xpY3kpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG5ld1BpblBvbGljeSk7XG5cbiAgICBpZiAoIW5ld1BpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1BpblBvbGljeSBpcyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlIHBpbiBwb2xpY3kgb2YgYSBwaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvdXNlclBpblBvbGljeWA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIHVzZXI6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJleHBvcnQgY29uc3QgYmFzZVVybCA9ICdodHRwczovL2FwaS5waW5hdGEuY2xvdWQnO1xuIiwiaW1wb3J0IHBpbkJ5SGFzaCBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluQnlIYXNoJztcbmltcG9ydCBoYXNoTWV0YWRhdGEgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL2hhc2hNZXRhZGF0YSc7XG5pbXBvcnQgaGFzaFBpblBvbGljeSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaFBpblBvbGljeSc7XG5pbXBvcnQgcGluRmlsZVRvSVBGUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRmlsZVRvSVBGUyc7XG5pbXBvcnQgcGluRnJvbUZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Gcm9tRlMnO1xuaW1wb3J0IHBpbkpTT05Ub0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkpTT05Ub0lQRlMnO1xuaW1wb3J0IHBpbkpvYnMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcGluSm9icyc7XG5pbXBvcnQgdW5waW4gZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3VucGluJztcbmltcG9ydCB1c2VyUGluUG9saWN5IGZyb20gJy4vY29tbWFuZHMvcGlubmluZy91c2VyUGluUG9saWN5JztcbmltcG9ydCB0ZXN0QXV0aGVudGljYXRpb24gZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Rlc3RBdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgcGluTGlzdCBmcm9tICcuL2NvbW1hbmRzL2RhdGEvcGluTGlzdC9waW5MaXN0JztcbmltcG9ydCB1c2VyUGlubmVkRGF0YVRvdGFsIGZyb20gJy4vY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsJztcblxuLy8gT1BUSU9OU1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBudWxsPn0gUGluYXRhTWV0YWRhdGFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YU1ldGFkYXRhRmlsdGVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nLCBvcDogc3RyaW5nfT59IGtleXZhbHVlc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3tpZDogc3RyaW5nLCBkZXNpcmVkUmVwbGljYXRpb25Db3VudDogbnVtYmVyfX0gUGluYXRhUGluUG9saWN5SXRlbVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluQnlIYXNoT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2hvc3ROb2Rlc11cbiAqIEBwcm9wZXJ0eSB7e3JlZ2lvbnM6IFBpbmF0YVBpblBvbGljeUl0ZW1bXX19IFtjdXN0b21QaW5Qb2xpY3ldXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5CeUhhc2hQaW5PcHRpb25zXG4gKiBAcHJvcGVydHkge1BpbmF0YU1ldGFkYXRhfSBbcGluYXRhTWV0YWRhdGFdXG4gKiBAcHJvcGVydHkge1BpbmF0YVBpbkJ5SGFzaE9wdGlvbnN9IFtwaW5hdGFPcHRpb25zXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhT3B0aW9uc1xuICogQHByb3BlcnR5IHswIHwgMX0gW2NpZFZlcnNpb25dXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt3cmFwV2l0aERpcmVjdG9yeV1cbiAqIEBwcm9wZXJ0eSB7e3JlZ2lvbnM6IFBpbmF0YVBpblBvbGljeUl0ZW1bXX19IFtjdXN0b21QaW5Qb2xpY3ldXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5PcHRpb25zXG4gKiBAcHJvcGVydHkge1BpbmF0YU1ldGFkYXRhfSBbcGluYXRhTWV0YWRhdGFdXG4gKiBAcHJvcGVydHkge1BpbmF0YU9wdGlvbnN9IFtwaW5hdGFPcHRpb25zXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluSm9ic0ZpbHRlck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7J0FTQycgfCAnREVTQyd9IHNvcnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3RhdHVzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpcGZzX3Bpbl9oYXNoXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsaW1pdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb2Zmc2V0XVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluTGlzdEZpbHRlck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaGFzaENvbnRhaW5zXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwaW5TdGFydF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGluRW5kXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1bnBpblN0YXJ0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1bnBpbkVuZF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGluU2l6ZU1pbl1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGluU2l6ZU1heF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3RhdHVzXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlTGltaXRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VPZmZzZXRdXG4gKiBAcHJvcGVydHkge1BpbmF0YU1ldGFkYXRhRmlsdGVyfSBbbWV0YWRhdGFdXG4gKi9cblxuLy8gUkVTUE9OU0VTXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluQnlIYXNoUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlwZnNIYXNoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhdHVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJcGZzSGFzaFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFBpblNpemVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBUaW1lc3RhbXBcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkpvYnNSZXNwb25zZVJvd1xuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXBmc19waW5faGFzaFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGVfcXVldWVkXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZCB8IG51bGx9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0dXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkpvYnNSZXNwb25zZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge1BpbmF0YVBpbkpvYnNSZXNwb25zZVJvd1tdfSByb3dzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5MaXN0UmVzcG9uc2VSb3dcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlwZnNfcGluX2hhc2hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaXplXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gdXNlcl9pZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGVfcGlubmVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0ZV91bnBpbm5lZFxuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YX0gbWV0YWRhdGFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkxpc3RSZXNwb25zZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge1BpbmF0YVBpbkxpc3RSZXNwb25zZVJvd1tdfSByb3dzXG4gKi9cblxuLy8gTUVUSE9EU1xuXG4vKipcbiAqIEhhc2ggbWV0YSBkYXRhXG4gKiBAY2FsbGJhY2sgaGFzaE1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gaXBmc1Bpbkhhc2hcbiAqIEBwYXJhbSB7UGluYXRhTWV0YWRhdGF9IG1ldGFkYXRhXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogSGFzaCBwaW4gcG9saWN5XG4gKiBAY2FsbGJhY2sgaGFzaFBpblBvbGljeVxuICogQHBhcmFtIHtzdHJpbmd9IGlwZnNQaW5IYXNoXG4gKiBAcGFyYW0ge3tyZWdpb25zOiBQaW5hdGFQaW5Qb2xpY3lJdGVtW119fSBuZXdQaW5Qb2xpY3lcbiAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gKi9cblxuLyoqXG4gKiBQaW4gYnkgaGFzaFxuICogQGNhbGxiYWNrIHBpbkJ5SGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hUb1BpblxuICogQHBhcmFtIHtQaW5hdGFQaW5CeUhhc2hQaW5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpbkJ5SGFzaFJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFBpbiBmaWxlIHRvIElQRlNcbiAqIEBjYWxsYmFjayBwaW5GaWxlVG9JUEZTXG4gKiBAcGFyYW0ge1JlYWRTdHJlYW19IHJlYWRhYmxlU3RyZWFtXG4gKiBAcGFyYW0ge1BpbmF0YVBpbk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogUGluIGZyb20gRlNcbiAqIEBjYWxsYmFjayBwaW5Gcm9tRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoXG4gKiBAcGFyYW0ge1BpbmF0YVBpbk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogUGluIEpvYnNcbiAqIEBjYWxsYmFjayBwaW5Kb2JzXG4gKiBAcGFyYW0ge1BpbmF0YVBpbkpvYnNGaWx0ZXJPcHRpb25zfSBbZmlsdGVyc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpbkpvYnNSZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBQaW4gSlNPTiB0byBJUEZTXG4gKiBAY2FsbGJhY2sgcGluSlNPTlRvSVBGU1xuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7UGluYXRhUGluT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5SZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBVbnBpblxuICogQGNhbGxiYWNrIHVucGluXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFRvVW5waW5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gKi9cblxuLyoqXG4gKiBVc2VyIFBpbiBQb2xpY3lcbiAqIEBjYWxsYmFjayB1c2VyUGluUG9saWN5XG4gKiBAcGFyYW0ge3tyZWdpb25zOiBQaW5hdGFQaW5Qb2xpY3lJdGVtW119fSBuZXdQaW5Qb2xpY3lcbiAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gKi9cblxuLyoqXG4gKiBUZXN0IEF1dGhlbnRpY2F0aW9uXG4gKiBAY2FsbGJhY2sgdGVzdEF1dGhlbnRpY2F0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7YXV0aGVudGljYXRlZDogYm9vbGVhbn0+fVxuICovXG5cbi8qKlxuICogUGluIExpc3RcbiAqIEBjYWxsYmFjayBwaW5MaXN0XG4gKiBAcGFyYW0ge1BpbmF0YVBpbkxpc3RGaWx0ZXJPcHRpb25zfSBbZmlsdGVyc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpbkxpc3RSZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBVc2VyIFBpbm5lZCBEYXRhIFRvdGFsXG4gKiBAY2FsbGJhY2sgdXNlclBpbm5lZERhdGFUb3RhbFxuICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YUNsaWVudFxuICogQHByb3BlcnR5IHtwaW5CeUhhc2h9IHBpbkJ5SGFzaFxuICogQHByb3BlcnR5IHtoYXNoTWV0YWRhdGF9IGhhc2hNZXRhZGF0YVxuICogQHByb3BlcnR5IHtoYXNoUGluUG9saWN5fSBoYXNoUGluUG9saWN5XG4gKiBAcHJvcGVydHkge3BpbkZpbGVUb0lQRlN9IHBpbkZpbGVUb0lQRlNcbiAqIEBwcm9wZXJ0eSB7cGluRnJvbUZTfSBwaW5Gcm9tRlNcbiAqIEBwcm9wZXJ0eSB7cGluSlNPTlRvSVBGU30gcGluSlNPTlRvSVBGU1xuICogQHByb3BlcnR5IHtwaW5Kb2JzfSBwaW5Kb2JzXG4gKiBAcHJvcGVydHkge3VucGlufSB1bnBpblxuICogQHByb3BlcnR5IHt1c2VyUGluUG9saWN5fSB1c2VyUGluUG9saWN5XG4gKiBAcHJvcGVydHkge3Rlc3RBdXRoZW50aWNhdGlvbn0gdGVzdEF1dGhlbnRpY2F0aW9uXG4gKiBAcHJvcGVydHkge3Bpbkxpc3R9IHBpbkxpc3RcbiAqIEBwcm9wZXJ0eSB7dXNlclBpbm5lZERhdGFUb3RhbH0gdXNlclBpbm5lZERhdGFUb3RhbFxuICovXG5cbi8qKlxuICogUGluYXRhIENsaWVudFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEByZXR1cm5zIHtQaW5hdGFDbGllbnR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbmF0YUNsaWVudChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIGxldCBjbGllbnQgPSB7fTtcblxuICAgIC8vICBzZXR0aW5nIHVwIHRoZSBhY3R1YWwgY2FsbHMgeW91IGNhbiBtYWtlIHVzaW5nIHRoaXMgcGFja2FnZVxuICAgIGNsaWVudC5waW5CeUhhc2ggPSBmdW5jdGlvbiAoaGFzaFRvUGluLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5CeUhhc2gocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1Bpbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQuaGFzaE1ldGFkYXRhID0gZnVuY3Rpb24gKGlwZnNQaW5IYXNoLCBtZXRhZGF0YSkge1xuICAgICAgICByZXR1cm4gaGFzaE1ldGFkYXRhKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbWV0YWRhdGEpO1xuICAgIH07XG4gICAgY2xpZW50Lmhhc2hQaW5Qb2xpY3kgPSBmdW5jdGlvbiAoaXBmc1Bpbkhhc2gsIG5ld1BpblBvbGljeSkge1xuICAgICAgICByZXR1cm4gaGFzaFBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaXBmc1Bpbkhhc2gsIG5ld1BpblBvbGljeSk7XG4gICAgfTtcbiAgICBjbGllbnQucGluRmlsZVRvSVBGUyA9IGZ1bmN0aW9uIChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRmlsZVRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgcmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZyb21GUyA9IGZ1bmN0aW9uIChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5Gcm9tRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHNvdXJjZVBhdGgsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpTT05Ub0lQRlMgPSBmdW5jdGlvbiAoYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluSm9icyA9IGZ1bmN0aW9uIChmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBwaW5Kb2JzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKTtcbiAgICB9O1xuICAgIGNsaWVudC51bnBpbiA9IGZ1bmN0aW9uIChoYXNoVG9VbnBpbikge1xuICAgICAgICByZXR1cm4gdW5waW4ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1VucGluKTtcbiAgICB9O1xuICAgIGNsaWVudC51c2VyUGluUG9saWN5ID0gZnVuY3Rpb24gKG5ld1BpblBvbGljeSkge1xuICAgICAgICByZXR1cm4gdXNlclBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgbmV3UGluUG9saWN5KTtcbiAgICB9O1xuICAgIGNsaWVudC50ZXN0QXV0aGVudGljYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0ZXN0QXV0aGVudGljYXRpb24ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkxpc3QgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluTGlzdChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpbm5lZERhdGFUb3RhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVzZXJQaW5uZWREYXRhVG90YWwocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIH07XG4gICAgcmV0dXJuIGNsaWVudDtcbn1cbiIsImV4cG9ydCBjb25zdCBoYW5kbGVFcnJvciA9IChlcnJvcikgPT4ge1xuICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3I7XG4gIH0gZWxzZSBpZiAoZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLmVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLmRhdGEuZXJyb3I7XG4gIH0gZWxzZSBpZiAoZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IucmVzcG9uc2UuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsImltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5cbi8qKlxuICogVmFsaWRhdGUgQVBJIEtleXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIGlmICghcGluYXRhQXBpS2V5IHx8IHBpbmF0YUFwaUtleSA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwaW5hdGFBcGlLZXkgcHJvdmlkZWQhIFBsZWFzZSBwcm92aWRlIHlvdXIgcGluYXRhIGFwaSBrZXkgYXMgYW4gYXJndW1lbnQgd2hlbiB5b3Ugc3RhcnQgdGhpcyBzY3JpcHQnKTtcbiAgICB9XG4gICAgaWYgKCFwaW5hdGFTZWNyZXRBcGlLZXkgfHwgcGluYXRhU2VjcmV0QXBpS2V5ID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbmF0YVNlY3JldEFwaUtleSBwcm92aWRlZCEgUGxlYXNlIHByb3ZpZGUgeW91ciBwaW5hdGEgc2VjcmV0IGFwaSBrZXkgYXMgYW4gYXJndW1lbnQgd2hlbiB5b3Ugc3RhcnQgdGhpcyBzY3JpcHQnKTtcbiAgICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgaG9zdCBOb2Rlc1xuICogQHBhcmFtIHsqfSBob3N0Tm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSG9zdE5vZGVzKGhvc3ROb2Rlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShob3N0Tm9kZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaG9zdF9ub2RlcyB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGhvc3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGlmICghaXNJUEZTLnBlZXJNdWx0aWFkZHIobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9zdF9ub2RlIGFycmF5IGVudHJ5OiAke25vZGV9IGlzIG5vdCBhIHZhbGlkIHBlZXIgbXVsdGlhZGRyYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBNZXRhRGF0YVxuICogQHBhcmFtIHsqfSBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSkge1xuICAgIGlmIChtZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5uYW1lID09PSAnc3RyaW5nJyB8fCBtZXRhZGF0YS5uYW1lIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSBuYW1lIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5rZXl2YWx1ZXMpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIG1ldGFkYXRhLmtleXZhbHVlcyA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGF0YWRhdGEga2V5dmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaSA9IDA7XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEua2V5dmFsdWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKGkgPiA5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIHRoYW4gMTAga2V5dmFsdWVzIGNhbiBiZSBwcm92aWRlZCBmb3IgbWV0YWRhdGEgZW50cmllcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGlucHV0IGlzIGEgc3RyaW5nLCBhIGJvb2xlYW4sIG9yIGEgbnVtYmVyLCBzbyB3ZSBkb24ndCBnZXQgYW4gb2JqZWN0IHBhc3NlZCBpbiBieSBhY2NpZGVudFxuICAgICAgICAgICAgaWYgKCEodHlwZW9mIGtleVZhbHVlWzFdID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5VmFsdWVbMV0gPT09ICdib29sZWFuJyB8fCAhaXNOYU4oa2V5VmFsdWVbMV0pKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncywgYm9vbGVhbnMsIG9yIG51bWJlcnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIFBpbiBQb2xpY3kgU3RydWN0dXJlXG4gKiBAcGFyYW0geyp9IHBpblBvbGljeVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUocGluUG9saWN5KSB7XG4gICAgLy90aGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgcGluIHBvbGljeSBhbmQgY2hlY2tzIHRoZSBKU09OIHN0cnVjdHVyZSB0byBtYWtlIHN1cmUgaXQncyB2YWxpZFxuICAgIGlmICghcGluUG9saWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluIHBvbGljeSBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghcGluUG9saWN5LnJlZ2lvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWdpb25zIHByb3ZpZGVkIGluIHBpbiBwb2xpY3knKTtcbiAgICB9XG4gICAgaWYgKHBpblBvbGljeS5yZWdpb25zLmxlbmd0aCkge1xuICAgICAgICBwaW5Qb2xpY3kucmVnaW9ucy5mb3JFYWNoKChyZWdpb24pID0+IHtcbiAgICAgICAgICAgIGlmICghcmVnaW9uLmlkIHx8ICEoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlZ2lvbi5pZCkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVnaW9uIGlkIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEocmVnaW9uLmRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IHx8IHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCA9PT0gMCkgfHwgIU51bWJlci5pc0ludGVnZXIocmVnaW9uLmRlc2lyZWRSZXBsaWNhdGlvbkNvdW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgbXVzdCBiZSBhbiBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBQaW5hdGEgT3B0aW9uc1xuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2lkVmVyc2lvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24gIT0gMCAmJiBvcHRpb25zLmNpZFZlcnNpb24gIT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIGNpZFZlcnNpb24nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSB0cnVlICYmIG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyYXBXaXRoRGlyZWN0b3J5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhvc3ROb2Rlcykge1xuICAgICAgICB2YWxpZGF0ZUhvc3ROb2RlcyhvcHRpb25zLmhvc3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tUGluUG9saWN5KSB7XG4gICAgICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG9wdGlvbnMuY3VzdG9tUGluUG9saWN5KTtcbiAgICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhc3NlcnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYnVmZmVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHJlYW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidHR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVybFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dGlsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInpsaWJcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/lib/pinata-sdk.min.js b/lib/pinata-sdk.min.js index 17bb2f1..0ba9f9e 100644 --- a/lib/pinata-sdk.min.js +++ b/lib/pinata-sdk.min.js @@ -6,7 +6,7 @@ * @author Chen, Yi-Cyuan [emn178@gmail.com] * @copyright Chen, Yi-Cyuan 2015-2018 * @license MIT - */!function(){"use strict";var n="object"==typeof window?window:{};!n.HI_BASE32_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node&&(n=global);var a=!n.HI_BASE32_NO_COMMON_JS&&"object"==typeof e&&e.exports,o=t(431),r="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".split(""),s={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9,K:10,L:11,M:12,N:13,O:14,P:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,2:26,3:27,4:28,5:29,6:30,7:31},c=[0,0,0,0,0,0,0,0],p=function(e,n){n.length>10&&(n="..."+n.substr(-10));var t=new Error("Decoded data is not valid UTF-8. Maybe try base32.decode.asBytes()? Partial data after reading "+e+" bytes: "+n+" <-");throw t.position=e,t},u=function(e){if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");for(var n,t,i,a,o,r,c,p,u=[],l=0,f=(e=e.replace(/=/g,"")).length,d=0,m=f>>3<<3;d>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3),u[l++]=255&(c<<5|p);var h=f-m;return 2===h?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2)):4===h?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4)):5===h?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1)):7===h&&(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],r=s[e.charAt(d++)],c=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3)),u},l=function(e,n){if(!n)return function(e){for(var n,t,i="",a=e.length,o=0,r=0;o191&&n<=223?(t=31&n,r=1):n<=239?(t=15&n,r=2):n<=247?(t=7&n,r=3):p(o,i);for(var s=0;s191)&&p(o,i),t<<=6,t+=63&n;t>=55296&&t<=57343&&p(o,i),t>1114111&&p(o,i),t<=65535?i+=String.fromCharCode(t):(t-=65536,i+=String.fromCharCode(55296+(t>>10)),i+=String.fromCharCode(56320+(1023&t)))}return i}(u(e));if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");var t,i,a,o,r,c,l,f,d="",m=e.indexOf("=");-1===m&&(m=e.length);for(var h=0,v=m>>3<<3;h>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))+String.fromCharCode(255&(l<<5|f));var x=m-v;return 2===x?(t=s[e.charAt(h++)],i=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))):4===x?(t=s[e.charAt(h++)],i=s[e.charAt(h++)],a=s[e.charAt(h++)],o=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))):5===x?(t=s[e.charAt(h++)],i=s[e.charAt(h++)],a=s[e.charAt(h++)],o=s[e.charAt(h++)],r=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))):7===x&&(t=s[e.charAt(h++)],i=s[e.charAt(h++)],a=s[e.charAt(h++)],o=s[e.charAt(h++)],r=s[e.charAt(h++)],c=s[e.charAt(h++)],l=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))),d},f={encode:function(e,n){var t="string"!=typeof e;return t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),t?function(e){for(var n,t,i,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e[p],s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e[p++],t=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===l?(n=e[p++],t=e[p++],i=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):4===l&&(n=e[p++],t=e[p++],i=e[p++],a=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):n?function(e){for(var n,t,i,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e.charCodeAt(p),s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e.charCodeAt(p++),t=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===l?(n=e.charCodeAt(p++),t=e.charCodeAt(p++),i=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):4===l&&(n=e.charCodeAt(p++),t=e.charCodeAt(p++),i=e.charCodeAt(p++),a=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):function(e){var n,t,i,a,o,s,p,u=!1,l="",f=0,d=0,m=e.length;do{for(c[0]=c[5],c[1]=c[6],c[2]=c[7],p=d;f>6,c[p++]=128|63&s):s<55296||s>=57344?(c[p++]=224|s>>12,c[p++]=128|s>>6&63,c[p++]=128|63&s):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++f)),c[p++]=240|s>>18,c[p++]=128|s>>12&63,c[p++]=128|s>>6&63,c[p++]=128|63&s);p-d,d=p-5,f===m&&++f,f>m&&p<6&&(u=!0),n=c[0],p>4?(t=c[1],i=c[2],a=c[3],o=c[4],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o]):1===p?l+=r[n>>>3]+r[n<<2&31]+"======":2===p?(t=c[1],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===p?(t=c[1],i=c[2],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):(t=c[1],i=c[2],a=c[3],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"=")}while(!u);return l}(e)},decode:l};l.asBytes=u,a?e.exports=f:(n.base32=f,o&&(void 0===(i=function(){return f}.call(f,t,f,e))||(e.exports=i)))}()},function(e,n){(function(n){e.exports=n}).call(this,{})},function(e,n,t){"use strict";const i=t(167),a=O("dns4"),o=O("dns6"),r=C(O("dns"),O("dnsaddr"),a,o),s=C(O("ip4"),O("ip6")),c=C(E(s,O("tcp")),E(r,O("tcp"))),p=E(s,O("udp")),u=E(p,O("utp")),l=C(E(c,O("ws")),E(r,O("ws"))),f=C(E(c,O("wss")),E(r,O("wss"))),d=C(E(c,O("http")),E(s,O("http")),E(r,O("http"))),m=C(E(c,O("https")),E(s,O("https")),E(r,O("https"))),h=C(E(l,O("p2p-webrtc-star"),O("p2p")),E(f,O("p2p-webrtc-star"),O("p2p")),E(l,O("p2p-webrtc-star")),E(f,O("p2p-webrtc-star"))),v=C(E(l,O("p2p-websocket-star"),O("p2p")),E(f,O("p2p-websocket-star"),O("p2p")),E(l,O("p2p-websocket-star")),E(f,O("p2p-websocket-star"))),x=C(E(d,O("p2p-webrtc-direct")),E(m,O("p2p-webrtc-direct"))),b=C(l,f,d,m,h,x,c,u),g=C(E(b,O("p2p-stardust"),O("p2p")),E(b,O("p2p-stardust"))),k=C(E(b,O("p2p")),h,O("p2p")),y=C(E(k,O("p2p-circuit"),k),E(k,O("p2p-circuit")),E(O("p2p-circuit"),k),E(b,O("p2p-circuit")),E(O("p2p-circuit"),b),O("p2p-circuit")),w=()=>C(E(y,w),y),S=w(),_=C(E(S,k,S),E(k,S),E(S,k),S,k);function j(e){return function(n){if(!i.isMultiaddr(n))try{n=i(n)}catch(e){return!1}const t=e(n.protoNames());return null!==t&&0===t.length}}function E(){const e=Array.from(arguments);function n(n){return n.length{if(null===(n="function"==typeof e?e().partialMatch(n):e.partialMatch(n)))return!0}),n)}return{toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n}}function C(){const e=Array.from(arguments);function n(n){let t=null;return e.some(e=>{const i="function"==typeof e?e().partialMatch(n):e.partialMatch(n);if(i)return t=i,!0}),t}const t={toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n};return t}function O(e){const n=e;return{toString:function(){return n},matches:function(e){if("string"==typeof e)try{e=i(e)}catch(e){return!1}const t=e.protoNames();return 1===t.length&&t[0]===n},partialMatch:function(e){return 0===e.length?null:e[0]===n?e.slice(1):null}}}n.DNS=r,n.DNS4=a,n.DNS6=o,n.IP=s,n.TCP=c,n.UDP=p,n.UTP=u,n.HTTP=d,n.HTTPS=m,n.WebSockets=l,n.WebSocketsSecure=f,n.WebSocketStar=v,n.WebRTCStar=h,n.WebRTCDirect=x,n.Reliable=b,n.Stardust=g,n.Circuit=S,n.P2P=_,n.IPFS=_},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,c){if((0,o.validateApiKeys)(e,n),!t)throw new Error("ipfsPinHash value is required for changing the pin policy of a pin");if(!r.default.cid(t))throw new Error("ipfsPinHash value is an invalid IPFS CID");if(!c)throw new Error("no metadata object provided");(0,o.validateMetadata)(c);var p="".concat(a.baseUrl,"/pinning/hashMetadata"),u={ipfsPinHash:t};c.name&&(u.name=c.name);c.keyvalues&&(u.keyvalues=c.keyvalues);return new Promise((function(t,a){i.default.put(p,u,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while changing metadata for hash: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=c(t(52)),s=t(22);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,c){if((0,o.validateApiKeys)(e,n),(0,o.validatePinPolicyStructure)(c),!t)throw new Error("ipfsPinHash value is required for changing the pin policy of a pin");if(!r.default.cid(t))throw new Error("ipfsPinHash value is an invalid IPFS CID");if(!c)throw new Error("newPinPolicy is required for changing the pin policy of a pin");var p="".concat(a.baseUrl,"/pinning/hashPinPolicy"),u={ipfsPinHash:t,newPinPolicy:c};return new Promise((function(t,a){i.default.put(p,u,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while changing pin policy for hash: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=c(t(52)),s=t(22);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,p){return(0,s.validateApiKeys)(e,n),new Promise((function(u,l){var f=new o.default;f.append("file",t);var d="".concat(a.baseUrl,"/pinning/pinFileToIPFS");t instanceof r.default.Readable||l(new Error("readStream is not a readable stream")),p&&(p.pinataMetadata&&((0,s.validateMetadata)(p.pinataMetadata),f.append("pinataMetadata",JSON.stringify(p.pinataMetadata))),p.pinataOptions&&((0,s.validatePinataOptions)(p.pinataOptions),f.append("pinataOptions",JSON.stringify(p.pinataOptions)))),i.default.post(d,f,{withCredentials:!0,maxContentLength:"Infinity",maxBodyLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(f._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&l(new Error("unknown server response while pinning File to IPFS: ".concat(e))),u(e.data)})).catch((function(e){var n=(0,c.handleError)(e);l(n)}))}))};var i=p(t(19)),a=t(20),o=p(t(170)),r=p(t(75)),s=t(21),c=t(22);function p(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){var i=t(76),a=t(75).Stream,o=t(437);function r(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=r,i.inherits(r,a),r.create=function(e){var n=new this;for(var t in e=e||{})n[t]=e[t];return n},r.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},r.prototype.append=function(e){if(r.isStreamLike(e)){if(!(e instanceof o)){var n=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=n}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},r.prototype.pipe=function(e,n){return a.prototype.pipe.call(this,e,n),this.resume(),e},r.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},r.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){r.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},r.prototype._pipeNext=function(e){if(this._currentStream=e,r.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var n=e;this.write(n),this._getNext()},r.prototype._handleErrors=function(e){var n=this;e.on("error",(function(e){n._emitError(e)}))},r.prototype.write=function(e){this.emit("data",e)},r.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},r.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},r.prototype.end=function(){this._reset(),this.emit("end")},r.prototype.destroy=function(){this._reset(),this.emit("close")},r.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},r.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},r.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(n){n.dataSize&&(e.dataSize+=n.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},r.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},function(e,n,t){var i=t(75).Stream,a=t(76);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,a.inherits(o,i),o.create=function(e,n){var t=new this;for(var i in n=n||{})t[i]=n[i];t.source=e;var a=e.emit;return e.emit=function(){return t._handleEmit(arguments),a.apply(e,arguments)},e.on("error",(function(){})),t.pauseStream&&e.pause(),t},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=i.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},function(e,n,t){"use strict"; + */!function(){"use strict";var n="object"==typeof window?window:{};!n.HI_BASE32_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node&&(n=global);var a=!n.HI_BASE32_NO_COMMON_JS&&"object"==typeof e&&e.exports,o=t(431),r="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".split(""),s={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9,K:10,L:11,M:12,N:13,O:14,P:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,2:26,3:27,4:28,5:29,6:30,7:31},c=[0,0,0,0,0,0,0,0],p=function(e,n){n.length>10&&(n="..."+n.substr(-10));var t=new Error("Decoded data is not valid UTF-8. Maybe try base32.decode.asBytes()? Partial data after reading "+e+" bytes: "+n+" <-");throw t.position=e,t},u=function(e){if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");for(var n,t,i,a,o,r,c,p,u=[],l=0,f=(e=e.replace(/=/g,"")).length,d=0,m=f>>3<<3;d>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3),u[l++]=255&(c<<5|p);var h=f-m;return 2===h?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2)):4===h?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4)):5===h?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1)):7===h&&(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],r=s[e.charAt(d++)],c=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3)),u},l=function(e,n){if(!n)return function(e){for(var n,t,i="",a=e.length,o=0,r=0;o191&&n<=223?(t=31&n,r=1):n<=239?(t=15&n,r=2):n<=247?(t=7&n,r=3):p(o,i);for(var s=0;s191)&&p(o,i),t<<=6,t+=63&n;t>=55296&&t<=57343&&p(o,i),t>1114111&&p(o,i),t<=65535?i+=String.fromCharCode(t):(t-=65536,i+=String.fromCharCode(55296+(t>>10)),i+=String.fromCharCode(56320+(1023&t)))}return i}(u(e));if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");var t,i,a,o,r,c,l,f,d="",m=e.indexOf("=");-1===m&&(m=e.length);for(var h=0,v=m>>3<<3;h>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))+String.fromCharCode(255&(l<<5|f));var x=m-v;return 2===x?(t=s[e.charAt(h++)],i=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))):4===x?(t=s[e.charAt(h++)],i=s[e.charAt(h++)],a=s[e.charAt(h++)],o=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))):5===x?(t=s[e.charAt(h++)],i=s[e.charAt(h++)],a=s[e.charAt(h++)],o=s[e.charAt(h++)],r=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))):7===x&&(t=s[e.charAt(h++)],i=s[e.charAt(h++)],a=s[e.charAt(h++)],o=s[e.charAt(h++)],r=s[e.charAt(h++)],c=s[e.charAt(h++)],l=s[e.charAt(h++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))),d},f={encode:function(e,n){var t="string"!=typeof e;return t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),t?function(e){for(var n,t,i,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e[p],s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e[p++],t=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===l?(n=e[p++],t=e[p++],i=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):4===l&&(n=e[p++],t=e[p++],i=e[p++],a=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):n?function(e){for(var n,t,i,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e.charCodeAt(p),s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e.charCodeAt(p++),t=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===l?(n=e.charCodeAt(p++),t=e.charCodeAt(p++),i=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):4===l&&(n=e.charCodeAt(p++),t=e.charCodeAt(p++),i=e.charCodeAt(p++),a=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):function(e){var n,t,i,a,o,s,p,u=!1,l="",f=0,d=0,m=e.length;do{for(c[0]=c[5],c[1]=c[6],c[2]=c[7],p=d;f>6,c[p++]=128|63&s):s<55296||s>=57344?(c[p++]=224|s>>12,c[p++]=128|s>>6&63,c[p++]=128|63&s):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++f)),c[p++]=240|s>>18,c[p++]=128|s>>12&63,c[p++]=128|s>>6&63,c[p++]=128|63&s);p-d,d=p-5,f===m&&++f,f>m&&p<6&&(u=!0),n=c[0],p>4?(t=c[1],i=c[2],a=c[3],o=c[4],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o]):1===p?l+=r[n>>>3]+r[n<<2&31]+"======":2===p?(t=c[1],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===p?(t=c[1],i=c[2],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):(t=c[1],i=c[2],a=c[3],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"=")}while(!u);return l}(e)},decode:l};l.asBytes=u,a?e.exports=f:(n.base32=f,o&&(void 0===(i=function(){return f}.call(f,t,f,e))||(e.exports=i)))}()},function(e,n){(function(n){e.exports=n}).call(this,{})},function(e,n,t){"use strict";const i=t(167),a=O("dns4"),o=O("dns6"),r=C(O("dns"),O("dnsaddr"),a,o),s=C(O("ip4"),O("ip6")),c=C(E(s,O("tcp")),E(r,O("tcp"))),p=E(s,O("udp")),u=E(p,O("utp")),l=C(E(c,O("ws")),E(r,O("ws"))),f=C(E(c,O("wss")),E(r,O("wss"))),d=C(E(c,O("http")),E(s,O("http")),E(r,O("http"))),m=C(E(c,O("https")),E(s,O("https")),E(r,O("https"))),h=C(E(l,O("p2p-webrtc-star"),O("p2p")),E(f,O("p2p-webrtc-star"),O("p2p")),E(l,O("p2p-webrtc-star")),E(f,O("p2p-webrtc-star"))),v=C(E(l,O("p2p-websocket-star"),O("p2p")),E(f,O("p2p-websocket-star"),O("p2p")),E(l,O("p2p-websocket-star")),E(f,O("p2p-websocket-star"))),x=C(E(d,O("p2p-webrtc-direct")),E(m,O("p2p-webrtc-direct"))),b=C(l,f,d,m,h,x,c,u),g=C(E(b,O("p2p-stardust"),O("p2p")),E(b,O("p2p-stardust"))),k=C(E(b,O("p2p")),h,O("p2p")),y=C(E(k,O("p2p-circuit"),k),E(k,O("p2p-circuit")),E(O("p2p-circuit"),k),E(b,O("p2p-circuit")),E(O("p2p-circuit"),b),O("p2p-circuit")),w=()=>C(E(y,w),y),S=w(),_=C(E(S,k,S),E(k,S),E(S,k),S,k);function j(e){return function(n){if(!i.isMultiaddr(n))try{n=i(n)}catch(e){return!1}const t=e(n.protoNames());return null!==t&&0===t.length}}function E(){const e=Array.from(arguments);function n(n){return n.length{if(null===(n="function"==typeof e?e().partialMatch(n):e.partialMatch(n)))return!0}),n)}return{toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n}}function C(){const e=Array.from(arguments);function n(n){let t=null;return e.some(e=>{const i="function"==typeof e?e().partialMatch(n):e.partialMatch(n);if(i)return t=i,!0}),t}const t={toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n};return t}function O(e){const n=e;return{toString:function(){return n},matches:function(e){if("string"==typeof e)try{e=i(e)}catch(e){return!1}const t=e.protoNames();return 1===t.length&&t[0]===n},partialMatch:function(e){return 0===e.length?null:e[0]===n?e.slice(1):null}}}n.DNS=r,n.DNS4=a,n.DNS6=o,n.IP=s,n.TCP=c,n.UDP=p,n.UTP=u,n.HTTP=d,n.HTTPS=m,n.WebSockets=l,n.WebSocketsSecure=f,n.WebSocketStar=v,n.WebRTCStar=h,n.WebRTCDirect=x,n.Reliable=b,n.Stardust=g,n.Circuit=S,n.P2P=_,n.IPFS=_},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,c){if((0,o.validateApiKeys)(e,n),!t)throw new Error("ipfsPinHash value is required for changing the pin policy of a pin");if(!r.default.cid(t))throw new Error("ipfsPinHash value is an invalid IPFS CID");if(!c)throw new Error("no metadata object provided");(0,o.validateMetadata)(c);var p="".concat(a.baseUrl,"/pinning/hashMetadata"),u={ipfsPinHash:t};c.name&&(u.name=c.name);c.keyvalues&&(u.keyvalues=c.keyvalues);return new Promise((function(t,a){i.default.put(p,u,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while changing metadata for hash: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=c(t(52)),s=t(22);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,c){if((0,o.validateApiKeys)(e,n),(0,o.validatePinPolicyStructure)(c),!t)throw new Error("ipfsPinHash value is required for changing the pin policy of a pin");if(!r.default.cid(t))throw new Error("ipfsPinHash value is an invalid IPFS CID");if(!c)throw new Error("newPinPolicy is required for changing the pin policy of a pin");var p="".concat(a.baseUrl,"/pinning/hashPinPolicy"),u={ipfsPinHash:t,newPinPolicy:c};return new Promise((function(t,a){i.default.put(p,u,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while changing pin policy for hash: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=c(t(52)),s=t(22);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,p){return(0,s.validateApiKeys)(e,n),new Promise((function(u,l){var f=new o.default;f.append("file",t);var d="".concat(a.baseUrl,"/pinning/pinFileToIPFS");t instanceof r.default.Readable||t instanceof o.default||l(new Error("readStream is not a readable stream or form data")),p&&(p.pinataMetadata&&((0,s.validateMetadata)(p.pinataMetadata),f.append("pinataMetadata",JSON.stringify(p.pinataMetadata))),p.pinataOptions&&((0,s.validatePinataOptions)(p.pinataOptions),f.append("pinataOptions",JSON.stringify(p.pinataOptions)))),i.default.post(d,t instanceof o.default?t:f,{withCredentials:!0,maxContentLength:"Infinity",maxBodyLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(f._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&l(new Error("unknown server response while pinning File to IPFS: ".concat(e))),u(e.data)})).catch((function(e){var n=(0,c.handleError)(e);l(n)}))}))};var i=p(t(19)),a=t(20),o=p(t(170)),r=p(t(75)),s=t(21),c=t(22);function p(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){var i=t(76),a=t(75).Stream,o=t(437);function r(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=r,i.inherits(r,a),r.create=function(e){var n=new this;for(var t in e=e||{})n[t]=e[t];return n},r.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},r.prototype.append=function(e){if(r.isStreamLike(e)){if(!(e instanceof o)){var n=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=n}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},r.prototype.pipe=function(e,n){return a.prototype.pipe.call(this,e,n),this.resume(),e},r.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},r.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){r.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},r.prototype._pipeNext=function(e){if(this._currentStream=e,r.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var n=e;this.write(n),this._getNext()},r.prototype._handleErrors=function(e){var n=this;e.on("error",(function(e){n._emitError(e)}))},r.prototype.write=function(e){this.emit("data",e)},r.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},r.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},r.prototype.end=function(){this._reset(),this.emit("end")},r.prototype.destroy=function(){this._reset(),this.emit("close")},r.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},r.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},r.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(n){n.dataSize&&(e.dataSize+=n.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},r.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},function(e,n,t){var i=t(75).Stream,a=t(76);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,a.inherits(o,i),o.create=function(e,n){var t=new this;for(var i in n=n||{})t[i]=n[i];t.source=e;var a=e.emit;return e.emit=function(){return t._handleEmit(arguments),a.apply(e,arguments)},e.on("error",(function(){})),t.pauseStream&&e.pause(),t},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=i.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},function(e,n,t){"use strict"; /*! * mime-types * Copyright(c) 2014 Jonathan Ong @@ -19,4 +19,4 @@ * MIT Licensed */ e.exports=t(440)},function(e){e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma","es"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","compressible":true},"application/fhir+xml":{"source":"iana","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/mrb-publish+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/msc-ivr+xml":{"source":"iana","compressible":true},"application/msc-mixer+xml":{"source":"iana","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana"},"application/news-groupinfo":{"source":"iana"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana"},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","compressible":true},"application/pidf-diff+xml":{"source":"iana","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["keynote"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"apache","extensions":["der","crt","pem"]},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana"},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},function(e,n,t){e.exports={parallel:t(442),serial:t(444),serialOrdered:t(176)}},function(e,n,t){var i=t(171),a=t(174),o=t(175);e.exports=function(e,n,t){var r=a(e);for(;r.index<(r.keyedList||e).length;)i(e,n,r,(function(e,n){e?t(e,n):0!==Object.keys(r.jobs).length||t(null,r.results)})),r.index++;return o.bind(r,t)}},function(e,n){e.exports=function(e){var n="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;n?n(e):setTimeout(e,0)}},function(e,n,t){var i=t(176);e.exports=function(e,n,t){return i(e,n,null,t)}},function(e,n){e.exports=function(e,n){return Object.keys(n).forEach((function(t){e[t]=e[t]||n[t]})),e}},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,p){return(0,r.validateApiKeys)(e,n),new Promise((function(f,d){var m="".concat(a.baseUrl,"/pinning/pinFileToIPFS");u.stat(t,(function(a,h){if(a&&d(a),h.isFile()){var v=new o.default;v.append("file",u.createReadStream(t)),p&&(p.pinataMetadata&&((0,r.validateMetadata)(p.pinataMetadata),v.append("pinataMetadata",JSON.stringify(p.pinataMetadata))),p.pinataOptions&&((0,r.validatePinataOptions)(p.pinataOptions),v.append("pinataOptions",JSON.stringify(p.pinataOptions)))),i.default.post(m,v,{withCredentials:!0,maxContentLength:"Infinity",maxBodyLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(v._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&d(new Error("unknown server response while pinning File to IPFS: ".concat(e))),f(e.data)})).catch((function(e){var n=(0,c.handleError)(e);d(n)}))}else l.readdirr(t,(function(a,l,h){a&&d(new Error(a));var v=new o.default;h.forEach((function(e){v.append("file",u.createReadStream(e),{filepath:(0,s.default)(t,e)})})),p&&(p.pinataMetadata&&((0,r.validateMetadata)(p.pinataMetadata),v.append("pinataMetadata",JSON.stringify(p.pinataMetadata))),p.pinataOptions&&((0,r.validatePinataOptions)(p.pinataOptions),v.append("pinataOptions",JSON.stringify(p.pinataOptions)))),i.default.post(m,v,{withCredentials:!0,maxContentLength:"Infinity",maxBodyLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(v._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&d(new Error("unknown server response while pinning File to IPFS: ".concat(e))),f(e.data)})).catch((function(e){var n=(0,c.handleError)(e);d(n)}))}))}))}))};var i=p(t(19)),a=t(20),o=p(t(170)),r=t(21),s=p(t(447)),c=t(22);function p(e){return e&&e.__esModule?e:{default:e}}var u=t(60),l=t(448);e.exports=n.default},function(e,n){e.exports=function(e,n){let t=e.startsWith("./")?e.substring(2):e;const i=t.lastIndexOf("/");if(-1===i)return n;i===e.length-1&&(t=e.slice(0,-1));const a=t.lastIndexOf("/");if(-1===a)return t;{const e=t.substring(0,a+1);t=n.split(e)[1]}return t}},function(e,n,t){e.exports={readdirr:t(114).readdirr,rmdirr:t(115).rmdirr,rmdirs:t(115).rmdirs,rmfiles:t(115).rmfiles,cpdirr:t(116).cpdirr,cpdirs:t(116).cpdirs,cpfiles:t(116).cpfiles}},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,i){(0,r.validateApiKeys)(e,n);var p=t;if("object"!==c(t))throw new Error("body must be a valid JSON object");i&&(p={pinataContent:t},i.pinataMetadata&&((0,r.validateMetadata)(i.pinataMetadata),p.pinataMetadata=i.pinataMetadata),i.pinataOptions&&((0,r.validatePinataOptions)(i.pinataOptions),p.pinataOptions=i.pinataOptions));var u="".concat(o.baseUrl,"/pinning/pinJSONToIPFS");return new Promise((function(t,i){a.default.post(u,p,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&i(new Error("unknown server response while pinning JSON to IPFS: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);i(n)}))}))};var i,a=(i=t(19))&&i.__esModule?i:{default:i},o=t(20),r=t(21),s=t(22);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){(0,o.validateApiKeys)(e,n);var c="".concat(a.baseUrl,"/pinning/pinJobs");t&&(c=(0,r.default)(c,t));return new Promise((function(t,a){i.default.get(c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve pin jobs: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=c(t(451)),s=t(22);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");if(!n)return e;var t=e,i=!1;function o(e){i?t="".concat(t,"&").concat(e):(i=!0,t="".concat(t,"?").concat(e))}if(n){if(n.sort){if("ASC"!==n.sort&&"DESC"!==n.sort)throw new Error("Unknown sort value: ".concat(n.sort," provided"));o("sort=".concat(n.sort))}if(n.status){if("searching"!==n.status&&"expired"!==n.status&&"over_free_limit"!==n.status&&"over_max_size"!==n.status&&"invalid_object"!==n.status&&"bad_host_node"!==n.status)throw new Error("Unknown status value: ".concat(n.status," provided"));o("status=".concat(n.status))}if(n.ipfs_pin_hash){if(!a.default.cid(n.ipfs_pin_hash))throw new Error("Invalid IPFS hash: ".concat(n.ipfs_pin_hash));o("ipfs_pin_hash=".concat(n.ipfs_pin_hash))}if(n.limit){if(!(Number.isInteger(n.limit)&&n.limit>0&&n.limit<100))throw new Error("Invalid limit: ".concat(n.limit,". Valid limits are 1-100"));o("limit=".concat(n.limit))}if(n.offset){if(!(Number.isInteger(n.offset)&&n.offset>0))throw new Error("Invalid offset: ".concat(n.offset,". Please provide a positive integer for the offset"));o("offset=".concat(n.offset))}}return t};var i,a=(i=t(52))&&i.__esModule?i:{default:i};e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){if((0,o.validateApiKeys)(e,n),!t)throw new Error("hashToUnpin value is required for removing a pin from Pinata");if(!r.default.cid(t))throw new Error("".concat(t," is an invalid IPFS CID"));var c="".concat(a.baseUrl,"/pinning/unpin/").concat(t);return new Promise((function(t,a){i.default.delete(c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while removing pin from IPFS: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=c(t(52)),s=t(22);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){if((0,r.validateApiKeys)(e,n),(0,r.validatePinPolicyStructure)(t),!t)throw new Error("newPinPolicy is required for changing the pin policy of a pin");var i="".concat(o.baseUrl,"/pinning/userPinPolicy"),c={newPinPolicy:t};return new Promise((function(t,o){a.default.put(i,c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while changing pin policy for user: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,s.handleError)(e);o(n)}))}))};var i,a=(i=t(19))&&i.__esModule?i:{default:i},o=t(20),r=t(21),s=t(22);e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){(0,r.validateApiKeys)(e,n);var t="".concat(o.baseUrl,"/data/testAuthentication");return new Promise((function(i,o){a.default.get(t,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while authenticating: ".concat(e))),i({authenticated:!0})})).catch((function(e){var n=(0,s.handleError)(e);o(n)}))}))};var i,a=(i=t(19))&&i.__esModule?i:{default:i},o=t(20),r=t(21),s=t(22);e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){(0,o.validateApiKeys)(e,n);var c="".concat(a.baseUrl,"/data/pinList"),p=(0,s.default)(c,t);return new Promise((function(t,a){i.default.get(p,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve user pin list: ".concat(e))),t(e.data)})).catch((function(e){var n=(0,r.handleError)(e);a(n)}))}))};var i=c(t(19)),a=t(20),o=t(21),r=t(22),s=c(t(456));function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e){var n=new Date(Date.parse(e));try{if(n.toISOString()===e)return e;throw new Error("dates must be in valid ISO_8601 format")}catch(e){throw new Error("dates must be in valid ISO_8601 format")}}Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");var t="?",o="";if(n){if(n.hashContains){if("string"!=typeof n.hashContains)throw new Error("hashContains value is not a string");t+="hashContains=".concat(n.hashContains,"&")}if(n.pinStart&&(t+="pinStart=".concat(a(n.pinStart),"&")),n.pinEnd&&(t+="pinEnd=".concat(a(n.pinEnd),"&")),n.unpinStart&&(t+="unpinStart=".concat(a(n.unpinStart),"&")),n.unpinEnd&&(t+="unpinEnd=".concat(a(n.unpinEnd),"&")),n.pinSizeMin){if(isNaN(n.pinSizeMin)||n.pinSizeMin<0)throw new Error("Please make sure the pinSizeMin is a valid positive integer");t+="pinSizeMin=".concat(n.pinSizeMin,"&")}if(n.pinSizeMax){if(isNaN(n.pinSizeMax)||n.pinSizeMax<0)throw new Error("Please make sure the pinSizeMax is a valid positive integer");t+="pinSizeMax=".concat(n.pinSizeMax,"&")}if(n.status){if("all"!==n.status&&"pinned"!==n.status&&"unpinned"!==n.status)throw new Error("status value must be either: all, pinned, or unpinned");t+="status=".concat(n.status,"&")}if(n.pageLimit){if(isNaN(n.pageLimit)||n.pageLimit<=0||n.pageLimit>1e3)throw new Error("Please make sure the pageLimit is a valid integer between 1-1000");t+="pageLimit=".concat(parseInt(n.pageLimit),"&")}if(n.pageOffset){if(isNaN(n.pageOffset)||n.pageOffset<=0)throw new Error("Please make sure the pageOffset is a positive integer");t+="pageOffset=".concat(parseInt(n.pageOffset),"&")}if(n.metadata){if("object"!==i(n.metadata))throw new Error("metadata value must be an object");if(n.metadata.name&&(o="metadata[name]=".concat(n.metadata.name,"&")),n.metadata.keyvalues){if(o+="metadata[keyvalues]=","object"!==i(n.metadata.keyvalues))throw new Error("metadata keyvalues must be an object");var r={};Object.entries(n.metadata.keyvalues).forEach((function(e){var n=e[0],t=e[1];if("object"!==i(t))throw new Error("keyValue: ".concat(n," is not an object"));if(!t||!t.value||!t.op)throw new Error("keyValue: ".concat(n," must have both value and op attributes"));if("string"!=typeof t.value&&"boolean"!=typeof t.value&&"number"!=typeof t.value)throw new Error("Metadata keyvalue values must be strings, booleans, or numbers");switch(t.op){case"gt":case"gte":case"lt":case"lte":case"ne":case"eq":r[n]={value:t.value,op:t.op};break;case"between":if(!t.secondValue)throw new Error("Because between op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof t.secondValue&&"boolean"!=typeof t.secondValue&&"number"!=typeof t.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");r[n]={value:t.value,op:t.op,secondValue:t.secondValue};break;case"notBetween":if(!t.secondValue)throw new Error("Because notBetween op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof t.secondValue&&"boolean"!=typeof t.secondValue&&"number"!=typeof t.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");r[n]={value:t.value,op:t.op,secondValue:t.secondValue};break;case"like":case"notLike":case"iLike":case"notILike":case"regexp":case"iRegexp":r[n]={value:t.value,op:t.op};break;default:throw new Error("keyValue op: ".concat(t.op," is not a valid op code"))}})),o+="".concat(JSON.stringify(r))}}}return"".concat(e).concat(t).concat(o)},e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){(0,r.validateApiKeys)(e,n);var t="".concat(o.baseUrl,"/data/userPinnedDataTotal");return new Promise((function(i,o){a.default.get(t,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while attempting to retrieve pinned data total: ".concat(e))),i(e.data)})).catch((function(e){var n=(0,s.handleError)(e);o(n)}))}))};var i,a=(i=t(19))&&i.__esModule?i:{default:i},o=t(20),r=t(21),s=t(22);e.exports=n.default}])})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL3V0aWwvdmFsaWRhdG9ycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL3V0aWwvZXJyb3JSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcGZzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInV0aWxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JzNTgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInVybFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGloYXNoZXMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9wcm90b2NvbHMtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jaWRzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvcmVhZGRpcnIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL3JtZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvY3BkaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC10by1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcIm9zXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYmFzZS14L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYnVmZmVyXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jbGFzcy1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3NlcmlhbE9yZGVyZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNicnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaW11bC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFzYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2RlYnVnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ0dHlcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInpsaWJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZW5jb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2RlY29kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTE2LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29kZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2NvbnZlcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC9saWIvaXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lwLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9pbnQtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy92YXJpbnQtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9wcmludC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGktYmFzZTMyL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21hZm10L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaE1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9oYXNoUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5GaWxlVG9JUEZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbS9saWIvZGVsYXllZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9taW1lLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL3BvcHVsYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Gcm9tRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXBhdGgtY29udmVydGVyL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVjdXJzaXZlLWZzL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcXVlcnlCdWlsZGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy91bnBpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvdXNlclBpblBvbGljeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3Bpbkxpc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcXVlcnlCdWlsZGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsLmpzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJ0aGlzIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsImNvcmUiLCJoaWRlIiwicmVkZWZpbmUiLCJjdHgiLCIkZXhwb3J0IiwidHlwZSIsInNvdXJjZSIsIm93biIsIm91dCIsImV4cCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJCIiwidGFyZ2V0IiwiZXhwUHJvdG8iLCJ1bmRlZmluZWQiLCJGdW5jdGlvbiIsIlUiLCJXIiwiUiIsImlzT2JqZWN0IiwiaXQiLCJUeXBlRXJyb3IiLCJ3aW5kb3ciLCJNYXRoIiwiX19nIiwiZXhlYyIsImUiLCJzdG9yZSIsInVpZCIsIlVTRV9TWU1CT0wiLCJ0b0ludGVnZXIiLCJtaW4iLCJhIiwiYW5PYmplY3QiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiZFAiLCJmIiwiTyIsIkF0dHJpYnV0ZXMiLCJkZWZpbmVkIiwidG9TdHJpbmciLCJpc0FycmF5IiwidmFsIiwiaXNVbmRlZmluZWQiLCJpc1BsYWluT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJpc0Z1bmN0aW9uIiwiZm9yRWFjaCIsIm9iaiIsImZuIiwibGVuZ3RoIiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzU3RyZWFtIiwicGlwZSIsImlzVVJMU2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJuYXZpZ2F0b3IiLCJwcm9kdWN0IiwiZG9jdW1lbnQiLCJtZXJnZSIsInJlc3VsdCIsImFzc2lnblZhbHVlIiwic2xpY2UiLCJhcmd1bWVudHMiLCJleHRlbmQiLCJiIiwidGhpc0FyZyIsInRyaW0iLCJzdHIiLCJyZXBsYWNlIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImNyZWF0ZURlc2MiLCJoYXMiLCJTUkMiLCIkdG9TdHJpbmciLCJUUEwiLCJzcGxpdCIsImluc3BlY3RTb3VyY2UiLCJzYWZlIiwiam9pbiIsIlN0cmluZyIsImZhaWxzIiwicXVvdCIsImNyZWF0ZUhUTUwiLCJzdHJpbmciLCJ0YWciLCJhdHRyaWJ1dGUiLCJwMSIsIk5BTUUiLCJ0ZXN0IiwidG9Mb3dlckNhc2UiLCJJT2JqZWN0IiwicElFIiwidG9JT2JqZWN0IiwiZ09QRCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInRvT2JqZWN0IiwiSUVfUFJPVE8iLCJPYmplY3RQcm90byIsInBpbmF0YUFwaUtleSIsInBpbmF0YVNlY3JldEFwaUtleSIsIkVycm9yIiwibWV0YWRhdGEiLCJrZXl2YWx1ZXMiLCJlbnRyaWVzIiwia2V5VmFsdWUiLCJpc05hTiIsIm9wdGlvbnMiLCJjaWRWZXJzaW9uIiwid3JhcFdpdGhEaXJlY3RvcnkiLCJob3N0Tm9kZXMiLCJ2YWxpZGF0ZUhvc3ROb2RlcyIsImN1c3RvbVBpblBvbGljeSIsInZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIiwiQXJyYXkiLCJub2RlIiwiaXNJUEZTIiwicGVlck11bHRpYWRkciIsInBpblBvbGljeSIsInJlZ2lvbnMiLCJyZWdpb24iLCJpZCIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiZXJyb3IiLCJyZXNwb25zZSIsImRhdGEiLCJ2ZXJzaW9uIiwiX19lIiwiYUZ1bmN0aW9uIiwidGhhdCIsImFwcGx5IiwiY2VpbCIsImZsb29yIiwibWV0aG9kIiwiYXJnIiwidmFsdWVPZiIsIktFWSIsInRvTGVuZ3RoIiwiYXNjIiwiVFlQRSIsIiRjcmVhdGUiLCJJU19NQVAiLCJJU19GSUxURVIiLCJJU19TT01FIiwiSVNfRVZFUlkiLCJJU19GSU5EX0lOREVYIiwiTk9fSE9MRVMiLCIkdGhpcyIsImNhbGxiYWNrZm4iLCJyZXMiLCJpbmRleCIsInB1c2giLCJMSUJSQVJZIiwiJHR5cGVkIiwiJGJ1ZmZlciIsImFuSW5zdGFuY2UiLCJwcm9wZXJ0eURlc2MiLCJyZWRlZmluZUFsbCIsInRvSW5kZXgiLCJ0b0Fic29sdXRlSW5kZXgiLCJjbGFzc29mIiwiaXNBcnJheUl0ZXIiLCJnT1BOIiwiZ2V0SXRlckZuIiwid2tzIiwiY3JlYXRlQXJyYXlNZXRob2QiLCJjcmVhdGVBcnJheUluY2x1ZGVzIiwic3BlY2llc0NvbnN0cnVjdG9yIiwiQXJyYXlJdGVyYXRvcnMiLCJJdGVyYXRvcnMiLCIkaXRlckRldGVjdCIsInNldFNwZWNpZXMiLCJhcnJheUZpbGwiLCJhcnJheUNvcHlXaXRoaW4iLCIkRFAiLCIkR09QRCIsIlJhbmdlRXJyb3IiLCJVaW50OEFycmF5IiwiQXJyYXlQcm90byIsIiRBcnJheUJ1ZmZlciIsIiREYXRhVmlldyIsIkRhdGFWaWV3IiwiYXJyYXlGb3JFYWNoIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVNvbWUiLCJhcnJheUV2ZXJ5IiwiYXJyYXlGaW5kIiwiYXJyYXlGaW5kSW5kZXgiLCJhcnJheUluY2x1ZGVzIiwiYXJyYXlJbmRleE9mIiwiYXJyYXlWYWx1ZXMiLCJ2YWx1ZXMiLCJhcnJheUtleXMiLCJrZXlzIiwiYXJyYXlFbnRyaWVzIiwiYXJyYXlMYXN0SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJhcnJheVJlZHVjZVJpZ2h0IiwicmVkdWNlUmlnaHQiLCJhcnJheUpvaW4iLCJhcnJheVNvcnQiLCJzb3J0IiwiYXJyYXlTbGljZSIsImFycmF5VG9TdHJpbmciLCJhcnJheVRvTG9jYWxlU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJJVEVSQVRPUiIsIlRBRyIsIlRZUEVEX0NPTlNUUlVDVE9SIiwiREVGX0NPTlNUUlVDVE9SIiwiQUxMX0NPTlNUUlVDVE9SUyIsIkNPTlNUUiIsIlRZUEVEX0FSUkFZIiwiVFlQRUQiLCJWSUVXIiwiJG1hcCIsImFsbG9jYXRlIiwiTElUVExFX0VORElBTiIsIlVpbnQxNkFycmF5IiwiRk9SQ0VEX1NFVCIsInNldCIsInRvT2Zmc2V0IiwiQllURVMiLCJvZmZzZXQiLCJ2YWxpZGF0ZSIsIkMiLCJzcGVjaWVzRnJvbUxpc3QiLCJsaXN0IiwiZnJvbUxpc3QiLCJhZGRHZXR0ZXIiLCJpbnRlcm5hbCIsIl9kIiwiJGZyb20iLCJzdGVwIiwiaXRlcmF0b3IiLCJhTGVuIiwibWFwZm4iLCJtYXBwaW5nIiwiaXRlckZuIiwibmV4dCIsImRvbmUiLCIkb2YiLCJUT19MT0NBTEVfQlVHIiwiJHRvTG9jYWxlU3RyaW5nIiwicHJvdG8iLCJjb3B5V2l0aGluIiwic3RhcnQiLCJldmVyeSIsImZpbGwiLCJmaWx0ZXIiLCJmaW5kIiwicHJlZGljYXRlIiwiZmluZEluZGV4IiwiaW5kZXhPZiIsInNlYXJjaEVsZW1lbnQiLCJpbmNsdWRlcyIsInNlcGFyYXRvciIsIm1hcCIsInJldmVyc2UiLCJtaWRkbGUiLCJzb21lIiwiY29tcGFyZWZuIiwic3ViYXJyYXkiLCJiZWdpbiIsImVuZCIsIiRiZWdpbiIsImJ5dGVPZmZzZXQiLCJCWVRFU19QRVJfRUxFTUVOVCIsIiRzbGljZSIsIiRzZXQiLCJhcnJheUxpa2UiLCJzcmMiLCJsZW4iLCIkaXRlcmF0b3JzIiwiaXNUQUluZGV4IiwiJGdldERlc2MiLCIkc2V0RGVzYyIsImRlc2MiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIiRUeXBlZEFycmF5UHJvdG90eXBlJCIsIndyYXBwZXIiLCJDTEFNUEVEIiwiR0VUVEVSIiwiU0VUVEVSIiwiVHlwZWRBcnJheSIsIkJhc2UiLCJUQUMiLCJGT1JDRUQiLCJBQlYiLCJUeXBlZEFycmF5UHJvdG90eXBlIiwiYWRkRWxlbWVudCIsInYiLCJyb3VuZCIsInNldHRlciIsIiRvZmZzZXQiLCIkbGVuZ3RoIiwiYnl0ZUxlbmd0aCIsImtsYXNzIiwiJGxlbiIsIml0ZXIiLCJjb25jYXQiLCIkbmF0aXZlSXRlcmF0b3IiLCJDT1JSRUNUX0lURVJfTkFNRSIsIiRpdGVyYXRvciIsIm9mIiwiZnJvbSIsIk1hcCIsInNoYXJlZCIsImdldE9yQ3JlYXRlTWV0YWRhdGFNYXAiLCJ0YXJnZXRLZXkiLCJ0YXJnZXRNZXRhZGF0YSIsImtleU1ldGFkYXRhIiwiTWV0YWRhdGFLZXkiLCJtZXRhZGF0YU1hcCIsIk1ldGFkYXRhVmFsdWUiLCJfIiwiTUVUQSIsInNldERlc2MiLCJpc0V4dGVuc2libGUiLCJGUkVFWkUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsInNldE1ldGEiLCJ3IiwibWV0YSIsIk5FRUQiLCJmYXN0S2V5IiwiZ2V0V2VhayIsIm9uRnJlZXplIiwiVU5TQ09QQUJMRVMiLCJiaXRtYXAiLCJweCIsInJhbmRvbSIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJtYXgiLCJkUHMiLCJFbXB0eSIsImNyZWF0ZURpY3QiLCJpZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsInN0eWxlIiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJ3cml0ZSIsImx0IiwiY2xvc2UiLCJQcm9wZXJ0aWVzIiwiaGlkZGVuS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJERVNDUklQVE9SUyIsIlNQRUNJRVMiLCJDb25zdHJ1Y3RvciIsImZvcmJpZGRlbkZpZWxkIiwiQlJFQUsiLCJSRVRVUk4iLCJpdGVyYWJsZSIsIl90IiwiZGVmIiwic3RhdCIsImNvZiIsIkFSRyIsIlQiLCJ0cnlHZXQiLCJjYWxsZWUiLCJzcGFjZXMiLCJzcGFjZSIsImx0cmltIiwiUmVnRXhwIiwicnRyaW0iLCJleHBvcnRlciIsIkFMSUFTIiwiRk9SQ0UiLCJiYXNlNTgiLCJtdWx0aWhhc2giLCJtdWx0aWJhc2UiLCJNdWx0aWFkZHIiLCJtYWZtdCIsIkNJRCIsInVybFBhdHRlcm4iLCJwYXRoUGF0dGVybiIsImZxZG5QYXR0ZXJuIiwiaXNDSUQiLCJoYXNoIiwiaXNNdWx0aWFkZHIiLCJpbnB1dCIsImlzSXBmcyIsInBhdHRlcm4iLCJwcm90b2NvbE1hdGNoIiwiaGFzaE1hdGNoIiwiZm9ybWF0dGVkIiwiY29udmVydFRvU3RyaW5nIiwibWF0Y2giLCJpc0lwbnMiLCJCdWZmZXIiLCJlbmNvZGUiLCJpcGZzU3ViZG9tYWluIiwidXJsIiwiaXBuc1N1YmRvbWFpbiIsImRlY29kZSIsIm11bHRpYWRkciIsIklQRlMiLCJtYXRjaGVzIiwiY2lkIiwiYmFzZTMyY2lkIiwiaXNFbmNvZGVkIiwiaXNNdWx0aWJhc2UiLCJzdWJkb21haW4iLCJzdWJkb21haW5QYXR0ZXJuIiwiaXBmc1VybCIsImlwbnNVcmwiLCJpcGZzUGF0aCIsInBhdGgiLCJpcG5zUGF0aCIsInVybE9yUGF0aCIsIngiLCJjaWRQYXRoIiwiZW5jb2RpbmdMZW5ndGgiLCJjb3B5cmlnaHQiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJ1bmljb2RlIiwic3RpY2t5IiwiRCIsInJlcXVpcmUiLCJJU19JTkNMVURFUyIsImVsIiwiZnJvbUluZGV4IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiVE9fU1RSSU5HIiwicG9zIiwiY2hhckF0IiwiTUFUQ0giLCJpc1JlZ0V4cCIsIlNBRkVfQ0xPU0lORyIsInJpdGVyIiwic2tpcENsb3NpbmciLCJhcnIiLCJidWlsdGluRXhlYyIsInJlZ2V4cEV4ZWMiLCJSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyIsInJlIiwiZ3JvdXBzIiwiU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDIiwib3JpZ2luYWxFeGVjIiwiU1lNQk9MIiwiREVMRUdBVEVTX1RPX1NZTUJPTCIsIkRFTEVHQVRFU19UT19FWEVDIiwiZXhlY0NhbGxlZCIsIm5hdGl2ZVJlZ0V4cE1ldGhvZCIsImZucyIsIm5hdGl2ZU1ldGhvZCIsInJlZ2V4cCIsImFyZzIiLCJmb3JjZVN0cmluZ01ldGhvZCIsInN0cmZuIiwicnhmbiIsInVzZXJBZ2VudCIsImZvck9mIiwic2V0VG9TdHJpbmdUYWciLCJpbmhlcml0SWZSZXF1aXJlZCIsIm1ldGhvZHMiLCJjb21tb24iLCJJU19XRUFLIiwiQURERVIiLCJmaXhNZXRob2QiLCJpbnN0YW5jZSIsIkhBU05UX0NIQUlOSU5HIiwiVEhST1dTX09OX1BSSU1JVElWRVMiLCJBQ0NFUFRfSVRFUkFCTEVTIiwiQlVHR1lfWkVSTyIsIiRpbnN0YW5jZSIsImNsZWFyIiwiZ2V0Q29uc3RydWN0b3IiLCJzZXRTdHJvbmciLCJUeXBlZCIsIlR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMiLCJLIiwiX19kZWZpbmVTZXR0ZXJfXyIsIkNPTExFQ1RJT04iLCJBIiwiY2IiLCJtYXBGbiIsIm5leHRJdGVtIiwiYmFzZXgiLCJpcyIsImNyZWF0ZUVsZW1lbnQiLCJ3a3NFeHQiLCIkU3ltYm9sIiwiZG9jdW1lbnRFbGVtZW50IiwiY2hlY2siLCJzZXRQcm90b3R5cGVPZiIsImJ1Z2d5IiwiX19wcm90b19fIiwiY291bnQiLCJJbmZpbml0eSIsInNpZ24iLCIkZXhwbTEiLCJleHBtMSIsIiRpdGVyQ3JlYXRlIiwiQlVHR1kiLCJyZXR1cm5UaGlzIiwiREVGQVVMVCIsIklTX1NFVCIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0TWV0aG9kIiwia2luZCIsIkRFRl9WQUxVRVMiLCJWQUxVRVNfQlVHIiwiJG5hdGl2ZSIsIiRkZWZhdWx0IiwiJGVudHJpZXMiLCIkYW55TmF0aXZlIiwiZGVzY3JpcHRvciIsInNlYXJjaFN0cmluZyIsIiRkZWZpbmVQcm9wZXJ0eSIsImdldEl0ZXJhdG9yTWV0aG9kIiwib3JpZ2luYWwiLCJlbmRQb3MiLCJhZGRUb1Vuc2NvcGFibGVzIiwiaXRlcmF0ZWQiLCJfaSIsIl9rIiwiQXJndW1lbnRzIiwicmUxIiwicmUyIiwicmVnZXhwRmxhZ3MiLCJuYXRpdmVFeGVjIiwibmF0aXZlUmVwbGFjZSIsInBhdGNoZWRFeGVjIiwiVVBEQVRFU19MQVNUX0lOREVYX1dST05HIiwiTlBDR19JTkNMVURFRCIsImxhc3RJbmRleCIsInJlQ29weSIsImF0IiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsImludm9rZSIsImh0bWwiLCJjZWwiLCJwcm9jZXNzIiwic2V0VGFzayIsInNldEltbWVkaWF0ZSIsImNsZWFyVGFzayIsImNsZWFySW1tZWRpYXRlIiwiTWVzc2FnZUNoYW5uZWwiLCJEaXNwYXRjaCIsImNvdW50ZXIiLCJxdWV1ZSIsInJ1biIsImxpc3RlbmVyIiwiZXZlbnQiLCJhcmdzIiwibmV4dFRpY2siLCJub3ciLCJwb3J0MiIsInBvcnQxIiwib25tZXNzYWdlIiwicG9zdE1lc3NhZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwiaW1wb3J0U2NyaXB0cyIsInJlbW92ZUNoaWxkIiwic2V0VGltZW91dCIsIm1hY3JvdGFzayIsIk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJQcm9taXNlIiwiaXNOb2RlIiwiaGVhZCIsImxhc3QiLCJub3RpZnkiLCJmbHVzaCIsInBhcmVudCIsImRvbWFpbiIsImV4aXQiLCJlbnRlciIsInN0YW5kYWxvbmUiLCJyZXNvbHZlIiwicHJvbWlzZSIsInRoZW4iLCJ0b2dnbGUiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwidGFzayIsIlByb21pc2VDYXBhYmlsaXR5IiwicmVqZWN0IiwiJCRyZXNvbHZlIiwiJCRyZWplY3QiLCJCYXNlQnVmZmVyIiwiYWJzIiwicG93IiwibG9nIiwiTE4yIiwiJEJVRkZFUiIsIiRMRU5HVEgiLCIkT0ZGU0VUIiwicGFja0lFRUU3NTQiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsInJ0IiwidW5wYWNrSUVFRTc1NCIsIm5CaXRzIiwiTmFOIiwidW5wYWNrSTMyIiwiYnl0ZXMiLCJwYWNrSTgiLCJwYWNrSTE2IiwicGFja0kzMiIsInBhY2tGNjQiLCJwYWNrRjMyIiwidmlldyIsImlzTGl0dGxlRW5kaWFuIiwiaW50SW5kZXgiLCJfYiIsInBhY2siLCJjb252ZXJzaW9uIiwiQXJyYXlCdWZmZXJQcm90byIsImoiLCIkc2V0SW50OCIsInNldEludDgiLCJnZXRJbnQ4Iiwic2V0VWludDgiLCJidWZmZXJMZW5ndGgiLCJnZXRVaW50OCIsImdldEludDE2IiwiZ2V0VWludDE2IiwiZ2V0SW50MzIiLCJnZXRVaW50MzIiLCJnZXRGbG9hdDMyIiwiZ2V0RmxvYXQ2NCIsInNldEludDE2Iiwic2V0VWludDE2Iiwic2V0SW50MzIiLCJzZXRVaW50MzIiLCJzZXRGbG9hdDMyIiwic2V0RmxvYXQ2NCIsInV0aWxzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInRvSVNPU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc2htYXJrSW5kZXgiLCJlbmhhbmNlRXJyb3IiLCJtZXNzYWdlIiwiY29uZmlnIiwiY29kZSIsInJlcXVlc3QiLCJiczU4IiwiY3MiLCJuYW1lcyIsImNvZGVzIiwiZGVmYXVsdExlbmd0aHMiLCJ2YXJpbnQiLCJ0b0hleFN0cmluZyIsImZyb21IZXhTdHJpbmciLCJ0b0I1OFN0cmluZyIsImZyb21CNThTdHJpbmciLCJlbmNvZGVkIiwiYnVmIiwiaXNWYWxpZENvZGUiLCJkaWdlc3QiLCJoYXNoZm4iLCJjb2VyY2VDb2RlIiwiaXNBcHBDb2RlIiwicHJlZml4IiwiUHJvdG9jb2xzIiwiViIsInNpemUiLCJyZXNvbHZhYmxlIiwiQm9vbGVhbiIsImxlbmd0aFByZWZpeGVkVmFyU2l6ZSIsInRhYmxlIiwicm93IiwibWgiLCJtdWx0aWNvZGVjIiwiY29kZWNzIiwiQ0lEVXRpbCIsImNvZGVjIiwibXVsdGliYXNlTmFtZSIsIl9DSUQiLCJiYXNlTmFtZSIsInBhcnNlSW50IiwiZ2V0Q29kZWMiLCJybVByZWZpeCIsInZhbGlkYXRlQ0lEIiwiZmlyc3RCeXRlIiwiX2J1ZmZlciIsImdldENvZGVWYXJpbnQiLCJiYXNlIiwidG9CYXNlRW5jb2RlZFN0cmluZyIsIm90aGVyIiwiZXF1YWxzIiwiZXJyb3JNc2ciLCJjaGVja0NJRENvbXBvbmVudHMiLCJ3aXRoSXMiLCJjbGFzc05hbWUiLCJzeW1ib2xOYW1lIiwiZnMiLCJyZWFkZGlyciIsImRwYXRoIiwiZGlycyIsImZpbGVzIiwibG9vcCIsInJlYWRkaXIiLCJlcnIiLCJfZmlsZXMiLCJmcGF0aCIsInN0YXRzIiwiaXNEaXJlY3RvcnkiLCJnZXRzdGF0Iiwicm1kaXJyIiwicm1maWxlcyIsInJtZGlycyIsInVubGluayIsInJtZGlyIiwiY3BkaXJyIiwic3BhdGgiLCJ0cGF0aCIsImNwZGlycyIsImNwZmlsZXMiLCJycGF0aCIsInJlbGF0aXZlIiwiZXhpc3RzIiwibWtkaXIiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImdldEtleXMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid2luZG93TmFtZXMiLCJnZXRXaW5kb3dOYW1lcyIsImdPUFMiLCIkYXNzaWduIiwiYXNzaWduIiwiayIsImdldFN5bWJvbHMiLCJpc0VudW0iLCJ5IiwiZmFjdG9yaWVzIiwiY29uc3RydWN0IiwicGFydEFyZ3MiLCJib3VuZCIsInVuIiwiJHBhcnNlSW50IiwiJHRyaW0iLCJ3cyIsImhleCIsInJhZGl4IiwiJHBhcnNlRmxvYXQiLCJwYXJzZUZsb2F0IiwibXNnIiwiaXNGaW5pdGUiLCJsb2cxcCIsIkVQU0lMT04iLCJFUFNJTE9OMzIiLCJNQVgzMiIsIk1JTjMyIiwiZnJvdW5kIiwiJGFicyIsIiRzaWduIiwicmV0IiwibWVtbyIsImlzUmlnaHQiLCJ0byIsImluYyIsImZvcmNlZCIsImZsYWdzIiwibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCJwcm9taXNlQ2FwYWJpbGl0eSIsInN0cm9uZyIsImVudHJ5IiwiZ2V0RW50cnkiLCIkaXRlckRlZmluZSIsIlNJWkUiLCJfZiIsIl9sIiwicHJldiIsImFkZCIsIkludGVybmFsTWFwIiwiZWFjaCIsIndlYWsiLCJOQVRJVkVfV0VBS19NQVAiLCJJU19JRTExIiwiQWN0aXZlWE9iamVjdCIsInVuY2F1Z2h0RnJvemVuU3RvcmUiLCJ1ZnN0b3JlIiwiJFdlYWtNYXAiLCIkaGFzIiwiVW5jYXVnaHRGcm96ZW5TdG9yZSIsImZpbmRVbmNhdWdodEZyb3plbiIsInNwbGljZSIsIm51bWJlciIsIlJlZmxlY3QiLCJvd25LZXlzIiwiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCJmbGF0dGVuSW50b0FycmF5Iiwic291cmNlTGVuIiwiZGVwdGgiLCJtYXBwZXIiLCJlbGVtZW50Iiwic3ByZWFkYWJsZSIsInRhcmdldEluZGV4Iiwic291cmNlSW5kZXgiLCJyZXBlYXQiLCJtYXhMZW5ndGgiLCJmaWxsU3RyaW5nIiwibGVmdCIsInN0cmluZ0xlbmd0aCIsImZpbGxTdHIiLCJpbnRNYXhMZW5ndGgiLCJmaWxsTGVuIiwic3RyaW5nRmlsbGVyIiwiaXNFbnRyaWVzIiwic2NhbGUiLCJpbkxvdyIsImluSGlnaCIsIm91dExvdyIsIm91dEhpZ2giLCJfX0NBTkNFTF9fIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsIlhNTEh0dHBSZXF1ZXN0IiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyc2UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJzdGF0dXMiLCJjcmVhdGVFcnJvciIsImlzQXhpb3NFcnJvciIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiVVJMIiwiaHR0cCIsImh0dHBzIiwiV3JpdGFibGUiLCJhc3NlcnQiLCJkZWJ1ZyIsImV2ZW50SGFuZGxlcnMiLCJhcmcxIiwiYXJnMyIsIl9yZWRpcmVjdGFibGUiLCJlbWl0IiwiUmVkaXJlY3Rpb25FcnJvciIsImNyZWF0ZUVycm9yVHlwZSIsIlRvb01hbnlSZWRpcmVjdHNFcnJvciIsIk1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yIiwiV3JpdGVBZnRlckVuZEVycm9yIiwiUmVkaXJlY3RhYmxlUmVxdWVzdCIsInJlc3BvbnNlQ2FsbGJhY2siLCJfc2FuaXRpemVPcHRpb25zIiwiX29wdGlvbnMiLCJfZW5kZWQiLCJfZW5kaW5nIiwiX3JlZGlyZWN0Q291bnQiLCJfcmVkaXJlY3RzIiwiX3JlcXVlc3RCb2R5TGVuZ3RoIiwiX3JlcXVlc3RCb2R5QnVmZmVycyIsIm9uIiwiX29uTmF0aXZlUmVzcG9uc2UiLCJfcHJvY2Vzc1Jlc3BvbnNlIiwiX3BlcmZvcm1SZXF1ZXN0Iiwic3RhcnRUaW1lciIsIm1zZWNzIiwiY2xlYXJUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVyIiwid3JhcCIsInByb3RvY29scyIsIm1heFJlZGlyZWN0cyIsIm5hdGl2ZVByb3RvY29scyIsInNjaGVtZSIsInByb3RvY29sIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJjYWxsYmFjayIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0IiwiaG9zdG5hbWUiLCJzdGFydHNXaXRoIiwic2VhcmNoIiwicGF0aG5hbWUiLCJocmVmIiwicmVtb3ZlTWF0Y2hpbmdIZWFkZXJzIiwicmVnZXgiLCJsYXN0VmFsdWUiLCJoZWFkZXIiLCJkZWZhdWx0TWVzc2FnZSIsIkN1c3RvbUVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJlbmNvZGluZyIsIl9jdXJyZW50UmVxdWVzdCIsImFib3J0IiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJvbmNlIiwic29ja2V0IiwiaG9zdCIsInNlYXJjaFBvcyIsInN1YnN0cmluZyIsImFnZW50cyIsInN1YnN0ciIsImFnZW50IiwiX2N1cnJlbnRVcmwiLCJmb3JtYXQiLCJfaXNSZWRpcmVjdCIsImJ1ZmZlcnMiLCJ3cml0ZU5leHQiLCJmaW5pc2hlZCIsInN0YXR1c0NvZGUiLCJ0cmFja1JlZGlyZWN0cyIsImxvY2F0aW9uIiwiZm9sbG93UmVkaXJlY3RzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZGVzdHJveSIsInByZXZpb3VzSG9zdE5hbWUiLCJyZWRpcmVjdFVybCIsInJlZGlyZWN0VXJsUGFydHMiLCJiZWZvcmVSZWRpcmVjdCIsInJlc3BvbnNlRGV0YWlscyIsImNhdXNlIiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdHMiLCJlbnYiLCJjcmVhdGVEZWJ1ZyIsIm5hbWVzcGFjZSIsInByZXZUaW1lIiwiZW5hYmxlT3ZlcnJpZGUiLCJlbmFibGVkIiwiY3VyciIsIkRhdGUiLCJtcyIsImRpZmYiLCJjb2VyY2UiLCJ1bnNoaWZ0IiwiZm9ybWF0dGVyIiwiZm9ybWF0dGVycyIsImZvcm1hdEFyZ3MiLCJ1c2VDb2xvcnMiLCJjb2xvciIsInNlbGVjdENvbG9yIiwiaW5pdCIsImRlbGltaXRlciIsIm5ld0RlYnVnIiwidG9OYW1lc3BhY2UiLCJkZWZhdWx0IiwiZGlzYWJsZSIsIm5hbWVzcGFjZXMiLCJza2lwcyIsImVuYWJsZSIsInNhdmUiLCJodW1hbml6ZSIsImNvbnNvbGUiLCJ3YXJuIiwiY29sb3JzIiwibG9hZCIsImNvbmZpZzEiLCJjb25maWcyIiwidmFsdWVGcm9tQ29uZmlnMktleXMiLCJtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyIsImRlZmF1bHRUb0NvbmZpZzJLZXlzIiwiZGlyZWN0TWVyZ2VLZXlzIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsImF4aW9zS2V5cyIsIm90aGVyS2V5cyIsIkNhbmNlbCIsIl9CdWZmZXIiLCJBTFBIQUJFVCIsIkJBU0VfTUFQIiwieGMiLCJCQVNFIiwiTEVBREVSIiwiRkFDVE9SIiwiaUZBQ1RPUiIsImRlY29kZVVuc2FmZSIsImFsbG9jIiwicHN6IiwiemVyb2VzIiwiYjI1NiIsImNhcnJ5IiwiaXQzIiwiaXQ0IiwidmNoIiwiYWxsb2NVbnNhZmUiLCJwYmVnaW4iLCJwZW5kIiwiYjU4IiwiaXQxIiwiaXQyIiwiY29uc3RhbnRzIiwibmFtZU9yQ29kZSIsImdldEJhc2UiLCJidWZPclN0cmluZyIsImZyZWV6ZSIsImVyck5vdFN1cHBvcnRlZCIsImNvZGVCdWYiLCJ2YWxpZEVuY29kZSIsImlzSW1wbGVtZW50ZWQiLCJpbnNwZWN0IiwiZm9yIiwiYWRkciIsImZyb21CdWZmZXIiLCJmcm9tU3RyaW5nIiwicHJvdG9zIiwicHJvdG9Db2RlcyIsImJ1ZmZlclRvU3RyaW5nIiwidG9PcHRpb25zIiwib3B0cyIsInBhcnNlZCIsImZhbWlseSIsInRyYW5zcG9ydCIsInNpemVGb3JBZGRyIiwicHJvdG9OYW1lcyIsInR1cGxlcyIsImJ1ZmZlclRvVHVwbGVzIiwic3RyaW5nVHVwbGVzIiwidHVwbGVzVG9TdHJpbmdUdXBsZXMiLCJlbmNhcHN1bGF0ZSIsImRlY2Fwc3VsYXRlIiwiZGVjYXBzdWxhdGVDb2RlIiwidHVwbGVzVG9CdWZmZXIiLCJnZXRQZWVySWQiLCJiNThzdHIiLCJ0dXBsZSIsImlwZnMiLCJwb3AiLCJnZXRQYXRoIiwibm9kZUFkZHJlc3MiLCJhZGRyZXNzIiwiZnJvbU5vZGVBZGRyZXNzIiwiaXAiLCJpc1RoaW5XYWlzdEFkZHJlc3MiLCJpc05hbWUiLCJidWZmZXJUb051bWJlciIsIm51bWJlclRvQnVmZmVyIiwibnVtIiwiaGV4U3RyaW5nIiwidmFyaW50QnVmZmVyRW5jb2RlIiwidmFyaW50QnVmZmVyRGVjb2RlIiwidmFyaW50RW5jb2RlIiwiQ2xhc3MiLCJzeW1ib2wiLCJDbGFzc0lzV3JhcHBlciIsInN1cGVyIiwid2l0aG91dE5ldyIsIl90aGlzIiwiQ29tYmluZWRTdHJlYW0iLCJ1dGlsIiwicGFyc2VVcmwiLCJtaW1lIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsIm9wdGlvbiIsIl9vdmVyaGVhZExlbmd0aCIsIl92YWx1ZUxlbmd0aCIsIl92YWx1ZXNUb01lYXN1cmUiLCJpbmhlcml0cyIsIkxJTkVfQlJFQUsiLCJhcHBlbmQiLCJmaWVsZCIsImZpbGVuYW1lIiwiX2Vycm9yIiwiX211bHRpUGFydEhlYWRlciIsImZvb3RlciIsIl9tdWx0aVBhcnRGb290ZXIiLCJfdHJhY2tMZW5ndGgiLCJ2YWx1ZUxlbmd0aCIsImtub3duTGVuZ3RoIiwicmVhZGFibGUiLCJfbGVuZ3RoUmV0cmlldmVyIiwiZmlsZVNpemUiLCJwYXVzZSIsInJlc3VtZSIsImNvbnRlbnREaXNwb3NpdGlvbiIsIl9nZXRDb250ZW50RGlzcG9zaXRpb24iLCJjb250ZW50VHlwZSIsIl9nZXRDb250ZW50VHlwZSIsImNvbnRlbnRzIiwiZ2V0Qm91bmRhcnkiLCJmaWxlcGF0aCIsIm5vcm1hbGl6ZSIsImJhc2VuYW1lIiwiY2xpZW50IiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwiX3N0cmVhbXMiLCJfbGFzdEJvdW5kYXJ5IiwiZ2V0SGVhZGVycyIsInVzZXJIZWFkZXJzIiwiZm9ybUhlYWRlcnMiLCJfYm91bmRhcnkiLCJfZ2VuZXJhdGVCb3VuZGFyeSIsImdldEJ1ZmZlciIsImRhdGFCdWZmZXIiLCJib3VuZGFyeSIsImdldExlbmd0aFN5bmMiLCJoYXNLbm93bkxlbmd0aCIsImdldExlbmd0aCIsInBhcmFsbGVsIiwic3VibWl0IiwiYXN5bmMiLCJzdGF0ZSIsImpvYnMiLCJpdGVtIiwiYWJvcnRlciIsInJ1bkpvYiIsIm91dHB1dCIsInJlc3VsdHMiLCJpc0FzeW5jIiwiY2xlYW4iLCJzb3J0TWV0aG9kIiwiaXNOYW1lZExpc3QiLCJpbml0U3RhdGUiLCJrZXllZExpc3QiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJfYmFiZWxQb2x5ZmlsbCIsInBhZFN0YXJ0IiwicGFkRW5kIiwiJGZhaWxzIiwid2tzRGVmaW5lIiwiZW51bUtleXMiLCJfY3JlYXRlIiwiZ09QTkV4dCIsIiRHT1BTIiwiJEpTT04iLCJfc3RyaW5naWZ5IiwiSElEREVOIiwiVE9fUFJJTUlUSVZFIiwiU3ltYm9sUmVnaXN0cnkiLCJBbGxTeW1ib2xzIiwiT1BTeW1ib2xzIiwiVVNFX05BVElWRSIsIlFPYmplY3QiLCJmaW5kQ2hpbGQiLCJzZXRTeW1ib2xEZXNjIiwicHJvdG9EZXNjIiwic3ltIiwiaXNTeW1ib2wiLCIkZGVmaW5lUHJvcGVydGllcyIsIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiJGdldE93blByb3BlcnR5TmFtZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiSVNfT1AiLCJlczZTeW1ib2xzIiwid2VsbEtub3duU3ltYm9scyIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCJyZXBsYWNlciIsIiRyZXBsYWNlciIsInN5bWJvbHMiLCIkZ2V0UHJvdG90eXBlT2YiLCIkZnJlZXplIiwiJHNlYWwiLCIkcHJldmVudEV4dGVuc2lvbnMiLCIkaXNGcm96ZW4iLCIkaXNTZWFsZWQiLCIkaXNFeHRlbnNpYmxlIiwiRlByb3RvIiwibmFtZVJFIiwiSEFTX0lOU1RBTkNFIiwiRnVuY3Rpb25Qcm90byIsIiROdW1iZXIiLCJCUk9LRU5fQ09GIiwiVFJJTSIsInRvTnVtYmVyIiwiYXJndW1lbnQiLCJ0aGlyZCIsIm1heENvZGUiLCJmaXJzdCIsImRpZ2l0cyIsImFOdW1iZXJWYWx1ZSIsIiR0b0ZpeGVkIiwidG9GaXhlZCIsIkVSUk9SIiwibXVsdGlwbHkiLCJjMiIsImRpdmlkZSIsIm51bVRvU3RyaW5nIiwiYWNjIiwiZnJhY3Rpb25EaWdpdHMiLCJ6IiwieDIiLCIkdG9QcmVjaXNpb24iLCJ0b1ByZWNpc2lvbiIsInByZWNpc2lvbiIsIl9pc0Zpbml0ZSIsImlzU2FmZUludGVnZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUlOX1NBRkVfSU5URUdFUiIsInNxcnQiLCIkYWNvc2giLCJhY29zaCIsIk1BWF9WQUxVRSIsIiRhc2luaCIsImFzaW5oIiwiJGF0YW5oIiwiYXRhbmgiLCJjYnJ0IiwiY2x6MzIiLCJMT0cyRSIsImNvc2giLCJoeXBvdCIsInZhbHVlMSIsInZhbHVlMiIsImRpdiIsInN1bSIsImxhcmciLCIkaW11bCIsImltdWwiLCJ4biIsInluIiwieGwiLCJ5bCIsImxvZzEwIiwiTE9HMTBFIiwibG9nMiIsInNpbmgiLCJ0YW5oIiwidHJ1bmMiLCJmcm9tQ2hhckNvZGUiLCIkZnJvbUNvZGVQb2ludCIsImZyb21Db2RlUG9pbnQiLCJyYXciLCJjYWxsU2l0ZSIsInRwbCIsIiRhdCIsInBvaW50IiwiY29kZVBvaW50QXQiLCJjb250ZXh0IiwiJGVuZHNXaXRoIiwiZW5kc1dpdGgiLCJlbmRQb3NpdGlvbiIsIiRzdGFydHNXaXRoIiwiZ2V0VGltZSIsInB2IiwiJHRvSVNPU3RyaW5nIiwibHoiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJEYXRlUHJvdG8iLCJoaW50IiwiY3JlYXRlUHJvcGVydHkiLCJ1cFRvIiwiY2xvbmVkIiwiJHNvcnQiLCIkZm9yRWFjaCIsIlNUUklDVCIsIiRmaWx0ZXIiLCIkc29tZSIsIiRldmVyeSIsIiRyZWR1Y2UiLCIkaW5kZXhPZiIsIk5FR0FUSVZFX1pFUk8iLCIkZmluZCIsIiRmbGFncyIsIiRSZWdFeHAiLCJDT1JSRUNUX05FVyIsInRpUkUiLCJwaVJFIiwiZmlVIiwicHJveHkiLCJhZHZhbmNlU3RyaW5nSW5kZXgiLCJyZWdFeHBFeGVjIiwiJG1hdGNoIiwibWF5YmVDYWxsTmF0aXZlIiwicngiLCJmdWxsVW5pY29kZSIsIm1hdGNoU3RyIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFMiLCJTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCIsIlJFUExBQ0UiLCIkcmVwbGFjZSIsInNlYXJjaFZhbHVlIiwicmVwbGFjZVZhbHVlIiwiZnVuY3Rpb25hbFJlcGxhY2UiLCJhY2N1bXVsYXRlZFJlc3VsdCIsIm5leHRTb3VyY2VQb3NpdGlvbiIsIm1hdGNoZWQiLCJwb3NpdGlvbiIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInJlcGxhY2VyQXJncyIsInJlcGxhY2VtZW50IiwiZ2V0U3Vic3RpdHV0aW9uIiwidGFpbFBvcyIsImNoIiwiY2FwdHVyZSIsInNhbWVWYWx1ZSIsIlNFQVJDSCIsIiRzZWFyY2giLCJwcmV2aW91c0xhc3RJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiJG1pbiIsIiRwdXNoIiwiU1VQUE9SVFNfWSIsIlNQTElUIiwiJHNwbGl0IiwiaW50ZXJuYWxTcGxpdCIsImxpbWl0IiwibGFzdExlbmd0aCIsImxhc3RMYXN0SW5kZXgiLCJzcGxpdExpbWl0Iiwic2VwYXJhdG9yQ29weSIsInNwbGl0dGVyIiwidW5pY29kZU1hdGNoaW5nIiwibGltIiwicSIsIkludGVybmFsIiwibmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5IiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJXcmFwcGVyIiwibWljcm90YXNrIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwicHJvbWlzZVJlc29sdmUiLCJ2ZXJzaW9ucyIsInY4IiwiJFByb21pc2UiLCJlbXB0eSIsIkZha2VQcm9taXNlIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiaXNUaGVuYWJsZSIsImlzUmVqZWN0IiwiX24iLCJjaGFpbiIsIl9jIiwiX3YiLCJvayIsIl9zIiwicmVhY3Rpb24iLCJleGl0ZWQiLCJoYW5kbGVyIiwiZmFpbCIsIl9oIiwib25IYW5kbGVVbmhhbmRsZWQiLCJvblVuaGFuZGxlZCIsInVuaGFuZGxlZCIsImlzVW5oYW5kbGVkIiwib251bmhhbmRsZWRyZWplY3Rpb24iLCJyZWFzb24iLCJfYSIsIm9ucmVqZWN0aW9uaGFuZGxlZCIsIiRyZWplY3QiLCJfdyIsIiRyZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYXBhYmlsaXR5IiwiYWxsIiwicmVtYWluaW5nIiwiJGluZGV4IiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCIkaXNWaWV3IiwiZmluIiwidmlld1MiLCJ2aWV3VCIsInJBcHBseSIsImZBcHBseSIsInRoaXNBcmd1bWVudCIsImFyZ3VtZW50c0xpc3QiLCJMIiwickNvbnN0cnVjdCIsIk5FV19UQVJHRVRfQlVHIiwiQVJHU19CVUciLCJUYXJnZXQiLCJuZXdUYXJnZXQiLCIkYXJncyIsInByb3BlcnR5S2V5IiwiYXR0cmlidXRlcyIsImRlbGV0ZVByb3BlcnR5IiwiRW51bWVyYXRlIiwiZW51bWVyYXRlIiwicmVjZWl2ZXIiLCJnZXRQcm90byIsImV4aXN0aW5nRGVzY3JpcHRvciIsIm93bkRlc2MiLCJzZXRQcm90byIsIiRpbmNsdWRlcyIsImFycmF5U3BlY2llc0NyZWF0ZSIsImZsYXRNYXAiLCJmbGF0dGVuIiwiZGVwdGhBcmciLCIkcGFkIiwiV0VCS0lUX0JVRyIsImdldEZsYWdzIiwiUmVnRXhwUHJvdG8iLCIkUmVnRXhwU3RyaW5nSXRlcmF0b3IiLCJfciIsIm1hdGNoQWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImdldERlc2MiLCIkdmFsdWVzIiwiX19kZWZpbmVHZXR0ZXJfXyIsIl9fbG9va3VwR2V0dGVyX18iLCJfX2xvb2t1cFNldHRlcl9fIiwiaXNFcnJvciIsImNsYW1wIiwibG93ZXIiLCJ1cHBlciIsIkRFR19QRVJfUkFEIiwiUEkiLCJSQURfUEVSX0RFRyIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiZnNjYWxlIiwiaWFkZGgiLCJ4MCIsIngxIiwieTAiLCJ5MSIsIiR4MCIsIiR5MCIsImlzdWJoIiwiaW11bGgiLCJ1IiwiJHUiLCIkdiIsInUwIiwidjAiLCJ1MSIsInYxIiwidW11bGgiLCJzaWduYml0Iiwib25GaW5hbGx5IiwidG9NZXRhS2V5Iiwib3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSIsImRlZmluZU1ldGFkYXRhIiwibWV0YWRhdGFLZXkiLCJtZXRhZGF0YVZhbHVlIiwiZGVsZXRlTWV0YWRhdGEiLCJvcmRpbmFyeUhhc093bk1ldGFkYXRhIiwib3JkaW5hcnlHZXRPd25NZXRhZGF0YSIsIm9yZGluYXJ5R2V0TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsIlNldCIsIm9yZGluYXJ5T3duTWV0YWRhdGFLZXlzIiwib3JkaW5hcnlNZXRhZGF0YUtleXMiLCJvS2V5cyIsInBLZXlzIiwiZ2V0TWV0YWRhdGFLZXlzIiwiZ2V0T3duTWV0YWRhdGEiLCJnZXRPd25NZXRhZGF0YUtleXMiLCJvcmRpbmFyeUhhc01ldGFkYXRhIiwiaGFzTWV0YWRhdGEiLCJoYXNPd25NZXRhZGF0YSIsIiRtZXRhZGF0YSIsImFzYXAiLCJPQlNFUlZBQkxFIiwiY2xlYW51cFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbiIsImNsZWFudXAiLCJzdWJzY3JpcHRpb25DbG9zZWQiLCJfbyIsImNsb3NlU3Vic2NyaXB0aW9uIiwiU3Vic2NyaXB0aW9uIiwib2JzZXJ2ZXIiLCJzdWJzY3JpYmVyIiwiU3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJ1bnN1YnNjcmliZSIsImNvbXBsZXRlIiwiJE9ic2VydmFibGUiLCJzdWJzY3JpYmUiLCJvYnNlcnZhYmxlIiwiaXRlbXMiLCJPYnNlcnZhYmxlIiwiTVNJRSIsInRpbWUiLCJib3VuZEFyZ3MiLCJzZXRJbnRlcnZhbCIsIiR0YXNrIiwiVE9fU1RSSU5HX1RBRyIsIkFycmF5VmFsdWVzIiwiRE9NSXRlcmFibGVzIiwiQ1NTUnVsZUxpc3QiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwiQ1NTVmFsdWVMaXN0IiwiQ2xpZW50UmVjdExpc3QiLCJET01SZWN0TGlzdCIsIkRPTVN0cmluZ0xpc3QiLCJET01Ub2tlbkxpc3QiLCJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsIkZpbGVMaXN0IiwiSFRNTEFsbENvbGxlY3Rpb24iLCJIVE1MQ29sbGVjdGlvbiIsIkhUTUxGb3JtRWxlbWVudCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiTWVkaWFMaXN0IiwiTWltZVR5cGVBcnJheSIsIk5hbWVkTm9kZU1hcCIsIk5vZGVMaXN0IiwiUGFpbnRSZXF1ZXN0TGlzdCIsIlBsdWdpbiIsIlBsdWdpbkFycmF5IiwiU1ZHTGVuZ3RoTGlzdCIsIlNWR051bWJlckxpc3QiLCJTVkdQYXRoU2VnTGlzdCIsIlNWR1BvaW50TGlzdCIsIlNWR1N0cmluZ0xpc3QiLCJTVkdUcmFuc2Zvcm1MaXN0IiwiU291cmNlQnVmZmVyTGlzdCIsIlN0eWxlU2hlZXRMaXN0IiwiVGV4dFRyYWNrQ3VlTGlzdCIsIlRleHRUcmFja0xpc3QiLCJUb3VjaExpc3QiLCJjb2xsZWN0aW9ucyIsImV4cGxpY2l0IiwiQ29sbGVjdGlvbiIsIk9wIiwiaGFzT3duIiwiaXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwiaW5Nb2R1bGUiLCJydW50aW1lIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiQ29udGludWVTZW50aW5lbCIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwiR3AiLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkdlbmVyYXRvciIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJhd3JhcCIsIl9fYXdhaXQiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJBc3luY0l0ZXJhdG9yIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsIkNvbnRleHQiLCJyZXNldCIsInNraXBUZW1wUmVzZXQiLCJzZW50IiwiX3NlbnQiLCJkZWxlZ2F0ZSIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5Iiwic3RvcCIsInJvb3RSZWNvcmQiLCJjb21wbGV0aW9uIiwicnZhbCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwicmVjb3JkIiwidHJ5TG9jIiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWJydXB0IiwiZmluYWxseUVudHJ5IiwiYWZ0ZXJMb2MiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwcm90b0dlbmVyYXRvciIsImdlbmVyYXRvciIsIl9pbnZva2UiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwidHJ5Q2F0Y2giLCJtYWtlSW52b2tlTWV0aG9kIiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXR1cm4iLCJpbmZvIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsIml0ZXJhdG9yTWV0aG9kIiwiZXNjYXBlIiwiJHJlIiwicmVnRXhwIiwicGFydCIsInBpbkJ5SGFzaCIsImhhc2hUb1BpbiIsImhhc2hNZXRhZGF0YSIsImlwZnNQaW5IYXNoIiwiaGFzaFBpblBvbGljeSIsIm5ld1BpblBvbGljeSIsInBpbkZpbGVUb0lQRlMiLCJyZWFkYWJsZVN0cmVhbSIsInBpbkZyb21GUyIsInNvdXJjZVBhdGgiLCJwaW5KU09OVG9JUEZTIiwiYm9keSIsInBpbkpvYnMiLCJmaWx0ZXJzIiwidW5waW4iLCJoYXNoVG9VbnBpbiIsInVzZXJQaW5Qb2xpY3kiLCJ0ZXN0QXV0aGVudGljYXRpb24iLCJwaW5MaXN0IiwidXNlclBpbm5lZERhdGFUb3RhbCIsInZhbGlkYXRlQXBpS2V5cyIsImVuZHBvaW50IiwiYmFzZVVybCIsInBpbmF0YU9wdGlvbnMiLCJwaW5hdGFNZXRhZGF0YSIsInZhbGlkYXRlTWV0YWRhdGEiLCJheGlvcyIsInBvc3QiLCJ3aXRoQ3JlZGVudGlhbHMiLCJmb3JtYXR0ZWRFcnJvciIsImhhbmRsZUVycm9yIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsInByb21pc2VzIiwic3ByZWFkIiwiYnVpbGRVUkwiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJpbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic2hpZnQiLCJnZXRVcmkiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwiaCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwiY2FuY2VsVG9rZW4iLCJ0aHJvd0lmUmVxdWVzdGVkIiwibm9ybWFsaXplZE5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uYWJvcnQiLCJvbmVycm9yIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInhzcmZWYWx1ZSIsInJlYWQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsInNlbmQiLCJleHBpcmVzIiwic2VjdXJlIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJyZWxhdGl2ZVVSTCIsImlnbm9yZUR1cGxpY2F0ZU9mIiwibGluZSIsIm9yaWdpblVSTCIsIm1zaWUiLCJ1cmxQYXJzaW5nTm9kZSIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJyZXF1ZXN0VVJMIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwiemxpYiIsInBrZyIsImlzSHR0cHMiLCJyZXNvbHZlUHJvbWlzZSIsInJlamVjdFByb21pc2UiLCJ1cmxBdXRoIiwiaXNIdHRwc1JlcXVlc3QiLCJodHRwc0FnZW50IiwiaHR0cEFnZW50Iiwic29ja2V0UGF0aCIsInByb3h5RW52IiwicHJveHlVcmwiLCJwYXJzZWRQcm94eVVybCIsIm5vUHJveHlFbnYiLCJub19wcm94eSIsIk5PX1BST1hZIiwic2hvdWxkUHJveHkiLCJwcm94eUVsZW1lbnQiLCJwcm94eVVybEF1dGgiLCJzZXRQcm94eSIsImJhc2U2NCIsInJlZGlyZWN0aW9uIiwiaXNIdHRwc1Byb3h5IiwicmVxIiwiYWJvcnRlZCIsInN0cmVhbSIsImxhc3RSZXF1ZXN0IiwiZGVjb21wcmVzcyIsImNyZWF0ZVVuemlwIiwic3RhdHVzTWVzc2FnZSIsInJlc3BvbnNlQnVmZmVyIiwiY2h1bmsiLCJyZXNwb25zZURhdGEiLCJyZXNwb25zZUVuY29kaW5nIiwiYnJvd3NlciIsIl9fbndqcyIsImxhc3RDIiwic3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZ2V0SXRlbSIsIkRFQlVHIiwiV2Via2l0QXBwZWFyYW5jZSIsImZpcmVidWciLCIkMSIsImxvY2FsU3RvcmFnZSIsImxvY2Fsc3RvcmFnZSIsIndhcm5lZCIsInBsdXJhbCIsImxvbmciLCJmbXRTaG9ydCIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJnZXREYXRlIiwiaXNhdHR5IiwiZmQiLCJkZXByZWNhdGUiLCJzdXBwb3J0c0NvbG9yIiwibGV2ZWwiLCJvcyIsImhhc0ZsYWciLCJmb3JjZUNvbG9yIiwiZ2V0U3VwcG9ydExldmVsIiwiaGFzQmFzaWMiLCJoYXMyNTYiLCJoYXMxNm0iLCJ0cmFuc2xhdGVMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJyZWxlYXNlIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJGT1JDRV9DT0xPUiIsInN0ZG91dCIsImZsYWciLCJhcmd2IiwidGVybWluYXRvclBvcyIsInRva2VuIiwicGF5bG9hZCIsImNvcHlQcm9wcyIsImRzdCIsIlNhZmVCdWZmZXIiLCJlbmNvZGluZ09yT2Zmc2V0IiwiYWxsb2NVbnNhZmVTbG93IiwiU2xvd0J1ZmZlciIsIjAiLCJvbGRPZmZzZXQiLCJJTlQiLCJOMSIsIk4yIiwiTjMiLCJONCIsIk41IiwiTjYiLCJONyIsIk44IiwiTjkiLCJiYXNlWCIsImJhc2UxNiIsImJhc2UzMiIsInR1cHBsZSIsImltcGxlbWVudGF0aW9uIiwiYWxwaGFiZXQiLCJlbmdpbmUiLCJzdHJpbmdPckJ1ZmZlciIsImNoYXIiLCJwYWRkaW5nIiwiYml0cyIsInBhZCIsImNvbnZlcnQiLCJzdHJpbmdUb1N0cmluZ1R1cGxlcyIsIlBhcnNlRXJyb3IiLCJjbGVhblBhdGgiLCJzdHJpbmdUdXBsZXNUb1N0cmluZyIsInR1cCIsInByb3RvRnJvbVR1cGxlIiwic3RyaW5nVHVwbGVzVG9UdXBsZXMiLCJ0b0J1ZmZlciIsInN0cmluZ1RvQnVmZmVyIiwidmFsaWRhdGVCdWZmZXIiLCJpc1ZhbGlkQnVmZmVyIiwiaXNJcCIsIkNvbnZlcnQiLCJpcDJidWYiLCJpcFN0cmluZyIsInBvcnQyYnVmIiwid3JpdGVVSW50MTZCRSIsImJ1ZjJwb3J0IiwicmVhZFVJbnQxNkJFIiwiYnVmMm9uaW9uIiwiYWRkckJ5dGVzIiwicG9ydEJ5dGVzIiwiaXBCdWZmIiwiYnVmMmlwIiwiYnVmMnN0ciIsImJ1ZjJtaCIsInN0cjJidWYiLCJtaDJidWYiLCJhc0J5dGVzIiwicG9ydEJ1ZiIsIm9uaW9uMmJ1ZiIsIm9uaW9uMzJidWYiLCJidWZmIiwiaXNWNEZvcm1hdCIsImJ5dGUiLCJpc1Y2Rm9ybWF0Iiwic2VjdGlvbnMiLCJ2NEJ1ZmZlciIsIndvcmQiLCJpcHY0UmVnZXgiLCJpcHY2UmVnZXgiLCJfbm9ybWFsaXplRmFtaWx5IiwiZnJvbVByZWZpeExlbiIsInByZWZpeGxlbiIsIm1hc2siLCJjaWRyIiwiY2lkclN0cmluZyIsImNpZHJQYXJ0cyIsInN1Ym5ldCIsIm5ldHdvcmtBZGRyZXNzIiwidG9Mb25nIiwibWFza0J1ZmZlciIsIm1hc2tMZW5ndGgiLCJvY3RldCIsIm51bWJlck9mQWRkcmVzc2VzIiwiZnJvbUxvbmciLCJmaXJzdEFkZHJlc3MiLCJsYXN0QWRkcmVzcyIsImJyb2FkY2FzdEFkZHJlc3MiLCJzdWJuZXRNYXNrIiwic3VibmV0TWFza0xlbmd0aCIsIm51bUhvc3RzIiwiY29udGFpbnMiLCJjaWRyU3VibmV0Iiwibm90Iiwib3IiLCJpc0VxdWFsIiwiaXNQcml2YXRlIiwiaXNQdWJsaWMiLCJpc0xvb3BiYWNrIiwibG9vcGJhY2siLCJpbnRlcmZhY2VzIiwibmV0d29ya0ludGVyZmFjZXMiLCJkZXRhaWxzIiwibmljIiwiYWRkcmVzc2VzIiwiaXBsIiwiaXBSZWdleCIsImV4YWN0IiwidjQiLCJ2NiIsImluY2x1ZGVCb3VuZGFyaWVzIiwidjZzZWciLCJpbnRUYWJsZSIsImNvZGVjTmFtZVRvQ29kZVZhcmludCIsImFkZFByZWZpeCIsIm11bHRpY29kZWNTdHJPckNvZGUiLCJwcmVmaXhlZERhdGEiLCJjb2RlY05hbWUiLCJnZXROYW1lIiwiZ2V0TnVtYmVyIiwiZ2V0Q29kZSIsImdldFZhcmludCIsInByaW50IiwiYmFzZVRhYmxlIiwibmFtZVRhYmxlIiwiZW5jb2RpbmdOYW1lIiwidmFyaW50VGFibGUiLCJ0YWJsZUJ5Q29kZSIsIkhJX0JBU0UzMl9OT19OT0RFX0pTIiwiQ09NTU9OX0pTIiwiSElfQkFTRTMyX05PX0NPTU1PTl9KUyIsIkFNRCIsIkJBU0UzMl9FTkNPREVfQ0hBUiIsIkJBU0UzMl9ERUNPREVfQ0hBUiIsImJsb2NrcyIsInRocm93SW52YWxpZFV0ZjgiLCJwYXJ0aWFsIiwiZGVjb2RlQXNCeXRlcyIsImJhc2UzMlN0ciIsInYyIiwidjMiLCJ2NSIsInY3IiwicmVtYWluIiwiYXNjaWlPbmx5IiwiZm9sbG93aW5nQ2hhcnMiLCJ0b1V0ZjhTdHJpbmciLCJub3RTdHJpbmciLCJlbmNvZGVCeXRlcyIsImVuY29kZUFzY2lpIiwiZW5jb2RlVXRmOCIsIl9fd2VicGFja19hbWRfb3B0aW9uc19fIiwiRE5TNCIsIkROUzYiLCJETlMiLCJJUCIsIlRDUCIsImFuZCIsIlVEUCIsIlVUUCIsIldlYlNvY2tldHMiLCJXZWJTb2NrZXRzU2VjdXJlIiwiSFRUUCIsIkhUVFBTIiwiV2ViUlRDU3RhciIsIldlYlNvY2tldFN0YXIiLCJXZWJSVENEaXJlY3QiLCJSZWxpYWJsZSIsIlN0YXJkdXN0IiwiX1AyUCIsIl9DaXJjdWl0IiwiQ2lyY3VpdFJlY3Vyc2l2ZSIsIkNpcmN1aXQiLCJQMlAiLCJtYWtlTWF0Y2hlc0Z1bmN0aW9uIiwicGFydGlhbE1hdGNoIiwicG5hbWVzIiwicHV0IiwicmVhZFN0cmVhbSIsIk5vZGVGb3JtRGF0YSIsIlJlYWRhYmxlIiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiU3RyZWFtIiwiRGVsYXllZFN0cmVhbSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfY3VycmVudFN0cmVhbSIsIl9pbnNpZGVMb29wIiwiX3BlbmRpbmdOZXh0IiwiY29tYmluZWRTdHJlYW0iLCJpc1N0cmVhbUxpa2UiLCJuZXdTdHJlYW0iLCJwYXVzZVN0cmVhbSIsIl9jaGVja0RhdGFTaXplIiwiX2hhbmRsZUVycm9ycyIsImRlc3QiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsIl9waXBlTmV4dCIsIl9lbWl0RXJyb3IiLCJfcmVzZXQiLCJfdXBkYXRlRGF0YVNpemUiLCJfbWF4RGF0YVNpemVFeGNlZWRlZCIsIl9idWZmZXJlZEV2ZW50cyIsImRlbGF5ZWRTdHJlYW0iLCJyZWFsRW1pdCIsIl9oYW5kbGVFbWl0Iiwic2V0RW5jb2RpbmciLCJfY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQiLCJleHRlbnNpb25zIiwidHlwZXMiLCJwcmVmZXJlbmNlIiwiZGIiLCJleHRuYW1lIiwiRVhUUkFDVF9UWVBFX1JFR0VYUCIsIlRFWFRfVFlQRV9SRUdFWFAiLCJjaGFyc2V0IiwiY2hhcnNldHMiLCJleHRlbnNpb24iLCJleHRzIiwic2VyaWFsIiwic2VyaWFsT3JkZXJlZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZWN1cnNpdmUiLCJmaWxlIiwiZmlsZVBhdGgiLCJuZXdTdHJpbmciLCJsYXN0SW5kZXhPZkRpcmVjdG9yeSIsIm5ld0xhc3RJbmRleCIsInBhdGhHYXJiYWdlIiwicmVxdWVzdEJvZHkiLCJwaW5hdGFDb250ZW50IiwibmV3VXJsIiwiZmlyc3RGaWx0ZXJBcHBsaWVkIiwiYWRkRmlsdGVyIiwibmV3RmlsdGVyIiwiaXBmc19waW5faGFzaCIsImF1dGhlbnRpY2F0ZWQiLCJiYXNlRW5kcG9pbnQiLCJ2YWxpZGF0ZUFuZFJldHVybkRhdGUiLCJkYXRlVG9WYWxpZGF0ZSIsImRhdGVQYXJzZWQiLCJmaWx0ZXJRdWVyeSIsIm1ldGFkYXRhUXVlcnkiLCJoYXNoQ29udGFpbnMiLCJwaW5TdGFydCIsInBpbkVuZCIsInVucGluU3RhcnQiLCJ1bnBpbkVuZCIsInBpblNpemVNaW4iLCJwaW5TaXplTWF4IiwicGFnZUxpbWl0IiwicGFnZU9mZnNldCIsInBydW5lZEtleVZhbHVlcyIsIm9wIiwic2Vjb25kVmFsdWUiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxJQUNRLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sYUFBYyxHQUFJSCxHQUNDLGlCQUFaQyxRQUNkQSxRQUFRLGNBQWdCRCxJQUV4QkQsRUFBSyxjQUFnQkMsSUFSdkIsQ0FTbUIsb0JBQVRLLEtBQXVCQSxLQUFPQyxNQUFNLFdBQzlDLE8sWUNURSxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9B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LEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxJQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFR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ZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixZQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGFBQWMsTUFDZCxjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGFBQWMsTUFDZCxjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGNBQWUsTUFDZixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLEtBQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsaUJBQWtCLE1BQ2xCLGlCQUFrQixNQUNsQixpQkFBa0IsTUFDbEIsaUJBQWtCLFFBR3BCM2tDLEVBQVE4dEIsTUFBUTNzQixPQUFPd2pDLE9BQU8sQ0FDNUIweUIsRUFBSyxXQUdMLEdBQU0sT0FDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sZUFDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sV0FDTixHQUFNLFdBQ04sR0FBTSxZQUNOLEdBQU0sWUFDTixHQUFNLGFBQ04sR0FBTSxhQUNOLEdBQU0sYUFDTixHQUFNLGFBRU4sR0FBTSxjQUNOLEdBQU0sYUFHTixNQUFRLFlBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxZQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FHUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsYUFDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGNBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLEtBQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsaUJBQ1IsTUFBUSxpQkFDUixNQUFRLGlCQUNSLE1BQVEsbUJBR1ZyM0QsRUFBUSt0QixlQUFpQjVzQixPQUFPd2pDLE9BQU8sQ0FDckMsR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBRU4sTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFB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LE1BQU0sSUFBSXo4RCxNQUFKLHVCQUEwQjlJLEVBQU11bEUsR0FBaEMsZ0NBSWxCWCxHQUFnQyxHQUFILE9BQU1uNUMsS0FBS0MsVUFBVTQ1QyxNQUk5RCxnQkFBVWhiLEdBQVYsT0FBb0JxYSxHQUFwQixPQUFrQ0MsSSw2R0N2T3ZCLFNBQTZCaDhELEVBQWNDLElBQ3RELElBQUF1aEQsaUJBQWdCeGhELEVBQWNDLEdBRTlCLElBQUl3aEQsRUFBVyxHQUFILE9BQU1DLFVBQU4sNkJBRVosT0FBTyxJQUFJOWpDLFNBQVEsU0FBQ1csRUFBU1MsR0FDekI4aUMsVUFBTTlxRCxJQUNGeXFELEVBQ0EsQ0FDSU8saUJBQWlCLEVBQ2pCN3pCLFFBQVMsQ0FDTCxlQUFrQm51QixFQUNsQixzQkFBeUJDLEtBRTlCd2UsTUFBSyxTQUFVbGhCLEdBQ0ksTUFBbEJBLEVBQU95eEIsUUFDUGhRLEVBQU8sSUFBSTllLE1BQUosa0ZBQXFGM0MsS0FFaEdnaEIsRUFBUWhoQixFQUFPcUUsU0FabkIsT0FhUyxTQUFVRixHQUNmLElBQU11Z0QsR0FBaUIsSUFBQUMsYUFBWXhnRCxHQUNuQ3NkLEVBQU9pakMsVUFoQ25CLEksRUFBQSxHLEVBQUEsUSwyQkFDQSxRQUNBLFFBQ0EsUSIsImZpbGUiOiJwaW5hdGEtc2RrLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwicGluYXRhLXNka1wiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaW5hdGEtc2RrXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBpbmF0YS1zZGtcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE3Nyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLypnbG9iYWwgdG9TdHJpbmc6dHJ1ZSovXG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT01cbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsImV4cG9ydCBjb25zdCBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLnBpbmF0YS5jbG91ZCc7XG4iLCJpbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG4vKipcbiAqIFZhbGlkYXRlIEFQSSBLZXlzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICBpZiAoIXBpbmF0YUFwaUtleSB8fCBwaW5hdGFBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhQXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBhcGkga2V5IGFzIGFuIGFyZ3VtZW50IHdoZW4geW91IHN0YXJ0IHRoaXMgc2NyaXB0Jyk7XG4gICAgfVxuICAgIGlmICghcGluYXRhU2VjcmV0QXBpS2V5IHx8IHBpbmF0YVNlY3JldEFwaUtleSA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwaW5hdGFTZWNyZXRBcGlLZXkgcHJvdmlkZWQhIFBsZWFzZSBwcm92aWRlIHlvdXIgcGluYXRhIHNlY3JldCBhcGkga2V5IGFzIGFuIGFyZ3VtZW50IHdoZW4geW91IHN0YXJ0IHRoaXMgc2NyaXB0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGhvc3QgTm9kZXNcbiAqIEBwYXJhbSB7Kn0gaG9zdE5vZGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUhvc3ROb2Rlcyhob3N0Tm9kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaG9zdE5vZGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvc3Rfbm9kZXMgdmFsdWUgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBob3N0Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAoIWlzSVBGUy5wZWVyTXVsdGlhZGRyKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGhvc3Rfbm9kZSBhcnJheSBlbnRyeTogJHtub2RlfSBpcyBub3QgYSB2YWxpZCBwZWVyIG11bHRpYWRkcmApO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgTWV0YURhdGFcbiAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICBpZiAobWV0YWRhdGEubmFtZSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbWV0YWRhdGEubmFtZSA9PT0gJ3N0cmluZycgfHwgbWV0YWRhdGEubmFtZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgbmFtZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5rZXl2YWx1ZXMgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhdGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpID4gOSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9yZSB0aGFuIDEwIGtleXZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgZm9yIG1ldGFkYXRhIGVudHJpZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhIHN0cmluZywgYSBib29sZWFuLCBvciBhIG51bWJlciwgc28gd2UgZG9uJ3QgZ2V0IGFuIG9iamVjdCBwYXNzZWQgaW4gYnkgYWNjaWRlbnRcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiBrZXlWYWx1ZVsxXSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleVZhbHVlWzFdID09PSAnYm9vbGVhbicgfHwgIWlzTmFOKGtleVZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBQaW4gUG9saWN5IFN0cnVjdHVyZVxuICogQHBhcmFtIHsqfSBwaW5Qb2xpY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKHBpblBvbGljeSkge1xuICAgIC8vdGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIHBpbiBwb2xpY3kgYW5kIGNoZWNrcyB0aGUgSlNPTiBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWRcbiAgICBpZiAoIXBpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbiBwb2xpY3kgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXBpblBvbGljeS5yZWdpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaW9ucyBwcm92aWRlZCBpbiBwaW4gcG9saWN5Jyk7XG4gICAgfVxuICAgIGlmIChwaW5Qb2xpY3kucmVnaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcGluUG9saWN5LnJlZ2lvbnMuZm9yRWFjaCgocmVnaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlZ2lvbi5pZCB8fCAhKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZWdpb24uaWQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lvbiBpZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCB8fCByZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgPT09IDApIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc2lyZWRSZXBsaWNhdGlvbkNvdW50IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgUGluYXRhIE9wdGlvbnNcbiAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob3B0aW9ucy5jaWRWZXJzaW9uICE9IDAgJiYgb3B0aW9ucy5jaWRWZXJzaW9uICE9IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBjaWRWZXJzaW9uJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSAhPT0gdHJ1ZSAmJiBvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cmFwV2l0aERpcmVjdG9yeSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSBvZiB0cnVlIG9yIGZhbHNlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5ob3N0Tm9kZXMpIHtcbiAgICAgICAgdmFsaWRhdGVIb3N0Tm9kZXMob3B0aW9ucy5ob3N0Tm9kZXMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmN1c3RvbVBpblBvbGljeSkge1xuICAgICAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShvcHRpb25zLmN1c3RvbVBpblBvbGljeSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGhhbmRsZUVycm9yID0gKGVycm9yKSA9PiB7XG4gIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcjtcbiAgfSBlbHNlIGlmIChlcnJvci5kYXRhICYmIGVycm9yLmRhdGEuZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IuZGF0YS5lcnJvcjtcbiAgfSBlbHNlIGlmIChlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5lcnJvcikge1xuICAgIHJldHVybiBlcnJvci5yZXNwb25zZS5lcnJvcjtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTU4ID0gcmVxdWlyZSgnYnM1OCcpXG5jb25zdCBtdWx0aWhhc2ggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgTXVsdGlhZGRyID0gcmVxdWlyZSgnbXVsdGlhZGRyJylcbmNvbnN0IG1hZm10ID0gcmVxdWlyZSgnbWFmbXQnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5cbmNvbnN0IHVybFBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC9bXi9dK1xcLyhpcChmfG4pcylcXC8oKFxcdyspLiopL1xuY29uc3QgcGF0aFBhdHRlcm4gPSAvXlxcLyhpcChmfG4pcylcXC8oKFxcdyspLiopL1xuY29uc3QgZGVmYXVsdFByb3RvY29sTWF0Y2ggPSAxXG5jb25zdCBkZWZhdWx0SGFzaE1hdGggPSA0XG5cbmNvbnN0IGZxZG5QYXR0ZXJuID0gL15odHRwcz86XFwvXFwvKFteL10rKVxcLihpcCg/OmZ8bilzKVxcLlteL10rL1xuY29uc3QgZnFkbkhhc2hNYXRjaCA9IDFcbmNvbnN0IGZxZG5Qcm90b2NvbE1hdGNoID0gMlxuXG5mdW5jdGlvbiBpc011bHRpaGFzaCAoaGFzaCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaGFzaClcbiAgdHJ5IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNTguZGVjb2RlKGZvcm1hdHRlZCkpXG4gICAgbXVsdGloYXNoLmRlY29kZShidWZmZXIpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTXVsdGliYXNlIChoYXNoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG11bHRpYmFzZS5pc0VuY29kZWQoaGFzaClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ0lEIChoYXNoKSB7XG4gIHRyeSB7XG4gICAgbmV3IENJRChoYXNoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYWRkciAoaW5wdXQpIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGZhbHNlXG4gIGlmIChNdWx0aWFkZHIuaXNNdWx0aWFkZHIoaW5wdXQpKSByZXR1cm4gdHJ1ZVxuICB0cnkge1xuICAgIG5ldyBNdWx0aWFkZHIoaW5wdXQpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGVlck11bHRpYWRkciAoaW5wdXQpIHtcbiAgcmV0dXJuIGlzTXVsdGlhZGRyKGlucHV0KSAmJiBtYWZtdC5JUEZTLm1hdGNoZXMoaW5wdXQpXG59XG5cbmZ1bmN0aW9uIGlzSXBmcyAoaW5wdXQsIHBhdHRlcm4sIHByb3RvY29sTWF0Y2ggPSBkZWZhdWx0UHJvdG9jb2xNYXRjaCwgaGFzaE1hdGNoID0gZGVmYXVsdEhhc2hNYXRoKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dClcbiAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwZnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsZXQgaGFzaCA9IG1hdGNoW2hhc2hNYXRjaF1cblxuICBpZiAoaGFzaCAmJiBwYXR0ZXJuID09PSBmcWRuUGF0dGVybikge1xuICAgIC8vIHdoZW4gZG9pbmcgY2hlY2tzIGZvciBzdWJkb21haW4gY29udGV4dFxuICAgIC8vIGVuc3VyZSBoYXNoIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyAoYnJvd3NlcnMgZm9yY2UtbG93ZXJjYXNlIGF1dGhvcml0eSBjb21wb3RlbnQgYW55d2F5KVxuICAgIGhhc2ggPSBoYXNoLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBpc0NJRChoYXNoKVxufVxuXG5mdW5jdGlvbiBpc0lwbnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBmb3JtYXR0ZWQubWF0Y2gocGF0dGVybilcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1hdGNoW3Byb3RvY29sTWF0Y2hdICE9PSAnaXBucycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChoYXNoTWF0Y2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICBsZXQgaGFzaCA9IG1hdGNoW2hhc2hNYXRjaF1cbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gICAgcmV0dXJuIGlzQ0lEKGhhc2gpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZyAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbn1cblxuZnVuY3Rpb24gY29udmVydFRvU3RyaW5nIChpbnB1dCkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBiYXNlNTguZW5jb2RlKGlucHV0KVxuICB9XG5cbiAgaWYgKGlzU3RyaW5nKGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dFxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IGlwZnNTdWJkb21haW4gPSAodXJsKSA9PiBpc0lwZnModXJsLCBmcWRuUGF0dGVybiwgZnFkblByb3RvY29sTWF0Y2gsIGZxZG5IYXNoTWF0Y2gpXG5jb25zdCBpcG5zU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcG5zKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbXVsdGloYXNoOiBpc011bHRpaGFzaCxcbiAgbXVsdGlhZGRyOiBpc011bHRpYWRkcixcbiAgcGVlck11bHRpYWRkcjogaXNQZWVyTXVsdGlhZGRyLFxuICBjaWQ6IGlzQ0lELFxuICBiYXNlMzJjaWQ6IChjaWQpID0+IChpc011bHRpYmFzZShjaWQpID09PSAnYmFzZTMyJyAmJiBpc0NJRChjaWQpKSxcbiAgaXBmc1N1YmRvbWFpbjogaXBmc1N1YmRvbWFpbixcbiAgaXBuc1N1YmRvbWFpbjogaXBuc1N1YmRvbWFpbixcbiAgc3ViZG9tYWluOiAodXJsKSA9PiAoaXBmc1N1YmRvbWFpbih1cmwpIHx8IGlwbnNTdWJkb21haW4odXJsKSksXG4gIHN1YmRvbWFpblBhdHRlcm46IGZxZG5QYXR0ZXJuLFxuICBpcGZzVXJsOiAodXJsKSA9PiBpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSxcbiAgaXBuc1VybDogKHVybCkgPT4gaXNJcG5zKHVybCwgdXJsUGF0dGVybiksXG4gIHVybDogKHVybCkgPT4gKGlzSXBmcyh1cmwsIHVybFBhdHRlcm4pIHx8IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pKSxcbiAgdXJsUGF0dGVybjogdXJsUGF0dGVybixcbiAgaXBmc1BhdGg6IChwYXRoKSA9PiBpc0lwZnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBpcG5zUGF0aDogKHBhdGgpID0+IGlzSXBucyhwYXRoLCBwYXRoUGF0dGVybiksXG4gIHBhdGg6IChwYXRoKSA9PiAoaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pKSxcbiAgcGF0aFBhdHRlcm46IHBhdGhQYXR0ZXJuLFxuICB1cmxPclBhdGg6ICh4KSA9PiAoaXNJcGZzKHgsIHVybFBhdHRlcm4pIHx8IGlzSXBucyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwZnMoeCwgcGF0aFBhdHRlcm4pIHx8IGlzSXBucyh4LCBwYXRoUGF0dGVybikpLFxuICBjaWRQYXRoOiBwYXRoID0+IGlzU3RyaW5nKHBhdGgpICYmICFpc0NJRChwYXRoKSAmJiBpc0lwZnMoYC9pcGZzLyR7cGF0aH1gLCBwYXRoUGF0dGVybilcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGVuY29kZTogcmVxdWlyZSgnLi9lbmNvZGUuanMnKVxuICAsIGRlY29kZTogcmVxdWlyZSgnLi9kZWNvZGUuanMnKVxuICAsIGVuY29kaW5nTGVuZ3RoOiByZXF1aXJlKCcuL2xlbmd0aC5qcycpXG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHJlYW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXRpbFwiKTsiLCJ2YXIgYmFzZXggPSByZXF1aXJlKCdiYXNlLXgnKVxudmFyIEFMUEhBQkVUID0gJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonXG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZXgoQUxQSEFCRVQpXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwiLyoqXG4gKiBNdWx0aWhhc2ggaW1wbGVtZW50YXRpb24gaW4gSmF2YVNjcmlwdC5cbiAqXG4gKiBAbW9kdWxlIG11bHRpaGFzaFxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuXG5jb25zdCBjcyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuZXhwb3J0cy5uYW1lcyA9IGNzLm5hbWVzXG5leHBvcnRzLmNvZGVzID0gY3MuY29kZXNcbmV4cG9ydHMuZGVmYXVsdExlbmd0aHMgPSBjcy5kZWZhdWx0TGVuZ3Roc1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGhleCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0hleFN0cmluZyA9IGZ1bmN0aW9uIHRvSGV4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gaGFzaC50b1N0cmluZygnaGV4Jylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBoZXggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uIGZyb21IZXhTdHJpbmcgKGhhc2gpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2gsICdoZXgnKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGJhc2U1OCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0I1OFN0cmluZyA9IGZ1bmN0aW9uIHRvQjU4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoaGFzaClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBiYXNlNTggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmZyb21CNThTdHJpbmcgPSBmdW5jdGlvbiBmcm9tQjU4U3RyaW5nIChoYXNoKSB7XG4gIGxldCBlbmNvZGVkID0gaGFzaFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgZW5jb2RlZCA9IGhhc2gudG9TdHJpbmcoKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJzNTguZGVjb2RlKGVuY29kZWQpKVxufVxuXG4vKipcbiAqIERlY29kZSBhIGhhc2ggZnJvbSB0aGUgZ2l2ZW4gbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm5zIHt7Y29kZTogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyLCBkaWdlc3Q6IEJ1ZmZlcn19IHJlc3VsdFxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmKSB7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihidWYpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKGJ1Zi5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggdG9vIHNob3J0LiBtdXN0IGJlID4gMyBieXRlcy4nKVxuICB9XG5cbiAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAoIWV4cG9ydHMuaXNWYWxpZENvZGUoY29kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCB1bmtub3duIGZ1bmN0aW9uIGNvZGU6IDB4JHtjb2RlLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGNvbnN0IGxlbiA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAobGVuIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIGludmFsaWQgbGVuZ3RoOiAweCR7bGVuLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBsZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCBsZW5ndGggaW5jb25zaXN0ZW50OiAweCR7YnVmLnRvU3RyaW5nKCdoZXgnKX1gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBjb2RlLFxuICAgIG5hbWU6IGNzLmNvZGVzW2NvZGVdLFxuICAgIGxlbmd0aDogbGVuLFxuICAgIGRpZ2VzdDogYnVmXG4gIH1cbn1cblxuLyoqXG4gKiAgRW5jb2RlIGEgaGFzaCBkaWdlc3QgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGNvZGUuXG4gKlxuICogPiAqKk5vdGU6KiogdGhlIGxlbmd0aCBpcyBkZXJpdmVkIGZyb20gdGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGlnZXN0XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKGRpZ2VzdCwgY29kZSwgbGVuZ3RoKSB7XG4gIGlmICghZGlnZXN0IHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIGVuY29kZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gYXJnczogZGlnZXN0LCBjb2RlJylcbiAgfVxuXG4gIC8vIGVuc3VyZSBpdCdzIGEgaGFzaGZ1bmN0aW9uIGNvZGUuXG4gIGNvbnN0IGhhc2hmbiA9IGV4cG9ydHMuY29lcmNlQ29kZShjb2RlKVxuXG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihkaWdlc3QpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAobGVuZ3RoID09IG51bGwpIHtcbiAgICBsZW5ndGggPSBkaWdlc3QubGVuZ3RoXG4gIH1cblxuICBpZiAobGVuZ3RoICYmIGRpZ2VzdC5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IGxlbmd0aCBzaG91bGQgYmUgZXF1YWwgdG8gc3BlY2lmaWVkIGxlbmd0aC4nKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoaGFzaGZuKSksXG4gICAgQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShsZW5ndGgpKSxcbiAgICBkaWdlc3RcbiAgXSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGhhc2ggZnVuY3Rpb24gbmFtZSBpbnRvIHRoZSBtYXRjaGluZyBjb2RlLlxuICogSWYgcGFzc2VkIGEgbnVtYmVyIGl0IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgaWYgaXQncyBhIHZhbGlkIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuY29lcmNlQ29kZSA9IGZ1bmN0aW9uIGNvZXJjZUNvZGUgKG5hbWUpIHtcbiAgbGV0IGNvZGUgPSBuYW1lXG5cbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGlmIChjcy5uYW1lc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZ1bmN0aW9uIG5hbWVkOiAke25hbWV9YClcbiAgICB9XG4gICAgY29kZSA9IGNzLm5hbWVzW25hbWVdXG4gIH1cblxuICBpZiAodHlwZW9mIGNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIYXNoIGZ1bmN0aW9uIGNvZGUgc2hvdWxkIGJlIGEgbnVtYmVyLiBHb3Q6ICR7Y29kZX1gKVxuICB9XG5cbiAgaWYgKGNzLmNvZGVzW2NvZGVdID09PSB1bmRlZmluZWQgJiYgIWV4cG9ydHMuaXNBcHBDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZnVuY3Rpb24gY29kZTogJHtjb2RlfWApXG4gIH1cblxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIENoZWNrcyB3ZXRoZXIgYSBjb2RlIGlzIHBhcnQgb2YgdGhlIGFwcCByYW5nZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc0FwcENvZGUgPSBmdW5jdGlvbiBhcHBDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID4gMCAmJiBjb2RlIDwgMHgxMFxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbXVsdGloYXNoIGNvZGUgaXMgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRDb2RlID0gZnVuY3Rpb24gdmFsaWRDb2RlIChjb2RlKSB7XG4gIGlmIChleHBvcnRzLmlzQXBwQ29kZShjb2RlKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoY3MuY29kZXNbY29kZV0pIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBpcyBhIHZhbGlkIG11bHRpaGFzaC4gVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlIChtdWx0aWhhc2gpIHtcbiAgZXhwb3J0cy5kZWNvZGUobXVsdGloYXNoKSAvLyB0aHJvd3MgaWYgYmFkLlxufVxuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlXG5cbi8qKlxuICogUmV0dXJucyBhIHByZWZpeCBmcm9tIGEgdmFsaWQgbXVsdGloYXNoLiBUaHJvd3MgYW4gZXJyb3IgaWYgaXQgaXMgbm90IHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZXhwb3J0cy5wcmVmaXggPSBmdW5jdGlvbiBwcmVmaXggKG11bHRpaGFzaCkge1xuICB2YWxpZGF0ZShtdWx0aWhhc2gpXG5cbiAgcmV0dXJuIG11bHRpaGFzaC5zbGljZSgwLCAyKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIFByb3RvY29scyAocHJvdG8pIHtcbiAgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnbnVtYmVyJykge1xuICAgIGlmIChQcm90b2NvbHMuY29kZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLmNvZGVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBjb2RlOiAnICsgcHJvdG8pXG4gIH0gZWxzZSBpZiAodHlwZW9mIChwcm90bykgPT09ICdzdHJpbmcnIHx8IHByb3RvIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKFByb3RvY29scy5uYW1lc1twcm90b10pIHtcbiAgICAgIHJldHVybiBQcm90b2NvbHMubmFtZXNbcHJvdG9dXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm90b2NvbCB3aXRoIG5hbWU6ICcgKyBwcm90bylcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcm90b2NvbCBpZCB0eXBlOiAnICsgcHJvdG8pXG59XG5cbmNvbnN0IFYgPSAtMVxuUHJvdG9jb2xzLmxlbmd0aFByZWZpeGVkVmFyU2l6ZSA9IFZcblByb3RvY29scy5WID0gVlxuXG5Qcm90b2NvbHMudGFibGUgPSBbXG4gIFs0LCAzMiwgJ2lwNCddLFxuICBbNiwgMTYsICd0Y3AnXSxcbiAgWzMzLCAxNiwgJ2RjY3AnXSxcbiAgWzQxLCAxMjgsICdpcDYnXSxcbiAgWzQyLCBWLCAnaXA2em9uZSddLFxuICBbNTMsIFYsICdkbnMnLCAncmVzb2x2YWJsZSddLFxuICBbNTQsIFYsICdkbnM0JywgJ3Jlc29sdmFibGUnXSxcbiAgWzU1LCBWLCAnZG5zNicsICdyZXNvbHZhYmxlJ10sXG4gIFs1NiwgViwgJ2Ruc2FkZHInLCAncmVzb2x2YWJsZSddLFxuICBbMTMyLCAxNiwgJ3NjdHAnXSxcbiAgWzI3MywgMTYsICd1ZHAnXSxcbiAgWzI3NSwgMCwgJ3AycC13ZWJydGMtc3RhciddLFxuICBbMjc2LCAwLCAncDJwLXdlYnJ0Yy1kaXJlY3QnXSxcbiAgWzI3NywgMCwgJ3AycC1zdGFyZHVzdCddLFxuICBbMjkwLCAwLCAncDJwLWNpcmN1aXQnXSxcbiAgWzMwMSwgMCwgJ3VkdCddLFxuICBbMzAyLCAwLCAndXRwJ10sXG4gIFs0MDAsIFYsICd1bml4JywgZmFsc2UsICdwYXRoJ10sXG4gIC8vIGBpcGZzYCBpcyBhZGRlZCBiZWZvcmUgYHAycGAgZm9yIGxlZ2FjeSBzdXBwb3J0LlxuICAvLyBBbGwgdGV4dCByZXByZXNlbnRhdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGBwMnBgLCBidXQgYGlwZnNgIHdpbGxcbiAgLy8gc3RpbGwgYmUgc3VwcG9ydGVkXG4gIFs0MjEsIFYsICdpcGZzJ10sXG4gIC8vIGBwMnBgIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgNDIxLCBhbmQgaXMgbm93IHRoZSBkZWZhdWx0XG4gIFs0MjEsIFYsICdwMnAnXSxcbiAgWzQ0MywgMCwgJ2h0dHBzJ10sXG4gIFs0NDQsIDk2LCAnb25pb24nXSxcbiAgWzQ0NSwgMjk2LCAnb25pb24zJ10sXG4gIFs0NDYsIFYsICdnYXJsaWM2NCddLFxuICBbNDYwLCAwLCAncXVpYyddLFxuICBbNDc3LCAwLCAnd3MnXSxcbiAgWzQ3OCwgMCwgJ3dzcyddLFxuICBbNDc5LCAwLCAncDJwLXdlYnNvY2tldC1zdGFyJ10sXG4gIFs0ODAsIDAsICdodHRwJ11cbl1cblxuUHJvdG9jb2xzLm5hbWVzID0ge31cblByb3RvY29scy5jb2RlcyA9IHt9XG5cbi8vIHBvcHVsYXRlIHRhYmxlc1xuUHJvdG9jb2xzLnRhYmxlLm1hcChyb3cgPT4ge1xuICBjb25zdCBwcm90byA9IHAuYXBwbHkobnVsbCwgcm93KVxuICBQcm90b2NvbHMuY29kZXNbcHJvdG8uY29kZV0gPSBwcm90b1xuICBQcm90b2NvbHMubmFtZXNbcHJvdG8ubmFtZV0gPSBwcm90b1xufSlcblxuUHJvdG9jb2xzLm9iamVjdCA9IHBcblxuZnVuY3Rpb24gcCAoY29kZSwgc2l6ZSwgbmFtZSwgcmVzb2x2YWJsZSwgcGF0aCkge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlc29sdmFibGU6IEJvb2xlYW4ocmVzb2x2YWJsZSksXG4gICAgcGF0aDogQm9vbGVhbihwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvdG9jb2xzXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbWggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuY29uc3QgY29kZWNzID0gcmVxdWlyZSgnbXVsdGljb2RlYy9zcmMvYmFzZS10YWJsZS5qc29uJylcbmNvbnN0IENJRFV0aWwgPSByZXF1aXJlKCcuL2NpZC11dGlsJylcbmNvbnN0IHdpdGhJcyA9IHJlcXVpcmUoJ2NsYXNzLWlzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJpYWxpemVkQ0lEXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNcbiAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKi9cblxuLyoqXG4gKiBUZXN0IGlmIHRoZSBnaXZlbiBpbnB1dCBpcyBhIENJRC5cbiAqIEBmdW5jdGlvbiBpc0NJRFxuICogQG1lbWJlcm9mIENJRFxuICogQHN0YXRpY1xuICogQHBhcmFtIHthbnl9IG90aGVyXG4gKiBAcmV0dXJucyB7Ym9vbH1cbiAqL1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIENJRCBgPG1iYXNlPjx2ZXJzaW9uPjxtY29kZWM+PG1oYXNoPmBcbiAqICwgYXMgZGVmaW5lZCBpbiBbaXBsZC9jaWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvY2lkKS5cbiAqIEBjbGFzcyBDSURcbiAqL1xuY2xhc3MgQ0lEIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDSUQuXG4gICAqXG4gICAqIFRoZSBhbGdvcml0aG0gZm9yIGFyZ3VtZW50IGlucHV0IGlzIHJvdWdobHk6XG4gICAqIGBgYFxuICAgKiBpZiAoY2lkKVxuICAgKiAgIC0+IGNyZWF0ZSBhIGNvcHlcbiAgICogZWxzZSBpZiAoc3RyKVxuICAgKiAgIGlmICgxc3QgY2hhciBpcyBvbiBtdWx0aWJhc2UgdGFibGUpIC0+IENJRCBTdHJpbmdcbiAgICogICBlbHNlIC0+IGJzNTggZW5jb2RlZCBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoQnVmZmVyKVxuICAgKiAgIGlmICgxc3QgYnl0ZSBpcyAwIG9yIDEpIC0+IENJRFxuICAgKiAgIGVsc2UgLT4gbXVsdGloYXNoXG4gICAqIGVsc2UgaWYgKE51bWJlcilcbiAgICogICAtPiBjb25zdHJ1Y3QgQ0lEIGJ5IHBhcnRzXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8Q0lEfSB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZWNdXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBbbXVsdGloYXNoXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW211bHRpYmFzZU5hbWVdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBDSUQoPHZlcnNpb24+LCA8Y29kZWM+LCA8bXVsdGloYXNoPiwgPG11bHRpYmFzZU5hbWU+KVxuICAgKiBuZXcgQ0lEKDxjaWRTdHI+KVxuICAgKiBuZXcgQ0lEKDxjaWQuYnVmZmVyPilcbiAgICogbmV3IENJRCg8bXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8YnM1OCBlbmNvZGVkIG11bHRpaGFzaD4pXG4gICAqIG5ldyBDSUQoPGNpZD4pXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgY29kZWMsIG11bHRpaGFzaCwgbXVsdGliYXNlTmFtZSkge1xuICAgIGlmIChfQ0lELmlzQ0lEKHZlcnNpb24pKSB7XG4gICAgICAvLyB2ZXJzaW9uIGlzIGFuIGV4aXNpbmcgQ0lEIGluc3RhbmNlXG4gICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICB0aGlzLnZlcnNpb24gPSBjaWQudmVyc2lvblxuICAgICAgdGhpcy5jb2RlYyA9IGNpZC5jb2RlY1xuICAgICAgdGhpcy5tdWx0aWhhc2ggPSBCdWZmZXIuZnJvbShjaWQubXVsdGloYXNoKVxuICAgICAgLy8gRGVmYXVsdCBndWFyZCBmb3Igd2hlbiBhIENJRCA8IDAuNyBpcyBwYXNzZWQgd2l0aCBubyBtdWx0aWJhc2VOYW1lXG4gICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBjaWQubXVsdGliYXNlTmFtZSB8fCAoY2lkLnZlcnNpb24gPT09IDAgPyAnYmFzZTU4YnRjJyA6ICdiYXNlMzInKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZS5nLiAnYmFzZTMyJyBvciBmYWxzZVxuICAgICAgY29uc3QgYmFzZU5hbWUgPSBtdWx0aWJhc2UuaXNFbmNvZGVkKHZlcnNpb24pXG4gICAgICBpZiAoYmFzZU5hbWUpIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIENJRCBTdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSwgc28gdjFcbiAgICAgICAgY29uc3QgY2lkID0gbXVsdGliYXNlLmRlY29kZSh2ZXJzaW9uKVxuICAgICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZUludChjaWQuc2xpY2UoMCwgMSkudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBiYXNlTmFtZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIGJhc2U1OGJ0YyBzdHJpbmcgbXVsdGloYXNoLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG1oLmZyb21CNThTdHJpbmcodmVyc2lvbilcbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiB2ZXJzaW9uIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZlcnNpb24pKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGUgPSB2ZXJzaW9uLnNsaWNlKDAsIDEpXG4gICAgICBjb25zdCB2ID0gcGFyc2VJbnQoZmlyc3RCeXRlLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG4gICAgICBpZiAodiA9PT0gMSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIGJ1ZmZlclxuICAgICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTMyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIHJhdyBtdWx0aWhhc2ggYnVmZmVyLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBhc3NlbWJsZSB0aGUgQ0lEIGZyb20gdGhlIHBhcmFtZXRlcnNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvblxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmNvZGVjID0gY29kZWNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWhhc2ggPSBtdWx0aWhhc2hcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gbXVsdGliYXNlTmFtZSB8fCAodmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG5cbiAgICBDSUQudmFsaWRhdGVDSUQodGhpcylcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQ0lEIGFzIGEgYEJ1ZmZlcmBcbiAgICpcbiAgICogQHJldHVybiB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICpcbiAgICogQG1lbWJlck9mIENJRFxuICAgKi9cbiAgZ2V0IGJ1ZmZlciAoKSB7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuX2J1ZmZlclxuXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDApIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5tdWx0aWhhc2hcbiAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKCcwMScsICdoZXgnKSxcbiAgICAgICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICAgICAgdGhpcy5tdWx0aWhhc2hcbiAgICAgICAgXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgICB9XG5cbiAgICAgIC8vIENhY2hlIHRoaXMgYnVmZmVyIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSByZWNyZWF0ZWRcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2J1ZmZlcicsIHsgdmFsdWU6IGJ1ZmZlciB9KVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZWZpeCBvZiB0aGUgQ0lELlxuICAgKlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGdldCBwcmVmaXggKCkge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKGAwJHt0aGlzLnZlcnNpb259YCwgJ2hleCcpLFxuICAgICAgbXVsdGljb2RlYy5nZXRDb2RlVmFyaW50KHRoaXMuY29kZWMpLFxuICAgICAgbWgucHJlZml4KHRoaXMubXVsdGloYXNoKVxuICAgIF0pXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBhIENJRCBvZiB2ZXJzaW9uIGAwYC5cbiAgICpcbiAgICogQHJldHVybnMge0NJRH1cbiAgICovXG4gIHRvVjAgKCkge1xuICAgIGlmICh0aGlzLmNvZGVjICE9PSAnZGFnLXBiJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBhIG5vbiBkYWctcGIgQ0lEIHRvIENJRHYwJylcbiAgICB9XG5cbiAgICBjb25zdCB7IG5hbWUsIGxlbmd0aCB9ID0gbWguZGVjb2RlKHRoaXMubXVsdGloYXNoKVxuXG4gICAgaWYgKG5hbWUgIT09ICdzaGEyLTI1NicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIHNoYTItMjU2IG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGlmIChsZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IG5vbiAzMiBieXRlIG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgX0NJRCgwLCB0aGlzLmNvZGVjLCB0aGlzLm11bHRpaGFzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDFgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMSAoKSB7XG4gICAgcmV0dXJuIG5ldyBfQ0lEKDEsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSB0aGUgQ0lEIGludG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZT10aGlzLm11bHRpYmFzZU5hbWVdIC0gQmFzZSBlbmNvZGluZyB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0b0Jhc2VFbmNvZGVkU3RyaW5nIChiYXNlID0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKHRoaXMuc3RyaW5nICYmIGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nXG4gICAgfVxuICAgIGxldCBzdHIgPSBudWxsXG4gICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgaWYgKGJhc2UgIT09ICdiYXNlNThidGMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHN1cHBvcnRlZCB3aXRoIENJRHYwLCB0byBzdXBwb3J0IGRpZmZlcmVudCBiYXNlcywgcGxlYXNlIG1pZ3JhdGUgdGhlIGluc3RhbmNlIGRvIENJRHYxLCB5b3UgY2FuIGRvIHRoYXQgdGhyb3VnaCBjaWQudG9WMSgpJylcbiAgICAgIH1cbiAgICAgIHN0ciA9IG1oLnRvQjU4U3RyaW5nKHRoaXMubXVsdGloYXNoKVxuICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICBzdHIgPSBtdWx0aWJhc2UuZW5jb2RlKGJhc2UsIHRoaXMuYnVmZmVyKS50b1N0cmluZygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgfVxuICAgIGlmIChiYXNlID09PSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICAgIC8vIGNhY2hlIHRoZSBzdHJpbmcgdmFsdWVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RyaW5nJywgeyB2YWx1ZTogc3RyIH0pXG4gICAgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIHRvU3RyaW5nIChiYXNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9CYXNlRW5jb2RlZFN0cmluZyhiYXNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBhIHBsYWluIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge1NlcmlhbGl6ZWRDSUR9XG4gICAqL1xuICB0b0pTT04gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlYzogdGhpcy5jb2RlYyxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIGhhc2g6IHRoaXMubXVsdGloYXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZXF1YWxpdHkgd2l0aCBhbm90aGVyIENJRC5cbiAgICpcbiAgICogQHBhcmFtIHtDSUR9IG90aGVyXG4gICAqIEByZXR1cm5zIHtib29sfVxuICAgKi9cbiAgZXF1YWxzIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmNvZGVjID09PSBvdGhlci5jb2RlYyAmJlxuICAgICAgdGhpcy52ZXJzaW9uID09PSBvdGhlci52ZXJzaW9uICYmXG4gICAgICB0aGlzLm11bHRpaGFzaC5lcXVhbHMob3RoZXIubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogVGhyb3dzIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG90aGVyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQ0lEIChvdGhlcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gQ0lEVXRpbC5jaGVja0NJRENvbXBvbmVudHMob3RoZXIpXG4gICAgaWYgKGVycm9yTXNnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IF9DSUQgPSB3aXRoSXMoQ0lELCB7XG4gIGNsYXNzTmFtZTogJ0NJRCcsXG4gIHN5bWJvbE5hbWU6ICdAaXBsZC9qcy1jaWQvQ0lEJ1xufSlcblxuX0NJRC5jb2RlY3MgPSBjb2RlY3NcblxubW9kdWxlLmV4cG9ydHMgPSBfQ0lEXG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cblxuLyoqXG4gKiBSZWFkIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5c30gZGlycyAmIGZpbGVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucmVhZGRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHZhciBkaXJzID0gW10sIGZpbGVzID0gW11cbiAgZGlycy5wdXNoKGRwYXRoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IobnVsbCwgZGlycywgZmlsZXMpXG4gICAgZnMucmVhZGRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVyciwgX2ZpbGVzKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZ2V0c3RhdChkaXJzW2luZGV4XSwgX2ZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcblxuICAvKipcbiAgICogR2V0IHN0YXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdG9yeSBwYXRoXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0c3RhdCAoZHBhdGgsIF9maWxlcywgY2IpIHtcbiAgICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT0gX2ZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICAgIHZhciBmcGF0aCA9IHBhdGguam9pbihkcGF0aCwgX2ZpbGVzW2luZGV4XSlcbiAgICAgIGZzLnN0YXQoZnBhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgZGlycy5wdXNoKGZwYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVzLnB1c2goZnBhdGgpXG4gICAgICAgIH1cbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KDApKVxuICB9XG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciByZWFkZGlyciA9IHJlcXVpcmUoJy4vcmVhZGRpcnInKS5yZWFkZGlyclxuXG5cbi8qKlxuICogUmVtb3ZlIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHJlYWRkaXJyKGRwYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgZXhwb3J0cy5ybWZpbGVzKGZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZXhwb3J0cy5ybWRpcnMoZGlycywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGZpbGVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1maWxlcyA9IGZ1bmN0aW9uIChmaWxlcywgY2IpIHtcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBmaWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMudW5saW5rKGZpbGVzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFJlbW92ZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkaXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZGlycyA9IGZ1bmN0aW9uIChkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoZGVzYylcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5ybWRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhXG4gKiBAcGFyYW0ge1N0cmluZ30gYlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gIGlmIChhID4gYikgcmV0dXJuIC0xXG4gIGlmIChhIDwgYikgcmV0dXJuICAxXG4gIHJldHVybiAwXG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIENvcHkgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJyID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgY2IpIHtcbiAgcmVhZGRpcnIoc3BhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBleHBvcnRzLmNwZGlycyhzcGF0aCwgdHBhdGgsIGRpcnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBleHBvcnRzLmNwZmlsZXMoc3BhdGgsIHRwYXRoLCBmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBjYigpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGRpcnMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIHZhciBycGF0aCA9IHBhdGgucmVsYXRpdmUoc3BhdGgsIGRpcnNbaW5kZXhdKVxuICAgIHJwYXRoID0gcGF0aC5qb2luKHRwYXRoLCBycGF0aClcbiAgICBmcy5leGlzdHMocnBhdGgsIGZ1bmN0aW9uIChleGlzdHMpIHtcbiAgICAgIGlmIChleGlzdHMpIHJldHVybiBsb29wKCsraW5kZXgpXG4gICAgICBmcy5ta2RpcihycGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZmlsZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BmaWxlcyA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGZpbGVzLCBjYikge1xuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5yZWFkRmlsZShmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBmaWxlc1tpbmRleF0pXG4gICAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgICBmcy53cml0ZUZpbGUocnBhdGgsIGRhdGEsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogTWF0aC5sb2coMSArIHgpO1xufTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBFUFNJTE9OID0gcG93KDIsIC01Mik7XG52YXIgRVBTSUxPTjMyID0gcG93KDIsIC0yMyk7XG52YXIgTUFYMzIgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKTtcbnZhciBNSU4zMiA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uIChuKSB7XG4gIHJldHVybiBuICsgMSAvIEVQU0lMT04gLSAxIC8gRVBTSUxPTjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBNYXRoLmFicyh4KTtcbiAgdmFyICRzaWduID0gc2lnbih4KTtcbiAgdmFyIGEsIHJlc3VsdDtcbiAgaWYgKCRhYnMgPCBNSU4zMikgcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgYSA9ICgxICsgRVBTSUxPTjMyIC8gRVBTSUxPTikgKiAkYWJzO1xuICByZXN1bHQgPSBhIC0gKGEgLSAkYWJzKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZVxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwidmFyIHVybCA9IHJlcXVpcmUoXCJ1cmxcIik7XG52YXIgVVJMID0gdXJsLlVSTDtcbnZhciBodHRwID0gcmVxdWlyZShcImh0dHBcIik7XG52YXIgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG52YXIgV3JpdGFibGUgPSByZXF1aXJlKFwic3RyZWFtXCIpLldyaXRhYmxlO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG52YXIgZGVidWcgPSByZXF1aXJlKFwiLi9kZWJ1Z1wiKTtcblxuLy8gQ3JlYXRlIGhhbmRsZXJzIHRoYXQgcGFzcyBldmVudHMgZnJvbSBuYXRpdmUgcmVxdWVzdHNcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbltcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgUmVkaXJlY3Rpb25FcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfUkVESVJFQ1RJT05fRkFJTFVSRVwiLFxuICBcIlwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCJcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgc2VsZi5fcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfTtcblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBXcml0aW5nIGlzIG5vdCBhbGxvd2VkIGlmIGVuZCBoYXMgYmVlbiBjYWxsZWRcbiAgaWYgKHRoaXMuX2VuZGluZykge1xuICAgIHRocm93IG5ldyBXcml0ZUFmdGVyRW5kRXJyb3IoKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGlucHV0IGFuZCBzaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAoISh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiBkYXRhKSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yKCkpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGlmIG5lZWRlZCBhbmQgZW5kXG4gIGlmICghZGF0YSkge1xuICAgIHRoaXMuX2VuZGVkID0gdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3VycmVudFJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdDtcbiAgICB0aGlzLndyaXRlKGRhdGEsIGVuY29kaW5nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9lbmRlZCA9IHRydWU7XG4gICAgICBjdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2VuZGluZyA9IHRydWU7XG4gIH1cbn07XG5cbi8vIFNldHMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3Quc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbn07XG5cbi8vIENsZWFycyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3QucmVtb3ZlSGVhZGVyKG5hbWUpO1xufTtcblxuLy8gR2xvYmFsIHRpbWVvdXQgZm9yIGFsbCB1bmRlcmx5aW5nIHJlcXVlc3RzXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG1zZWNzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2spIHtcbiAgICB0aGlzLm9uY2UoXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGlmICh0aGlzLnNvY2tldCkge1xuICAgIHN0YXJ0VGltZXIodGhpcywgbXNlY3MpO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5vbmNlKFwic29ja2V0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0YXJ0VGltZXIoc2VsZiwgbXNlY3MpO1xuICAgIH0pO1xuICB9XG5cbiAgdGhpcy5vbmNlKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub25jZShcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gc3RhcnRUaW1lcihyZXF1ZXN0LCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQocmVxdWVzdC5fdGltZW91dCk7XG4gIHJlcXVlc3QuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICByZXF1ZXN0LmVtaXQoXCJ0aW1lb3V0XCIpO1xuICB9LCBtc2Vjcyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyVGltZXIoKSB7XG4gIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbn1cblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJhYm9ydFwiLCBcImZsdXNoSGVhZGVyc1wiLCBcImdldEhlYWRlclwiLFxuICBcInNldE5vRGVsYXlcIiwgXCJzZXRTb2NrZXRLZWVwQWxpdmVcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9zYW5pdGl6ZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAvLyBFbnN1cmUgaGVhZGVycyBhcmUgYWx3YXlzIHByZXNlbnRcbiAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQ29tcGxldGUgdGhlIFVSTCBvYmplY3Qgd2hlbiBuZWNlc3NhcnlcbiAgaWYgKCFvcHRpb25zLnBhdGhuYW1lICYmIG9wdGlvbnMucGF0aCkge1xuICAgIHZhciBzZWFyY2hQb3MgPSBvcHRpb25zLnBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgaWYgKHNlYXJjaFBvcyA8IDApIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoMCwgc2VhcmNoUG9zKTtcbiAgICAgIG9wdGlvbnMuc2VhcmNoID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZyhzZWFyY2hQb3MpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vLyBFeGVjdXRlcyB0aGUgbmV4dCBuYXRpdmUgcmVxdWVzdCAoaW5pdGlhbCBvciByZWRpcmVjdClcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wZXJmb3JtUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gTG9hZCB0aGUgbmF0aXZlIHByb3RvY29sXG4gIHZhciBwcm90b2NvbCA9IHRoaXMuX29wdGlvbnMucHJvdG9jb2w7XG4gIHZhciBuYXRpdmVQcm90b2NvbCA9IHRoaXMuX29wdGlvbnMubmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXTtcbiAgaWYgKCFuYXRpdmVQcm90b2NvbCkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBwcm90b2NvbCBcIiArIHByb3RvY29sKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB1c2UgdGhlIGFnZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3RvY29sXG4gIC8vIChIVFRQIGFuZCBIVFRQUyB1c2UgZGlmZmVyZW50IHR5cGVzIG9mIGFnZW50cylcbiAgaWYgKHRoaXMuX29wdGlvbnMuYWdlbnRzKSB7XG4gICAgdmFyIHNjaGVtZSA9IHByb3RvY29sLnN1YnN0cigwLCBwcm90b2NvbC5sZW5ndGggLSAxKTtcbiAgICB0aGlzLl9vcHRpb25zLmFnZW50ID0gdGhpcy5fb3B0aW9ucy5hZ2VudHNbc2NoZW1lXTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgbmF0aXZlIHJlcXVlc3RcbiAgdmFyIHJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdCA9XG4gICAgICAgIG5hdGl2ZVByb3RvY29sLnJlcXVlc3QodGhpcy5fb3B0aW9ucywgdGhpcy5fb25OYXRpdmVSZXNwb25zZSk7XG4gIHRoaXMuX2N1cnJlbnRVcmwgPSB1cmwuZm9ybWF0KHRoaXMuX29wdGlvbnMpO1xuXG4gIC8vIFNldCB1cCBldmVudCBoYW5kbGVyc1xuICByZXF1ZXN0Ll9yZWRpcmVjdGFibGUgPSB0aGlzO1xuICBmb3IgKHZhciBldmVudCBpbiBldmVudEhhbmRsZXJzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHJlcXVlc3Qub24oZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgICB9XG4gIH1cblxuICAvLyBFbmQgYSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgLy8gKFRoZSBmaXJzdCByZXF1ZXN0IG11c3QgYmUgZW5kZWQgZXhwbGljaXRseSB3aXRoIFJlZGlyZWN0YWJsZVJlcXVlc3QjZW5kKVxuICBpZiAodGhpcy5faXNSZWRpcmVjdCkge1xuICAgIC8vIFdyaXRlIHRoZSByZXF1ZXN0IGVudGl0eSBhbmQgZW5kLlxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cbiAgdmFyIGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVycy5sb2NhdGlvbjtcbiAgaWYgKGxvY2F0aW9uICYmIHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzICE9PSBmYWxzZSAmJlxuICAgICAgc3RhdHVzQ29kZSA+PSAzMDAgJiYgc3RhdHVzQ29kZSA8IDQwMCkge1xuICAgIC8vIEFib3J0IHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5vbihcImVycm9yXCIsIG5vb3ApO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LmFib3J0KCk7XG4gICAgLy8gRGlzY2FyZCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXNwb25zZSB0byBhdm9pZCB3YWl0aW5nIGZvciBkYXRhXG4gICAgcmVzcG9uc2UuZGVzdHJveSgpO1xuXG4gICAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgICAvLyBpbiBjeWNsaWNhbCByZWRpcmVjdGlvbnMgKGkuZS4sIFwiaW5maW5pdGVcIiByZWRpcmVjdGlvbiBsb29wcykuXG4gICAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAgIC8vIGNhcmUgZm9yIG1ldGhvZHMgbm90IGtub3duIHRvIGJlIHNhZmUsIFvigKZdXG4gICAgLy8gUkZDNzIzMcKnNi40LjLigJMzOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBhIHVzZXIgYWdlbnQgTUFZIGNoYW5nZVxuICAgIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICAgIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAgIC8vIFJGQzcyMzHCpzYuNC40OiBUaGUgMzAzIChTZWUgT3RoZXIpIHN0YXR1cyBjb2RlIGluZGljYXRlcyB0aGF0XG4gICAgICAgIC8vIHRoZSBzZXJ2ZXIgaXMgcmVkaXJlY3RpbmcgdGhlIHVzZXIgYWdlbnQgdG8gYSBkaWZmZXJlbnQgcmVzb3VyY2UgW+KApl1cbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAgIC8vIChhIEdFVCBvciBIRUFEIHJlcXVlc3QgaWYgdXNpbmcgSFRUUCkgW+KApl1cbiAgICAgICAgKHN0YXR1c0NvZGUgPT09IDMwMykgJiYgIS9eKD86R0VUfEhFQUQpJC8udGVzdCh0aGlzLl9vcHRpb25zLm1ldGhvZCkpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAgIC8vIERyb3AgYSBwb3NzaWJsZSBlbnRpdHkgYW5kIGhlYWRlcnMgcmVsYXRlZCB0byBpdFxuICAgICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG4gICAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICAgIH1cblxuICAgIC8vIERyb3AgdGhlIEhvc3QgaGVhZGVyLCBhcyB0aGUgcmVkaXJlY3QgbWlnaHQgbGVhZCB0byBhIGRpZmZlcmVudCBob3N0XG4gICAgdmFyIHByZXZpb3VzSG9zdE5hbWUgPSByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15ob3N0JC9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpIHx8XG4gICAgICB1cmwucGFyc2UodGhpcy5fY3VycmVudFVybCkuaG9zdG5hbWU7XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICAgIHZhciByZWRpcmVjdFVybCA9IHVybC5yZXNvbHZlKHRoaXMuX2N1cnJlbnRVcmwsIGxvY2F0aW9uKTtcbiAgICBkZWJ1ZyhcInJlZGlyZWN0aW5nIHRvXCIsIHJlZGlyZWN0VXJsKTtcbiAgICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgICB2YXIgcmVkaXJlY3RVcmxQYXJ0cyA9IHVybC5wYXJzZShyZWRpcmVjdFVybCk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCByZWRpcmVjdFVybFBhcnRzKTtcblxuICAgIC8vIERyb3AgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlmIHJlZGlyZWN0aW5nIHRvIGFub3RoZXIgaG9zdFxuICAgIGlmIChyZWRpcmVjdFVybFBhcnRzLmhvc3RuYW1lICE9PSBwcmV2aW91c0hvc3ROYW1lKSB7XG4gICAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15hdXRob3JpemF0aW9uJC9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICAgIH1cblxuICAgIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICAgIGlmICh0eXBlb2YgdGhpcy5fb3B0aW9ucy5iZWZvcmVSZWRpcmVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0geyBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzIH07XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0LmNhbGwobnVsbCwgdGhpcy5fb3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xuICAgIH1cbiAgICBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIHZhciBlcnJvciA9IG5ldyBSZWRpcmVjdGlvbkVycm9yKFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZDogXCIgKyBjYXVzZS5tZXNzYWdlKTtcbiAgICAgIGVycm9yLmNhdXNlID0gY2F1c2U7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIFRoZSByZXNwb25zZSBpcyBub3QgYSByZWRpcmVjdDsgcmV0dXJuIGl0IGFzLWlzXG4gICAgcmVzcG9uc2UucmVzcG9uc2VVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xuICAgIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0cztcbiAgICB0aGlzLmVtaXQoXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICB9XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVyc1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgdXJsU3RyID0gaW5wdXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5wdXQgPSB1cmxUb09wdGlvbnMobmV3IFVSTCh1cmxTdHIpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBpbnB1dCA9IHVybC5wYXJzZSh1cmxTdHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChVUkwgJiYgKGlucHV0IGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAgICBpbnB1dCA9IHVybFRvT3B0aW9ucyhpbnB1dCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gaW5wdXQ7XG4gICAgICAgIGlucHV0ID0geyBwcm90b2NvbDogcHJvdG9jb2wgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0c1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtYXhSZWRpcmVjdHM6IGV4cG9ydHMubWF4UmVkaXJlY3RzLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiBleHBvcnRzLm1heEJvZHlMZW5ndGgsXG4gICAgICB9LCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLm5hdGl2ZVByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scztcblxuICAgICAgYXNzZXJ0LmVxdWFsKG9wdGlvbnMucHJvdG9jb2wsIHByb3RvY29sLCBcInByb3RvY29sIG1pc21hdGNoXCIpO1xuICAgICAgZGVidWcoXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlcyBhIEdFVCByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gZ2V0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHdyYXBwZWRSZXF1ZXN0ID0gd3JhcHBlZFByb3RvY29sLnJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHdyYXBwZWRSZXF1ZXN0LmVuZCgpO1xuICAgICAgcmV0dXJuIHdyYXBwZWRSZXF1ZXN0O1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSB0aGUgcHJvcGVydGllcyBvbiB0aGUgd3JhcHBlZCBwcm90b2NvbFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZWRQcm90b2NvbCwge1xuICAgICAgcmVxdWVzdDogeyB2YWx1ZTogcmVxdWVzdCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBleHBvcnRzO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gbm9vcCgpIHsgLyogZW1wdHkgKi8gfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvdXJsLmpzXG5mdW5jdGlvbiB1cmxUb09wdGlvbnModXJsT2JqZWN0KSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIHByb3RvY29sOiB1cmxPYmplY3QucHJvdG9jb2wsXG4gICAgaG9zdG5hbWU6IHVybE9iamVjdC5ob3N0bmFtZS5zdGFydHNXaXRoKFwiW1wiKSA/XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdXJsT2JqZWN0Lmhvc3RuYW1lLnNsaWNlKDEsIC0xKSA6XG4gICAgICB1cmxPYmplY3QuaG9zdG5hbWUsXG4gICAgaGFzaDogdXJsT2JqZWN0Lmhhc2gsXG4gICAgc2VhcmNoOiB1cmxPYmplY3Quc2VhcmNoLFxuICAgIHBhdGhuYW1lOiB1cmxPYmplY3QucGF0aG5hbWUsXG4gICAgcGF0aDogdXJsT2JqZWN0LnBhdGhuYW1lICsgdXJsT2JqZWN0LnNlYXJjaCxcbiAgICBocmVmOiB1cmxPYmplY3QuaHJlZixcbiAgfTtcbiAgaWYgKHVybE9iamVjdC5wb3J0ICE9PSBcIlwiKSB7XG4gICAgb3B0aW9ucy5wb3J0ID0gTnVtYmVyKHVybE9iamVjdC5wb3J0KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKHJlZ2V4LCBoZWFkZXJzKSB7XG4gIHZhciBsYXN0VmFsdWU7XG4gIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKHJlZ2V4LnRlc3QoaGVhZGVyKSkge1xuICAgICAgbGFzdFZhbHVlID0gaGVhZGVyc1toZWFkZXJdO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhc3RWYWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JUeXBlKGNvZGUsIGRlZmF1bHRNZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGRlZmF1bHRNZXNzYWdlO1xuICB9XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBDdXN0b21FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLm5hbWUgPSBcIkVycm9yIFtcIiArIGNvZGUgKyBcIl1cIjtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLmNvZGUgPSBjb2RlO1xuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBmb3IgdGhlIGRlYnVnIGluc3RhbmNlIHRvIGJlIGNvbG9yZWRcblx0KiBAcmV0dXJuIHtOdW1iZXJ8U3RyaW5nfSBBbiBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG5cdFx0bGV0IGhhc2ggPSAwO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lc3BhY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0aGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlRGVidWcuY29sb3JzW01hdGguYWJzKGhhc2gpICUgY3JlYXRlRGVidWcuY29sb3JzLmxlbmd0aF07XG5cdH1cblx0Y3JlYXRlRGVidWcuc2VsZWN0Q29sb3IgPSBzZWxlY3RDb2xvcjtcblxuXHQvKipcblx0KiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblx0XHRsZXQgcHJldlRpbWU7XG5cdFx0bGV0IGVuYWJsZU92ZXJyaWRlID0gbnVsbDtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiBlbmFibGVPdmVycmlkZSA9PT0gbnVsbCA/IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKSA6IGVuYWJsZU92ZXJyaWRlLFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcyArICckJykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMubWFwKHRvTmFtZXNwYWNlKSxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcCh0b05hbWVzcGFjZSkubWFwKG5hbWVzcGFjZSA9PiAnLScgKyBuYW1lc3BhY2UpXG5cdFx0XS5qb2luKCcsJyk7XG5cdFx0Y3JlYXRlRGVidWcuZW5hYmxlKCcnKTtcblx0XHRyZXR1cm4gbmFtZXNwYWNlcztcblx0fVxuXG5cdC8qKlxuXHQqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG5cdCogQHJldHVybiB7Qm9vbGVhbn1cblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcblx0XHRpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGxldCBpO1xuXHRcdGxldCBsZW47XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcubmFtZXNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb252ZXJ0IHJlZ2V4cCB0byBuYW1lc3BhY2Vcblx0KlxuXHQqIEBwYXJhbSB7UmVnRXhwfSByZWd4ZXBcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiB0b05hbWVzcGFjZShyZWdleHApIHtcblx0XHRyZXR1cm4gcmVnZXhwLnRvU3RyaW5nKClcblx0XHRcdC5zdWJzdHJpbmcoMiwgcmVnZXhwLnRvU3RyaW5nKCkubGVuZ3RoIC0gMilcblx0XHRcdC5yZXBsYWNlKC9cXC5cXCpcXD8kLywgJyonKTtcblx0fVxuXG5cdC8qKlxuXHQqIENvZXJjZSBgdmFsYC5cblx0KlxuXHQqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuXHQqIEByZXR1cm4ge01peGVkfVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBjb2VyY2UodmFsKSB7XG5cdFx0aWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRyZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCogWFhYIERPIE5PVCBVU0UuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3R1YiBmdW5jdGlvbi5cblx0KiBYWFggSXQgV0lMTCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cdCovXG5cdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdH1cblxuXHRjcmVhdGVEZWJ1Zy5lbmFibGUoY3JlYXRlRGVidWcubG9hZCgpKTtcblxuXHRyZXR1cm4gY3JlYXRlRGVidWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0dXA7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvc1wiKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgdmFyIHZhbHVlRnJvbUNvbmZpZzJLZXlzID0gWyd1cmwnLCAnbWV0aG9kJywgJ2RhdGEnXTtcbiAgdmFyIG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzID0gWydoZWFkZXJzJywgJ2F1dGgnLCAncHJveHknLCAncGFyYW1zJ107XG4gIHZhciBkZWZhdWx0VG9Db25maWcyS2V5cyA9IFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3RpbWVvdXRNZXNzYWdlJywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ2RlY29tcHJlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ21heEJvZHlMZW5ndGgnLCAnbWF4UmVkaXJlY3RzJywgJ3RyYW5zcG9ydCcsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnLCAncmVzcG9uc2VFbmNvZGluZydcbiAgXTtcbiAgdmFyIGRpcmVjdE1lcmdlS2V5cyA9IFsndmFsaWRhdGVTdGF0dXMnXTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHV0aWxzLmZvckVhY2godmFsdWVGcm9tQ29uZmlnMktleXMsIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzLCBtZXJnZURlZXBQcm9wZXJ0aWVzKTtcblxuICB1dGlscy5mb3JFYWNoKGRlZmF1bHRUb0NvbmZpZzJLZXlzLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChkaXJlY3RNZXJnZUtleXMsIGZ1bmN0aW9uIG1lcmdlKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBheGlvc0tleXMgPSB2YWx1ZUZyb21Db25maWcyS2V5c1xuICAgIC5jb25jYXQobWVyZ2VEZWVwUHJvcGVydGllc0tleXMpXG4gICAgLmNvbmNhdChkZWZhdWx0VG9Db25maWcyS2V5cylcbiAgICAuY29uY2F0KGRpcmVjdE1lcmdlS2V5cyk7XG5cbiAgdmFyIG90aGVyS2V5cyA9IE9iamVjdFxuICAgIC5rZXlzKGNvbmZpZzEpXG4gICAgLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSlcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIGZpbHRlckF4aW9zS2V5cyhrZXkpIHtcbiAgICAgIHJldHVybiBheGlvc0tleXMuaW5kZXhPZihrZXkpID09PSAtMTtcbiAgICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG90aGVyS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0J1xuLy8gYmFzZS14IGVuY29kaW5nIC8gZGVjb2Rpbmdcbi8vIENvcHlyaWdodCAoYykgMjAxOCBiYXNlLXggY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBUaGUgQml0Y29pbiBDb3JlIGRldmVsb3BlcnMgKGJhc2U1OC5jcHApXG4vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSB0aGUgYWNjb21wYW55aW5nXG4vLyBmaWxlIExJQ0VOU0Ugb3IgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAuXG4vLyBAdHMtaWdub3JlXG52YXIgX0J1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5mdW5jdGlvbiBiYXNlIChBTFBIQUJFVCkge1xuICBpZiAoQUxQSEFCRVQubGVuZ3RoID49IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHBoYWJldCB0b28gbG9uZycpIH1cbiAgdmFyIEJBU0VfTUFQID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfTUFQLmxlbmd0aDsgaisrKSB7XG4gICAgQkFTRV9NQVBbal0gPSAyNTVcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IEFMUEhBQkVULmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHggPSBBTFBIQUJFVC5jaGFyQXQoaSlcbiAgICB2YXIgeGMgPSB4LmNoYXJDb2RlQXQoMClcbiAgICBpZiAoQkFTRV9NQVBbeGNdICE9PSAyNTUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBhbWJpZ3VvdXMnKSB9XG4gICAgQkFTRV9NQVBbeGNdID0gaVxuICB9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcbiAgdmFyIEZBQ1RPUiA9IE1hdGgubG9nKEJBU0UpIC8gTWF0aC5sb2coMjU2KSAvLyBsb2coQkFTRSkgLyBsb2coMjU2KSwgcm91bmRlZCB1cFxuICB2YXIgaUZBQ1RPUiA9IE1hdGgubG9nKDI1NikgLyBNYXRoLmxvZyhCQVNFKSAvLyBsb2coMjU2KSAvIGxvZyhCQVNFKSwgcm91bmRlZCB1cFxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkgeyBzb3VyY2UgPSBfQnVmZmVyLmZyb20oc291cmNlKSB9XG4gICAgaWYgKCFfQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQnVmZmVyJykgfVxuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJyB9XG4gICAgICAgIC8vIFNraXAgJiBjb3VudCBsZWFkaW5nIHplcm9lcy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgdmFyIHBiZWdpbiA9IDBcbiAgICB2YXIgcGVuZCA9IHNvdXJjZS5sZW5ndGhcbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kICYmIHNvdXJjZVtwYmVnaW5dID09PSAwKSB7XG4gICAgICBwYmVnaW4rK1xuICAgICAgemVyb2VzKytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2U1OCByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgocGVuZCAtIHBiZWdpbikgKiBpRkFDVE9SICsgMSkgPj4+IDBcbiAgICB2YXIgYjU4ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnl0ZXMuXG4gICAgd2hpbGUgKHBiZWdpbiAhPT0gcGVuZCkge1xuICAgICAgdmFyIGNhcnJ5ID0gc291cmNlW3BiZWdpbl1cbiAgICAgICAgICAgIC8vIEFwcGx5IFwiYjU4ID0gYjU4ICogMjU2ICsgY2hcIi5cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQxID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQxICE9PSAtMSk7IGl0MS0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKDI1NiAqIGI1OFtpdDFdKSA+Pj4gMFxuICAgICAgICBiNThbaXQxXSA9IChjYXJyeSAlIEJBU0UpID4+PiAwXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gQkFTRSkgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcGJlZ2luKytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYmFzZTU4IHJlc3VsdC5cbiAgICB2YXIgaXQyID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDIgIT09IHNpemUgJiYgYjU4W2l0Ml0gPT09IDApIHtcbiAgICAgIGl0MisrXG4gICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHJlc3VsdCBpbnRvIGEgc3RyaW5nLlxuICAgIHZhciBzdHIgPSBMRUFERVIucmVwZWF0KHplcm9lcylcbiAgICBmb3IgKDsgaXQyIDwgc2l6ZTsgKytpdDIpIHsgc3RyICs9IEFMUEhBQkVULmNoYXJBdChiNThbaXQyXSkgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuICBmdW5jdGlvbiBkZWNvZGVVbnNhZmUgKHNvdXJjZSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBTdHJpbmcnKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuIF9CdWZmZXIuYWxsb2MoMCkgfVxuICAgIHZhciBwc3ogPSAwXG4gICAgICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMuXG4gICAgaWYgKHNvdXJjZVtwc3pdID09PSAnICcpIHsgcmV0dXJuIH1cbiAgICAgICAgLy8gU2tpcCBhbmQgY291bnQgbGVhZGluZyAnMSdzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB3aGlsZSAoc291cmNlW3Bzel0gPT09IExFQURFUikge1xuICAgICAgemVyb2VzKytcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW4gYmlnLWVuZGlhbiBiYXNlMjU2IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKCgoc291cmNlLmxlbmd0aCAtIHBzeikgKiBGQUNUT1IpICsgMSkgPj4+IDAgLy8gbG9nKDU4KSAvIGxvZygyNTYpLCByb3VuZGVkIHVwLlxuICAgIHZhciBiMjU2ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgY2hhcmFjdGVycy5cbiAgICB3aGlsZSAoc291cmNlW3Bzel0pIHtcbiAgICAgICAgICAgIC8vIERlY29kZSBjaGFyYWN0ZXJcbiAgICAgIHZhciBjYXJyeSA9IEJBU0VfTUFQW3NvdXJjZS5jaGFyQ29kZUF0KHBzeildXG4gICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlclxuICAgICAgaWYgKGNhcnJ5ID09PSAyNTUpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQzID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQzICE9PSAtMSk7IGl0My0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKEJBU0UgKiBiMjU2W2l0M10pID4+PiAwXG4gICAgICAgIGIyNTZbaXQzXSA9IChjYXJyeSAlIDI1NikgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyAyNTYpID4+PiAwXG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdOb24temVybyBjYXJyeScpIH1cbiAgICAgIGxlbmd0aCA9IGlcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBTa2lwIHRyYWlsaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzIGluIGIyNTYuXG4gICAgdmFyIGl0NCA9IHNpemUgLSBsZW5ndGhcbiAgICB3aGlsZSAoaXQ0ICE9PSBzaXplICYmIGIyNTZbaXQ0XSA9PT0gMCkge1xuICAgICAgaXQ0KytcbiAgICB9XG4gICAgdmFyIHZjaCA9IF9CdWZmZXIuYWxsb2NVbnNhZmUoemVyb2VzICsgKHNpemUgLSBpdDQpKVxuICAgIHZjaC5maWxsKDB4MDAsIDAsIHplcm9lcylcbiAgICB2YXIgaiA9IHplcm9lc1xuICAgIHdoaWxlIChpdDQgIT09IHNpemUpIHtcbiAgICAgIHZjaFtqKytdID0gYjI1NltpdDQrK11cbiAgICB9XG4gICAgcmV0dXJuIHZjaFxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGRlY29kZVVuc2FmZShzdHJpbmcpXG4gICAgaWYgKGJ1ZmZlcikgeyByZXR1cm4gYnVmZmVyIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGVVbnNhZmU6IGRlY29kZVVuc2FmZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJ1ZmZlclwiKTsiLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbbXVsdGliYXNlXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYmFzZSkgc3BlY2lmaWNhdGlvbi5cbiAqIEBtb2R1bGUgTXVsdGliYXNlXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IG11bHRpYmFzZVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGVcbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlXG5leHBvcnRzLmlzRW5jb2RlZCA9IGlzRW5jb2RlZFxuZXhwb3J0cy5uYW1lcyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoY29uc3RhbnRzLm5hbWVzKSlcbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5jb2RlcykpXG5cbmNvbnN0IGVyck5vdFN1cHBvcnRlZCA9IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2RpbmcnKVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBidWZmZXIgd2l0aCB0aGUgbXVsdGliYXNlIHZhcmludCtjb2RlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZU9yQ29kZSAtIFRoZSBtdWx0aWJhc2UgbmFtZSBvciBjb2RlIG51bWJlci5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWYgLSBUaGUgZGF0YSB0byBiZSBwcmVmaXhlZCB3aXRoIG11bHRpYmFzZS5cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIG11bHRpYmFzZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGlmICghYnVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyBhbiBlbmNvZGVkIGJ1ZmZlcicpXG4gIH1cbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZU9yQ29kZSlcbiAgY29uc3QgY29kZUJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UuY29kZSlcblxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG4gIHZhbGlkRW5jb2RlKG5hbWUsIGJ1ZilcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2NvZGVCdWYsIGJ1Zl0pXG59XG5cbi8qKlxuICogRW5jb2RlIGRhdGEgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2UgYW5kIGFkZCB0aGUgbXVsdGliYXNlIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IG5hbWUgPSBiYXNlLm5hbWVcblxuICByZXR1cm4gbXVsdGliYXNlKG5hbWUsIEJ1ZmZlci5mcm9tKGJhc2UuZW5jb2RlKGJ1ZikpKVxufVxuXG4vKipcbiAqIFRha2VzIGEgYnVmZmVyIG9yIHN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlIGhlYWRlciwgZGVjb2RlcyBpdCBhbmRcbiAqIHJldHVybnMgdGhlIGRlY29kZWQgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge0J1ZmZlcn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMSwgYnVmT3JTdHJpbmcubGVuZ3RoKVxuXG4gIGlmICh0eXBlb2YgYnVmT3JTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBCdWZmZXIuZnJvbShidWZPclN0cmluZylcbiAgfVxuXG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gIHJldHVybiBCdWZmZXIuZnJvbShiYXNlLmRlY29kZShidWZPclN0cmluZy50b1N0cmluZygpKSlcbn1cblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0YSBtdWx0aWJhc2UgZW5jb2RlZD9cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGJ1Zk9yU3RyaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqL1xuZnVuY3Rpb24gaXNFbmNvZGVkIChidWZPclN0cmluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1Zk9yU3RyaW5nKSkge1xuICAgIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gRW5zdXJlIGJ1Zk9yU3RyaW5nIGlzIGEgc3RyaW5nXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYnVmT3JTdHJpbmcpICE9PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29kZSA9IGJ1Zk9yU3RyaW5nLnN1YnN0cmluZygwLCAxKVxuICB0cnkge1xuICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gICAgcmV0dXJuIGJhc2UubmFtZVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRFbmNvZGUgKG5hbWUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lKVxuICBiYXNlLmRlY29kZShidWYudG9TdHJpbmcoKSlcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZSAobmFtZU9yQ29kZSkge1xuICBsZXQgYmFzZVxuXG4gIGlmIChjb25zdGFudHMubmFtZXNbbmFtZU9yQ29kZV0pIHtcbiAgICBiYXNlID0gY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdXG4gIH0gZWxzZSBpZiAoY29uc3RhbnRzLmNvZGVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXVxuICB9IGVsc2Uge1xuICAgIHRocm93IGVyck5vdFN1cHBvcnRlZFxuICB9XG5cbiAgaWYgKCFiYXNlLmlzSW1wbGVtZW50ZWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmFzZSAnICsgbmFtZU9yQ29kZSArICcgaXMgbm90IGltcGxlbWVudGVkIHlldCcpXG4gIH1cblxuICByZXR1cm4gYmFzZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvZGVjID0gcmVxdWlyZSgnLi9jb2RlYycpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCB3aXRoSXMgPSByZXF1aXJlKCdjbGFzcy1pcycpXG5jb25zdCBpbnNwZWN0ID0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKVxuXG4vKipcbiAqIENyZWF0ZXMgYSBbbXVsdGlhZGRyXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkcikgZnJvbVxuICogYSBCdWZmZXIsIFN0cmluZyBvciBhbm90aGVyIE11bHRpYWRkciBpbnN0YW5jZVxuICogcHVibGljIGtleS5cbiAqIEBjbGFzcyBNdWx0aWFkZHJcbiAqIEBwYXJhbSB7KFN0cmluZ3xCdWZmZXJ8TXVsdGlhZGRyKX0gYWRkciAtIElmIFN0cmluZyBvciBCdWZmZXIsIG5lZWRzIHRvIGFkaGVyZVxuICogdG8gdGhlIGFkZHJlc3MgZm9ybWF0IG9mIGEgW211bHRpYWRkcl0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIjc3RyaW5nLWZvcm1hdClcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICovXG5jb25zdCBNdWx0aWFkZHIgPSB3aXRoSXMucHJvdG8oZnVuY3Rpb24gKGFkZHIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE11bHRpYWRkcikpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpYWRkcihhZGRyKVxuICB9XG5cbiAgLy8gZGVmYXVsdFxuICBpZiAoYWRkciA9PSBudWxsKSB7XG4gICAgYWRkciA9ICcnXG4gIH1cblxuICBpZiAoYWRkciBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9IC0gVGhlIHJhdyBieXRlcyByZXByZXNlbnRpbmcgdGhpcyBtdWx0aWFkZHJlc3NcbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21CdWZmZXIoYWRkcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRkciA9PT0gJ3N0cmluZycgfHwgYWRkciBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIGlmIChhZGRyLmxlbmd0aCA+IDAgJiYgYWRkci5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWFkZHIgXCIke2FkZHJ9XCIgbXVzdCBzdGFydCB3aXRoIGEgXCIvXCJgKVxuICAgIH1cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21TdHJpbmcoYWRkcilcbiAgfSBlbHNlIGlmIChhZGRyLmJ1ZmZlciAmJiBhZGRyLnByb3RvcyAmJiBhZGRyLnByb3RvQ29kZXMpIHsgLy8gTXVsdGlhZGRyXG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tQnVmZmVyKGFkZHIuYnVmZmVyKSAvLyB2YWxpZGF0ZSArIGNvcHkgYnVmZmVyXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhZGRyIG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgb3IgYW5vdGhlciBNdWx0aWFkZHInKVxuICB9XG59LCB7IGNsYXNzTmFtZTogJ011bHRpYWRkcicsIHN5bWJvbE5hbWU6ICdAbXVsdGlmb3JtYXRzL2pzLW11bHRpYWRkci9tdWx0aWFkZHInIH0pXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBTdHJpbmdcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIEpTT04gZW5jb2RlZCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIEpTT04uc3RyaW5naWZ5KE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKSlcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b0pTT04gPSBNdWx0aWFkZHIucHJvdG90eXBlLnRvU3RyaW5nXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBjb252aW5pZW50IG9wdGlvbnMgb2JqZWN0IHRvIGJlIHVzZWQgd2l0aCBuZXQuY3JlYXRlQ29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIHt7ZmFtaWx5OiBTdHJpbmcsIGhvc3Q6IFN0cmluZywgdHJhbnNwb3J0OiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnRvT3B0aW9ucygpXG4gKiAvLyB7IGZhbWlseTogJ2lwdjQnLCBob3N0OiAnMTI3LjAuMC4xJywgdHJhbnNwb3J0OiAndGNwJywgcG9ydDogNDAwMSB9XG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9PcHRpb25zID0gZnVuY3Rpb24gdG9PcHRpb25zICgpIHtcbiAgY29uc3Qgb3B0cyA9IHt9XG4gIGNvbnN0IHBhcnNlZCA9IHRoaXMudG9TdHJpbmcoKS5zcGxpdCgnLycpXG4gIG9wdHMuZmFtaWx5ID0gcGFyc2VkWzFdID09PSAnaXA0JyA/ICdpcHY0JyA6ICdpcHY2J1xuICBvcHRzLmhvc3QgPSBwYXJzZWRbMl1cbiAgb3B0cy50cmFuc3BvcnQgPSBwYXJzZWRbM11cbiAgb3B0cy5wb3J0ID0gcGFyc2VJbnQocGFyc2VkWzRdKVxuICByZXR1cm4gb3B0c1xufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogRm9yIHBvc3QgTm9kZS5qcyB2MTAuMC4wLlxuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDA3OV9jdXN0b21faW5zcGVjdGlvbl9mdW5jdGlvbl9vbl9vYmplY3RzX3ZpYV9pbnNwZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykpXG4gKiAvLyAnPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+J1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlW2luc3BlY3RdID0gZnVuY3Rpb24gaW5zcGVjdEN1c3RvbSAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBGYWxsYmFjayBmb3IgcHJlIE5vZGUuanMgdjEwLjAuMC5cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZGVwcmVjYXRpb25zLmh0bWwjZGVwcmVjYXRpb25zX2RlcDAwNzlfY3VzdG9tX2luc3BlY3Rpb25fZnVuY3Rpb25fb25fb2JqZWN0c192aWFfaW5zcGVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLmluc3BlY3QoKVxuICogLy8gJzxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPidcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJvdG9jb2xzIHRoZSBNdWx0aWFkZHIgaXMgZGVmaW5lZCB3aXRoLCBhcyBhbiBhcnJheSBvZiBvYmplY3RzLCBpblxuICogbGVmdC10by1yaWdodCBvcmRlci4gRWFjaCBvYmplY3QgY29udGFpbnMgdGhlIHByb3RvY29sIGNvZGUsIHByb3RvY29sIG5hbWUsXG4gKiBhbmQgdGhlIHNpemUgb2YgaXRzIGFkZHJlc3Mgc3BhY2UgaW4gYml0cy5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybnMge0FycmF5LjxPYmplY3Q+fSBwcm90b2NvbHMgLSBBbGwgdGhlIHByb3RvY29scyB0aGUgYWRkcmVzcyBpcyBjb21wb3NlZCBvZlxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uY29kZVxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uc2l6ZVxuICogQHJldHVybnMge1N0cmluZ30gcHJvdG9jb2xzW10ubmFtZVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b3MoKVxuICogLy8gWyB7IGNvZGU6IDQsIHNpemU6IDMyLCBuYW1lOiAnaXA0JyB9LFxuICogLy8gICB7IGNvZGU6IDYsIHNpemU6IDE2LCBuYW1lOiAndGNwJyB9IF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b3MgPSBmdW5jdGlvbiBwcm90b3MgKCkge1xuICByZXR1cm4gdGhpcy5wcm90b0NvZGVzKCkubWFwKGNvZGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgcHJvdG9jb2xzKGNvZGUpKSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2RlcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48TnVtYmVyPn0gcHJvdG9jb2wgY29kZXNcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9Db2RlcygpXG4gKiAvLyBbIDQsIDYgXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvQ29kZXMgPSBmdW5jdGlvbiBwcm90b0NvZGVzICgpIHtcbiAgY29uc3QgY29kZXMgPSBbXVxuICBjb25zdCBidWYgPSB0aGlzLmJ1ZmZlclxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG4gICAgY29uc3Qgc2l6ZSA9IGNvZGVjLnNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpICs9IChzaXplICsgbilcbiAgICBjb2Rlcy5wdXNoKGNvZGUpXG4gIH1cblxuICByZXR1cm4gY29kZXNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxTdHJpbmc+fSBwcm90b2NvbCBuYW1lc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b05hbWVzKClcbiAqIC8vIFsgJ2lwNCcsICd0Y3AnIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b05hbWVzID0gZnVuY3Rpb24gcHJvdG9OYW1lcyAoKSB7XG4gIHJldHVybiB0aGlzLnByb3RvcygpLm1hcChwcm90byA9PiBwcm90by5uYW1lKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4ge0J1ZmZlcn0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikudHVwbGVzKClcbiAqIC8vIFsgWyA0LCA8QnVmZmVyIDdmIDAwIDAwIDAxPiBdLCBbIDYsIDxCdWZmZXIgMGYgYTE+IF0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnR1cGxlcyA9IGZ1bmN0aW9uIHR1cGxlcyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1R1cGxlcyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2Ygc3RyaW5nL251bWJlciBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4geyhTdHJpbmd8TnVtYmVyKX0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikuc3RyaW5nVHVwbGVzKClcbiAqIC8vIFsgWyA0LCAnMTI3LjAuMC4xJyBdLCBbIDYsIDQwMDEgXSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuc3RyaW5nVHVwbGVzID0gZnVuY3Rpb24gc3RyaW5nVHVwbGVzICgpIHtcbiAgY29uc3QgdCA9IGNvZGVjLmJ1ZmZlclRvVHVwbGVzKHRoaXMuYnVmZmVyKVxuICByZXR1cm4gY29kZWMudHVwbGVzVG9TdHJpbmdUdXBsZXModClcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYSBNdWx0aWFkZHIgaW4gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byBhZGQgaW50byB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5lbmNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGVuY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBNdWx0aWFkZHIoYWRkcilcbiAgcmV0dXJuIE11bHRpYWRkcih0aGlzLnRvU3RyaW5nKCkgKyBhZGRyLnRvU3RyaW5nKCkpXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGVzIGEgTXVsdGlhZGRyIGZyb20gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byByZW1vdmUgZnJvbSB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLmRlY2Fwc3VsYXRlKG1oMikudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvOC44LjguOC90Y3AvMTA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGRlY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBhZGRyLnRvU3RyaW5nKClcbiAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKVxuICBjb25zdCBpID0gcy5sYXN0SW5kZXhPZihhZGRyKVxuICBpZiAoaSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgJyArIHRoaXMgKyAnIGRvZXMgbm90IGNvbnRhaW4gc3ViYWRkcmVzczogJyArIGFkZHIpXG4gIH1cbiAgcmV0dXJuIE11bHRpYWRkcihzLnNsaWNlKDAsIGkpKVxufVxuXG4vKipcbiAqIEEgbW9yZSByZWxpYWJsZSB2ZXJzaW9uIG9mIGBkZWNhcHN1bGF0ZWAgaWYgeW91IGFyZSB0YXJnZXRpbmcgYVxuICogc3BlY2lmaWMgY29kZSwgc3VjaCBhcyA0MjEgKHRoZSBgcDJwYCBwcm90b2NvbCBjb2RlKS4gVGhlIGxhc3QgaW5kZXggb2YgdGhlIGNvZGVcbiAqIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBgTXVsdGlhZGRyYCwgYW5kIGEgbmV3IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgY29kZSBpcyBub3QgcHJlc2VudCwgdGhlIG9yaWdpbmFsIGBNdWx0aWFkZHJgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBwcm90b2NvbCB0byBkZWNhcHN1bGF0ZSBmcm9tIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgYWRkciA9IE11bHRpYWRkcignL2lwNC8wLjAuMC4wL3RjcC84MDgwL3AycC9RbWNncHN5V2dIOFk4YWpKejFDdTcyS25TNXVvMkFhMkxwelU3a2luU3VwTktDJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwMC4uLiAtIC9pcDQvMC4wLjAuMC90Y3AvODA4MC9wMnAvUW1jZ3BzeVdnSDhZOGFqSnoxQ3U3MktuUzV1bzJBYTJMcHpVN2tpblN1cE5LQz5cbiAqXG4gKiBhZGRyLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzAuMC4wLjAvdGNwLzgwODAnXG4gKlxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCcpLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZUNvZGUgPSBmdW5jdGlvbiBkZWNhcHN1bGF0ZUNvZGUgKGNvZGUpIHtcbiAgY29uc3QgdHVwbGVzID0gdGhpcy50dXBsZXMoKVxuICBmb3IgKGxldCBpID0gdHVwbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHR1cGxlc1tpXVswXSA9PT0gY29kZSkge1xuICAgICAgcmV0dXJuIE11bHRpYWRkcihjb2RlYy50dXBsZXNUb0J1ZmZlcih0dXBsZXMuc2xpY2UoMCwgaSkpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBlZXJJZCBpZiB0aGUgbXVsdGlhZGRyIGNvbnRhaW5zIG9uZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSBwZWVySWQgLSBUaGUgaWQgb2YgdGhlIHBlZXIgb3IgbnVsbCBpZiBpbnZhbGlkIG9yIG1pc3NpbmcgZnJvbSB0aGUgbWFcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MC9pcGZzL1FtVmFsaWRCYXNlNThzdHJpbmcnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwZnMvUW1WYWxpZEJhc2U1OHN0cmluZz5cbiAqXG4gKiAvLyBzaG91bGQgcmV0dXJuIFFtVmFsaWRCYXNlNThzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwZWVySWQgPSBtaDEuZ2V0UGVlcklkKClcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5nZXRQZWVySWQgPSBmdW5jdGlvbiBnZXRQZWVySWQgKCkge1xuICBsZXQgYjU4c3RyID0gbnVsbFxuICB0cnkge1xuICAgIGNvbnN0IHR1cGxlcyA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgaWYgKHR1cGxlWzBdID09PSBwcm90b2NvbHMubmFtZXMuaXBmcy5jb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEdldCB0aGUgbGFzdCBpZFxuICAgIGI1OHN0ciA9IHR1cGxlcy5wb3AoKVsxXVxuICAgIC8vIEdldCBtdWx0aWhhc2gsIHVud3JhcCBmcm9tIENJRCBpZiBuZWVkZWRcbiAgICBiNThzdHIgPSBiczU4LmVuY29kZShuZXcgQ0lEKGI1OHN0cikubXVsdGloYXNoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgYjU4c3RyID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGI1OHN0clxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBhdGggaWYgdGhlIG11bHRpYWRkciBjb250YWlucyBvbmVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd8bnVsbH0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBtdWx0aWFkZHIsIG9yIG51bGwgaWYgbm8gcGF0aCBwcm90b2NvbCBpcyBwcmVzZW50XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAvdW5peC90bXAvcDJwLnNvY2snKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL3VuaXgvdG1wL3AycC5zb2NrPlxuICpcbiAqIC8vIHNob3VsZCByZXR1cm4gdXRmOCBzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwYXRoID0gbWgxLmdldFBhdGgoKVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoICgpIHtcbiAgbGV0IHBhdGggPSBudWxsXG4gIHRyeSB7XG4gICAgcGF0aCA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHModHVwbGVbMF0pXG4gICAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pWzBdWzFdXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXRoID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHBhdGhcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdHdvIE11bHRpYWRkcnMgYXJlIHRoZSBzYW1lXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge0Jvb2x9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgxLmVxdWFscyhtaDEpXG4gKiAvLyB0cnVlXG4gKlxuICogbWgxLmVxdWFscyhtaDIpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYWRkcikge1xuICByZXR1cm4gdGhpcy5idWZmZXIuZXF1YWxzKGFkZHIuYnVmZmVyKVxufVxuXG4vKipcbiAqIEdldHMgYSBNdWx0aWFkZHJzIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3QuIE5vdGUgdGhhdCBwcm90b2NvbCBpbmZvcm1hdGlvblxuICogaXMgbGVmdCBvdXQ6IGluIE5vZGUgKGFuZCBtb3N0IG5ldHdvcmsgc3lzdGVtcykgdGhlIHByb3RvY29sIGlzIHVua25vd2FibGVcbiAqIGdpdmVuIG9ubHkgdGhlIGFkZHJlc3MuXG4gKlxuICogSGFzIHRvIGJlIGEgVGhpbldhaXN0IEFkZHJlc3MsIG90aGVyd2lzZSB0aHJvd3MgZXJyb3JcbiAqXG4gKiBAcmV0dXJucyB7e2ZhbWlseTogU3RyaW5nLCBhZGRyZXNzOiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIE11bHRpYWRkciBpcyBub3QgYSBUaGluIFdhaXN0IGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykubm9kZUFkZHJlc3MoKVxuICogLy8ge2ZhbWlseTogJ0lQdjQnLCBhZGRyZXNzOiAnMTI3LjAuMC4xJywgcG9ydDogJzQwMDEnfVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLm5vZGVBZGRyZXNzID0gZnVuY3Rpb24gbm9kZUFkZHJlc3MgKCkge1xuICBjb25zdCBjb2RlcyA9IHRoaXMucHJvdG9Db2RlcygpXG4gIGNvbnN0IG5hbWVzID0gdGhpcy5wcm90b05hbWVzKClcbiAgY29uc3QgcGFydHMgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJy8nKS5zbGljZSgxKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWFkZHIgbXVzdCBoYXZlIGEgdmFsaWQgZm9ybWF0OiBcIi97aXA0LCBpcDYsIGRuczQsIGRuczZ9L3thZGRyZXNzfS97dGNwLCB1ZHB9L3twb3J0fVwiLicpXG4gIH0gZWxzZSBpZiAoY29kZXNbMF0gIT09IDQgJiYgY29kZXNbMF0gIT09IDQxICYmIGNvZGVzWzBdICE9PSA1NCAmJiBjb2Rlc1swXSAhPT0gNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1swXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIGZhbWlseSBuYW1lOiBcIntpcDQsIGlwNiwgZG5zNCwgZG5zNn1cIi5gKVxuICB9IGVsc2UgaWYgKHBhcnRzWzJdICE9PSAndGNwJyAmJiBwYXJ0c1syXSAhPT0gJ3VkcCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1sxXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIHRyYW5zcG9ydCBwcm90b2NvbDogXCJ7dGNwLCB1ZHB9XCIuYClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmFtaWx5OiAoY29kZXNbMF0gPT09IDQxIHx8IGNvZGVzWzBdID09PSA1NSkgPyA2IDogNCxcbiAgICBhZGRyZXNzOiBwYXJ0c1sxXSwgLy8gaXAgYWRkclxuICAgIHBvcnQ6IHBhcnNlSW50KHBhcnRzWzNdKSAvLyB0Y3Agb3IgdWRwIHBvcnRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBNdWx0aWFkZHIgZnJvbSBhIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3tmYW1pbHk6IFN0cmluZywgYWRkcmVzczogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fSBhZGRyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHJhbnNwb3J0XG4gKiBAcmV0dXJucyB7TXVsdGlhZGRyfSBtdWx0aWFkZHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgYWRkciBpcyBub3QgdHJ1dGh5XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIHRyYW5zcG9ydCBpcyBub3QgdHJ1dGh5XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyLmZyb21Ob2RlQWRkcmVzcyh7YWRkcmVzczogJzEyNy4wLjAuMScsIHBvcnQ6ICc0MDAxJ30sICd0Y3AnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKi9cbk11bHRpYWRkci5mcm9tTm9kZUFkZHJlc3MgPSBmdW5jdGlvbiBmcm9tTm9kZUFkZHJlc3MgKGFkZHIsIHRyYW5zcG9ydCkge1xuICBpZiAoIWFkZHIpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgbm9kZSBhZGRyZXNzIG9iamVjdCcpXG4gIGlmICghdHJhbnNwb3J0KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIHRyYW5zcG9ydCBwcm90b2NvbCcpXG4gIGNvbnN0IGlwID0gKGFkZHIuZmFtaWx5ID09PSAnSVB2NicpID8gJ2lwNicgOiAnaXA0J1xuICByZXR1cm4gTXVsdGlhZGRyKCcvJyArIFtpcCwgYWRkci5hZGRyZXNzLCB0cmFuc3BvcnQsIGFkZHIucG9ydF0uam9pbignLycpKVxufVxuXG4vLyBUT0RPIGZpbmQgYSBiZXR0ZXIgZXhhbXBsZSwgbm90IHN1cmUgYWJvdXQgaXQncyBnb29kIGVub3VnaFxuLyoqXG4gKiBSZXR1cm5zIGlmIGEgTXVsdGlhZGRyIGlzIGEgVGhpbiBXYWlzdCBhZGRyZXNzIG9yIG5vdC5cbiAqXG4gKiBUaGluIFdhaXN0IGlzIGlmIGEgTXVsdGlhZGRyIGFkaGVyZXMgdG8gdGhlIHN0YW5kYXJkIGNvbWJpbmF0aW9uIG9mOlxuICpcbiAqIGB7SVB2NCwgSVB2Nn0ve1RDUCwgVURQfWBcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gW2FkZHJdIC0gRGVmYXVsdHMgdG8gdXNpbmcgYHRoaXNgIGluc3RhbmNlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNUaGluV2Fpc3RBZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxPlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMTA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMS9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDE+XG4gKiBtaDEuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIHRydWVcbiAqIG1oMi5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gdHJ1ZVxuICogbWgzLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmlzVGhpbldhaXN0QWRkcmVzcyA9IGZ1bmN0aW9uIGlzVGhpbldhaXN0QWRkcmVzcyAoYWRkcikge1xuICBjb25zdCBwcm90b3MgPSAoYWRkciB8fCB0aGlzKS5wcm90b3MoKVxuXG4gIGlmIChwcm90b3MubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocHJvdG9zWzBdLmNvZGUgIT09IDQgJiYgcHJvdG9zWzBdLmNvZGUgIT09IDQxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKHByb3Rvc1sxXS5jb2RlICE9PSA2ICYmIHByb3Rvc1sxXS5jb2RlICE9PSAyNzMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIE9iamVjdCBjb250YWluaW5nIHRhYmxlLCBuYW1lcyBhbmQgY29kZXMgb2YgYWxsIHN1cHBvcnRlZCBwcm90b2NvbHMuXG4gKiBUbyBnZXQgdGhlIHByb3RvY29sIHZhbHVlcyBmcm9tIGEgTXVsdGlhZGRyLCB5b3UgY2FuIHVzZVxuICogW2AucHJvdG9zKClgXSgjbXVsdGlhZGRycHJvdG9zKSxcbiAqIFtgLnByb3RvQ29kZXMoKWBdKCNtdWx0aWFkZHJwcm90b2NvZGVzKSBvclxuICogW2AucHJvdG9OYW1lcygpYF0oI211bHRpYWRkcnByb3RvbmFtZXMpXG4gKlxuICogQGluc3RhbmNlXG4gKiBAcmV0dXJucyB7e3RhYmxlOiBBcnJheSwgbmFtZXM6IE9iamVjdCwgY29kZXM6IE9iamVjdH19XG4gKlxuICovXG5NdWx0aWFkZHIucHJvdG9jb2xzID0gcHJvdG9jb2xzXG5cbi8qKlxuICogUmV0dXJucyBpZiBzb21ldGhpbmcgaXMgYSBNdWx0aWFkZHIgdGhhdCBpcyBhIG5hbWVcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7Qm9vbH0gaXNOYW1lXG4gKi9cbk11bHRpYWRkci5pc05hbWUgPSBmdW5jdGlvbiBpc05hbWUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGlmIGEgcGFydCBvZiB0aGUgbXVsdGlhZGRyIGlzIHJlc29sdmFibGUsIHRoZW4gcmV0dXJuIHRydWVcbiAgcmV0dXJuIGFkZHIucHJvdG9zKCkuc29tZSgocHJvdG8pID0+IHByb3RvLnJlc29sdmFibGUpXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtdWx0aWFkZHJzLCBieSByZXNvbHZpbmcgdGhlIG11bHRpYWRkciB0aGF0IGlzIGEgbmFtZVxuICpcbiAqIEBhc3luY1xuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcltdfVxuICovXG5NdWx0aWFkZHIucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikgfHwgIU11bHRpYWRkci5pc05hbWUoYWRkcikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoJ25vdCBhIHZhbGlkIG5hbWUnKSlcbiAgfVxuXG4gIC8qXG4gICAqIE5lZWRzIG1vcmUgY29uc2lkZXJhdGlvbiBmcm9tIHNwZWMgZGVzaWduOlxuICAgKiAgIC0gd2hhdCB0byByZXR1cm5cbiAgICogICAtIGhvdyB0byBhY2hpZXZlIGl0IGluIHRoZSBicm93c2VyP1xuICAgKi9cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkIHlldCcpKVxufVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBNdWx0aWFkZHJcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG51bWJlclRvQnVmZmVyLFxuICBidWZmZXJUb051bWJlcixcbiAgdmFyaW50QnVmZmVyRW5jb2RlLFxuICB2YXJpbnRCdWZmZXJEZWNvZGUsXG4gIHZhcmludEVuY29kZVxufVxuXG5mdW5jdGlvbiBidWZmZXJUb051bWJlciAoYnVmKSB7XG4gIHJldHVybiBwYXJzZUludChidWYudG9TdHJpbmcoJ2hleCcpLCAxNilcbn1cblxuZnVuY3Rpb24gbnVtYmVyVG9CdWZmZXIgKG51bSkge1xuICBsZXQgaGV4U3RyaW5nID0gbnVtLnRvU3RyaW5nKDE2KVxuICBpZiAoaGV4U3RyaW5nLmxlbmd0aCAlIDIgPT09IDEpIHtcbiAgICBoZXhTdHJpbmcgPSAnMCcgKyBoZXhTdHJpbmdcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jylcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRW5jb2RlIChpbnB1dCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWZmZXJUb051bWJlcihpbnB1dCkpKVxufVxuXG5mdW5jdGlvbiB2YXJpbnRCdWZmZXJEZWNvZGUgKGlucHV0KSB7XG4gIHJldHVybiBudW1iZXJUb0J1ZmZlcih2YXJpbnQuZGVjb2RlKGlucHV0KSlcbn1cblxuZnVuY3Rpb24gdmFyaW50RW5jb2RlIChudW0pIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobnVtKSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gd2l0aElzKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIGNvbnN0IENsYXNzSXNXcmFwcGVyID0ge1xuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3NpZ25zIHRoZSBjbGFzcyB3cmFwcGVyIHRvIGFuIG9iamVjdCB0byB0cmlja1xuICAgICAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZXMgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgY2xhc3Mgd2hlblxuICAgICAgICAvLyBsb2dnaW5nIGFuIGluc3RhbmNlcy5cbiAgICAgICAgLy8gV2UgYXJlIGFzc2lnbmluZyBhbiBhbm9ueW1vdXMgY2xhc3MgKGNsYXNzIHdyYXBwZXIpIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gd2l0aCBrZXkgYGNsYXNzTmFtZWAgdG8ga2VlcCB0aGUgY29ycmVjdCBuYW1lLlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaXQgZmFsbHMgYmFjayB0byBsb2dnaW5nIGBDbGFzc0lzV3JhcHBlcmAuXG4gICAgICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHdpdGhJc1Byb3RvKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSwgd2l0aG91dE5ldyB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1zaG9ydGhhbmQgKi9cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAod2l0aG91dE5ldyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBDbGFzc0lzV3JhcHBlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzSXNXcmFwcGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IENsYXNzLmNhbGwodGhpcywgLi4uYXJncykgfHwgdGhpcztcblxuICAgICAgICAgICAgaWYgKF90aGlzICYmICFfdGhpc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG4gICAgLyogZXNsaW50LWVuYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG5cbiAgICBDbGFzc0lzV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSk7XG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3NJc1dyYXBwZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIENsYXNzSXNXcmFwcGVyW2BpcyR7Y2xhc3NOYW1lfWBdID0gKG9iaikgPT4gISEob2JqICYmIG9ialtzeW1ib2xdKTtcblxuICAgIHJldHVybiBDbGFzc0lzV3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoSXM7XG5tb2R1bGUuZXhwb3J0cy5wcm90byA9IHdpdGhJc1Byb3RvO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJyk7XG52YXIgYXN5bmNraXQgPSByZXF1aXJlKCdhc3luY2tpdCcpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKCk7XG4gIH1cblxuICB0aGlzLl9vdmVyaGVhZExlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlID0gW107XG5cbiAgQ29tYmluZWRTdHJlYW0uY2FsbCh0aGlzKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cbn1cblxuRm9ybURhdGEuTElORV9CUkVBSyA9ICdcXHJcXG4nO1xuRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGFsbG93IGZpbGVuYW1lIGFzIHNpbmdsZSBvcHRpb25cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtmaWxlbmFtZTogb3B0aW9uc307XG4gIH1cblxuICB2YXIgYXBwZW5kID0gQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZC5iaW5kKHRoaXMpO1xuXG4gIC8vIGFsbCB0aGF0IHN0cmVhbXkgYnVzaW5lc3MgY2FuJ3QgaGFuZGxlIG51bWJlcnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtZm9ybS1kYXRhL2lzc3Vlcy8zOFxuICBpZiAodXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFBsZWFzZSBjb252ZXJ0IHlvdXIgYXJyYXkgaW50byBzdHJpbmdcbiAgICAvLyB0aGUgd2F5IHdlYiBzZXJ2ZXIgZXhwZWN0cyBpdFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGVhZGVyID0gdGhpcy5fbXVsdGlQYXJ0SGVhZGVyKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBmb290ZXIgPSB0aGlzLl9tdWx0aVBhcnRGb290ZXIoKTtcblxuICBhcHBlbmQoaGVhZGVyKTtcbiAgYXBwZW5kKHZhbHVlKTtcbiAgYXBwZW5kKGZvb3Rlcik7XG5cbiAgLy8gcGFzcyBhbG9uZyBvcHRpb25zLmtub3duTGVuZ3RoXG4gIHRoaXMuX3RyYWNrTGVuZ3RoKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl90cmFja0xlbmd0aCA9IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gMDtcblxuICAvLyB1c2VkIHcvIGdldExlbmd0aFN5bmMoKSwgd2hlbiBsZW5ndGggaXMga25vd24uXG4gIC8vIGUuZy4gZm9yIHN0cmVhbWluZyBkaXJlY3RseSBmcm9tIGEgcmVtb3RlIHNlcnZlcixcbiAgLy8gdy8gYSBrbm93biBmaWxlIGEgc2l6ZSwgYW5kIG5vdCB3YW50aW5nIHRvIHdhaXQgZm9yXG4gIC8vIGluY29taW5nIGZpbGUgdG8gZmluaXNoIHRvIGdldCBpdHMgc2l6ZS5cbiAgaWYgKG9wdGlvbnMua25vd25MZW5ndGggIT0gbnVsbCkge1xuICAgIHZhbHVlTGVuZ3RoICs9ICtvcHRpb25zLmtub3duTGVuZ3RoO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICB0aGlzLl92YWx1ZUxlbmd0aCArPSB2YWx1ZUxlbmd0aDtcblxuICAvLyBAY2hlY2sgd2h5IGFkZCBDUkxGPyBkb2VzIHRoaXMgYWNjb3VudCBmb3IgY3VzdG9tL211bHRpcGxlIENSTEZzP1xuICB0aGlzLl9vdmVyaGVhZExlbmd0aCArPVxuICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGhlYWRlcikgK1xuICAgIEZvcm1EYXRhLkxJTkVfQlJFQUsubGVuZ3RoO1xuXG4gIC8vIGVtcHR5IG9yIGVpdGhlciBkb2Vzbid0IGhhdmUgcGF0aCBvciBub3QgYW4gaHR0cCByZXNwb25zZVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vIG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGxlbmd0aFxuICBpZiAoIW9wdGlvbnMua25vd25MZW5ndGgpIHtcbiAgICB0aGlzLl92YWx1ZXNUb01lYXN1cmUucHVzaCh2YWx1ZSk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGVuZ3RoUmV0cmlldmVyID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG5cbiAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdmZCcpKSB7XG5cbiAgICAvLyB0YWtlIHJlYWQgcmFuZ2UgaW50byBhIGFjY291bnRcbiAgICAvLyBgZW5kYCA9IEluZmluaXR5IOKAkz4gcmVhZCBmaWxlIHRpbGwgdGhlIGVuZFxuICAgIC8vXG4gICAgLy8gVE9ETzogTG9va3MgbGlrZSB0aGVyZSBpcyBidWcgaW4gTm9kZSBmcy5jcmVhdGVSZWFkU3RyZWFtXG4gICAgLy8gaXQgZG9lc24ndCByZXNwZWN0IGBlbmRgIG9wdGlvbnMgd2l0aG91dCBgc3RhcnRgIG9wdGlvbnNcbiAgICAvLyBGaXggaXQgd2hlbiBub2RlIGZpeGVzIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvNzgxOVxuICAgIGlmICh2YWx1ZS5lbmQgIT0gdW5kZWZpbmVkICYmIHZhbHVlLmVuZCAhPSBJbmZpbml0eSAmJiB2YWx1ZS5zdGFydCAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgLy8gd2hlbiBlbmQgc3BlY2lmaWVkXG4gICAgICAvLyBubyBuZWVkIHRvIGNhbGN1bGF0ZSByYW5nZVxuICAgICAgLy8gaW5jbHVzaXZlLCBzdGFydHMgd2l0aCAwXG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZS5lbmQgKyAxIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKSk7XG5cbiAgICAvLyBub3QgdGhhdCBmYXN0IHNub29weVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIGZldGNoIGZpbGUgc2l6ZSBmcm9tIGZzXG4gICAgICBmcy5zdGF0KHZhbHVlLnBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuXG4gICAgICAgIHZhciBmaWxlU2l6ZTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZmluYWwgc2l6ZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugb3B0aW9uc1xuICAgICAgICBmaWxlU2l6ZSA9IHN0YXQuc2l6ZSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAvLyBvciBodHRwIHJlc3BvbnNlXG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cE1vZHVsZScpKSB7XG4gICAgLy8gd2FpdCB0aWxsIHJlc3BvbnNlIGNvbWUgYmFja1xuICAgIHZhbHVlLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB2YWx1ZS5wYXVzZSgpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgK3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuICAgIH0pO1xuICAgIHZhbHVlLnJlc3VtZSgpO1xuXG4gIC8vIHNvbWV0aGluZyBlbHNlXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soJ1Vua25vd24gc3RyZWFtJyk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIGN1c3RvbSBoZWFkZXIgc3BlY2lmaWVkIChhcyBzdHJpbmcpP1xuICAvLyBpdCBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciBib3VuZGFyeVxuICAvLyAoZS5nLiB0byBoYW5kbGUgZXh0cmEgQ1JMRnMgb24gLk5FVCBzZXJ2ZXJzKVxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuaGVhZGVyO1xuICB9XG5cbiAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHRoaXMuX2dldENvbnRlbnREaXNwb3NpdGlvbih2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBjb250ZW50VHlwZSA9IHRoaXMuX2dldENvbnRlbnRUeXBlKHZhbHVlLCBvcHRpb25zKTtcblxuICB2YXIgY29udGVudHMgPSAnJztcbiAgdmFyIGhlYWRlcnMgID0ge1xuICAgIC8vIGFkZCBjdXN0b20gZGlzcG9zaXRpb24gYXMgdGhpcmQgZWxlbWVudCBvciBrZWVwIGl0IHR3byBlbGVtZW50cyBpZiBub3RcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IFsnZm9ybS1kYXRhJywgJ25hbWU9XCInICsgZmllbGQgKyAnXCInXS5jb25jYXQoY29udGVudERpc3Bvc2l0aW9uIHx8IFtdKSxcbiAgICAvLyBpZiBubyBjb250ZW50IHR5cGUuIGFsbG93IGl0IHRvIGJlIGVtcHR5IGFycmF5XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFtdLmNvbmNhdChjb250ZW50VHlwZSB8fCBbXSlcbiAgfTtcblxuICAvLyBhbGxvdyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnb2JqZWN0Jykge1xuICAgIHBvcHVsYXRlKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVyKTtcbiAgfVxuXG4gIHZhciBoZWFkZXI7XG4gIGZvciAodmFyIHByb3AgaW4gaGVhZGVycykge1xuICAgIGlmICghaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgIC8vIHNraXAgbnVsbGlzaCBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbGwgaGVhZGVycyB0byBhcnJheXMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlciA9IFtoZWFkZXJdO1xuICAgIH1cblxuICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyLmxlbmd0aCkge1xuICAgICAgY29udGVudHMgKz0gcHJvcCArICc6ICcgKyBoZWFkZXIuam9pbignOyAnKSArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyBGb3JtRGF0YS5MSU5FX0JSRUFLICsgY29udGVudHMgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50RGlzcG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIHZhciBmaWxlbmFtZVxuICAgICwgY29udGVudERpc3Bvc2l0aW9uXG4gICAgO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5maWxlcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBjdXN0b20gZmlsZXBhdGggZm9yIHJlbGF0aXZlIHBhdGhzXG4gICAgZmlsZW5hbWUgPSBwYXRoLm5vcm1hbGl6ZShvcHRpb25zLmZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpIHtcbiAgICAvLyBjdXN0b20gZmlsZW5hbWUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gZm9ybWlkYWJsZSBhbmQgdGhlIGJyb3dzZXIgYWRkIGEgbmFtZSBwcm9wZXJ0eVxuICAgIC8vIGZzLSBhbmQgcmVxdWVzdC0gc3RyZWFtcyBoYXZlIHBhdGggcHJvcGVydHlcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpO1xuICB9IGVsc2UgaWYgKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjb250ZW50VHlwZSA9IHZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICB9XG5cbiAgLy8gb3IgZ3Vlc3MgaXQgZnJvbSB0aGUgZmlsZXBhdGggb3IgZmlsZW5hbWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBgdmFsdWVgIGlzIG5vdCBzaW1wbGUgdmFsdWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICBjb250ZW50VHlwZSA9IEZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRUeXBlO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRGb290ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5leHQpIHtcbiAgICB2YXIgZm9vdGVyID0gRm9ybURhdGEuTElORV9CUkVBSztcblxuICAgIHZhciBsYXN0UGFydCA9ICh0aGlzLl9zdHJlYW1zLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGxhc3RQYXJ0KSB7XG4gICAgICBmb290ZXIgKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgbmV4dChmb290ZXIpO1xuICB9LmJpbmQodGhpcyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xhc3RCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArICctLScgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEhlYWRlcnMgPSBmdW5jdGlvbih1c2VySGVhZGVycykge1xuICB2YXIgaGVhZGVyO1xuICB2YXIgZm9ybUhlYWRlcnMgPSB7XG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgdGhpcy5nZXRCb3VuZGFyeSgpXG4gIH07XG5cbiAgZm9yIChoZWFkZXIgaW4gdXNlckhlYWRlcnMpIHtcbiAgICBpZiAodXNlckhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgZm9ybUhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdXNlckhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybUhlYWRlcnM7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIGNvbnRlbnQgbGVuZ3RoXG4gICAgcmVxdWVzdC5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcblxuICAgIHRoaXMucGlwZShyZXF1ZXN0KTtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgY2IpO1xuICAgICAgcmVxdWVzdC5vbigncmVzcG9uc2UnLCBjYi5iaW5kKHRoaXMsIG51bGwpKTtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmICghdGhpcy5lcnJvcikge1xuICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnW29iamVjdCBGb3JtRGF0YV0nO1xufTtcbiIsInZhciBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICAsIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdGU7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlYWNoIGpvYiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBqb2Igc3RhdHVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBjYWxsYmFjaylcbntcbiAgLy8gc3RvcmUgY3VycmVudCBpbmRleFxuICB2YXIga2V5ID0gc3RhdGVbJ2tleWVkTGlzdCddID8gc3RhdGVbJ2tleWVkTGlzdCddW3N0YXRlLmluZGV4XSA6IHN0YXRlLmluZGV4O1xuXG4gIHN0YXRlLmpvYnNba2V5XSA9IHJ1bkpvYihpdGVyYXRvciwga2V5LCBsaXN0W2tleV0sIGZ1bmN0aW9uKGVycm9yLCBvdXRwdXQpXG4gIHtcbiAgICAvLyBkb24ndCByZXBlYXQgeW91cnNlbGZcbiAgICAvLyBza2lwIHNlY29uZGFyeSBjYWxsYmFja3NcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuam9icykpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIGpvYnNcbiAgICBkZWxldGUgc3RhdGUuam9ic1trZXldO1xuXG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIC8vIGRvbid0IHByb2Nlc3MgcmVzdCBvZiB0aGUgcmVzdWx0c1xuICAgICAgLy8gc3RvcCBzdGlsbCBhY3RpdmUgam9ic1xuICAgICAgLy8gYW5kIHJlc2V0IHRoZSBsaXN0XG4gICAgICBhYm9ydChzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBzdGF0ZS5yZXN1bHRzW2tleV0gPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHNhbHZhZ2VkIHJlc3VsdHNcbiAgICBjYWxsYmFjayhlcnJvciwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBqb2IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBpbnZva2VcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBrZXkvaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2Ygam9ic1xuICogQHBhcmFtICAge21peGVkfSBpdGVtIC0gam9iIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCBhZnRlciBpdGVyYXRvciBpcyBkb25lIHdpdGggdGhlIGpvYlxuICogQHJldHVybnMge2Z1bmN0aW9ufG1peGVkfSAtIGpvYiBhYm9ydCBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZVxuICovXG5mdW5jdGlvbiBydW5Kb2IoaXRlcmF0b3IsIGtleSwgaXRlbSwgY2FsbGJhY2spXG57XG4gIHZhciBhYm9ydGVyO1xuXG4gIC8vIGFsbG93IHNob3J0Y3V0IGlmIGl0ZXJhdG9yIGV4cGVjdHMgb25seSB0d28gYXJndW1lbnRzXG4gIGlmIChpdGVyYXRvci5sZW5ndGggPT0gMilcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG4gIC8vIG90aGVyd2lzZSBnbyB3aXRoIGZ1bGwgdGhyZWUgYXJndW1lbnRzXG4gIGVsc2VcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBrZXksIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXR1cm4gYWJvcnRlcjtcbn1cbiIsInZhciBkZWZlciA9IHJlcXVpcmUoJy4vZGVmZXIuanMnKTtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHlcbiAqIGV2ZW4gaWYgY2FsbGJhY2sgaXRzZWxmIGlzIG5vdFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBpbnZva2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhdWdtZW50ZWQgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYXN5bmMoY2FsbGJhY2spXG57XG4gIHZhciBpc0FzeW5jID0gZmFsc2U7XG5cbiAgLy8gY2hlY2sgaWYgYXN5bmMgaGFwcGVuZWRcbiAgZGVmZXIoZnVuY3Rpb24oKSB7IGlzQXN5bmMgPSB0cnVlOyB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYXN5bmNfY2FsbGJhY2soZXJyLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoaXNBc3luYylcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBkZWZlcihmdW5jdGlvbiBuZXh0VGlja19jYWxsYmFjaygpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMTguMi41IHBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUludCAhPSAkcGFyc2VJbnQpLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmlnJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSksICdEYXRlJywge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSByZXF1aXJlKCcuL19oaWRlJykocHJvdG8sIFRPX1BSSU1JVElWRSwgcmVxdWlyZSgnLi9fZGF0ZS10by1wcmltaXRpdmUnKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkbWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsImltcG9ydCBwaW5CeUhhc2ggZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkJ5SGFzaCc7XG5pbXBvcnQgaGFzaE1ldGFkYXRhIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9oYXNoTWV0YWRhdGEnO1xuaW1wb3J0IGhhc2hQaW5Qb2xpY3kgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL2hhc2hQaW5Qb2xpY3knO1xuaW1wb3J0IHBpbkZpbGVUb0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMnO1xuaW1wb3J0IHBpbkZyb21GUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRnJvbUZTJztcbmltcG9ydCBwaW5KU09OVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTJztcbmltcG9ydCBwaW5Kb2JzIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMnO1xuaW1wb3J0IHVucGluIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy91bnBpbic7XG5pbXBvcnQgdXNlclBpblBvbGljeSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvdXNlclBpblBvbGljeSc7XG5pbXBvcnQgdGVzdEF1dGhlbnRpY2F0aW9uIGZyb20gJy4vY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHBpbkxpc3QgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcGluTGlzdCc7XG5pbXBvcnQgdXNlclBpbm5lZERhdGFUb3RhbCBmcm9tICcuL2NvbW1hbmRzL2RhdGEvdXNlclBpbm5lZERhdGFUb3RhbCc7XG5cbi8vIE9QVElPTlNcblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD59IFBpbmF0YU1ldGFkYXRhXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFNZXRhZGF0YUZpbHRlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZywgb3A6IHN0cmluZ30+fSBrZXl2YWx1ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZywgZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQ6IG51bWJlcn19IFBpbmF0YVBpblBvbGljeUl0ZW1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkJ5SGFzaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtob3N0Tm9kZXNdXG4gKiBAcHJvcGVydHkge3tyZWdpb25zOiBQaW5hdGFQaW5Qb2xpY3lJdGVtW119fSBbY3VzdG9tUGluUG9saWN5XVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluQnlIYXNoUGluT3B0aW9uc1xuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YX0gW3BpbmF0YU1ldGFkYXRhXVxuICogQHByb3BlcnR5IHtQaW5hdGFQaW5CeUhhc2hPcHRpb25zfSBbcGluYXRhT3B0aW9uc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7MCB8IDF9IFtjaWRWZXJzaW9uXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbd3JhcFdpdGhEaXJlY3RvcnldXG4gKiBAcHJvcGVydHkge3tyZWdpb25zOiBQaW5hdGFQaW5Qb2xpY3lJdGVtW119fSBbY3VzdG9tUGluUG9saWN5XVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluT3B0aW9uc1xuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YX0gW3BpbmF0YU1ldGFkYXRhXVxuICogQHByb3BlcnR5IHtQaW5hdGFPcHRpb25zfSBbcGluYXRhT3B0aW9uc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkpvYnNGaWx0ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkgeydBU0MnIHwgJ0RFU0MnfSBzb3J0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaXBmc19waW5faGFzaF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGltaXRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29mZnNldF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkxpc3RGaWx0ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hhc2hDb250YWluc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGluU3RhcnRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BpbkVuZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdW5waW5TdGFydF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdW5waW5FbmRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BpblNpemVNaW5dXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BpblNpemVNYXhdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c11cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZUxpbWl0XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlT2Zmc2V0XVxuICogQHByb3BlcnR5IHtQaW5hdGFNZXRhZGF0YUZpbHRlcn0gW21ldGFkYXRhXVxuICovXG5cbi8vIFJFU1BPTlNFU1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkJ5SGFzaFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpcGZzSGFzaFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0YXR1c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpblJlc3BvbnNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSXBmc0hhc2hcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBQaW5TaXplXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVGltZXN0YW1wXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5Kb2JzUmVzcG9uc2VSb3dcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlwZnNfcGluX2hhc2hcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRlX3F1ZXVlZFxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsfSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhdHVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5Kb2JzUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtQaW5hdGFQaW5Kb2JzUmVzcG9uc2VSb3dbXX0gcm93c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluTGlzdFJlc3BvbnNlUm93XG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpcGZzX3Bpbl9oYXNoXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2l6ZVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IHVzZXJfaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRlX3Bpbm5lZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGVfdW5waW5uZWRcbiAqIEBwcm9wZXJ0eSB7UGluYXRhTWV0YWRhdGF9IG1ldGFkYXRhXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5MaXN0UmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtQaW5hdGFQaW5MaXN0UmVzcG9uc2VSb3dbXX0gcm93c1xuICovXG5cbi8vIE1FVEhPRFNcblxuLyoqXG4gKiBIYXNoIG1ldGEgZGF0YVxuICogQGNhbGxiYWNrIGhhc2hNZXRhZGF0YVxuICogQHBhcmFtIHtzdHJpbmd9IGlwZnNQaW5IYXNoXG4gKiBAcGFyYW0ge1BpbmF0YU1ldGFkYXRhfSBtZXRhZGF0YVxuICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAqL1xuXG4vKipcbiAqIEhhc2ggcGluIHBvbGljeVxuICogQGNhbGxiYWNrIGhhc2hQaW5Qb2xpY3lcbiAqIEBwYXJhbSB7c3RyaW5nfSBpcGZzUGluSGFzaFxuICogQHBhcmFtIHt7cmVnaW9uczogUGluYXRhUGluUG9saWN5SXRlbVtdfX0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogUGluIGJ5IGhhc2hcbiAqIEBjYWxsYmFjayBwaW5CeUhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoVG9QaW5cbiAqIEBwYXJhbSB7UGluYXRhUGluQnlIYXNoUGluT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5CeUhhc2hSZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBQaW4gZmlsZSB0byBJUEZTXG4gKiBAY2FsbGJhY2sgcGluRmlsZVRvSVBGU1xuICogQHBhcmFtIHtSZWFkU3RyZWFtfSByZWFkYWJsZVN0cmVhbVxuICogQHBhcmFtIHtQaW5hdGFQaW5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpblJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFBpbiBmcm9tIEZTXG4gKiBAY2FsbGJhY2sgcGluRnJvbUZTXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICogQHBhcmFtIHtQaW5hdGFQaW5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpblJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFBpbiBKb2JzXG4gKiBAY2FsbGJhY2sgcGluSm9ic1xuICogQHBhcmFtIHtQaW5hdGFQaW5Kb2JzRmlsdGVyT3B0aW9uc30gW2ZpbHRlcnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5Kb2JzUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogUGluIEpTT04gdG8gSVBGU1xuICogQGNhbGxiYWNrIHBpbkpTT05Ub0lQRlNcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge1BpbmF0YVBpbk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogVW5waW5cbiAqIEBjYWxsYmFjayB1bnBpblxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hUb1VucGluXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogVXNlciBQaW4gUG9saWN5XG4gKiBAY2FsbGJhY2sgdXNlclBpblBvbGljeVxuICogQHBhcmFtIHt7cmVnaW9uczogUGluYXRhUGluUG9saWN5SXRlbVtdfX0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICovXG5cbi8qKlxuICogVGVzdCBBdXRoZW50aWNhdGlvblxuICogQGNhbGxiYWNrIHRlc3RBdXRoZW50aWNhdGlvblxuICogQHJldHVybnMge1Byb21pc2U8e2F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW59Pn1cbiAqL1xuXG4vKipcbiAqIFBpbiBMaXN0XG4gKiBAY2FsbGJhY2sgcGluTGlzdFxuICogQHBhcmFtIHtQaW5hdGFQaW5MaXN0RmlsdGVyT3B0aW9uc30gW2ZpbHRlcnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5MaXN0UmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogVXNlciBQaW5uZWQgRGF0YSBUb3RhbFxuICogQGNhbGxiYWNrIHVzZXJQaW5uZWREYXRhVG90YWxcbiAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFDbGllbnRcbiAqIEBwcm9wZXJ0eSB7cGluQnlIYXNofSBwaW5CeUhhc2hcbiAqIEBwcm9wZXJ0eSB7aGFzaE1ldGFkYXRhfSBoYXNoTWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7aGFzaFBpblBvbGljeX0gaGFzaFBpblBvbGljeVxuICogQHByb3BlcnR5IHtwaW5GaWxlVG9JUEZTfSBwaW5GaWxlVG9JUEZTXG4gKiBAcHJvcGVydHkge3BpbkZyb21GU30gcGluRnJvbUZTXG4gKiBAcHJvcGVydHkge3BpbkpTT05Ub0lQRlN9IHBpbkpTT05Ub0lQRlNcbiAqIEBwcm9wZXJ0eSB7cGluSm9ic30gcGluSm9ic1xuICogQHByb3BlcnR5IHt1bnBpbn0gdW5waW5cbiAqIEBwcm9wZXJ0eSB7dXNlclBpblBvbGljeX0gdXNlclBpblBvbGljeVxuICogQHByb3BlcnR5IHt0ZXN0QXV0aGVudGljYXRpb259IHRlc3RBdXRoZW50aWNhdGlvblxuICogQHByb3BlcnR5IHtwaW5MaXN0fSBwaW5MaXN0XG4gKiBAcHJvcGVydHkge3VzZXJQaW5uZWREYXRhVG90YWx9IHVzZXJQaW5uZWREYXRhVG90YWxcbiAqL1xuXG4vKipcbiAqIFBpbmF0YSBDbGllbnRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UGluYXRhQ2xpZW50fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5hdGFDbGllbnQocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICBsZXQgY2xpZW50ID0ge307XG5cbiAgICAvLyAgc2V0dGluZyB1cCB0aGUgYWN0dWFsIGNhbGxzIHlvdSBjYW4gbWFrZSB1c2luZyB0aGlzIHBhY2thZ2VcbiAgICBjbGllbnQucGluQnlIYXNoID0gZnVuY3Rpb24gKGhhc2hUb1Bpbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50Lmhhc2hNZXRhZGF0YSA9IGZ1bmN0aW9uIChpcGZzUGluSGFzaCwgbWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hNZXRhZGF0YShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaXBmc1Bpbkhhc2gsIG1ldGFkYXRhKTtcbiAgICB9O1xuICAgIGNsaWVudC5oYXNoUGluUG9saWN5ID0gZnVuY3Rpb24gKGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZpbGVUb0lQRlMgPSBmdW5jdGlvbiAocmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5Gcm9tRlMgPSBmdW5jdGlvbiAoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5KU09OVG9JUEZTID0gZnVuY3Rpb24gKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkpTT05Ub0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGJvZHksIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpvYnMgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudW5waW4gPSBmdW5jdGlvbiAoaGFzaFRvVW5waW4pIHtcbiAgICAgICAgcmV0dXJuIHVucGluKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9VbnBpbik7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpblBvbGljeSA9IGZ1bmN0aW9uIChuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIHVzZXJQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIG5ld1BpblBvbGljeSk7XG4gICAgfTtcbiAgICBjbGllbnQudGVzdEF1dGhlbnRpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5MaXN0ID0gZnVuY3Rpb24gKGZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpO1xuICAgIH07XG4gICAgY2xpZW50LnVzZXJQaW5uZWREYXRhVG90YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1c2VyUGlubmVkRGF0YVRvdGFsKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIHJldHVybiBjbGllbnQ7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBCeSBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0geyp9IGhhc2hUb1BpblxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9QaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgcmVxdWlyZWQgZm9yIHBpbm5pbmcgYnkgaGFzaCcpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvUGluKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1BpbiB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkJ5SGFzaGA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaGFzaFRvUGluOiBoYXNoVG9QaW4sXG4gICAgICAgIHBpbmF0YU9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhZGRpbmcgdG8gcGluIHF1ZXVlOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBhcmd1bWVudHNbMV0gfHwge307XG4gICAgY29uZmlnLnVybCA9IGFyZ3VtZW50c1swXTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIC8vIEhvb2sgdXAgaW50ZXJjZXB0b3JzIG1pZGRsZXdhcmVcbiAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihmdWxsUGF0aCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBFeHBlY3RlZCBET01FeGNlcHRpb24gdGhyb3duIGJ5IGJyb3dzZXJzIG5vdCBjb21wYXRpYmxlIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIuXG4gICAgICAgIC8vIEJ1dCwgdGhpcyBjYW4gYmUgc3VwcHJlc3NlZCBmb3IgJ2pzb24nIHR5cGUgYXMgaXQgY2FuIGJlIHBhcnNlZCBieSBkZWZhdWx0ICd0cmFuc2Zvcm1SZXNwb25zZScgZnVuY3Rpb24uXG4gICAgICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjYW5jZWwpO1xuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgaHR0cEZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwO1xudmFyIGh0dHBzRm9sbG93ID0gcmVxdWlyZSgnZm9sbG93LXJlZGlyZWN0cycpLmh0dHBzO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xudmFyIHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG52YXIgcGtnID0gcmVxdWlyZSgnLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2VuaGFuY2VFcnJvcicpO1xuXG52YXIgaXNIdHRwcyA9IC9odHRwczo/LztcblxuLyoqXG4gKlxuICogQHBhcmFtIHtodHRwLkNsaWVudFJlcXVlc3RBcmdzfSBvcHRpb25zXG4gKiBAcGFyYW0ge0F4aW9zUHJveHlDb25maWd9IHByb3h5XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb25cbiAqL1xuZnVuY3Rpb24gc2V0UHJveHkob3B0aW9ucywgcHJveHksIGxvY2F0aW9uKSB7XG4gIG9wdGlvbnMuaG9zdG5hbWUgPSBwcm94eS5ob3N0O1xuICBvcHRpb25zLmhvc3QgPSBwcm94eS5ob3N0O1xuICBvcHRpb25zLnBvcnQgPSBwcm94eS5wb3J0O1xuICBvcHRpb25zLnBhdGggPSBsb2NhdGlvbjtcblxuICAvLyBCYXNpYyBwcm94eSBhdXRob3JpemF0aW9uXG4gIGlmIChwcm94eS5hdXRoKSB7XG4gICAgdmFyIGJhc2U2NCA9IEJ1ZmZlci5mcm9tKHByb3h5LmF1dGgudXNlcm5hbWUgKyAnOicgKyBwcm94eS5hdXRoLnBhc3N3b3JkLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICB9XG5cbiAgLy8gSWYgYSBwcm94eSBpcyB1c2VkLCBhbnkgcmVkaXJlY3RzIG11c3QgYWxzbyBwYXNzIHRocm91Z2ggdGhlIHByb3h5XG4gIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3QgPSBmdW5jdGlvbiBiZWZvcmVSZWRpcmVjdChyZWRpcmVjdGlvbikge1xuICAgIHJlZGlyZWN0aW9uLmhlYWRlcnMuaG9zdCA9IHJlZGlyZWN0aW9uLmhvc3Q7XG4gICAgc2V0UHJveHkocmVkaXJlY3Rpb24sIHByb3h5LCByZWRpcmVjdGlvbi5ocmVmKTtcbiAgfTtcbn1cblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlUHJvbWlzZSwgcmVqZWN0UHJvbWlzZSkge1xuICAgIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UodmFsdWUpO1xuICAgIH07XG4gICAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgICAgcmVqZWN0UHJvbWlzZSh2YWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgZGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciBoZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIE9ubHkgc2V0IGhlYWRlciBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgaW4gY29uZmlnXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy9pc3N1ZXMvNjlcbiAgICBpZiAoIWhlYWRlcnNbJ1VzZXItQWdlbnQnXSAmJiAhaGVhZGVyc1sndXNlci1hZ2VudCddKSB7XG4gICAgICBoZWFkZXJzWydVc2VyLUFnZW50J10gPSAnYXhpb3MvJyArIHBrZy52ZXJzaW9uO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmICF1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLi4uXG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBhZnRlciB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheUJ1ZmZlciwgYSBCdWZmZXIsIG9yIGEgU3RyZWFtJyxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgZGF0YSBleGlzdHNcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgdmFyIGF1dGggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZShmdWxsUGF0aCk7XG4gICAgdmFyIHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8ICdodHRwOic7XG5cbiAgICBpZiAoIWF1dGggJiYgcGFyc2VkLmF1dGgpIHtcbiAgICAgIHZhciB1cmxBdXRoID0gcGFyc2VkLmF1dGguc3BsaXQoJzonKTtcbiAgICAgIHZhciB1cmxVc2VybmFtZSA9IHVybEF1dGhbMF0gfHwgJyc7XG4gICAgICB2YXIgdXJsUGFzc3dvcmQgPSB1cmxBdXRoWzFdIHx8ICcnO1xuICAgICAgYXV0aCA9IHVybFVzZXJuYW1lICsgJzonICsgdXJsUGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKGF1dGgpIHtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgfVxuXG4gICAgdmFyIGlzSHR0cHNSZXF1ZXN0ID0gaXNIdHRwcy50ZXN0KHByb3RvY29sKTtcbiAgICB2YXIgYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IGNvbmZpZy5odHRwc0FnZW50IDogY29uZmlnLmh0dHBBZ2VudDtcblxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcGF0aDogYnVpbGRVUkwocGFyc2VkLnBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpLFxuICAgICAgbWV0aG9kOiBjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYWdlbnQ6IGFnZW50LFxuICAgICAgYWdlbnRzOiB7IGh0dHA6IGNvbmZpZy5odHRwQWdlbnQsIGh0dHBzOiBjb25maWcuaHR0cHNBZ2VudCB9LFxuICAgICAgYXV0aDogYXV0aFxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnNvY2tldFBhdGgpIHtcbiAgICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IGNvbmZpZy5zb2NrZXRQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gcGFyc2VkLmhvc3RuYW1lO1xuICAgICAgb3B0aW9ucy5wb3J0ID0gcGFyc2VkLnBvcnQ7XG4gICAgfVxuXG4gICAgdmFyIHByb3h5ID0gY29uZmlnLnByb3h5O1xuICAgIGlmICghcHJveHkgJiYgcHJveHkgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgcHJveHlFbnYgPSBwcm90b2NvbC5zbGljZSgwLCAtMSkgKyAnX3Byb3h5JztcbiAgICAgIHZhciBwcm94eVVybCA9IHByb2Nlc3MuZW52W3Byb3h5RW52XSB8fCBwcm9jZXNzLmVudltwcm94eUVudi50b1VwcGVyQ2FzZSgpXTtcbiAgICAgIGlmIChwcm94eVVybCkge1xuICAgICAgICB2YXIgcGFyc2VkUHJveHlVcmwgPSB1cmwucGFyc2UocHJveHlVcmwpO1xuICAgICAgICB2YXIgbm9Qcm94eUVudiA9IHByb2Nlc3MuZW52Lm5vX3Byb3h5IHx8IHByb2Nlc3MuZW52Lk5PX1BST1hZO1xuICAgICAgICB2YXIgc2hvdWxkUHJveHkgPSB0cnVlO1xuXG4gICAgICAgIGlmIChub1Byb3h5RW52KSB7XG4gICAgICAgICAgdmFyIG5vUHJveHkgPSBub1Byb3h5RW52LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uIHRyaW0ocykge1xuICAgICAgICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc2hvdWxkUHJveHkgPSAhbm9Qcm94eS5zb21lKGZ1bmN0aW9uIHByb3h5TWF0Y2gocHJveHlFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoIXByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJveHlFbGVtZW50ID09PSAnKicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJveHlFbGVtZW50WzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICBwYXJzZWQuaG9zdG5hbWUuc3Vic3RyKHBhcnNlZC5ob3N0bmFtZS5sZW5ndGggLSBwcm94eUVsZW1lbnQubGVuZ3RoKSA9PT0gcHJveHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkLmhvc3RuYW1lID09PSBwcm94eUVsZW1lbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkUHJveHkpIHtcbiAgICAgICAgICBwcm94eSA9IHtcbiAgICAgICAgICAgIGhvc3Q6IHBhcnNlZFByb3h5VXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgcG9ydDogcGFyc2VkUHJveHlVcmwucG9ydCxcbiAgICAgICAgICAgIHByb3RvY29sOiBwYXJzZWRQcm94eVVybC5wcm90b2NvbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAocGFyc2VkUHJveHlVcmwuYXV0aCkge1xuICAgICAgICAgICAgdmFyIHByb3h5VXJsQXV0aCA9IHBhcnNlZFByb3h5VXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHByb3h5LmF1dGggPSB7XG4gICAgICAgICAgICAgIHVzZXJuYW1lOiBwcm94eVVybEF1dGhbMF0sXG4gICAgICAgICAgICAgIHBhc3N3b3JkOiBwcm94eVVybEF1dGhbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3h5KSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuaG9zdCA9IHBhcnNlZC5ob3N0bmFtZSArIChwYXJzZWQucG9ydCA/ICc6JyArIHBhcnNlZC5wb3J0IDogJycpO1xuICAgICAgc2V0UHJveHkob3B0aW9ucywgcHJveHksIHByb3RvY29sICsgJy8vJyArIHBhcnNlZC5ob3N0bmFtZSArIChwYXJzZWQucG9ydCA/ICc6JyArIHBhcnNlZC5wb3J0IDogJycpICsgb3B0aW9ucy5wYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNwb3J0O1xuICAgIHZhciBpc0h0dHBzUHJveHkgPSBpc0h0dHBzUmVxdWVzdCAmJiAocHJveHkgPyBpc0h0dHBzLnRlc3QocHJveHkucHJvdG9jb2wpIDogdHJ1ZSk7XG4gICAgaWYgKGNvbmZpZy50cmFuc3BvcnQpIHtcbiAgICAgIHRyYW5zcG9ydCA9IGNvbmZpZy50cmFuc3BvcnQ7XG4gICAgfSBlbHNlIGlmIChjb25maWcubWF4UmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUHJveHkgPyBodHRwcyA6IGh0dHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb25maWcubWF4UmVkaXJlY3RzKSB7XG4gICAgICAgIG9wdGlvbnMubWF4UmVkaXJlY3RzID0gY29uZmlnLm1heFJlZGlyZWN0cztcbiAgICAgIH1cbiAgICAgIHRyYW5zcG9ydCA9IGlzSHR0cHNQcm94eSA/IGh0dHBzRm9sbG93IDogaHR0cEZvbGxvdztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSkge1xuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gY29uZmlnLm1heEJvZHlMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0XG4gICAgdmFyIHJlcSA9IHRyYW5zcG9ydC5yZXF1ZXN0KG9wdGlvbnMsIGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlcykge1xuICAgICAgaWYgKHJlcS5hYm9ydGVkKSByZXR1cm47XG5cbiAgICAgIC8vIHVuY29tcHJlc3MgdGhlIHJlc3BvbnNlIGJvZHkgdHJhbnNwYXJlbnRseSBpZiByZXF1aXJlZFxuICAgICAgdmFyIHN0cmVhbSA9IHJlcztcblxuICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHJlcXVlc3QgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgIHZhciBsYXN0UmVxdWVzdCA9IHJlcy5yZXEgfHwgcmVxO1xuXG5cbiAgICAgIC8vIGlmIG5vIGNvbnRlbnQsIGlzIEhFQUQgcmVxdWVzdCBvciBkZWNvbXByZXNzIGRpc2FibGVkIHdlIHNob3VsZCBub3QgZGVjb21wcmVzc1xuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDQgJiYgbGFzdFJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29uZmlnLmRlY29tcHJlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgIHN3aXRjaCAocmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkge1xuICAgICAgICAvKmVzbGludCBkZWZhdWx0LWNhc2U6MCovXG4gICAgICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgICBjYXNlICdjb21wcmVzcyc6XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtID0gc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcblxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHN0cmVhbTtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbURhdGEoY2h1bmspIHtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29udGVudCBsZW5ndGggaXMgbm90IG92ZXIgdGhlIG1heENvbnRlbnRMZW5ndGggaWYgc3BlY2lmaWVkXG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoID4gLTEgJiYgQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcikubGVuZ3RoID4gY29uZmlnLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRW5kKCkge1xuICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLnRvU3RyaW5nKGNvbmZpZy5yZXNwb25zZUVuY29kaW5nKTtcbiAgICAgICAgICAgIGlmICghY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcgfHwgY29uZmlnLnJlc3BvbnNlRW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscy5zdHJpcEJPTShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgaWYgKHJlcS5hYm9ydGVkICYmIGVyci5jb2RlICE9PSAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycpIHJldHVybjtcbiAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHJlcXVlc3QgdGltZW91dFxuICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgLy8gU29tZXRpbWUsIHRoZSByZXNwb25zZSB3aWxsIGJlIHZlcnkgc2xvdywgYW5kIGRvZXMgbm90IHJlc3BvbmQsIHRoZSBjb25uZWN0IGV2ZW50IHdpbGwgYmUgYmxvY2sgYnkgZXZlbnQgbG9vcCBzeXN0ZW0uXG4gICAgICAvLyBBbmQgdGltZXIgY2FsbGJhY2sgd2lsbCBiZSBmaXJlZCwgYW5kIGFib3J0KCkgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBjb25uZWN0aW9uLCB0aGVuIGdldCBcInNvY2tldCBoYW5nIHVwXCIgYW5kIGNvZGUgRUNPTk5SRVNFVC5cbiAgICAgIC8vIEF0IHRoaXMgdGltZSwgaWYgd2UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiByZXF1ZXN0LCBub2RlanMgd2lsbCBoYW5nIHVwIHNvbWUgc29ja2V0IG9uIGJhY2tncm91bmQuIGFuZCB0aGUgbnVtYmVyIHdpbGwgdXAgYW5kIHVwLlxuICAgICAgLy8gQW5kIHRoZW4gdGhlc2Ugc29ja2V0IHdoaWNoIGJlIGhhbmcgdXAgd2lsbCBkZXZvcmluZyBDUFUgbGl0dGxlIGJ5IGxpdHRsZS5cbiAgICAgIC8vIENsaWVudFJlcXVlc3Quc2V0VGltZW91dCB3aWxsIGJlIGZpcmVkIG9uIHRoZSBzcGVjaWZ5IG1pbGxpc2Vjb25kcywgYW5kIGNhbiBtYWtlIHN1cmUgdGhhdCBhYm9ydCgpIHdpbGwgYmUgZmlyZWQgYWZ0ZXIgY29ubmVjdC5cbiAgICAgIHJlcS5zZXRUaW1lb3V0KGNvbmZpZy50aW1lb3V0LCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXEpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKHJlcS5hYm9ydGVkKSByZXR1cm47XG5cbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjYW5jZWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgZGF0YS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVuaGFuY2VFcnJvcihlcnIsIGNvbmZpZywgbnVsbCwgcmVxKSk7XG4gICAgICB9KS5waXBlKHJlcSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhc3NlcnRcIik7IiwidmFyIGRlYnVnO1xudHJ5IHtcbiAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJmb2xsb3ctcmVkaXJlY3RzXCIpO1xufVxuY2F0Y2ggKGVycm9yKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1ZztcbiIsIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigoPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIGlmIChtcyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtcyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICByZXR1cm4gcGx1cmFsKG1zLCBkLCAnZGF5JykgfHxcbiAgICBwbHVyYWwobXMsIGgsICdob3VyJykgfHxcbiAgICBwbHVyYWwobXMsIG0sICdtaW51dGUnKSB8fFxuICAgIHBsdXJhbChtcywgcywgJ3NlY29uZCcpIHx8XG4gICAgbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG4sIG5hbWUpIHtcbiAgaWYgKG1zIDwgbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobXMgPCBuICogMS41KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobXMgLyBuKSArICcgJyArIG5hbWU7XG4gIH1cbiAgcmV0dXJuIE1hdGguY2VpbChtcyAvIG4pICsgJyAnICsgbmFtZSArICdzJztcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0dHlcIik7IiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gKGZsYWcsIGFyZ3YpID0+IHtcblx0YXJndiA9IGFyZ3YgfHwgcHJvY2Vzcy5hcmd2O1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvcyA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvcyA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvcyAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3MgPT09IC0xID8gdHJ1ZSA6IHBvcyA8IHRlcm1pbmF0b3JQb3MpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInpsaWJcIik7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiAodHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJ1ZmZlci5wcm90b3R5cGUpXG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiLyogZXNsaW50IHF1b3RlLXByb3BzOiBvZmYgKi9cbi8qIGVzbGludCBrZXktc3BhY2luZzogb2ZmICovXG4ndXNlIHN0cmljdCdcblxuZXhwb3J0cy5uYW1lcyA9IE9iamVjdC5mcmVlemUoe1xuICAnaWRlbnRpdHknOiAgIDB4MCxcbiAgJ3NoYTEnOiAgICAgICAweDExLFxuICAnc2hhMi0yNTYnOiAgIDB4MTIsXG4gICdzaGEyLTUxMic6ICAgMHgxMyxcbiAgJ2RibC1zaGEyLTI1Nic6IDB4NTYsXG4gICdzaGEzLTIyNCc6ICAgMHgxNyxcbiAgJ3NoYTMtMjU2JzogICAweDE2LFxuICAnc2hhMy0zODQnOiAgIDB4MTUsXG4gICdzaGEzLTUxMic6ICAgMHgxNCxcbiAgJ3NoYWtlLTEyOCc6ICAweDE4LFxuICAnc2hha2UtMjU2JzogIDB4MTksXG4gICdrZWNjYWstMjI0JzogMHgxQSxcbiAgJ2tlY2Nhay0yNTYnOiAweDFCLFxuICAna2VjY2FrLTM4NCc6IDB4MUMsXG4gICdrZWNjYWstNTEyJzogMHgxRCxcbiAgJ211cm11cjMtMTI4JzogMHgyMixcbiAgJ211cm11cjMtMzInOiAgMHgyMyxcbiAgJ2JsYWtlMmItOCc6ICAgMHhiMjAxLFxuICAnYmxha2UyYi0xNic6ICAweGIyMDIsXG4gICdibGFrZTJiLTI0JzogIDB4YjIwMyxcbiAgJ2JsYWtlMmItMzInOiAgMHhiMjA0LFxuICAnYmxha2UyYi00MCc6ICAweGIyMDUsXG4gICdibGFrZTJiLTQ4JzogIDB4YjIwNixcbiAgJ2JsYWtlMmItNTYnOiAgMHhiMjA3LFxuICAnYmxha2UyYi02NCc6ICAweGIyMDgsXG4gICdibGFrZTJiLTcyJzogIDB4YjIwOSxcbiAgJ2JsYWtlMmItODAnOiAgMHhiMjBhLFxuICAnYmxha2UyYi04OCc6ICAweGIyMGIsXG4gICdibGFrZTJiLTk2JzogIDB4YjIwYyxcbiAgJ2JsYWtlMmItMTA0JzogMHhiMjBkLFxuICAnYmxha2UyYi0xMTInOiAweGIyMGUsXG4gICdibGFrZTJiLTEyMCc6IDB4YjIwZixcbiAgJ2JsYWtlMmItMTI4JzogMHhiMjEwLFxuICAnYmxha2UyYi0xMzYnOiAweGIyMTEsXG4gICdibGFrZTJiLTE0NCc6IDB4YjIxMixcbiAgJ2JsYWtlMmItMTUyJzogMHhiMjEzLFxuICAnYmxha2UyYi0xNjAnOiAweGIyMTQsXG4gICdibGFrZTJiLTE2OCc6IDB4YjIxNSxcbiAgJ2JsYWtlMmItMTc2JzogMHhiMjE2LFxuICAnYmxha2UyYi0xODQnOiAweGIyMTcsXG4gICdibGFrZTJiLTE5Mic6IDB4YjIxOCxcbiAgJ2JsYWtlMmItMjAwJzogMHhiMjE5LFxuICAnYmxha2UyYi0yMDgnOiAweGIyMWEsXG4gICdibGFrZTJiLTIxNic6IDB4YjIxYixcbiAgJ2JsYWtlMmItMjI0JzogMHhiMjFjLFxuICAnYmxha2UyYi0yMzInOiAweGIyMWQsXG4gICdibGFrZTJiLTI0MCc6IDB4YjIxZSxcbiAgJ2JsYWtlMmItMjQ4JzogMHhiMjFmLFxuICAnYmxha2UyYi0yNTYnOiAweGIyMjAsXG4gICdibGFrZTJiLTI2NCc6IDB4YjIyMSxcbiAgJ2JsYWtlMmItMjcyJzogMHhiMjIyLFxuICAnYmxha2UyYi0yODAnOiAweGIyMjMsXG4gICdibGFrZTJiLTI4OCc6IDB4YjIyNCxcbiAgJ2JsYWtlMmItMjk2JzogMHhiMjI1LFxuICAnYmxha2UyYi0zMDQnOiAweGIyMjYsXG4gICdibGFrZTJiLTMxMic6IDB4YjIyNyxcbiAgJ2JsYWtlMmItMzIwJzogMHhiMjI4LFxuICAnYmxha2UyYi0zMjgnOiAweGIyMjksXG4gICdibGFrZTJiLTMzNic6IDB4YjIyYSxcbiAgJ2JsYWtlMmItMzQ0JzogMHhiMjJiLFxuICAnYmxha2UyYi0zNTInOiAweGIyMmMsXG4gICdibGFrZTJiLTM2MCc6IDB4YjIyZCxcbiAgJ2JsYWtlMmItMzY4JzogMHhiMjJlLFxuICAnYmxha2UyYi0zNzYnOiAweGIyMmYsXG4gICdibGFrZTJiLTM4NCc6IDB4YjIzMCxcbiAgJ2JsYWtlMmItMzkyJzogMHhiMjMxLFxuICAnYmxha2UyYi00MDAnOiAweGIyMzIsXG4gICdibGFrZTJiLTQwOCc6IDB4YjIzMyxcbiAgJ2JsYWtlMmItNDE2JzogMHhiMjM0LFxuICAnYmxha2UyYi00MjQnOiAweGIyMzUsXG4gICdibGFrZTJiLTQzMic6IDB4YjIzNixcbiAgJ2JsYWtlMmItNDQwJzogMHhiMjM3LFxuICAnYmxha2UyYi00NDgnOiAweGIyMzgsXG4gICdibGFrZTJiLTQ1Nic6IDB4YjIzOSxcbiAgJ2JsYWtlMmItNDY0JzogMHhiMjNhLFxuICAnYmxha2UyYi00NzInOiAweGIyM2IsXG4gICdibGFrZTJiLTQ4MCc6IDB4YjIzYyxcbiAgJ2JsYWtlMmItNDg4JzogMHhiMjNkLFxuICAnYmxha2UyYi00OTYnOiAweGIyM2UsXG4gICdibGFrZTJiLTUwNCc6IDB4YjIzZixcbiAgJ2JsYWtlMmItNTEyJzogMHhiMjQwLFxuICAnYmxha2Uycy04JzogICAweGIyNDEsXG4gICdibGFrZTJzLTE2JzogIDB4YjI0MixcbiAgJ2JsYWtlMnMtMjQnOiAgMHhiMjQzLFxuICAnYmxha2Uycy0zMic6ICAweGIyNDQsXG4gICdibGFrZTJzLTQwJzogIDB4YjI0NSxcbiAgJ2JsYWtlMnMtNDgnOiAgMHhiMjQ2LFxuICAnYmxha2Uycy01Nic6ICAweGIyNDcsXG4gICdibGFrZTJzLTY0JzogIDB4YjI0OCxcbiAgJ2JsYWtlMnMtNzInOiAgMHhiMjQ5LFxuICAnYmxha2Uycy04MCc6ICAweGIyNGEsXG4gICdibGFrZTJzLTg4JzogIDB4YjI0YixcbiAgJ2JsYWtlMnMtOTYnOiAgMHhiMjRjLFxuICAnYmxha2Uycy0xMDQnOiAweGIyNGQsXG4gICdibGFrZTJzLTExMic6IDB4YjI0ZSxcbiAgJ2JsYWtlMnMtMTIwJzogMHhiMjRmLFxuICAnYmxha2Uycy0xMjgnOiAweGIyNTAsXG4gICdibGFrZTJzLTEzNic6IDB4YjI1MSxcbiAgJ2JsYWtlMnMtMTQ0JzogMHhiMjUyLFxuICAnYmxha2Uycy0xNTInOiAweGIyNTMsXG4gICdibGFrZTJzLTE2MCc6IDB4YjI1NCxcbiAgJ2JsYWtlMnMtMTY4JzogMHhiMjU1LFxuICAnYmxha2Uycy0xNzYnOiAweGIyNTYsXG4gICdibGFrZTJzLTE4NCc6IDB4YjI1NyxcbiAgJ2JsYWtlMnMtMTkyJzogMHhiMjU4LFxuICAnYmxha2Uycy0yMDAnOiAweGIyNTksXG4gICdibGFrZTJzLTIwOCc6IDB4YjI1YSxcbiAgJ2JsYWtlMnMtMjE2JzogMHhiMjViLFxuICAnYmxha2Uycy0yMjQnOiAweGIyNWMsXG4gICdibGFrZTJzLTIzMic6IDB4YjI1ZCxcbiAgJ2JsYWtlMnMtMjQwJzogMHhiMjVlLFxuICAnYmxha2Uycy0yNDgnOiAweGIyNWYsXG4gICdibGFrZTJzLTI1Nic6IDB4YjI2MCxcbiAgJ1NrZWluMjU2LTgnOiAweGIzMDEsXG4gICdTa2VpbjI1Ni0xNic6IDB4YjMwMixcbiAgJ1NrZWluMjU2LTI0JzogMHhiMzAzLFxuICAnU2tlaW4yNTYtMzInOiAweGIzMDQsXG4gICdTa2VpbjI1Ni00MCc6IDB4YjMwNSxcbiAgJ1NrZWluMjU2LTQ4JzogMHhiMzA2LFxuICAnU2tlaW4yNTYtNTYnOiAweGIzMDcsXG4gICdTa2VpbjI1Ni02NCc6IDB4YjMwOCxcbiAgJ1NrZWluMjU2LTcyJzogMHhiMzA5LFxuICAnU2tlaW4yNTYtODAnOiAweGIzMGEsXG4gICdTa2VpbjI1Ni04OCc6IDB4YjMwYixcbiAgJ1NrZWluMjU2LTk2JzogMHhiMzBjLFxuICAnU2tlaW4yNTYtMTA0JzogMHhiMzBkLFxuICAnU2tlaW4yNTYtMTEyJzogMHhiMzBlLFxuICAnU2tlaW4yNTYtMTIwJzogMHhiMzBmLFxuICAnU2tlaW4yNTYtMTI4JzogMHhiMzEwLFxuICAnU2tlaW4yNTYtMTM2JzogMHhiMzExLFxuICAnU2tlaW4yNTYtMTQ0JzogMHhiMzEyLFxuICAnU2tlaW4yNTYtMTUyJzogMHhiMzEzLFxuICAnU2tlaW4yNTYtMTYwJzogMHhiMzE0LFxuICAnU2tlaW4yNTYtMTY4JzogMHhiMzE1LFxuICAnU2tlaW4yNTYtMTc2JzogMHhiMzE2LFxuICAnU2tlaW4yNTYtMTg0JzogMHhiMzE3LFxuICAnU2tlaW4yNTYtMTkyJzogMHhiMzE4LFxuICAnU2tlaW4yNTYtMjAwJzogMHhiMzE5LFxuICAnU2tlaW4yNTYtMjA4JzogMHhiMzFhLFxuICAnU2tlaW4yNTYtMjE2JzogMHhiMzFiLFxuICAnU2tlaW4yNTYtMjI0JzogMHhiMzFjLFxuICAnU2tlaW4yNTYtMjMyJzogMHhiMzFkLFxuICAnU2tlaW4yNTYtMjQwJzogMHhiMzFlLFxuICAnU2tlaW4yNTYtMjQ4JzogMHhiMzFmLFxuICAnU2tlaW4yNTYtMjU2JzogMHhiMzIwLFxuICAnU2tlaW41MTItOCc6IDB4YjMyMSxcbiAgJ1NrZWluNTEyLTE2JzogMHhiMzIyLFxuICAnU2tlaW41MTItMjQnOiAweGIzMjMsXG4gICdTa2VpbjUxMi0zMic6IDB4YjMyNCxcbiAgJ1NrZWluNTEyLTQwJzogMHhiMzI1LFxuICAnU2tlaW41MTItNDgnOiAweGIzMjYsXG4gICdTa2VpbjUxMi01Nic6IDB4YjMyNyxcbiAgJ1NrZWluNTEyLTY0JzogMHhiMzI4LFxuICAnU2tlaW41MTItNzInOiAweGIzMjksXG4gICdTa2VpbjUxMi04MCc6IDB4YjMyYSxcbiAgJ1NrZWluNTEyLTg4JzogMHhiMzJiLFxuICAnU2tlaW41MTItOTYnOiAweGIzMmMsXG4gICdTa2VpbjUxMi0xMDQnOiAweGIzMmQsXG4gICdTa2VpbjUxMi0xMTInOiAweGIzMmUsXG4gICdTa2VpbjUxMi0xMjAnOiAweGIzMmYsXG4gICdTa2VpbjUxMi0xMjgnOiAweGIzMzAsXG4gICdTa2VpbjUxMi0xMzYnOiAweGIzMzEsXG4gICdTa2VpbjUxMi0xNDQnOiAweGIzMzIsXG4gICdTa2VpbjUxMi0xNTInOiAweGIzMzMsXG4gICdTa2VpbjUxMi0xNjAnOiAweGIzMzQsXG4gICdTa2VpbjUxMi0xNjgnOiAweGIzMzUsXG4gICdTa2VpbjUxMi0xNzYnOiAweGIzMzYsXG4gICdTa2VpbjUxMi0xODQnOiAweGIzMzcsXG4gICdTa2VpbjUxMi0xOTInOiAweGIzMzgsXG4gICdTa2VpbjUxMi0yMDAnOiAweGIzMzksXG4gICdTa2VpbjUxMi0yMDgnOiAweGIzM2EsXG4gICdTa2VpbjUxMi0yMTYnOiAweGIzM2IsXG4gICdTa2VpbjUxMi0yMjQnOiAweGIzM2MsXG4gICdTa2VpbjUxMi0yMzInOiAweGIzM2QsXG4gICdTa2VpbjUxMi0yNDAnOiAweGIzM2UsXG4gICdTa2VpbjUxMi0yNDgnOiAweGIzM2YsXG4gICdTa2VpbjUxMi0yNTYnOiAweGIzNDAsXG4gICdTa2VpbjUxMi0yNjQnOiAweGIzNDEsXG4gICdTa2VpbjUxMi0yNzInOiAweGIzNDIsXG4gICdTa2VpbjUxMi0yODAnOiAweGIzNDMsXG4gICdTa2VpbjUxMi0yODgnOiAweGIzNDQsXG4gICdTa2VpbjUxMi0yOTYnOiAweGIzNDUsXG4gICdTa2VpbjUxMi0zMDQnOiAweGIzNDYsXG4gICdTa2VpbjUxMi0zMTInOiAweGIzNDcsXG4gICdTa2VpbjUxMi0zMjAnOiAweGIzNDgsXG4gICdTa2VpbjUxMi0zMjgnOiAweGIzNDksXG4gICdTa2VpbjUxMi0zMzYnOiAweGIzNGEsXG4gICdTa2VpbjUxMi0zNDQnOiAweGIzNGIsXG4gICdTa2VpbjUxMi0zNTInOiAweGIzNGMsXG4gICdTa2VpbjUxMi0zNjAnOiAweGIzNGQsXG4gICdTa2VpbjUxMi0zNjgnOiAweGIzNGUsXG4gICdTa2VpbjUxMi0zNzYnOiAweGIzNGYsXG4gICdTa2VpbjUxMi0zODQnOiAweGIzNTAsXG4gICdTa2VpbjUxMi0zOTInOiAweGIzNTEsXG4gICdTa2VpbjUxMi00MDAnOiAweGIzNTIsXG4gICdTa2VpbjUxMi00MDgnOiAweGIzNTMsXG4gICdTa2VpbjUxMi00MTYnOiAweGIzNTQsXG4gICdTa2VpbjUxMi00MjQnOiAweGIzNTUsXG4gICdTa2VpbjUxMi00MzInOiAweGIzNTYsXG4gICdTa2VpbjUxMi00NDAnOiAweGIzNTcsXG4gICdTa2VpbjUxMi00NDgnOiAweGIzNTgsXG4gICdTa2VpbjUxMi00NTYnOiAweGIzNTksXG4gICdTa2VpbjUxMi00NjQnOiAweGIzNWEsXG4gICdTa2VpbjUxMi00NzInOiAweGIzNWIsXG4gICdTa2VpbjUxMi00ODAnOiAweGIzNWMsXG4gICdTa2VpbjUxMi00ODgnOiAweGIzNWQsXG4gICdTa2VpbjUxMi00OTYnOiAweGIzNWUsXG4gICdTa2VpbjUxMi01MDQnOiAweGIzNWYsXG4gICdTa2VpbjUxMi01MTInOiAweGIzNjAsXG4gICdTa2VpbjEwMjQtOCc6IDB4YjM2MSxcbiAgJ1NrZWluMTAyNC0xNic6IDB4YjM2MixcbiAgJ1NrZWluMTAyNC0yNCc6IDB4YjM2MyxcbiAgJ1NrZWluMTAyNC0zMic6IDB4YjM2NCxcbiAgJ1NrZWluMTAyNC00MCc6IDB4YjM2NSxcbiAgJ1NrZWluMTAyNC00OCc6IDB4YjM2NixcbiAgJ1NrZWluMTAyNC01Nic6IDB4YjM2NyxcbiAgJ1NrZWluMTAyNC02NCc6IDB4YjM2OCxcbiAgJ1NrZWluMTAyNC03Mic6IDB4YjM2OSxcbiAgJ1NrZWluMTAyNC04MCc6IDB4YjM2YSxcbiAgJ1NrZWluMTAyNC04OCc6IDB4YjM2YixcbiAgJ1NrZWluMTAyNC05Nic6IDB4YjM2YyxcbiAgJ1NrZWluMTAyNC0xMDQnOiAweGIzNmQsXG4gICdTa2VpbjEwMjQtMTEyJzogMHhiMzZlLFxuICAnU2tlaW4xMDI0LTEyMCc6IDB4YjM2ZixcbiAgJ1NrZWluMTAyNC0xMjgnOiAweGIzNzAsXG4gICdTa2VpbjEwMjQtMTM2JzogMHhiMzcxLFxuICAnU2tlaW4xMDI0LTE0NCc6IDB4YjM3MixcbiAgJ1NrZWluMTAyNC0xNTInOiAweGIzNzMsXG4gICdTa2VpbjEwMjQtMTYwJzogMHhiMzc0LFxuICAnU2tlaW4xMDI0LTE2OCc6IDB4YjM3NSxcbiAgJ1NrZWluMTAyNC0xNzYnOiAweGIzNzYsXG4gICdTa2VpbjEwMjQtMTg0JzogMHhiMzc3LFxuICAnU2tlaW4xMDI0LTE5Mic6IDB4YjM3OCxcbiAgJ1NrZWluMTAyNC0yMDAnOiAweGIzNzksXG4gICdTa2VpbjEwMjQtMjA4JzogMHhiMzdhLFxuICAnU2tlaW4xMDI0LTIxNic6IDB4YjM3YixcbiAgJ1NrZWluMTAyNC0yMjQnOiAweGIzN2MsXG4gICdTa2VpbjEwMjQtMjMyJzogMHhiMzdkLFxuICAnU2tlaW4xMDI0LTI0MCc6IDB4YjM3ZSxcbiAgJ1NrZWluMTAyNC0yNDgnOiAweGIzN2YsXG4gICdTa2VpbjEwMjQtMjU2JzogMHhiMzgwLFxuICAnU2tlaW4xMDI0LTI2NCc6IDB4YjM4MSxcbiAgJ1NrZWluMTAyNC0yNzInOiAweGIzODIsXG4gICdTa2VpbjEwMjQtMjgwJzogMHhiMzgzLFxuICAnU2tlaW4xMDI0LTI4OCc6IDB4YjM4NCxcbiAgJ1NrZWluMTAyNC0yOTYnOiAweGIzODUsXG4gICdTa2VpbjEwMjQtMzA0JzogMHhiMzg2LFxuICAnU2tlaW4xMDI0LTMxMic6IDB4YjM4NyxcbiAgJ1NrZWluMTAyNC0zMjAnOiAweGIzODgsXG4gICdTa2VpbjEwMjQtMzI4JzogMHhiMzg5LFxuICAnU2tlaW4xMDI0LTMzNic6IDB4YjM4YSxcbiAgJ1NrZWluMTAyNC0zNDQnOiAweGIzOGIsXG4gICdTa2VpbjEwMjQtMzUyJzogMHhiMzhjLFxuICAnU2tlaW4xMDI0LTM2MCc6IDB4YjM4ZCxcbiAgJ1NrZWluMTAyNC0zNjgnOiAweGIzOGUsXG4gICdTa2VpbjEwMjQtMzc2JzogMHhiMzhmLFxuICAnU2tlaW4xMDI0LTM4NCc6IDB4YjM5MCxcbiAgJ1NrZWluMTAyNC0zOTInOiAweGIzOTEsXG4gICdTa2VpbjEwMjQtNDAwJzogMHhiMzkyLFxuICAnU2tlaW4xMDI0LTQwOCc6IDB4YjM5MyxcbiAgJ1NrZWluMTAyNC00MTYnOiAweGIzOTQsXG4gICdTa2VpbjEwMjQtNDI0JzogMHhiMzk1LFxuICAnU2tlaW4xMDI0LTQzMic6IDB4YjM5NixcbiAgJ1NrZWluMTAyNC00NDAnOiAweGIzOTcsXG4gICdTa2VpbjEwMjQtNDQ4JzogMHhiMzk4LFxuICAnU2tlaW4xMDI0LTQ1Nic6IDB4YjM5OSxcbiAgJ1NrZWluMTAyNC00NjQnOiAweGIzOWEsXG4gICdTa2VpbjEwMjQtNDcyJzogMHhiMzliLFxuICAnU2tlaW4xMDI0LTQ4MCc6IDB4YjM5YyxcbiAgJ1NrZWluMTAyNC00ODgnOiAweGIzOWQsXG4gICdTa2VpbjEwMjQtNDk2JzogMHhiMzllLFxuICAnU2tlaW4xMDI0LTUwNCc6IDB4YjM5ZixcbiAgJ1NrZWluMTAyNC01MTInOiAweGIzYTAsXG4gICdTa2VpbjEwMjQtNTIwJzogMHhiM2ExLFxuICAnU2tlaW4xMDI0LTUyOCc6IDB4YjNhMixcbiAgJ1NrZWluMTAyNC01MzYnOiAweGIzYTMsXG4gICdTa2VpbjEwMjQtNTQ0JzogMHhiM2E0LFxuICAnU2tlaW4xMDI0LTU1Mic6IDB4YjNhNSxcbiAgJ1NrZWluMTAyNC01NjAnOiAweGIzYTYsXG4gICdTa2VpbjEwMjQtNTY4JzogMHhiM2E3LFxuICAnU2tlaW4xMDI0LTU3Nic6IDB4YjNhOCxcbiAgJ1NrZWluMTAyNC01ODQnOiAweGIzYTksXG4gICdTa2VpbjEwMjQtNTkyJzogMHhiM2FhLFxuICAnU2tlaW4xMDI0LTYwMCc6IDB4YjNhYixcbiAgJ1NrZWluMTAyNC02MDgnOiAweGIzYWMsXG4gICdTa2VpbjEwMjQtNjE2JzogMHhiM2FkLFxuICAnU2tlaW4xMDI0LTYyNCc6IDB4YjNhZSxcbiAgJ1NrZWluMTAyNC02MzInOiAweGIzYWYsXG4gICdTa2VpbjEwMjQtNjQwJzogMHhiM2IwLFxuICAnU2tlaW4xMDI0LTY0OCc6IDB4YjNiMSxcbiAgJ1NrZWluMTAyNC02NTYnOiAweGIzYjIsXG4gICdTa2VpbjEwMjQtNjY0JzogMHhiM2IzLFxuICAnU2tlaW4xMDI0LTY3Mic6IDB4YjNiNCxcbiAgJ1NrZWluMTAyNC02ODAnOiAweGIzYjUsXG4gICdTa2VpbjEwMjQtNjg4JzogMHhiM2I2LFxuICAnU2tlaW4xMDI0LTY5Nic6IDB4YjNiNyxcbiAgJ1NrZWluMTAyNC03MDQnOiAweGIzYjgsXG4gICdTa2VpbjEwMjQtNzEyJzogMHhiM2I5LFxuICAnU2tlaW4xMDI0LTcyMCc6IDB4YjNiYSxcbiAgJ1NrZWluMTAyNC03MjgnOiAweGIzYmIsXG4gICdTa2VpbjEwMjQtNzM2JzogMHhiM2JjLFxuICAnU2tlaW4xMDI0LTc0NCc6IDB4YjNiZCxcbiAgJ1NrZWluMTAyNC03NTInOiAweGIzYmUsXG4gICdTa2VpbjEwMjQtNzYwJzogMHhiM2JmLFxuICAnU2tlaW4xMDI0LTc2OCc6IDB4YjNjMCxcbiAgJ1NrZWluMTAyNC03NzYnOiAweGIzYzEsXG4gICdTa2VpbjEwMjQtNzg0JzogMHhiM2MyLFxuICAnU2tlaW4xMDI0LTc5Mic6IDB4YjNjMyxcbiAgJ1NrZWluMTAyNC04MDAnOiAweGIzYzQsXG4gICdTa2VpbjEwMjQtODA4JzogMHhiM2M1LFxuICAnU2tlaW4xMDI0LTgxNic6IDB4YjNjNixcbiAgJ1NrZWluMTAyNC04MjQnOiAweGIzYzcsXG4gICdTa2VpbjEwMjQtODMyJzogMHhiM2M4LFxuICAnU2tlaW4xMDI0LTg0MCc6IDB4YjNjOSxcbiAgJ1NrZWluMTAyNC04NDgnOiAweGIzY2EsXG4gICdTa2VpbjEwMjQtODU2JzogMHhiM2NiLFxuICAnU2tlaW4xMDI0LTg2NCc6IDB4YjNjYyxcbiAgJ1NrZWluMTAyNC04NzInOiAweGIzY2QsXG4gICdTa2VpbjEwMjQtODgwJzogMHhiM2NlLFxuICAnU2tlaW4xMDI0LTg4OCc6IDB4YjNjZixcbiAgJ1NrZWluMTAyNC04OTYnOiAweGIzZDAsXG4gICdTa2VpbjEwMjQtOTA0JzogMHhiM2QxLFxuICAnU2tlaW4xMDI0LTkxMic6IDB4YjNkMixcbiAgJ1NrZWluMTAyNC05MjAnOiAweGIzZDMsXG4gICdTa2VpbjEwMjQtOTI4JzogMHhiM2Q0LFxuICAnU2tlaW4xMDI0LTkzNic6IDB4YjNkNSxcbiAgJ1NrZWluMTAyNC05NDQnOiAweGIzZDYsXG4gICdTa2VpbjEwMjQtOTUyJzogMHhiM2Q3LFxuICAnU2tlaW4xMDI0LTk2MCc6IDB4YjNkOCxcbiAgJ1NrZWluMTAyNC05NjgnOiAweGIzZDksXG4gICdTa2VpbjEwMjQtOTc2JzogMHhiM2RhLFxuICAnU2tlaW4xMDI0LTk4NCc6IDB4YjNkYixcbiAgJ1NrZWluMTAyNC05OTInOiAweGIzZGMsXG4gICdTa2VpbjEwMjQtMTAwMCc6IDB4YjNkZCxcbiAgJ1NrZWluMTAyNC0xMDA4JzogMHhiM2RlLFxuICAnU2tlaW4xMDI0LTEwMTYnOiAweGIzZGYsXG4gICdTa2VpbjEwMjQtMTAyNCc6IDB4YjNlMFxufSlcblxuZXhwb3J0cy5jb2RlcyA9IE9iamVjdC5mcmVlemUoe1xuICAweDA6ICdpZGVudGl0eScsXG5cbiAgLy8gc2hhIGZhbWlseVxuICAweDExOiAnc2hhMScsXG4gIDB4MTI6ICdzaGEyLTI1NicsXG4gIDB4MTM6ICdzaGEyLTUxMicsXG4gIDB4NTY6ICdkYmwtc2hhMi0yNTYnLFxuICAweDE3OiAnc2hhMy0yMjQnLFxuICAweDE2OiAnc2hhMy0yNTYnLFxuICAweDE1OiAnc2hhMy0zODQnLFxuICAweDE0OiAnc2hhMy01MTInLFxuICAweDE4OiAnc2hha2UtMTI4JyxcbiAgMHgxOTogJ3NoYWtlLTI1NicsXG4gIDB4MUE6ICdrZWNjYWstMjI0JyxcbiAgMHgxQjogJ2tlY2Nhay0yNTYnLFxuICAweDFDOiAna2VjY2FrLTM4NCcsXG4gIDB4MUQ6ICdrZWNjYWstNTEyJyxcblxuICAweDIyOiAnbXVybXVyMy0xMjgnLFxuICAweDIzOiAnbXVybXVyMy0zMicsXG5cbiAgLy8gYmxha2UyXG4gIDB4YjIwMTogJ2JsYWtlMmItOCcsXG4gIDB4YjIwMjogJ2JsYWtlMmItMTYnLFxuICAweGIyMDM6ICdibGFrZTJiLTI0JyxcbiAgMHhiMjA0OiAnYmxha2UyYi0zMicsXG4gIDB4YjIwNTogJ2JsYWtlMmItNDAnLFxuICAweGIyMDY6ICdibGFrZTJiLTQ4JyxcbiAgMHhiMjA3OiAnYmxha2UyYi01NicsXG4gIDB4YjIwODogJ2JsYWtlMmItNjQnLFxuICAweGIyMDk6ICdibGFrZTJiLTcyJyxcbiAgMHhiMjBhOiAnYmxha2UyYi04MCcsXG4gIDB4YjIwYjogJ2JsYWtlMmItODgnLFxuICAweGIyMGM6ICdibGFrZTJiLTk2JyxcbiAgMHhiMjBkOiAnYmxha2UyYi0xMDQnLFxuICAweGIyMGU6ICdibGFrZTJiLTExMicsXG4gIDB4YjIwZjogJ2JsYWtlMmItMTIwJyxcbiAgMHhiMjEwOiAnYmxha2UyYi0xMjgnLFxuICAweGIyMTE6ICdibGFrZTJiLTEzNicsXG4gIDB4YjIxMjogJ2JsYWtlMmItMTQ0JyxcbiAgMHhiMjEzOiAnYmxha2UyYi0xNTInLFxuICAweGIyMTQ6ICdibGFrZTJiLTE2MCcsXG4gIDB4YjIxNTogJ2JsYWtlMmItMTY4JyxcbiAgMHhiMjE2OiAnYmxha2UyYi0xNzYnLFxuICAweGIyMTc6ICdibGFrZTJiLTE4NCcsXG4gIDB4YjIxODogJ2JsYWtlMmItMTkyJyxcbiAgMHhiMjE5OiAnYmxha2UyYi0yMDAnLFxuICAweGIyMWE6ICdibGFrZTJiLTIwOCcsXG4gIDB4YjIxYjogJ2JsYWtlMmItMjE2JyxcbiAgMHhiMjFjOiAnYmxha2UyYi0yMjQnLFxuICAweGIyMWQ6ICdibGFrZTJiLTIzMicsXG4gIDB4YjIxZTogJ2JsYWtlMmItMjQwJyxcbiAgMHhiMjFmOiAnYmxha2UyYi0yNDgnLFxuICAweGIyMjA6ICdibGFrZTJiLTI1NicsXG4gIDB4YjIyMTogJ2JsYWtlMmItMjY0JyxcbiAgMHhiMjIyOiAnYmxha2UyYi0yNzInLFxuICAweGIyMjM6ICdibGFrZTJiLTI4MCcsXG4gIDB4YjIyNDogJ2JsYWtlMmItMjg4JyxcbiAgMHhiMjI1OiAnYmxha2UyYi0yOTYnLFxuICAweGIyMjY6ICdibGFrZTJiLTMwNCcsXG4gIDB4YjIyNzogJ2JsYWtlMmItMzEyJyxcbiAgMHhiMjI4OiAnYmxha2UyYi0zMjAnLFxuICAweGIyMjk6ICdibGFrZTJiLTMyOCcsXG4gIDB4YjIyYTogJ2JsYWtlMmItMzM2JyxcbiAgMHhiMjJiOiAnYmxha2UyYi0zNDQnLFxuICAweGIyMmM6ICdibGFrZTJiLTM1MicsXG4gIDB4YjIyZDogJ2JsYWtlMmItMzYwJyxcbiAgMHhiMjJlOiAnYmxha2UyYi0zNjgnLFxuICAweGIyMmY6ICdibGFrZTJiLTM3NicsXG4gIDB4YjIzMDogJ2JsYWtlMmItMzg0JyxcbiAgMHhiMjMxOiAnYmxha2UyYi0zOTInLFxuICAweGIyMzI6ICdibGFrZTJiLTQwMCcsXG4gIDB4YjIzMzogJ2JsYWtlMmItNDA4JyxcbiAgMHhiMjM0OiAnYmxha2UyYi00MTYnLFxuICAweGIyMzU6ICdibGFrZTJiLTQyNCcsXG4gIDB4YjIzNjogJ2JsYWtlMmItNDMyJyxcbiAgMHhiMjM3OiAnYmxha2UyYi00NDAnLFxuICAweGIyMzg6ICdibGFrZTJiLTQ0OCcsXG4gIDB4YjIzOTogJ2JsYWtlMmItNDU2JyxcbiAgMHhiMjNhOiAnYmxha2UyYi00NjQnLFxuICAweGIyM2I6ICdibGFrZTJiLTQ3MicsXG4gIDB4YjIzYzogJ2JsYWtlMmItNDgwJyxcbiAgMHhiMjNkOiAnYmxha2UyYi00ODgnLFxuICAweGIyM2U6ICdibGFrZTJiLTQ5NicsXG4gIDB4YjIzZjogJ2JsYWtlMmItNTA0JyxcbiAgMHhiMjQwOiAnYmxha2UyYi01MTInLFxuICAweGIyNDE6ICdibGFrZTJzLTgnLFxuICAweGIyNDI6ICdibGFrZTJzLTE2JyxcbiAgMHhiMjQzOiAnYmxha2Uycy0yNCcsXG4gIDB4YjI0NDogJ2JsYWtlMnMtMzInLFxuICAweGIyNDU6ICdibGFrZTJzLTQwJyxcbiAgMHhiMjQ2OiAnYmxha2Uycy00OCcsXG4gIDB4YjI0NzogJ2JsYWtlMnMtNTYnLFxuICAweGIyNDg6ICdibGFrZTJzLTY0JyxcbiAgMHhiMjQ5OiAnYmxha2Uycy03MicsXG4gIDB4YjI0YTogJ2JsYWtlMnMtODAnLFxuICAweGIyNGI6ICdibGFrZTJzLTg4JyxcbiAgMHhiMjRjOiAnYmxha2Uycy05NicsXG4gIDB4YjI0ZDogJ2JsYWtlMnMtMTA0JyxcbiAgMHhiMjRlOiAnYmxha2Uycy0xMTInLFxuICAweGIyNGY6ICdibGFrZTJzLTEyMCcsXG4gIDB4YjI1MDogJ2JsYWtlMnMtMTI4JyxcbiAgMHhiMjUxOiAnYmxha2Uycy0xMzYnLFxuICAweGIyNTI6ICdibGFrZTJzLTE0NCcsXG4gIDB4YjI1MzogJ2JsYWtlMnMtMTUyJyxcbiAgMHhiMjU0OiAnYmxha2Uycy0xNjAnLFxuICAweGIyNTU6ICdibGFrZTJzLTE2OCcsXG4gIDB4YjI1NjogJ2JsYWtlMnMtMTc2JyxcbiAgMHhiMjU3OiAnYmxha2Uycy0xODQnLFxuICAweGIyNTg6ICdibGFrZTJzLTE5MicsXG4gIDB4YjI1OTogJ2JsYWtlMnMtMjAwJyxcbiAgMHhiMjVhOiAnYmxha2Uycy0yMDgnLFxuICAweGIyNWI6ICdibGFrZTJzLTIxNicsXG4gIDB4YjI1YzogJ2JsYWtlMnMtMjI0JyxcbiAgMHhiMjVkOiAnYmxha2Uycy0yMzInLFxuICAweGIyNWU6ICdibGFrZTJzLTI0MCcsXG4gIDB4YjI1ZjogJ2JsYWtlMnMtMjQ4JyxcbiAgMHhiMjYwOiAnYmxha2Uycy0yNTYnLFxuXG4gIC8vIHNrZWluXG4gIDB4YjMwMTogJ1NrZWluMjU2LTgnLFxuICAweGIzMDI6ICdTa2VpbjI1Ni0xNicsXG4gIDB4YjMwMzogJ1NrZWluMjU2LTI0JyxcbiAgMHhiMzA0OiAnU2tlaW4yNTYtMzInLFxuICAweGIzMDU6ICdTa2VpbjI1Ni00MCcsXG4gIDB4YjMwNjogJ1NrZWluMjU2LTQ4JyxcbiAgMHhiMzA3OiAnU2tlaW4yNTYtNTYnLFxuICAweGIzMDg6ICdTa2VpbjI1Ni02NCcsXG4gIDB4YjMwOTogJ1NrZWluMjU2LTcyJyxcbiAgMHhiMzBhOiAnU2tlaW4yNTYtODAnLFxuICAweGIzMGI6ICdTa2VpbjI1Ni04OCcsXG4gIDB4YjMwYzogJ1NrZWluMjU2LTk2JyxcbiAgMHhiMzBkOiAnU2tlaW4yNTYtMTA0JyxcbiAgMHhiMzBlOiAnU2tlaW4yNTYtMTEyJyxcbiAgMHhiMzBmOiAnU2tlaW4yNTYtMTIwJyxcbiAgMHhiMzEwOiAnU2tlaW4yNTYtMTI4JyxcbiAgMHhiMzExOiAnU2tlaW4yNTYtMTM2JyxcbiAgMHhiMzEyOiAnU2tlaW4yNTYtMTQ0JyxcbiAgMHhiMzEzOiAnU2tlaW4yNTYtMTUyJyxcbiAgMHhiMzE0OiAnU2tlaW4yNTYtMTYwJyxcbiAgMHhiMzE1OiAnU2tlaW4yNTYtMTY4JyxcbiAgMHhiMzE2OiAnU2tlaW4yNTYtMTc2JyxcbiAgMHhiMzE3OiAnU2tlaW4yNTYtMTg0JyxcbiAgMHhiMzE4OiAnU2tlaW4yNTYtMTkyJyxcbiAgMHhiMzE5OiAnU2tlaW4yNTYtMjAwJyxcbiAgMHhiMzFhOiAnU2tlaW4yNTYtMjA4JyxcbiAgMHhiMzFiOiAnU2tlaW4yNTYtMjE2JyxcbiAgMHhiMzFjOiAnU2tlaW4yNTYtMjI0JyxcbiAgMHhiMzFkOiAnU2tlaW4yNTYtMjMyJyxcbiAgMHhiMzFlOiAnU2tlaW4yNTYtMjQwJyxcbiAgMHhiMzFmOiAnU2tlaW4yNTYtMjQ4JyxcbiAgMHhiMzIwOiAnU2tlaW4yNTYtMjU2JyxcbiAgMHhiMzIxOiAnU2tlaW41MTItOCcsXG4gIDB4YjMyMjogJ1NrZWluNTEyLTE2JyxcbiAgMHhiMzIzOiAnU2tlaW41MTItMjQnLFxuICAweGIzMjQ6ICdTa2VpbjUxMi0zMicsXG4gIDB4YjMyNTogJ1NrZWluNTEyLTQwJyxcbiAgMHhiMzI2OiAnU2tlaW41MTItNDgnLFxuICAweGIzMjc6ICdTa2VpbjUxMi01NicsXG4gIDB4YjMyODogJ1NrZWluNTEyLTY0JyxcbiAgMHhiMzI5OiAnU2tlaW41MTItNzInLFxuICAweGIzMmE6ICdTa2VpbjUxMi04MCcsXG4gIDB4YjMyYjogJ1NrZWluNTEyLTg4JyxcbiAgMHhiMzJjOiAnU2tlaW41MTItOTYnLFxuICAweGIzMmQ6ICdTa2VpbjUxMi0xMDQnLFxuICAweGIzMmU6ICdTa2VpbjUxMi0xMTInLFxuICAweGIzMmY6ICdTa2VpbjUxMi0xMjAnLFxuICAweGIzMzA6ICdTa2VpbjUxMi0xMjgnLFxuICAweGIzMzE6ICdTa2VpbjUxMi0xMzYnLFxuICAweGIzMzI6ICdTa2VpbjUxMi0xNDQnLFxuICAweGIzMzM6ICdTa2VpbjUxMi0xNTInLFxuICAweGIzMzQ6ICdTa2VpbjUxMi0xNjAnLFxuICAweGIzMzU6ICdTa2VpbjUxMi0xNjgnLFxuICAweGIzMzY6ICdTa2VpbjUxMi0xNzYnLFxuICAweGIzMzc6ICdTa2VpbjUxMi0xODQnLFxuICAweGIzMzg6ICdTa2VpbjUxMi0xOTInLFxuICAweGIzMzk6ICdTa2VpbjUxMi0yMDAnLFxuICAweGIzM2E6ICdTa2VpbjUxMi0yMDgnLFxuICAweGIzM2I6ICdTa2VpbjUxMi0yMTYnLFxuICAweGIzM2M6ICdTa2VpbjUxMi0yMjQnLFxuICAweGIzM2Q6ICdTa2VpbjUxMi0yMzInLFxuICAweGIzM2U6ICdTa2VpbjUxMi0yNDAnLFxuICAweGIzM2Y6ICdTa2VpbjUxMi0yNDgnLFxuICAweGIzNDA6ICdTa2VpbjUxMi0yNTYnLFxuICAweGIzNDE6ICdTa2VpbjUxMi0yNjQnLFxuICAweGIzNDI6ICdTa2VpbjUxMi0yNzInLFxuICAweGIzNDM6ICdTa2VpbjUxMi0yODAnLFxuICAweGIzNDQ6ICdTa2VpbjUxMi0yODgnLFxuICAweGIzNDU6ICdTa2VpbjUxMi0yOTYnLFxuICAweGIzNDY6ICdTa2VpbjUxMi0zMDQnLFxuICAweGIzNDc6ICdTa2VpbjUxMi0zMTInLFxuICAweGIzNDg6ICdTa2VpbjUxMi0zMjAnLFxuICAweGIzNDk6ICdTa2VpbjUxMi0zMjgnLFxuICAweGIzNGE6ICdTa2VpbjUxMi0zMzYnLFxuICAweGIzNGI6ICdTa2VpbjUxMi0zNDQnLFxuICAweGIzNGM6ICdTa2VpbjUxMi0zNTInLFxuICAweGIzNGQ6ICdTa2VpbjUxMi0zNjAnLFxuICAweGIzNGU6ICdTa2VpbjUxMi0zNjgnLFxuICAweGIzNGY6ICdTa2VpbjUxMi0zNzYnLFxuICAweGIzNTA6ICdTa2VpbjUxMi0zODQnLFxuICAweGIzNTE6ICdTa2VpbjUxMi0zOTInLFxuICAweGIzNTI6ICdTa2VpbjUxMi00MDAnLFxuICAweGIzNTM6ICdTa2VpbjUxMi00MDgnLFxuICAweGIzNTQ6ICdTa2VpbjUxMi00MTYnLFxuICAweGIzNTU6ICdTa2VpbjUxMi00MjQnLFxuICAweGIzNTY6ICdTa2VpbjUxMi00MzInLFxuICAweGIzNTc6ICdTa2VpbjUxMi00NDAnLFxuICAweGIzNTg6ICdTa2VpbjUxMi00NDgnLFxuICAweGIzNTk6ICdTa2VpbjUxMi00NTYnLFxuICAweGIzNWE6ICdTa2VpbjUxMi00NjQnLFxuICAweGIzNWI6ICdTa2VpbjUxMi00NzInLFxuICAweGIzNWM6ICdTa2VpbjUxMi00ODAnLFxuICAweGIzNWQ6ICdTa2VpbjUxMi00ODgnLFxuICAweGIzNWU6ICdTa2VpbjUxMi00OTYnLFxuICAweGIzNWY6ICdTa2VpbjUxMi01MDQnLFxuICAweGIzNjA6ICdTa2VpbjUxMi01MTInLFxuICAweGIzNjE6ICdTa2VpbjEwMjQtOCcsXG4gIDB4YjM2MjogJ1NrZWluMTAyNC0xNicsXG4gIDB4YjM2MzogJ1NrZWluMTAyNC0yNCcsXG4gIDB4YjM2NDogJ1NrZWluMTAyNC0zMicsXG4gIDB4YjM2NTogJ1NrZWluMTAyNC00MCcsXG4gIDB4YjM2NjogJ1NrZWluMTAyNC00OCcsXG4gIDB4YjM2NzogJ1NrZWluMTAyNC01NicsXG4gIDB4YjM2ODogJ1NrZWluMTAyNC02NCcsXG4gIDB4YjM2OTogJ1NrZWluMTAyNC03MicsXG4gIDB4YjM2YTogJ1NrZWluMTAyNC04MCcsXG4gIDB4YjM2YjogJ1NrZWluMTAyNC04OCcsXG4gIDB4YjM2YzogJ1NrZWluMTAyNC05NicsXG4gIDB4YjM2ZDogJ1NrZWluMTAyNC0xMDQnLFxuICAweGIzNmU6ICdTa2VpbjEwMjQtMTEyJyxcbiAgMHhiMzZmOiAnU2tlaW4xMDI0LTEyMCcsXG4gIDB4YjM3MDogJ1NrZWluMTAyNC0xMjgnLFxuICAweGIzNzE6ICdTa2VpbjEwMjQtMTM2JyxcbiAgMHhiMzcyOiAnU2tlaW4xMDI0LTE0NCcsXG4gIDB4YjM3MzogJ1NrZWluMTAyNC0xNTInLFxuICAweGIzNzQ6ICdTa2VpbjEwMjQtMTYwJyxcbiAgMHhiMzc1OiAnU2tlaW4xMDI0LTE2OCcsXG4gIDB4YjM3NjogJ1NrZWluMTAyNC0xNzYnLFxuICAweGIzNzc6ICdTa2VpbjEwMjQtMTg0JyxcbiAgMHhiMzc4OiAnU2tlaW4xMDI0LTE5MicsXG4gIDB4YjM3OTogJ1NrZWluMTAyNC0yMDAnLFxuICAweGIzN2E6ICdTa2VpbjEwMjQtMjA4JyxcbiAgMHhiMzdiOiAnU2tlaW4xMDI0LTIxNicsXG4gIDB4YjM3YzogJ1NrZWluMTAyNC0yMjQnLFxuICAweGIzN2Q6ICdTa2VpbjEwMjQtMjMyJyxcbiAgMHhiMzdlOiAnU2tlaW4xMDI0LTI0MCcsXG4gIDB4YjM3ZjogJ1NrZWluMTAyNC0yNDgnLFxuICAweGIzODA6ICdTa2VpbjEwMjQtMjU2JyxcbiAgMHhiMzgxOiAnU2tlaW4xMDI0LTI2NCcsXG4gIDB4YjM4MjogJ1NrZWluMTAyNC0yNzInLFxuICAweGIzODM6ICdTa2VpbjEwMjQtMjgwJyxcbiAgMHhiMzg0OiAnU2tlaW4xMDI0LTI4OCcsXG4gIDB4YjM4NTogJ1NrZWluMTAyNC0yOTYnLFxuICAweGIzODY6ICdTa2VpbjEwMjQtMzA0JyxcbiAgMHhiMzg3OiAnU2tlaW4xMDI0LTMxMicsXG4gIDB4YjM4ODogJ1NrZWluMTAyNC0zMjAnLFxuICAweGIzODk6ICdTa2VpbjEwMjQtMzI4JyxcbiAgMHhiMzhhOiAnU2tlaW4xMDI0LTMzNicsXG4gIDB4YjM4YjogJ1NrZWluMTAyNC0zNDQnLFxuICAweGIzOGM6ICdTa2VpbjEwMjQtMzUyJyxcbiAgMHhiMzhkOiAnU2tlaW4xMDI0LTM2MCcsXG4gIDB4YjM4ZTogJ1NrZWluMTAyNC0zNjgnLFxuICAweGIzOGY6ICdTa2VpbjEwMjQtMzc2JyxcbiAgMHhiMzkwOiAnU2tlaW4xMDI0LTM4NCcsXG4gIDB4YjM5MTogJ1NrZWluMTAyNC0zOTInLFxuICAweGIzOTI6ICdTa2VpbjEwMjQtNDAwJyxcbiAgMHhiMzkzOiAnU2tlaW4xMDI0LTQwOCcsXG4gIDB4YjM5NDogJ1NrZWluMTAyNC00MTYnLFxuICAweGIzOTU6ICdTa2VpbjEwMjQtNDI0JyxcbiAgMHhiMzk2OiAnU2tlaW4xMDI0LTQzMicsXG4gIDB4YjM5NzogJ1NrZWluMTAyNC00NDAnLFxuICAweGIzOTg6ICdTa2VpbjEwMjQtNDQ4JyxcbiAgMHhiMzk5OiAnU2tlaW4xMDI0LTQ1NicsXG4gIDB4YjM5YTogJ1NrZWluMTAyNC00NjQnLFxuICAweGIzOWI6ICdTa2VpbjEwMjQtNDcyJyxcbiAgMHhiMzljOiAnU2tlaW4xMDI0LTQ4MCcsXG4gIDB4YjM5ZDogJ1NrZWluMTAyNC00ODgnLFxuICAweGIzOWU6ICdTa2VpbjEwMjQtNDk2JyxcbiAgMHhiMzlmOiAnU2tlaW4xMDI0LTUwNCcsXG4gIDB4YjNhMDogJ1NrZWluMTAyNC01MTInLFxuICAweGIzYTE6ICdTa2VpbjEwMjQtNTIwJyxcbiAgMHhiM2EyOiAnU2tlaW4xMDI0LTUyOCcsXG4gIDB4YjNhMzogJ1NrZWluMTAyNC01MzYnLFxuICAweGIzYTQ6ICdTa2VpbjEwMjQtNTQ0JyxcbiAgMHhiM2E1OiAnU2tlaW4xMDI0LTU1MicsXG4gIDB4YjNhNjogJ1NrZWluMTAyNC01NjAnLFxuICAweGIzYTc6ICdTa2VpbjEwMjQtNTY4JyxcbiAgMHhiM2E4OiAnU2tlaW4xMDI0LTU3NicsXG4gIDB4YjNhOTogJ1NrZWluMTAyNC01ODQnLFxuICAweGIzYWE6ICdTa2VpbjEwMjQtNTkyJyxcbiAgMHhiM2FiOiAnU2tlaW4xMDI0LTYwMCcsXG4gIDB4YjNhYzogJ1NrZWluMTAyNC02MDgnLFxuICAweGIzYWQ6ICdTa2VpbjEwMjQtNjE2JyxcbiAgMHhiM2FlOiAnU2tlaW4xMDI0LTYyNCcsXG4gIDB4YjNhZjogJ1NrZWluMTAyNC02MzInLFxuICAweGIzYjA6ICdTa2VpbjEwMjQtNjQwJyxcbiAgMHhiM2IxOiAnU2tlaW4xMDI0LTY0OCcsXG4gIDB4YjNiMjogJ1NrZWluMTAyNC02NTYnLFxuICAweGIzYjM6ICdTa2VpbjEwMjQtNjY0JyxcbiAgMHhiM2I0OiAnU2tlaW4xMDI0LTY3MicsXG4gIDB4YjNiNTogJ1NrZWluMTAyNC02ODAnLFxuICAweGIzYjY6ICdTa2VpbjEwMjQtNjg4JyxcbiAgMHhiM2I3OiAnU2tlaW4xMDI0LTY5NicsXG4gIDB4YjNiODogJ1NrZWluMTAyNC03MDQnLFxuICAweGIzYjk6ICdTa2VpbjEwMjQtNzEyJyxcbiAgMHhiM2JhOiAnU2tlaW4xMDI0LTcyMCcsXG4gIDB4YjNiYjogJ1NrZWluMTAyNC03MjgnLFxuICAweGIzYmM6ICdTa2VpbjEwMjQtNzM2JyxcbiAgMHhiM2JkOiAnU2tlaW4xMDI0LTc0NCcsXG4gIDB4YjNiZTogJ1NrZWluMTAyNC03NTInLFxuICAweGIzYmY6ICdTa2VpbjEwMjQtNzYwJyxcbiAgMHhiM2MwOiAnU2tlaW4xMDI0LTc2OCcsXG4gIDB4YjNjMTogJ1NrZWluMTAyNC03NzYnLFxuICAweGIzYzI6ICdTa2VpbjEwMjQtNzg0JyxcbiAgMHhiM2MzOiAnU2tlaW4xMDI0LTc5MicsXG4gIDB4YjNjNDogJ1NrZWluMTAyNC04MDAnLFxuICAweGIzYzU6ICdTa2VpbjEwMjQtODA4JyxcbiAgMHhiM2M2OiAnU2tlaW4xMDI0LTgxNicsXG4gIDB4YjNjNzogJ1NrZWluMTAyNC04MjQnLFxuICAweGIzYzg6ICdTa2VpbjEwMjQtODMyJyxcbiAgMHhiM2M5OiAnU2tlaW4xMDI0LTg0MCcsXG4gIDB4YjNjYTogJ1NrZWluMTAyNC04NDgnLFxuICAweGIzY2I6ICdTa2VpbjEwMjQtODU2JyxcbiAgMHhiM2NjOiAnU2tlaW4xMDI0LTg2NCcsXG4gIDB4YjNjZDogJ1NrZWluMTAyNC04NzInLFxuICAweGIzY2U6ICdTa2VpbjEwMjQtODgwJyxcbiAgMHhiM2NmOiAnU2tlaW4xMDI0LTg4OCcsXG4gIDB4YjNkMDogJ1NrZWluMTAyNC04OTYnLFxuICAweGIzZDE6ICdTa2VpbjEwMjQtOTA0JyxcbiAgMHhiM2QyOiAnU2tlaW4xMDI0LTkxMicsXG4gIDB4YjNkMzogJ1NrZWluMTAyNC05MjAnLFxuICAweGIzZDQ6ICdTa2VpbjEwMjQtOTI4JyxcbiAgMHhiM2Q1OiAnU2tlaW4xMDI0LTkzNicsXG4gIDB4YjNkNjogJ1NrZWluMTAyNC05NDQnLFxuICAweGIzZDc6ICdTa2VpbjEwMjQtOTUyJyxcbiAgMHhiM2Q4OiAnU2tlaW4xMDI0LTk2MCcsXG4gIDB4YjNkOTogJ1NrZWluMTAyNC05NjgnLFxuICAweGIzZGE6ICdTa2VpbjEwMjQtOTc2JyxcbiAgMHhiM2RiOiAnU2tlaW4xMDI0LTk4NCcsXG4gIDB4YjNkYzogJ1NrZWluMTAyNC05OTInLFxuICAweGIzZGQ6ICdTa2VpbjEwMjQtMTAwMCcsXG4gIDB4YjNkZTogJ1NrZWluMTAyNC0xMDA4JyxcbiAgMHhiM2RmOiAnU2tlaW4xMDI0LTEwMTYnLFxuICAweGIzZTA6ICdTa2VpbjEwMjQtMTAyNCdcbn0pXG5cbmV4cG9ydHMuZGVmYXVsdExlbmd0aHMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgxMTogMjAsXG4gIDB4MTI6IDMyLFxuICAweDEzOiA2NCxcbiAgMHg1NjogMzIsXG4gIDB4MTc6IDI4LFxuICAweDE2OiAzMixcbiAgMHgxNTogNDgsXG4gIDB4MTQ6IDY0LFxuICAweDE4OiAzMixcbiAgMHgxOTogNjQsXG4gIDB4MUE6IDI4LFxuICAweDFCOiAzMixcbiAgMHgxQzogNDgsXG4gIDB4MUQ6IDY0LFxuICAweDIyOiAzMixcblxuICAweGIyMDE6IDB4MDEsXG4gIDB4YjIwMjogMHgwMixcbiAgMHhiMjAzOiAweDAzLFxuICAweGIyMDQ6IDB4MDQsXG4gIDB4YjIwNTogMHgwNSxcbiAgMHhiMjA2OiAweDA2LFxuICAweGIyMDc6IDB4MDcsXG4gIDB4YjIwODogMHgwOCxcbiAgMHhiMjA5OiAweDA5LFxuICAweGIyMGE6IDB4MGEsXG4gIDB4YjIwYjogMHgwYixcbiAgMHhiMjBjOiAweDBjLFxuICAweGIyMGQ6IDB4MGQsXG4gIDB4YjIwZTogMHgwZSxcbiAgMHhiMjBmOiAweDBmLFxuICAweGIyMTA6IDB4MTAsXG4gIDB4YjIxMTogMHgxMSxcbiAgMHhiMjEyOiAweDEyLFxuICAweGIyMTM6IDB4MTMsXG4gIDB4YjIxNDogMHgxNCxcbiAgMHhiMjE1OiAweDE1LFxuICAweGIyMTY6IDB4MTYsXG4gIDB4YjIxNzogMHgxNyxcbiAgMHhiMjE4OiAweDE4LFxuICAweGIyMTk6IDB4MTksXG4gIDB4YjIxYTogMHgxYSxcbiAgMHhiMjFiOiAweDFiLFxuICAweGIyMWM6IDB4MWMsXG4gIDB4YjIxZDogMHgxZCxcbiAgMHhiMjFlOiAweDFlLFxuICAweGIyMWY6IDB4MWYsXG4gIDB4YjIyMDogMHgyMCxcbiAgMHhiMjIxOiAweDIxLFxuICAweGIyMjI6IDB4MjIsXG4gIDB4YjIyMzogMHgyMyxcbiAgMHhiMjI0OiAweDI0LFxuICAweGIyMjU6IDB4MjUsXG4gIDB4YjIyNjogMHgyNixcbiAgMHhiMjI3OiAweDI3LFxuICAweGIyMjg6IDB4MjgsXG4gIDB4YjIyOTogMHgyOSxcbiAgMHhiMjJhOiAweDJhLFxuICAweGIyMmI6IDB4MmIsXG4gIDB4YjIyYzogMHgyYyxcbiAgMHhiMjJkOiAweDJkLFxuICAweGIyMmU6IDB4MmUsXG4gIDB4YjIyZjogMHgyZixcbiAgMHhiMjMwOiAweDMwLFxuICAweGIyMzE6IDB4MzEsXG4gIDB4YjIzMjogMHgzMixcbiAgMHhiMjMzOiAweDMzLFxuICAweGIyMzQ6IDB4MzQsXG4gIDB4YjIzNTogMHgzNSxcbiAgMHhiMjM2OiAweDM2LFxuICAweGIyMzc6IDB4MzcsXG4gIDB4YjIzODogMHgzOCxcbiAgMHhiMjM5OiAweDM5LFxuICAweGIyM2E6IDB4M2EsXG4gIDB4YjIzYjogMHgzYixcbiAgMHhiMjNjOiAweDNjLFxuICAweGIyM2Q6IDB4M2QsXG4gIDB4YjIzZTogMHgzZSxcbiAgMHhiMjNmOiAweDNmLFxuICAweGIyNDA6IDB4NDAsXG4gIDB4YjI0MTogMHgwMSxcbiAgMHhiMjQyOiAweDAyLFxuICAweGIyNDM6IDB4MDMsXG4gIDB4YjI0NDogMHgwNCxcbiAgMHhiMjQ1OiAweDA1LFxuICAweGIyNDY6IDB4MDYsXG4gIDB4YjI0NzogMHgwNyxcbiAgMHhiMjQ4OiAweDA4LFxuICAweGIyNDk6IDB4MDksXG4gIDB4YjI0YTogMHgwYSxcbiAgMHhiMjRiOiAweDBiLFxuICAweGIyNGM6IDB4MGMsXG4gIDB4YjI0ZDogMHgwZCxcbiAgMHhiMjRlOiAweDBlLFxuICAweGIyNGY6IDB4MGYsXG4gIDB4YjI1MDogMHgxMCxcbiAgMHhiMjUxOiAweDExLFxuICAweGIyNTI6IDB4MTIsXG4gIDB4YjI1MzogMHgxMyxcbiAgMHhiMjU0OiAweDE0LFxuICAweGIyNTU6IDB4MTUsXG4gIDB4YjI1NjogMHgxNixcbiAgMHhiMjU3OiAweDE3LFxuICAweGIyNTg6IDB4MTgsXG4gIDB4YjI1OTogMHgxOSxcbiAgMHhiMjVhOiAweDFhLFxuICAweGIyNWI6IDB4MWIsXG4gIDB4YjI1YzogMHgxYyxcbiAgMHhiMjVkOiAweDFkLFxuICAweGIyNWU6IDB4MWUsXG4gIDB4YjI1ZjogMHgxZixcbiAgMHhiMjYwOiAweDIwLFxuICAweGIzMDE6IDB4MDEsXG4gIDB4YjMwMjogMHgwMixcbiAgMHhiMzAzOiAweDAzLFxuICAweGIzMDQ6IDB4MDQsXG4gIDB4YjMwNTogMHgwNSxcbiAgMHhiMzA2OiAweDA2LFxuICAweGIzMDc6IDB4MDcsXG4gIDB4YjMwODogMHgwOCxcbiAgMHhiMzA5OiAweDA5LFxuICAweGIzMGE6IDB4MGEsXG4gIDB4YjMwYjogMHgwYixcbiAgMHhiMzBjOiAweDBjLFxuICAweGIzMGQ6IDB4MGQsXG4gIDB4YjMwZTogMHgwZSxcbiAgMHhiMzBmOiAweDBmLFxuICAweGIzMTA6IDB4MTAsXG4gIDB4YjMxMTogMHgxMSxcbiAgMHhiMzEyOiAweDEyLFxuICAweGIzMTM6IDB4MTMsXG4gIDB4YjMxNDogMHgxNCxcbiAgMHhiMzE1OiAweDE1LFxuICAweGIzMTY6IDB4MTYsXG4gIDB4YjMxNzogMHgxNyxcbiAgMHhiMzE4OiAweDE4LFxuICAweGIzMTk6IDB4MTksXG4gIDB4YjMxYTogMHgxYSxcbiAgMHhiMzFiOiAweDFiLFxuICAweGIzMWM6IDB4MWMsXG4gIDB4YjMxZDogMHgxZCxcbiAgMHhiMzFlOiAweDFlLFxuICAweGIzMWY6IDB4MWYsXG4gIDB4YjMyMDogMHgyMCxcbiAgMHhiMzIxOiAweDAxLFxuICAweGIzMjI6IDB4MDIsXG4gIDB4YjMyMzogMHgwMyxcbiAgMHhiMzI0OiAweDA0LFxuICAweGIzMjU6IDB4MDUsXG4gIDB4YjMyNjogMHgwNixcbiAgMHhiMzI3OiAweDA3LFxuICAweGIzMjg6IDB4MDgsXG4gIDB4YjMyOTogMHgwOSxcbiAgMHhiMzJhOiAweDBhLFxuICAweGIzMmI6IDB4MGIsXG4gIDB4YjMyYzogMHgwYyxcbiAgMHhiMzJkOiAweDBkLFxuICAweGIzMmU6IDB4MGUsXG4gIDB4YjMyZjogMHgwZixcbiAgMHhiMzMwOiAweDEwLFxuICAweGIzMzE6IDB4MTEsXG4gIDB4YjMzMjogMHgxMixcbiAgMHhiMzMzOiAweDEzLFxuICAweGIzMzQ6IDB4MTQsXG4gIDB4YjMzNTogMHgxNSxcbiAgMHhiMzM2OiAweDE2LFxuICAweGIzMzc6IDB4MTcsXG4gIDB4YjMzODogMHgxOCxcbiAgMHhiMzM5OiAweDE5LFxuICAweGIzM2E6IDB4MWEsXG4gIDB4YjMzYjogMHgxYixcbiAgMHhiMzNjOiAweDFjLFxuICAweGIzM2Q6IDB4MWQsXG4gIDB4YjMzZTogMHgxZSxcbiAgMHhiMzNmOiAweDFmLFxuICAweGIzNDA6IDB4MjAsXG4gIDB4YjM0MTogMHgyMSxcbiAgMHhiMzQyOiAweDIyLFxuICAweGIzNDM6IDB4MjMsXG4gIDB4YjM0NDogMHgyNCxcbiAgMHhiMzQ1OiAweDI1LFxuICAweGIzNDY6IDB4MjYsXG4gIDB4YjM0NzogMHgyNyxcbiAgMHhiMzQ4OiAweDI4LFxuICAweGIzNDk6IDB4MjksXG4gIDB4YjM0YTogMHgyYSxcbiAgMHhiMzRiOiAweDJiLFxuICAweGIzNGM6IDB4MmMsXG4gIDB4YjM0ZDogMHgyZCxcbiAgMHhiMzRlOiAweDJlLFxuICAweGIzNGY6IDB4MmYsXG4gIDB4YjM1MDogMHgzMCxcbiAgMHhiMzUxOiAweDMxLFxuICAweGIzNTI6IDB4MzIsXG4gIDB4YjM1MzogMHgzMyxcbiAgMHhiMzU0OiAweDM0LFxuICAweGIzNTU6IDB4MzUsXG4gIDB4YjM1NjogMHgzNixcbiAgMHhiMzU3OiAweDM3LFxuICAweGIzNTg6IDB4MzgsXG4gIDB4YjM1OTogMHgzOSxcbiAgMHhiMzVhOiAweDNhLFxuICAweGIzNWI6IDB4M2IsXG4gIDB4YjM1YzogMHgzYyxcbiAgMHhiMzVkOiAweDNkLFxuICAweGIzNWU6IDB4M2UsXG4gIDB4YjM1ZjogMHgzZixcbiAgMHhiMzYwOiAweDQwLFxuICAweGIzNjE6IDB4MDEsXG4gIDB4YjM2MjogMHgwMixcbiAgMHhiMzYzOiAweDAzLFxuICAweGIzNjQ6IDB4MDQsXG4gIDB4YjM2NTogMHgwNSxcbiAgMHhiMzY2OiAweDA2LFxuICAweGIzNjc6IDB4MDcsXG4gIDB4YjM2ODogMHgwOCxcbiAgMHhiMzY5OiAweDA5LFxuICAweGIzNmE6IDB4MGEsXG4gIDB4YjM2YjogMHgwYixcbiAgMHhiMzZjOiAweDBjLFxuICAweGIzNmQ6IDB4MGQsXG4gIDB4YjM2ZTogMHgwZSxcbiAgMHhiMzZmOiAweDBmLFxuICAweGIzNzA6IDB4MTAsXG4gIDB4YjM3MTogMHgxMSxcbiAgMHhiMzcyOiAweDEyLFxuICAweGIzNzM6IDB4MTMsXG4gIDB4YjM3NDogMHgxNCxcbiAgMHhiMzc1OiAweDE1LFxuICAweGIzNzY6IDB4MTYsXG4gIDB4YjM3NzogMHgxNyxcbiAgMHhiMzc4OiAweDE4LFxuICAweGIzNzk6IDB4MTksXG4gIDB4YjM3YTogMHgxYSxcbiAgMHhiMzdiOiAweDFiLFxuICAweGIzN2M6IDB4MWMsXG4gIDB4YjM3ZDogMHgxZCxcbiAgMHhiMzdlOiAweDFlLFxuICAweGIzN2Y6IDB4MWYsXG4gIDB4YjM4MDogMHgyMCxcbiAgMHhiMzgxOiAweDIxLFxuICAweGIzODI6IDB4MjIsXG4gIDB4YjM4MzogMHgyMyxcbiAgMHhiMzg0OiAweDI0LFxuICAweGIzODU6IDB4MjUsXG4gIDB4YjM4NjogMHgyNixcbiAgMHhiMzg3OiAweDI3LFxuICAweGIzODg6IDB4MjgsXG4gIDB4YjM4OTogMHgyOSxcbiAgMHhiMzhhOiAweDJhLFxuICAweGIzOGI6IDB4MmIsXG4gIDB4YjM4YzogMHgyYyxcbiAgMHhiMzhkOiAweDJkLFxuICAweGIzOGU6IDB4MmUsXG4gIDB4YjM4ZjogMHgyZixcbiAgMHhiMzkwOiAweDMwLFxuICAweGIzOTE6IDB4MzEsXG4gIDB4YjM5MjogMHgzMixcbiAgMHhiMzkzOiAweDMzLFxuICAweGIzOTQ6IDB4MzQsXG4gIDB4YjM5NTogMHgzNSxcbiAgMHhiMzk2OiAweDM2LFxuICAweGIzOTc6IDB4MzcsXG4gIDB4YjM5ODogMHgzOCxcbiAgMHhiMzk5OiAweDM5LFxuICAweGIzOWE6IDB4M2EsXG4gIDB4YjM5YjogMHgzYixcbiAgMHhiMzljOiAweDNjLFxuICAweGIzOWQ6IDB4M2QsXG4gIDB4YjM5ZTogMHgzZSxcbiAgMHhiMzlmOiAweDNmLFxuICAweGIzYTA6IDB4NDAsXG4gIDB4YjNhMTogMHg0MSxcbiAgMHhiM2EyOiAweDQyLFxuICAweGIzYTM6IDB4NDMsXG4gIDB4YjNhNDogMHg0NCxcbiAgMHhiM2E1OiAweDQ1LFxuICAweGIzYTY6IDB4NDYsXG4gIDB4YjNhNzogMHg0NyxcbiAgMHhiM2E4OiAweDQ4LFxuICAweGIzYTk6IDB4NDksXG4gIDB4YjNhYTogMHg0YSxcbiAgMHhiM2FiOiAweDRiLFxuICAweGIzYWM6IDB4NGMsXG4gIDB4YjNhZDogMHg0ZCxcbiAgMHhiM2FlOiAweDRlLFxuICAweGIzYWY6IDB4NGYsXG4gIDB4YjNiMDogMHg1MCxcbiAgMHhiM2IxOiAweDUxLFxuICAweGIzYjI6IDB4NTIsXG4gIDB4YjNiMzogMHg1MyxcbiAgMHhiM2I0OiAweDU0LFxuICAweGIzYjU6IDB4NTUsXG4gIDB4YjNiNjogMHg1NixcbiAgMHhiM2I3OiAweDU3LFxuICAweGIzYjg6IDB4NTgsXG4gIDB4YjNiOTogMHg1OSxcbiAgMHhiM2JhOiAweDVhLFxuICAweGIzYmI6IDB4NWIsXG4gIDB4YjNiYzogMHg1YyxcbiAgMHhiM2JkOiAweDVkLFxuICAweGIzYmU6IDB4NWUsXG4gIDB4YjNiZjogMHg1ZixcbiAgMHhiM2MwOiAweDYwLFxuICAweGIzYzE6IDB4NjEsXG4gIDB4YjNjMjogMHg2MixcbiAgMHhiM2MzOiAweDYzLFxuICAweGIzYzQ6IDB4NjQsXG4gIDB4YjNjNTogMHg2NSxcbiAgMHhiM2M2OiAweDY2LFxuICAweGIzYzc6IDB4NjcsXG4gIDB4YjNjODogMHg2OCxcbiAgMHhiM2M5OiAweDY5LFxuICAweGIzY2E6IDB4NmEsXG4gIDB4YjNjYjogMHg2YixcbiAgMHhiM2NjOiAweDZjLFxuICAweGIzY2Q6IDB4NmQsXG4gIDB4YjNjZTogMHg2ZSxcbiAgMHhiM2NmOiAweDZmLFxuICAweGIzZDA6IDB4NzAsXG4gIDB4YjNkMTogMHg3MSxcbiAgMHhiM2QyOiAweDcyLFxuICAweGIzZDM6IDB4NzMsXG4gIDB4YjNkNDogMHg3NCxcbiAgMHhiM2Q1OiAweDc1LFxuICAweGIzZDY6IDB4NzYsXG4gIDB4YjNkNzogMHg3NyxcbiAgMHhiM2Q4OiAweDc4LFxuICAweGIzZDk6IDB4NzksXG4gIDB4YjNkYTogMHg3YSxcbiAgMHhiM2RiOiAweDdiLFxuICAweGIzZGM6IDB4N2MsXG4gIDB4YjNkZDogMHg3ZCxcbiAgMHhiM2RlOiAweDdlLFxuICAweGIzZGY6IDB4N2YsXG4gIDB4YjNlMDogMHg4MFxufSlcbiIsIm1vZHVsZS5leHBvcnRzID0gZW5jb2RlXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcbiAgLCBNU0JBTEwgPSB+UkVTVFxuICAsIElOVCA9IE1hdGgucG93KDIsIDMxKVxuXG5mdW5jdGlvbiBlbmNvZGUobnVtLCBvdXQsIG9mZnNldCkge1xuICBvdXQgPSBvdXQgfHwgW11cbiAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgdmFyIG9sZE9mZnNldCA9IG9mZnNldFxuXG4gIHdoaWxlKG51bSA+PSBJTlQpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtIC89IDEyOFxuICB9XG4gIHdoaWxlKG51bSAmIE1TQkFMTCkge1xuICAgIG91dFtvZmZzZXQrK10gPSAobnVtICYgMHhGRikgfCBNU0JcbiAgICBudW0gPj4+PSA3XG4gIH1cbiAgb3V0W29mZnNldF0gPSBudW0gfCAwXG4gIFxuICBlbmNvZGUuYnl0ZXMgPSBvZmZzZXQgLSBvbGRPZmZzZXQgKyAxXG4gIFxuICByZXR1cm4gb3V0XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlYWRcblxudmFyIE1TQiA9IDB4ODBcbiAgLCBSRVNUID0gMHg3RlxuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciByZXMgICAgPSAwXG4gICAgLCBvZmZzZXQgPSBvZmZzZXQgfHwgMFxuICAgICwgc2hpZnQgID0gMFxuICAgICwgY291bnRlciA9IG9mZnNldFxuICAgICwgYlxuICAgICwgbCA9IGJ1Zi5sZW5ndGhcblxuICBkbyB7XG4gICAgaWYgKGNvdW50ZXIgPj0gbCkge1xuICAgICAgcmVhZC5ieXRlcyA9IDBcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb3VsZCBub3QgZGVjb2RlIHZhcmludCcpXG4gICAgfVxuICAgIGIgPSBidWZbY291bnRlcisrXVxuICAgIHJlcyArPSBzaGlmdCA8IDI4XG4gICAgICA/IChiICYgUkVTVCkgPDwgc2hpZnRcbiAgICAgIDogKGIgJiBSRVNUKSAqIE1hdGgucG93KDIsIHNoaWZ0KVxuICAgIHNoaWZ0ICs9IDdcbiAgfSB3aGlsZSAoYiA+PSBNU0IpXG5cbiAgcmVhZC5ieXRlcyA9IGNvdW50ZXIgLSBvZmZzZXRcblxuICByZXR1cm4gcmVzXG59XG4iLCJcbnZhciBOMSA9IE1hdGgucG93KDIsICA3KVxudmFyIE4yID0gTWF0aC5wb3coMiwgMTQpXG52YXIgTjMgPSBNYXRoLnBvdygyLCAyMSlcbnZhciBONCA9IE1hdGgucG93KDIsIDI4KVxudmFyIE41ID0gTWF0aC5wb3coMiwgMzUpXG52YXIgTjYgPSBNYXRoLnBvdygyLCA0MilcbnZhciBONyA9IE1hdGgucG93KDIsIDQ5KVxudmFyIE44ID0gTWF0aC5wb3coMiwgNTYpXG52YXIgTjkgPSBNYXRoLnBvdygyLCA2MylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA8IE4xID8gMVxuICA6IHZhbHVlIDwgTjIgPyAyXG4gIDogdmFsdWUgPCBOMyA/IDNcbiAgOiB2YWx1ZSA8IE40ID8gNFxuICA6IHZhbHVlIDwgTjUgPyA1XG4gIDogdmFsdWUgPCBONiA/IDZcbiAgOiB2YWx1ZSA8IE43ID8gN1xuICA6IHZhbHVlIDwgTjggPyA4XG4gIDogdmFsdWUgPCBOOSA/IDlcbiAgOiAgICAgICAgICAgICAgMTBcbiAgKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJhc2UgPSByZXF1aXJlKCcuL2Jhc2UuanMnKVxuY29uc3QgYmFzZVggPSByZXF1aXJlKCdiYXNlLXgnKVxuY29uc3QgYmFzZTE2ID0gcmVxdWlyZSgnLi9iYXNlMTYnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnLi9iYXNlMzInKVxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKVxuXG4vLyBuYW1lLCBjb2RlLCBpbXBsZW1lbnRhdGlvbiwgYWxwaGFiZXRcbmNvbnN0IGNvbnN0YW50cyA9IFtcbiAgWydiYXNlMScsICcxJywgJycsICcxJ10sXG4gIFsnYmFzZTInLCAnMCcsIGJhc2VYLCAnMDEnXSxcbiAgWydiYXNlOCcsICc3JywgYmFzZVgsICcwMTIzNDU2NyddLFxuICBbJ2Jhc2UxMCcsICc5JywgYmFzZVgsICcwMTIzNDU2Nzg5J10sXG4gIFsnYmFzZTE2JywgJ2YnLCBiYXNlMTYsICcwMTIzNDU2Nzg5YWJjZGVmJ10sXG4gIFsnYmFzZTMyJywgJ2InLCBiYXNlMzIsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2NyddLFxuICBbJ2Jhc2UzMnBhZCcsICdjJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1Njc9J10sXG4gIFsnYmFzZTMyaGV4JywgJ3YnLCBiYXNlMzIsICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1diddLFxuICBbJ2Jhc2UzMmhleHBhZCcsICd0JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXY9J10sXG4gIFsnYmFzZTMyeicsICdoJywgYmFzZTMyLCAneWJuZHJmZzhlamttY3BxeG90MXV3aXN6YTM0NWg3NjknXSxcbiAgWydiYXNlNThmbGlja3InLCAnWicsIGJhc2VYLCAnMTIzNDU2Nzg5YWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWiddLFxuICBbJ2Jhc2U1OGJ0YycsICd6JywgYmFzZVgsICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J10sXG4gIFsnYmFzZTY0JywgJ20nLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ10sXG4gIFsnYmFzZTY0cGFkJywgJ00nLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSddLFxuICBbJ2Jhc2U2NHVybCcsICd1JywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyddLFxuICBbJ2Jhc2U2NHVybHBhZCcsICdVJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz0nXVxuXVxuXG5jb25zdCBuYW1lcyA9IGNvbnN0YW50cy5yZWR1Y2UoKHByZXYsIHR1cHBsZSkgPT4ge1xuICBwcmV2W3R1cHBsZVswXV0gPSBuZXcgQmFzZSh0dXBwbGVbMF0sIHR1cHBsZVsxXSwgdHVwcGxlWzJdLCB0dXBwbGVbM10pXG4gIHJldHVybiBwcmV2XG59LCB7fSlcblxuY29uc3QgY29kZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMV1dID0gbmFtZXNbdHVwcGxlWzBdXVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBuYW1lczogbmFtZXMsXG4gIGNvZGVzOiBjb2Rlc1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNsYXNzIEJhc2Uge1xuICBjb25zdHJ1Y3RvciAobmFtZSwgY29kZSwgaW1wbGVtZW50YXRpb24sIGFscGhhYmV0KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuY29kZSA9IGNvZGVcbiAgICB0aGlzLmFscGhhYmV0ID0gYWxwaGFiZXRcbiAgICBpZiAoaW1wbGVtZW50YXRpb24gJiYgYWxwaGFiZXQpIHtcbiAgICAgIHRoaXMuZW5naW5lID0gaW1wbGVtZW50YXRpb24oYWxwaGFiZXQpXG4gICAgfVxuICB9XG5cbiAgZW5jb2RlIChzdHJpbmdPckJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5lbmNvZGUoc3RyaW5nT3JCdWZmZXIpXG4gIH1cblxuICBkZWNvZGUgKHN0cmluZ09yQnVmZmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLmRlY29kZShzdHJpbmdPckJ1ZmZlcilcbiAgfVxuXG4gIGlzSW1wbGVtZW50ZWQgKCkge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFzZVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTE2IChhbHBoYWJldCkge1xuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXQudG9TdHJpbmcoJ2hleCcpXG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlMTYgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0LCAnaGV4JylcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBkZWNvZGUgKGlucHV0LCBhbHBoYWJldCkge1xuICBpbnB1dCA9IGlucHV0LnJlcGxhY2UobmV3IFJlZ0V4cCgnPScsICdnJyksICcnKVxuICBsZXQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG5cbiAgbGV0IGJpdHMgPSAwXG4gIGxldCB2YWx1ZSA9IDBcblxuICBsZXQgaW5kZXggPSAwXG4gIGxldCBvdXRwdXQgPSBuZXcgVWludDhBcnJheSgobGVuZ3RoICogNSAvIDgpIHwgMClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBhbHBoYWJldC5pbmRleE9mKGlucHV0W2ldKVxuICAgIGJpdHMgKz0gNVxuXG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgb3V0cHV0W2luZGV4KytdID0gKHZhbHVlID4+PiAoYml0cyAtIDgpKSAmIDI1NVxuICAgICAgYml0cyAtPSA4XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dC5idWZmZXJcbn1cblxuZnVuY3Rpb24gZW5jb2RlIChidWZmZXIsIGFscGhhYmV0KSB7XG4gIGxldCBsZW5ndGggPSBidWZmZXIuYnl0ZUxlbmd0aFxuICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcilcbiAgbGV0IHBhZGRpbmcgPSBhbHBoYWJldC5pbmRleE9mKCc9JykgPT09IGFscGhhYmV0Lmxlbmd0aCAtIDFcblxuICBpZiAocGFkZGluZykge1xuICAgIGFscGhhYmV0ID0gYWxwaGFiZXQuc3Vic3RyaW5nKDAsIGFscGhhYmV0Lmxlbmd0aCAtIDIpXG4gIH1cblxuICBsZXQgYml0cyA9IDBcbiAgbGV0IHZhbHVlID0gMFxuICBsZXQgb3V0cHV0ID0gJydcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCB2aWV3W2ldXG4gICAgYml0cyArPSA4XG5cbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBvdXRwdXQgKz0gYWxwaGFiZXRbKHZhbHVlID4+PiAoYml0cyAtIDUpKSAmIDMxXVxuICAgICAgYml0cyAtPSA1XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IGFscGhhYmV0Wyh2YWx1ZSA8PCAoNSAtIGJpdHMpKSAmIDMxXVxuICB9XG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICB3aGlsZSAoKG91dHB1dC5sZW5ndGggJSA4KSAhPT0gMCkge1xuICAgICAgb3V0cHV0ICs9ICc9J1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlMzIgKGFscGhhYmV0KSB7XG4gIHJldHVybiB7XG4gICAgZW5jb2RlIChpbnB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZShCdWZmZXIuZnJvbShpbnB1dCksIGFscGhhYmV0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW5jb2RlKGlucHV0LCBhbHBoYWJldClcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWNvZGUoaW5wdXQsIGFscGhhYmV0KVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTY0IChhbHBoYWJldCkge1xuICAvLyBUaGUgYWxwaGFiZXQgaXMgb25seSB1c2VkIHRvIGtub3c6XG4gIC8vICAgMS4gSWYgcGFkZGluZyBpcyBlbmFibGVkIChtdXN0IGNvbnRhaW4gJz0nKVxuICAvLyAgIDIuIElmIHRoZSBvdXRwdXQgbXVzdCBiZSB1cmwtc2FmZSAobXVzdCBjb250YWluICctJyBhbmQgJ18nKVxuICAvLyAgIDMuIElmIHRoZSBpbnB1dCBvZiB0aGUgb3V0cHV0IGZ1bmN0aW9uIGlzIHZhbGlkXG4gIC8vIFRoZSBhbHBoYWJldHMgZnJvbSBSRkMgNDY0OCBhcmUgYWx3YXlzIHVzZWQuXG4gIGNvbnN0IHBhZGRpbmcgPSBhbHBoYWJldC5pbmRleE9mKCc9JykgPiAtMVxuICBjb25zdCB1cmwgPSBhbHBoYWJldC5pbmRleE9mKCctJykgPiAtMSAmJiBhbHBoYWJldC5pbmRleE9mKCdfJykgPiAtMVxuXG4gIHJldHVybiB7XG4gICAgZW5jb2RlIChpbnB1dCkge1xuICAgICAgbGV0IG91dHB1dCA9ICcnXG5cbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG91dHB1dCA9IEJ1ZmZlci5mcm9tKGlucHV0KS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IGlucHV0LnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWQgPSBvdXRwdXQuaW5kZXhPZignPScpXG4gICAgICBpZiAocGFkID4gMCAmJiAhcGFkZGluZykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3Vic3RyaW5nKDAsIHBhZClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTY0IGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0LCAnYmFzZTY0JylcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb252ZXJ0ID0gcmVxdWlyZSgnLi9jb252ZXJ0JylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbi8vIGV4cG9ydCBjb2RlY1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0cmluZ1RvU3RyaW5nVHVwbGVzOiBzdHJpbmdUb1N0cmluZ1R1cGxlcyxcbiAgc3RyaW5nVHVwbGVzVG9TdHJpbmc6IHN0cmluZ1R1cGxlc1RvU3RyaW5nLFxuXG4gIHR1cGxlc1RvU3RyaW5nVHVwbGVzOiB0dXBsZXNUb1N0cmluZ1R1cGxlcyxcbiAgc3RyaW5nVHVwbGVzVG9UdXBsZXM6IHN0cmluZ1R1cGxlc1RvVHVwbGVzLFxuXG4gIGJ1ZmZlclRvVHVwbGVzOiBidWZmZXJUb1R1cGxlcyxcbiAgdHVwbGVzVG9CdWZmZXI6IHR1cGxlc1RvQnVmZmVyLFxuXG4gIGJ1ZmZlclRvU3RyaW5nOiBidWZmZXJUb1N0cmluZyxcbiAgc3RyaW5nVG9CdWZmZXI6IHN0cmluZ1RvQnVmZmVyLFxuXG4gIGZyb21TdHJpbmc6IGZyb21TdHJpbmcsXG4gIGZyb21CdWZmZXI6IGZyb21CdWZmZXIsXG4gIHZhbGlkYXRlQnVmZmVyOiB2YWxpZGF0ZUJ1ZmZlcixcbiAgaXNWYWxpZEJ1ZmZlcjogaXNWYWxpZEJ1ZmZlcixcbiAgY2xlYW5QYXRoOiBjbGVhblBhdGgsXG5cbiAgUGFyc2VFcnJvcjogUGFyc2VFcnJvcixcbiAgcHJvdG9Gcm9tVHVwbGU6IHByb3RvRnJvbVR1cGxlLFxuXG4gIHNpemVGb3JBZGRyOiBzaXplRm9yQWRkclxufVxuXG4vLyBzdHJpbmcgLT4gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF1cbmZ1bmN0aW9uIHN0cmluZ1RvU3RyaW5nVHVwbGVzIChzdHIpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgY29uc3QgcGFydHMgPSBzdHIuc3BsaXQoJy8nKS5zbGljZSgxKSAvLyBza2lwIGZpcnN0IGVtcHR5IGVsZW1cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSAmJiBwYXJ0c1swXSA9PT0gJycpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGZvciAobGV0IHAgPSAwOyBwIDwgcGFydHMubGVuZ3RoOyBwKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbcF1cbiAgICBjb25zdCBwcm90byA9IHByb3RvY29scyhwYXJ0KVxuXG4gICAgaWYgKHByb3RvLnNpemUgPT09IDApIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtwYXJ0XSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcCsrIC8vIGFkdmFuY2UgYWRkciBwYXJ0XG4gICAgaWYgKHAgPj0gcGFydHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdpbnZhbGlkIGFkZHJlc3M6ICcgKyBzdHIpXG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBhIHBhdGggcHJvdG8sIHRha2UgdGhlIHJlc3RcbiAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgdHVwbGVzLnB1c2goW1xuICAgICAgICBwYXJ0LFxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgd2UgbmVlZCB0byBjaGVjayBlYWNoIHBhdGggcGFydCB0byBzZWUgaWYgaXQncyBhIHByb3RvP1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGFsbG93IGZvciBvdGhlciBwcm90b2NvbHMgdG8gYmUgYWRkZWQgYWZ0ZXIgYSB1bml4IHBhdGgsXG4gICAgICAgIC8vIGhvd2V2ZXIgaXQgd291bGQgaGF2ZSBpc3N1ZXMgaWYgdGhlIHBhdGggaGFkIGEgcHJvdG9jb2wgbmFtZSBpbiB0aGUgcGF0aFxuICAgICAgICBjbGVhblBhdGgocGFydHMuc2xpY2UocCkuam9pbignLycpKVxuICAgICAgXSlcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgdHVwbGVzLnB1c2goW3BhcnQsIHBhcnRzW3BdXSlcbiAgfVxuXG4gIHJldHVybiB0dXBsZXNcbn1cblxuLy8gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF0gLT4gc3RyaW5nXG5mdW5jdGlvbiBzdHJpbmdUdXBsZXNUb1N0cmluZyAodHVwbGVzKSB7XG4gIGNvbnN0IHBhcnRzID0gW11cbiAgdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIHBhcnRzLnB1c2gocHJvdG8ubmFtZSlcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhcnRzLnB1c2godHVwWzFdKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gY2xlYW5QYXRoKHBhcnRzLmpvaW4oJy8nKSlcbn1cblxuLy8gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF0gLT4gW1tpbnQgY29kZSwgQnVmZmVyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUdXBsZXNUb1R1cGxlcyAodHVwbGVzKSB7XG4gIHJldHVybiB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR1cCkpIHtcbiAgICAgIHR1cCA9IFt0dXBdXG4gICAgfVxuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvQnVmZmVyKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyXS4uLiBdIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiB0dXBsZXNUb1N0cmluZ1R1cGxlcyAodHVwbGVzKSB7XG4gIHJldHVybiB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gW3Byb3RvLmNvZGUsIGNvbnZlcnQudG9TdHJpbmcocHJvdG8uY29kZSwgdHVwWzFdKV1cbiAgICB9XG4gICAgcmV0dXJuIFtwcm90by5jb2RlXVxuICB9KVxufVxuXG4vLyBbW2ludCBjb2RlLCBCdWZmZXIgXS4uLiBdIC0+IEJ1ZmZlclxuZnVuY3Rpb24gdHVwbGVzVG9CdWZmZXIgKHR1cGxlcykge1xuICByZXR1cm4gZnJvbUJ1ZmZlcihCdWZmZXIuY29uY2F0KHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBsZXQgYnVmID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShwcm90by5jb2RlKSlcblxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgYnVmID0gQnVmZmVyLmNvbmNhdChbYnVmLCB0dXBbMV1dKSAvLyBhZGQgYWRkcmVzcyBidWZmZXJcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmXG4gIH0pKSlcbn1cblxuZnVuY3Rpb24gc2l6ZUZvckFkZHIgKHAsIGFkZHIpIHtcbiAgaWYgKHAuc2l6ZSA+IDApIHtcbiAgICByZXR1cm4gcC5zaXplIC8gOFxuICB9IGVsc2UgaWYgKHAuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYWRkcilcbiAgICByZXR1cm4gc2l6ZSArIHZhcmludC5kZWNvZGUuYnl0ZXNcbiAgfVxufVxuXG4vLyBCdWZmZXIgLT4gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXVxuZnVuY3Rpb24gYnVmZmVyVG9UdXBsZXMgKGJ1Zikge1xuICBjb25zdCB0dXBsZXMgPSBbXVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG5cbiAgICBjb25zdCBzaXplID0gc2l6ZUZvckFkZHIocCwgYnVmLnNsaWNlKGkgKyBuKSlcblxuICAgIGlmIChzaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbY29kZV0pXG4gICAgICBpICs9IG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYWRkciA9IGJ1Zi5zbGljZShpICsgbiwgaSArIG4gKyBzaXplKVxuXG4gICAgaSArPSAoc2l6ZSArIG4pXG5cbiAgICBpZiAoaSA+IGJ1Zi5sZW5ndGgpIHsgLy8gZGlkIG5vdCBlbmQgX2V4YWN0bHlfIGF0IGJ1ZmZlci5sZW5ndGhcbiAgICAgIHRocm93IFBhcnNlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyBidWZmZXI6ICcgKyBidWYudG9TdHJpbmcoJ2hleCcpKVxuICAgIH1cblxuICAgIC8vIG9rLCB0dXBsZSBzZWVtcyBnb29kLlxuICAgIHR1cGxlcy5wdXNoKFtjb2RlLCBhZGRyXSlcbiAgfVxuXG4gIHJldHVybiB0dXBsZXNcbn1cblxuLy8gQnVmZmVyIC0+IFN0cmluZ1xuZnVuY3Rpb24gYnVmZmVyVG9TdHJpbmcgKGJ1Zikge1xuICBjb25zdCBhID0gYnVmZmVyVG9UdXBsZXMoYnVmKVxuICBjb25zdCBiID0gdHVwbGVzVG9TdHJpbmdUdXBsZXMoYSlcbiAgcmV0dXJuIHN0cmluZ1R1cGxlc1RvU3RyaW5nKGIpXG59XG5cbi8vIFN0cmluZyAtPiBCdWZmZXJcbmZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyIChzdHIpIHtcbiAgc3RyID0gY2xlYW5QYXRoKHN0cilcbiAgY29uc3QgYSA9IHN0cmluZ1RvU3RyaW5nVHVwbGVzKHN0cilcbiAgY29uc3QgYiA9IHN0cmluZ1R1cGxlc1RvVHVwbGVzKGEpXG5cbiAgcmV0dXJuIHR1cGxlc1RvQnVmZmVyKGIpXG59XG5cbi8vIFN0cmluZyAtPiBCdWZmZXJcbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyaW5nVG9CdWZmZXIoc3RyKVxufVxuXG4vLyBCdWZmZXIgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tQnVmZmVyIChidWYpIHtcbiAgY29uc3QgZXJyID0gdmFsaWRhdGVCdWZmZXIoYnVmKVxuICBpZiAoZXJyKSB0aHJvdyBlcnJcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZikgLy8gY29weVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUJ1ZmZlciAoYnVmKSB7XG4gIHRyeSB7XG4gICAgYnVmZmVyVG9UdXBsZXMoYnVmKSAvLyB0cnkgdG8gcGFyc2UuIHdpbGwgdGhyb3cgaWYgYnJlYWtzXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBlcnJcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkQnVmZmVyIChidWYpIHtcbiAgcmV0dXJuIHZhbGlkYXRlQnVmZmVyKGJ1ZikgPT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjbGVhblBhdGggKHN0cikge1xuICByZXR1cm4gJy8nICsgc3RyLnRyaW0oKS5zcGxpdCgnLycpLmZpbHRlcihhID0+IGEpLmpvaW4oJy8nKVxufVxuXG5mdW5jdGlvbiBQYXJzZUVycm9yIChzdHIpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcignRXJyb3IgcGFyc2luZyBhZGRyZXNzOiAnICsgc3RyKVxufVxuXG5mdW5jdGlvbiBwcm90b0Zyb21UdXBsZSAodHVwKSB7XG4gIGNvbnN0IHByb3RvID0gcHJvdG9jb2xzKHR1cFswXSlcbiAgcmV0dXJuIHByb3RvXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgaXAgPSByZXF1aXJlKCdpcCcpXG5jb25zdCBpc0lwID0gcmVxdWlyZSgnaXMtaXAnKVxuY29uc3QgcHJvdG9jb2xzID0gcmVxdWlyZSgnLi9wcm90b2NvbHMtdGFibGUnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCBiYXNlMzIgPSByZXF1aXJlKCdoaS1iYXNlMzInKVxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSBDb252ZXJ0XG5cbi8vIGNvbnZlcnRzIChzZXJpYWxpemVzKSBhZGRyZXNzZXNcbmZ1bmN0aW9uIENvbnZlcnQgKHByb3RvLCBhKSB7XG4gIGlmIChhIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIENvbnZlcnQudG9TdHJpbmcocHJvdG8sIGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIENvbnZlcnQudG9CdWZmZXIocHJvdG8sIGEpXG4gIH1cbn1cblxuQ29udmVydC50b1N0cmluZyA9IGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAocHJvdG8sIGJ1Zikge1xuICBwcm90byA9IHByb3RvY29scyhwcm90bylcbiAgc3dpdGNoIChwcm90by5jb2RlKSB7XG4gICAgY2FzZSA0OiAvLyBpcHY0XG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGJ1ZjJpcChidWYpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBidWYycG9ydChidWYpXG5cbiAgICBjYXNlIDUzOiAvLyBkbnNcbiAgICBjYXNlIDU0OiAvLyBkbnM0XG4gICAgY2FzZSA1NTogLy8gZG5zNlxuICAgIGNhc2UgNTY6IC8vIGRuc2FkZHJcbiAgICBjYXNlIDQwMDogLy8gdW5peFxuICAgICAgcmV0dXJuIGJ1ZjJzdHIoYnVmKVxuXG4gICAgY2FzZSA0MjE6IC8vIGlwZnNcbiAgICAgIHJldHVybiBidWYybWgoYnVmKVxuICAgIGNhc2UgNDQ0OiAvLyBvbmlvblxuICAgICAgcmV0dXJuIGJ1ZjJvbmlvbihidWYpXG4gICAgY2FzZSA0NDU6IC8vIG9uaW9uM1xuICAgICAgcmV0dXJuIGJ1ZjJvbmlvbihidWYpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBidWYudG9TdHJpbmcoJ2hleCcpIC8vIG5vIGNsdWUuIGNvbnZlcnQgdG8gaGV4XG4gIH1cbn1cblxuQ29udmVydC50b0J1ZmZlciA9IGZ1bmN0aW9uIGNvbnZlcnRUb0J1ZmZlciAocHJvdG8sIHN0cikge1xuICBwcm90byA9IHByb3RvY29scyhwcm90bylcbiAgc3dpdGNoIChwcm90by5jb2RlKSB7XG4gICAgY2FzZSA0OiAvLyBpcHY0XG4gICAgICByZXR1cm4gaXAyYnVmKHN0cilcbiAgICBjYXNlIDQxOiAvLyBpcHY2XG4gICAgICByZXR1cm4gaXAyYnVmKHN0cilcblxuICAgIGNhc2UgNjogLy8gdGNwXG4gICAgY2FzZSAyNzM6IC8vIHVkcFxuICAgIGNhc2UgMzM6IC8vIGRjY3BcbiAgICBjYXNlIDEzMjogLy8gc2N0cFxuICAgICAgcmV0dXJuIHBvcnQyYnVmKHBhcnNlSW50KHN0ciwgMTApKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBzdHIyYnVmKHN0cilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gbWgyYnVmKHN0cilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBvbmlvbjJidWYoc3RyKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBvbmlvbjMyYnVmKHN0cilcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2hleCcpIC8vIG5vIGNsdWUuIGNvbnZlcnQgZnJvbSBoZXhcbiAgfVxufVxuXG5mdW5jdGlvbiBpcDJidWYgKGlwU3RyaW5nKSB7XG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwLnRvQnVmZmVyKGlwU3RyaW5nKVxufVxuXG5mdW5jdGlvbiBidWYyaXAgKGlwQnVmZikge1xuICBjb25zdCBpcFN0cmluZyA9IGlwLnRvU3RyaW5nKGlwQnVmZilcbiAgaWYgKCFpc0lwKGlwU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpcCBhZGRyZXNzJylcbiAgfVxuICByZXR1cm4gaXBTdHJpbmdcbn1cblxuZnVuY3Rpb24gcG9ydDJidWYgKHBvcnQpIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIpXG4gIGJ1Zi53cml0ZVVJbnQxNkJFKHBvcnQsIDApXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gYnVmMnBvcnQgKGJ1Zikge1xuICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRSgwKVxufVxuXG5mdW5jdGlvbiBzdHIyYnVmIChzdHIpIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyKVxuICBjb25zdCBzaXplID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWYubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIGJ1Zl0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJzdHIgKGJ1Zikge1xuICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShidWYpXG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnVmLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gbWgyYnVmIChoYXNoKSB7XG4gIC8vIHRoZSBhZGRyZXNzIGlzIGEgdmFyaW50IHByZWZpeGVkIG11bHRpaGFzaCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgY29uc3QgbWggPSBuZXcgQ0lEKGhhc2gpLm11bHRpaGFzaFxuICBjb25zdCBzaXplID0gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShtaC5sZW5ndGgpKVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbc2l6ZSwgbWhdKVxufVxuXG5mdW5jdGlvbiBidWYybWggKGJ1Zikge1xuICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShidWYpXG4gIGNvbnN0IGFkZHJlc3MgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYWRkcmVzcy5sZW5ndGggIT09IHNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29uc2lzdGVudCBsZW5ndGhzJylcbiAgfVxuXG4gIHJldHVybiBiczU4LmVuY29kZShhZGRyZXNzKVxufVxuXG5mdW5jdGlvbiBvbmlvbjJidWYgKHN0cikge1xuICBjb25zdCBhZGRyID0gc3RyLnNwbGl0KCc6JylcbiAgaWYgKGFkZHIubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHIgKyAnIGRvZXMgbm90IGNvbnRhaW4gYSBwb3J0IG51bWJlcicpXG4gIH1cbiAgaWYgKGFkZHJbMF0ubGVuZ3RoICE9PSAxNikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyWzBdICsgJyBub3QgYSBUb3Igb25pb24gYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBvbmlvbjMyYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uMyBhZGRyZXNzLicpXG4gIH1cbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oYmFzZTMyLmRlY29kZS5hc0J5dGVzKGFkZHJbMF0udG9VcHBlckNhc2UoKSkpXG5cbiAgLy8gb25pb24gcG9ydCBudW1iZXJcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGFkZHJbMV0sIDEwKVxuICBpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQb3J0IG51bWJlciBpcyBub3QgaW4gcmFuZ2UoMSwgNjU1MzYpJylcbiAgfVxuICBjb25zdCBwb3J0QnVmID0gcG9ydDJidWYocG9ydClcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgcG9ydEJ1Zl0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJvbmlvbiAoYnVmKSB7XG4gIGNvbnN0IGFkZHJCeXRlcyA9IGJ1Zi5zbGljZSgwLCBidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgcG9ydEJ5dGVzID0gYnVmLnNsaWNlKGJ1Zi5sZW5ndGggLSAyKVxuICBjb25zdCBhZGRyID0gYmFzZTMyLmVuY29kZShhZGRyQnl0ZXMpLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgcG9ydCA9IGJ1ZjJwb3J0KHBvcnRCeXRlcylcbiAgcmV0dXJuIGFkZHIgKyAnOicgKyBwb3J0XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpcCA9IGV4cG9ydHM7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIG9zID0gcmVxdWlyZSgnb3MnKTtcblxuaXAudG9CdWZmZXIgPSBmdW5jdGlvbihpcCwgYnVmZiwgb2Zmc2V0KSB7XG4gIG9mZnNldCA9IH5+b2Zmc2V0O1xuXG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKHRoaXMuaXNWNEZvcm1hdChpcCkpIHtcbiAgICByZXN1bHQgPSBidWZmIHx8IG5ldyBCdWZmZXIob2Zmc2V0ICsgNCk7XG4gICAgaXAuc3BsaXQoL1xcLi9nKS5tYXAoZnVuY3Rpb24oYnl0ZSkge1xuICAgICAgcmVzdWx0W29mZnNldCsrXSA9IHBhcnNlSW50KGJ5dGUsIDEwKSAmIDB4ZmY7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1Y2Rm9ybWF0KGlwKSkge1xuICAgIHZhciBzZWN0aW9ucyA9IGlwLnNwbGl0KCc6JywgOCk7XG5cbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc3Y0ID0gdGhpcy5pc1Y0Rm9ybWF0KHNlY3Rpb25zW2ldKTtcbiAgICAgIHZhciB2NEJ1ZmZlcjtcblxuICAgICAgaWYgKGlzdjQpIHtcbiAgICAgICAgdjRCdWZmZXIgPSB0aGlzLnRvQnVmZmVyKHNlY3Rpb25zW2ldKTtcbiAgICAgICAgc2VjdGlvbnNbaV0gPSB2NEJ1ZmZlci5zbGljZSgwLCAyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2NEJ1ZmZlciAmJiArK2kgPCA4KSB7XG4gICAgICAgIHNlY3Rpb25zLnNwbGljZShpLCAwLCB2NEJ1ZmZlci5zbGljZSgyLCA0KS50b1N0cmluZygnaGV4JykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWN0aW9uc1swXSA9PT0gJycpIHtcbiAgICAgIHdoaWxlIChzZWN0aW9ucy5sZW5ndGggPCA4KSBzZWN0aW9ucy51bnNoaWZ0KCcwJyk7XG4gICAgfSBlbHNlIGlmIChzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICAgIHdoaWxlIChzZWN0aW9ucy5sZW5ndGggPCA4KSBzZWN0aW9ucy5wdXNoKCcwJyk7XG4gICAgfSBlbHNlIGlmIChzZWN0aW9ucy5sZW5ndGggPCA4KSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoICYmIHNlY3Rpb25zW2ldICE9PSAnJzsgaSsrKTtcbiAgICAgIHZhciBhcmd2ID0gWyBpLCAxIF07XG4gICAgICBmb3IgKGkgPSA5IC0gc2VjdGlvbnMubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGFyZ3YucHVzaCgnMCcpO1xuICAgICAgfVxuICAgICAgc2VjdGlvbnMuc3BsaWNlLmFwcGx5KHNlY3Rpb25zLCBhcmd2KTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBidWZmIHx8IG5ldyBCdWZmZXIob2Zmc2V0ICsgMTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdvcmQgPSBwYXJzZUludChzZWN0aW9uc1tpXSwgMTYpO1xuICAgICAgcmVzdWx0W29mZnNldCsrXSA9ICh3b3JkID4+IDgpICYgMHhmZjtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSB3b3JkICYgMHhmZjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGlwIGFkZHJlc3M6ICcgKyBpcCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuaXAudG9TdHJpbmcgPSBmdW5jdGlvbihidWZmLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcbiAgbGVuZ3RoID0gbGVuZ3RoIHx8IChidWZmLmxlbmd0aCAtIG9mZnNldCk7XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAobGVuZ3RoID09PSA0KSB7XG4gICAgLy8gSVB2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmZbb2Zmc2V0ICsgaV0pO1xuICAgIH1cbiAgICByZXN1bHQgPSByZXN1bHQuam9pbignLicpO1xuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMTYpIHtcbiAgICAvLyBJUHY2XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgcmVzdWx0LnB1c2goYnVmZi5yZWFkVUludDE2QkUob2Zmc2V0ICsgaSkudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJzonKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvKF58OikwKDowKSo6MCg6fCQpLywgJyQxOjokMycpO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC86ezMsNH0vLCAnOjonKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaXB2NFJlZ2V4ID0gL14oXFxkezEsM31cXC4pezMsM31cXGR7MSwzfSQvO1xudmFyIGlwdjZSZWdleCA9XG4gICAgL14oOjopPygoKFxcZHsxLDN9XFwuKXszfShcXGR7MSwzfSl7MX0pPyhbMC05YS1mXSl7MCw0fTp7MCwyfSl7MSw4fSg6Oik/JC9pO1xuXG5pcC5pc1Y0Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjRSZWdleC50ZXN0KGlwKTtcbn07XG5cbmlwLmlzVjZGb3JtYXQgPSBmdW5jdGlvbihpcCkge1xuICByZXR1cm4gaXB2NlJlZ2V4LnRlc3QoaXApO1xufTtcbmZ1bmN0aW9uIF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KSB7XG4gIHJldHVybiBmYW1pbHkgPyBmYW1pbHkudG9Mb3dlckNhc2UoKSA6ICdpcHY0Jztcbn1cblxuaXAuZnJvbVByZWZpeExlbiA9IGZ1bmN0aW9uKHByZWZpeGxlbiwgZmFtaWx5KSB7XG4gIGlmIChwcmVmaXhsZW4gPiAzMikge1xuICAgIGZhbWlseSA9ICdpcHY2JztcbiAgfSBlbHNlIHtcbiAgICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG4gIH1cblxuICB2YXIgbGVuID0gNDtcbiAgaWYgKGZhbWlseSA9PT0gJ2lwdjYnKSB7XG4gICAgbGVuID0gMTY7XG4gIH1cbiAgdmFyIGJ1ZmYgPSBuZXcgQnVmZmVyKGxlbik7XG5cbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBidWZmLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHZhciBiaXRzID0gODtcbiAgICBpZiAocHJlZml4bGVuIDwgOCkge1xuICAgICAgYml0cyA9IHByZWZpeGxlbjtcbiAgICB9XG4gICAgcHJlZml4bGVuIC09IGJpdHM7XG5cbiAgICBidWZmW2ldID0gfigweGZmID4+IGJpdHMpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm1hc2sgPSBmdW5jdGlvbihhZGRyLCBtYXNrKSB7XG4gIGFkZHIgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgbWFzayA9IGlwLnRvQnVmZmVyKG1hc2spO1xuXG4gIHZhciByZXN1bHQgPSBuZXcgQnVmZmVyKE1hdGgubWF4KGFkZHIubGVuZ3RoLCBtYXNrLmxlbmd0aCkpO1xuXG4gIHZhciBpID0gMDtcbiAgLy8gU2FtZSBwcm90b2NvbCAtIGRvIGJpdHdpc2UgYW5kXG4gIGlmIChhZGRyLmxlbmd0aCA9PT0gbWFzay5sZW5ndGgpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYWRkcltpXSAmIG1hc2tbaV07XG4gICAgfVxuICB9IGVsc2UgaWYgKG1hc2subGVuZ3RoID09PSA0KSB7XG4gICAgLy8gSVB2NiBhZGRyZXNzIGFuZCBJUHY0IG1hc2tcbiAgICAvLyAoTWFzayBsb3cgYml0cylcbiAgICBmb3IgKGkgPSAwOyBpIDwgbWFzay5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYWRkclthZGRyLmxlbmd0aCAtIDQgICsgaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJUHY2IG1hc2sgYW5kIElQdjQgYWRkclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aCAtIDY7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gMDtcbiAgICB9XG5cbiAgICAvLyA6OmZmZmY6aXB2NFxuICAgIHJlc3VsdFsxMF0gPSAweGZmO1xuICAgIHJlc3VsdFsxMV0gPSAweGZmO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZGRyLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaSArIDEyXSA9IGFkZHJbaV0gJiBtYXNrW2kgKyAxMl07XG4gICAgfVxuICAgIGkgPSBpICsgMTI7XG4gIH1cbiAgZm9yICg7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspXG4gICAgcmVzdWx0W2ldID0gMDtcblxuICByZXR1cm4gaXAudG9TdHJpbmcocmVzdWx0KTtcbn07XG5cbmlwLmNpZHIgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLm1hc2soYWRkciwgbWFzayk7XG59O1xuXG5pcC5zdWJuZXQgPSBmdW5jdGlvbihhZGRyLCBtYXNrKSB7XG4gIHZhciBuZXR3b3JrQWRkcmVzcyA9IGlwLnRvTG9uZyhpcC5tYXNrKGFkZHIsIG1hc2spKTtcblxuICAvLyBDYWxjdWxhdGUgdGhlIG1hc2sncyBsZW5ndGguXG4gIHZhciBtYXNrQnVmZmVyID0gaXAudG9CdWZmZXIobWFzayk7XG4gIHZhciBtYXNrTGVuZ3RoID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1hc2tCdWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWFza0J1ZmZlcltpXSA9PT0gMHhmZikge1xuICAgICAgbWFza0xlbmd0aCArPSA4O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb2N0ZXQgPSBtYXNrQnVmZmVyW2ldICYgMHhmZjtcbiAgICAgIHdoaWxlIChvY3RldCkge1xuICAgICAgICBvY3RldCA9IChvY3RldCA8PCAxKSAmIDB4ZmY7XG4gICAgICAgIG1hc2tMZW5ndGgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbnVtYmVyT2ZBZGRyZXNzZXMgPSBNYXRoLnBvdygyLCAzMiAtIG1hc2tMZW5ndGgpO1xuXG4gIHJldHVybiB7XG4gICAgbmV0d29ya0FkZHJlc3M6IGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzKSxcbiAgICBmaXJzdEFkZHJlc3M6IG51bWJlck9mQWRkcmVzc2VzIDw9IDIgP1xuICAgICAgICAgICAgICAgICAgICBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcykgOlxuICAgICAgICAgICAgICAgICAgICBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIDEpLFxuICAgIGxhc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyBudW1iZXJPZkFkZHJlc3NlcyAtIDEpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyBudW1iZXJPZkFkZHJlc3NlcyAtIDIpLFxuICAgIGJyb2FkY2FzdEFkZHJlc3M6IGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSxcbiAgICBzdWJuZXRNYXNrOiBtYXNrLFxuICAgIHN1Ym5ldE1hc2tMZW5ndGg6IG1hc2tMZW5ndGgsXG4gICAgbnVtSG9zdHM6IG51bWJlck9mQWRkcmVzc2VzIDw9IDIgP1xuICAgICAgICAgICAgICAgIG51bWJlck9mQWRkcmVzc2VzIDogbnVtYmVyT2ZBZGRyZXNzZXMgLSAyLFxuICAgIGxlbmd0aDogbnVtYmVyT2ZBZGRyZXNzZXMsXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICByZXR1cm4gbmV0d29ya0FkZHJlc3MgPT09IGlwLnRvTG9uZyhpcC5tYXNrKG90aGVyLCBtYXNrKSk7XG4gICAgfVxuICB9O1xufTtcblxuaXAuY2lkclN1Ym5ldCA9IGZ1bmN0aW9uKGNpZHJTdHJpbmcpIHtcbiAgdmFyIGNpZHJQYXJ0cyA9IGNpZHJTdHJpbmcuc3BsaXQoJy8nKTtcblxuICB2YXIgYWRkciA9IGNpZHJQYXJ0c1swXTtcbiAgaWYgKGNpZHJQYXJ0cy5sZW5ndGggIT09IDIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIENJRFIgc3VibmV0OiAnICsgYWRkcik7XG5cbiAgdmFyIG1hc2sgPSBpcC5mcm9tUHJlZml4TGVuKHBhcnNlSW50KGNpZHJQYXJ0c1sxXSwgMTApKTtcblxuICByZXR1cm4gaXAuc3VibmV0KGFkZHIsIG1hc2spO1xufTtcblxuaXAubm90ID0gZnVuY3Rpb24oYWRkcikge1xuICB2YXIgYnVmZiA9IGlwLnRvQnVmZmVyKGFkZHIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmYubGVuZ3RoOyBpKyspIHtcbiAgICBidWZmW2ldID0gMHhmZiBeIGJ1ZmZbaV07XG4gIH1cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xufTtcblxuaXAub3IgPSBmdW5jdGlvbihhLCBiKSB7XG4gIGEgPSBpcC50b0J1ZmZlcihhKTtcbiAgYiA9IGlwLnRvQnVmZmVyKGIpO1xuXG4gIC8vIHNhbWUgcHJvdG9jb2xcbiAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgYVtpXSB8PSBiW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaXAudG9TdHJpbmcoYSk7XG5cbiAgLy8gbWl4ZWQgcHJvdG9jb2xzXG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ1ZmYgPSBhO1xuICAgIHZhciBvdGhlciA9IGI7XG4gICAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHtcbiAgICAgIGJ1ZmYgPSBiO1xuICAgICAgb3RoZXIgPSBhO1xuICAgIH1cblxuICAgIHZhciBvZmZzZXQgPSBidWZmLmxlbmd0aCAtIG90aGVyLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgYnVmZi5sZW5ndGg7ICsraSkge1xuICAgICAgYnVmZltpXSB8PSBvdGhlcltpIC0gb2Zmc2V0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG4gIH1cbn07XG5cbmlwLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gIGEgPSBpcC50b0J1ZmZlcihhKTtcbiAgYiA9IGlwLnRvQnVmZmVyKGIpO1xuXG4gIC8vIFNhbWUgcHJvdG9jb2xcbiAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBTd2FwXG4gIGlmIChiLmxlbmd0aCA9PT0gNCkge1xuICAgIHZhciB0ID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIC8vIGEgLSBJUHY0LCBiIC0gSVB2NlxuICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoYltpXSAhPT0gMCkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHdvcmQgPSBiLnJlYWRVSW50MTZCRSgxMCk7XG4gIGlmICh3b3JkICE9PSAwICYmIHdvcmQgIT09IDB4ZmZmZikgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaSArIDEyXSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5pcC5pc1ByaXZhdGUgPSBmdW5jdGlvbihhZGRyKSB7XG4gIHJldHVybiAvXig6OmZ7NH06KT8xMFxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaVxuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xOTJcXC4xNjhcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2kudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzE3MlxcLigxWzYtOV18MlxcZHwzMHwzMSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNjlcXC4yNTRcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2kudGVzdChhZGRyKSB8fFxuICAgIC9eZltjZF1bMC05YS1mXXsyfTovaS50ZXN0KGFkZHIpIHx8XG4gICAgL15mZTgwOi9pLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6MSQvLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6JC8udGVzdChhZGRyKTtcbn07XG5cbmlwLmlzUHVibGljID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gIWlwLmlzUHJpdmF0ZShhZGRyKTtcbn07XG5cbmlwLmlzTG9vcGJhY2sgPSBmdW5jdGlvbihhZGRyKSB7XG4gIHJldHVybiAvXig6OmZ7NH06KT8xMjdcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkvXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDo6MSQvLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6MSQvLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6JC8udGVzdChhZGRyKTtcbn07XG5cbmlwLmxvb3BiYWNrID0gZnVuY3Rpb24oZmFtaWx5KSB7XG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYGlwdjRgXG4gIC8vXG4gIGZhbWlseSA9IF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KTtcblxuICBpZiAoZmFtaWx5ICE9PSAnaXB2NCcgJiYgZmFtaWx5ICE9PSAnaXB2NicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhbWlseSBtdXN0IGJlIGlwdjQgb3IgaXB2NicpO1xuICB9XG5cbiAgcmV0dXJuIGZhbWlseSA9PT0gJ2lwdjQnID8gJzEyNy4wLjAuMScgOiAnZmU4MDo6MSc7XG59O1xuXG4vL1xuLy8gIyMjIGZ1bmN0aW9uIGFkZHJlc3MgKG5hbWUsIGZhbWlseSlcbi8vICMjIyMgQG5hbWUge3N0cmluZ3wncHVibGljJ3wncHJpdmF0ZSd9ICoqT3B0aW9uYWwqKiBOYW1lIG9yIHNlY3VyaXR5XG4vLyAgICAgIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZS5cbi8vICMjIyMgQGZhbWlseSB7aXB2NHxpcHY2fSAqKk9wdGlvbmFsKiogSVAgZmFtaWx5IG9mIHRoZSBhZGRyZXNzIChkZWZhdWx0c1xuLy8gICAgICB0byBpcHY0KS5cbi8vXG4vLyBSZXR1cm5zIHRoZSBhZGRyZXNzIGZvciB0aGUgbmV0d29yayBpbnRlcmZhY2Ugb24gdGhlIGN1cnJlbnQgc3lzdGVtIHdpdGhcbi8vIHRoZSBzcGVjaWZpZWQgYG5hbWVgOlxuLy8gICAqIFN0cmluZzogRmlyc3QgYGZhbWlseWAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlLlxuLy8gICAgICAgICAgICAgSWYgbm90IGZvdW5kIHNlZSBgdW5kZWZpbmVkYC5cbi8vICAgKiAncHVibGljJzogdGhlIGZpcnN0IHB1YmxpYyBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiAncHJpdmF0ZSc6IHRoZSBmaXJzdCBwcml2YXRlIGlwIGFkZHJlc3Mgb2YgZmFtaWx5LlxuLy8gICAqIHVuZGVmaW5lZDogRmlyc3QgYWRkcmVzcyB3aXRoIGBpcHY0YCBvciBsb29wYmFjayBhZGRyZXNzIGAxMjcuMC4wLjFgLlxuLy9cbmlwLmFkZHJlc3MgPSBmdW5jdGlvbihuYW1lLCBmYW1pbHkpIHtcbiAgdmFyIGludGVyZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpO1xuICB2YXIgYWxsO1xuXG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYGlwdjRgXG4gIC8vXG4gIGZhbWlseSA9IF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KTtcblxuICAvL1xuICAvLyBJZiBhIHNwZWNpZmljIG5ldHdvcmsgaW50ZXJmYWNlIGhhcyBiZWVuIG5hbWVkLFxuICAvLyByZXR1cm4gdGhlIGFkZHJlc3MuXG4gIC8vXG4gIGlmIChuYW1lICYmIG5hbWUgIT09ICdwcml2YXRlJyAmJiBuYW1lICE9PSAncHVibGljJykge1xuICAgIHZhciByZXMgPSBpbnRlcmZhY2VzW25hbWVdLmZpbHRlcihmdW5jdGlvbihkZXRhaWxzKSB7XG4gICAgICB2YXIgaXRlbUZhbWlseSA9IGRldGFpbHMuZmFtaWx5LnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gaXRlbUZhbWlseSA9PT0gZmFtaWx5O1xuICAgIH0pO1xuICAgIGlmIChyZXMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzWzBdLmFkZHJlc3M7XG4gIH1cblxuICB2YXIgYWxsID0gT2JqZWN0LmtleXMoaW50ZXJmYWNlcykubWFwKGZ1bmN0aW9uIChuaWMpIHtcbiAgICAvL1xuICAgIC8vIE5vdGU6IG5hbWUgd2lsbCBvbmx5IGJlIGBwdWJsaWNgIG9yIGBwcml2YXRlYFxuICAgIC8vIHdoZW4gdGhpcyBpcyBjYWxsZWQuXG4gICAgLy9cbiAgICB2YXIgYWRkcmVzc2VzID0gaW50ZXJmYWNlc1tuaWNdLmZpbHRlcihmdW5jdGlvbiAoZGV0YWlscykge1xuICAgICAgZGV0YWlscy5mYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGRldGFpbHMuZmFtaWx5ICE9PSBmYW1pbHkgfHwgaXAuaXNMb29wYmFjayhkZXRhaWxzLmFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lID09PSAncHVibGljJyA/IGlwLmlzUHJpdmF0ZShkZXRhaWxzLmFkZHJlc3MpIDpcbiAgICAgICAgICBpcC5pc1B1YmxpYyhkZXRhaWxzLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFkZHJlc3Nlcy5sZW5ndGggPyBhZGRyZXNzZXNbMF0uYWRkcmVzcyA6IHVuZGVmaW5lZDtcbiAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIHJldHVybiAhYWxsLmxlbmd0aCA/IGlwLmxvb3BiYWNrKGZhbWlseSkgOiBhbGxbMF07XG59O1xuXG5pcC50b0xvbmcgPSBmdW5jdGlvbihpcCkge1xuICB2YXIgaXBsID0gMDtcbiAgaXAuc3BsaXQoJy4nKS5mb3JFYWNoKGZ1bmN0aW9uKG9jdGV0KSB7XG4gICAgaXBsIDw8PSA4O1xuICAgIGlwbCArPSBwYXJzZUludChvY3RldCk7XG4gIH0pO1xuICByZXR1cm4oaXBsID4+PiAwKTtcbn07XG5cbmlwLmZyb21Mb25nID0gZnVuY3Rpb24oaXBsKSB7XG4gIHJldHVybiAoKGlwbCA+Pj4gMjQpICsgJy4nICtcbiAgICAgIChpcGwgPj4gMTYgJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgPj4gOCAmIDI1NSkgKyAnLicgK1xuICAgICAgKGlwbCAmIDI1NSkgKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBpcFJlZ2V4ID0gcmVxdWlyZSgnaXAtcmVnZXgnKTtcblxuY29uc3QgaXNJcCA9IHN0cmluZyA9PiBpcFJlZ2V4KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudjQgPSBzdHJpbmcgPT4gaXBSZWdleC52NCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY2ID0gc3RyaW5nID0+IGlwUmVnZXgudjYoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52ZXJzaW9uID0gc3RyaW5nID0+IGlzSXAoc3RyaW5nKSA/IChpc0lwLnY0KHN0cmluZykgPyA0IDogNikgOiB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJcDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd29yZCA9ICdbYS1mQS1GXFxcXGQ6XSc7XG5jb25zdCBiID0gb3B0aW9ucyA9PiBvcHRpb25zICYmIG9wdGlvbnMuaW5jbHVkZUJvdW5kYXJpZXMgP1xuXHRgKD86KD88PVxcXFxzfF4pKD89JHt3b3JkfSl8KD88PSR7d29yZH0pKD89XFxcXHN8JCkpYCA6XG5cdCcnO1xuXG5jb25zdCB2NCA9ICcoPzoyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldXFxcXGR8XFxcXGQpKD86XFxcXC4oPzoyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldXFxcXGR8XFxcXGQpKXszfSc7XG5cbmNvbnN0IHY2c2VnID0gJ1thLWZBLUZcXFxcZF17MSw0fSc7XG5jb25zdCB2NiA9IGBcbihcbig/OiR7djZzZWd9Oil7N30oPzoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE6MjozOjQ6NTo2Ojc6OiAgMToyOjM6NDo1OjY6Nzo4XG4oPzoke3Y2c2VnfTopezZ9KD86JHt2NH18OiR7djZzZWd9fDopfCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo6ICAgIDE6MjozOjQ6NTo2Ojo4ICAgMToyOjM6NDo1OjY6OjggIDE6MjozOjQ6NTo2OjoxLjIuMy40XG4oPzoke3Y2c2VnfTopezV9KD86OiR7djR9fCg6JHt2NnNlZ30pezEsMn18Oil8ICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6OiAgICAgIDE6MjozOjQ6NTo6Nzo4ICAgMToyOjM6NDo1Ojo4ICAgIDE6MjozOjQ6NTo6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezR9KD86KDoke3Y2c2VnfSl7MCwxfToke3Y0fXwoOiR7djZzZWd9KXsxLDN9fDopfCAvLyAxOjI6Mzo0OjogICAgICAgIDE6MjozOjQ6OjY6Nzo4ICAgMToyOjM6NDo6OCAgICAgIDE6MjozOjQ6OjY6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezN9KD86KDoke3Y2c2VnfSl7MCwyfToke3Y0fXwoOiR7djZzZWd9KXsxLDR9fDopfCAvLyAxOjI6Mzo6ICAgICAgICAgIDE6MjozOjo1OjY6Nzo4ICAgMToyOjM6OjggICAgICAgIDE6MjozOjo1OjY6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezJ9KD86KDoke3Y2c2VnfSl7MCwzfToke3Y0fXwoOiR7djZzZWd9KXsxLDV9fDopfCAvLyAxOjI6OiAgICAgICAgICAgIDE6Mjo6NDo1OjY6Nzo4ICAgMToyOjo4ICAgICAgICAgIDE6Mjo6NDo1OjY6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezF9KD86KDoke3Y2c2VnfSl7MCw0fToke3Y0fXwoOiR7djZzZWd9KXsxLDZ9fDopfCAvLyAxOjogICAgICAgICAgICAgIDE6OjM6NDo1OjY6Nzo4ICAgMTo6OCAgICAgICAgICAgIDE6OjM6NDo1OjY6NzoxLjIuMy40XG4oPzo6KCg/Ojoke3Y2c2VnfSl7MCw1fToke3Y0fXwoPzo6JHt2NnNlZ30pezEsN318OikpICAgICAgICAgICAvLyA6OjI6Mzo0OjU6Njo3OjggIDo6MjozOjQ6NTo2Ojc6OCAgOjo4ICAgICAgICAgICAgIDo6MS4yLjMuNFxuKSglWzAtOWEtekEtWl17MSx9KT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJWV0aDAgICAgICAgICAgICAlMVxuYC5yZXBsYWNlKC9cXHMqXFwvXFwvLiokL2dtLCAnJykucmVwbGFjZSgvXFxuL2csICcnKS50cmltKCk7XG5cbmNvbnN0IGlwID0gb3B0aW9ucyA9PiBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3QgP1xuXHRuZXcgUmVnRXhwKGAoPzpeJHt2NH0kKXwoPzpeJHt2Nn0kKWApIDpcblx0bmV3IFJlZ0V4cChgKD86JHtiKG9wdGlvbnMpfSR7djR9JHtiKG9wdGlvbnMpfSl8KD86JHtiKG9wdGlvbnMpfSR7djZ9JHtiKG9wdGlvbnMpfSlgLCAnZycpO1xuXG5pcC52NCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID8gbmV3IFJlZ0V4cChgXiR7djR9JGApIDogbmV3IFJlZ0V4cChgJHtiKG9wdGlvbnMpfSR7djR9JHtiKG9wdGlvbnMpfWAsICdnJyk7XG5pcC52NiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID8gbmV3IFJlZ0V4cChgXiR7djZ9JGApIDogbmV3IFJlZ0V4cChgJHtiKG9wdGlvbnMpfSR7djZ9JHtiKG9wdGlvbnMpfWAsICdnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXA7XG4iLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBtdWx0aWNvZGVjIHNwZWNpZmljYXRpb24uXG4gKlxuICogQG1vZHVsZSBtdWx0aWNvZGVjXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuICpcbiAqIGNvbnN0IHByZWZpeGVkUHJvdG9idWYgPSBtdWx0aWNvZGVjLmFkZFByZWZpeCgncHJvdG9idWYnLCBwcm90b2J1ZkJ1ZmZlcilcbiAqIC8vIHByZWZpeGVkUHJvdG9idWYgMHg1MC4uLlxuICpcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5jb25zdCBpbnRUYWJsZSA9IHJlcXVpcmUoJy4vaW50LXRhYmxlJylcbmNvbnN0IGNvZGVjTmFtZVRvQ29kZVZhcmludCA9IHJlcXVpcmUoJy4vdmFyaW50LXRhYmxlJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHNcblxuLyoqXG4gKiBQcmVmaXggYSBidWZmZXIgd2l0aCBhIG11bHRpY29kZWMtcGFja2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbXVsdGljb2RlY1N0ck9yQ29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuYWRkUHJlZml4ID0gKG11bHRpY29kZWNTdHJPckNvZGUsIGRhdGEpID0+IHtcbiAgbGV0IHByZWZpeFxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIobXVsdGljb2RlY1N0ck9yQ29kZSkpIHtcbiAgICBwcmVmaXggPSB1dGlsLnZhcmludEJ1ZmZlckVuY29kZShtdWx0aWNvZGVjU3RyT3JDb2RlKVxuICB9IGVsc2Uge1xuICAgIGlmIChjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV0pIHtcbiAgICAgIHByZWZpeCA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFttdWx0aWNvZGVjU3RyT3JDb2RlXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpY29kZWMgbm90IHJlY29nbml6ZWQnKVxuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbcHJlZml4LCBkYXRhXSlcbn1cblxuLyoqXG4gKiBEZWNhcHN1bGF0ZSB0aGUgbXVsdGljb2RlYy1wYWNrZWQgcHJlZml4IGZyb20gdGhlIGRhdGEuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMucm1QcmVmaXggPSAoZGF0YSkgPT4ge1xuICB2YXJpbnQuZGVjb2RlKGRhdGEpXG4gIHJldHVybiBkYXRhLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlYyBvZiB0aGUgcHJlZml4ZWQgZGF0YS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwcmVmaXhlZERhdGFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZWMgPSAocHJlZml4ZWREYXRhKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKHByZWZpeGVkRGF0YSlcbiAgY29uc3QgY29kZWNOYW1lID0gaW50VGFibGUuZ2V0KGNvZGUpXG4gIGlmIChjb2RlY05hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29kZSAke2NvZGV9IG5vdCBmb3VuZGApXG4gIH1cbiAgcmV0dXJuIGNvZGVjTmFtZVxufVxuXG4vKipcbiAqIEdldCB0aGUgbmFtZSBvZiB0aGUgY29kZWMuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZWNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZ2V0TmFtZSA9IChjb2RlYykgPT4ge1xuICByZXR1cm4gaW50VGFibGUuZ2V0KGNvZGVjKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZSBvZiB0aGUgY29kZWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmdldE51bWJlciA9IChuYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbmFtZV1cbiAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29kZWMgYCcgKyBuYW1lICsgJ2Agbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gdXRpbC52YXJpbnRCdWZmZXJEZWNvZGUoY29kZSlbMF1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmdldENvZGUgPSAocHJlZml4ZWREYXRhKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZGVjb2RlKHByZWZpeGVkRGF0YSlcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgYXMgdmFyaW50IG9mIGEgY29kZWMgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlY05hbWVcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZVZhcmludCA9IChjb2RlY05hbWUpID0+IHtcbiAgY29uc3QgY29kZSA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFtjb2RlY05hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgY29kZWNOYW1lICsgJ2Agbm90IGZvdW5kJylcbiAgfVxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFyaW50IG9mIGEgY29kZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gKi9cbmV4cG9ydHMuZ2V0VmFyaW50ID0gKGNvZGUpID0+IHtcbiAgcmV0dXJuIHZhcmludC5lbmNvZGUoY29kZSlcbn1cblxuLy8gTWFrZSB0aGUgY29uc3RhbnRzIHRvcC1sZXZlbCBjb25zdGFudHNcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbk9iamVjdC5hc3NpZ24oZXhwb3J0cywgY29uc3RhbnRzKVxuXG4vLyBIdW1hbiBmcmllbmRseSBuYW1lcyBmb3IgcHJpbnRpbmcsIGUuZy4gaW4gZXJyb3IgbWVzc2FnZXNcbmV4cG9ydHMucHJpbnQgPSByZXF1aXJlKCcuL3ByaW50JylcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgYmFzZVRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGhleFN0cmluZyAtPiBjb2RlY05hbWVcbmNvbnN0IG5hbWVUYWJsZSA9IG5ldyBNYXAoKVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIG5hbWVUYWJsZS5zZXQoY29kZSwgZW5jb2RpbmdOYW1lKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUobmFtZVRhYmxlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2VUYWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcbmNvbnN0IHZhcmludEVuY29kZSA9IHJlcXVpcmUoJy4vdXRpbCcpLnZhcmludEVuY29kZVxuXG4vLyBtYXAgZm9yIGNvZGVjTmFtZSAtPiBjb2RlVmFyaW50QnVmZmVyXG5jb25zdCB2YXJpbnRUYWJsZSA9IHt9XG5cbmZvciAoY29uc3QgZW5jb2RpbmdOYW1lIGluIGJhc2VUYWJsZSkge1xuICBjb25zdCBjb2RlID0gYmFzZVRhYmxlW2VuY29kaW5nTmFtZV1cbiAgdmFyaW50VGFibGVbZW5jb2RpbmdOYW1lXSA9IHZhcmludEVuY29kZShjb2RlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUodmFyaW50VGFibGUpXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgdGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5cbi8vIG1hcCBmb3IgY29kZWNDb25zdGFudCAtPiBjb2RlXG5jb25zdCBjb25zdGFudHMgPSB7fVxuXG5mb3IgKGNvbnN0IFtuYW1lLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyh0YWJsZSkpIHtcbiAgY29uc3RhbnRzW25hbWUudG9VcHBlckNhc2UoKS5yZXBsYWNlKC8tL2csICdfJyldID0gY29kZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoY29uc3RhbnRzKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGUgLT4gcHJpbnQgZnJpZW5kbHkgbmFtZVxuY29uc3QgdGFibGVCeUNvZGUgPSB7fVxuXG5mb3IgKGNvbnN0IFtuYW1lLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyh0YWJsZSkpIHtcbiAgaWYgKHRhYmxlQnlDb2RlW2NvZGVdID09PSB1bmRlZmluZWQpIHRhYmxlQnlDb2RlW2NvZGVdID0gbmFtZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUodGFibGVCeUNvZGUpXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbWggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5cbnZhciBDSURVdGlsID0ge1xuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgYSB2YWxpZCBDSUQgb2JqZWN0LlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgaXMgbm90LlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBpdCBpcyBhIHZhbGlkIENJRC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG90aGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBjaGVja0NJRENvbXBvbmVudHM6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmIChvdGhlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ251bGwgdmFsdWVzIGFyZSBub3QgdmFsaWQgQ0lEcydcbiAgICB9XG5cbiAgICBpZiAoIShvdGhlci52ZXJzaW9uID09PSAwIHx8IG90aGVyLnZlcnNpb24gPT09IDEpKSB7XG4gICAgICByZXR1cm4gJ0ludmFsaWQgdmVyc2lvbiwgbXVzdCBiZSBhIG51bWJlciBlcXVhbCB0byAxIG9yIDAnXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvdGhlci5jb2RlYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnY29kZWMgbXVzdCBiZSBzdHJpbmcnXG4gICAgfVxuXG4gICAgaWYgKG90aGVyLnZlcnNpb24gPT09IDApIHtcbiAgICAgIGlmIChvdGhlci5jb2RlYyAhPT0gJ2RhZy1wYicpIHtcbiAgICAgICAgcmV0dXJuIFwiY29kZWMgbXVzdCBiZSAnZGFnLXBiJyBmb3IgQ0lEdjBcIlxuICAgICAgfVxuICAgICAgaWYgKG90aGVyLm11bHRpYmFzZU5hbWUgIT09ICdiYXNlNThidGMnKSB7XG4gICAgICAgIHJldHVybiBcIm11bHRpYmFzZU5hbWUgbXVzdCBiZSAnYmFzZTU4YnRjJyBmb3IgQ0lEdjBcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKG90aGVyLm11bHRpaGFzaCkpIHtcbiAgICAgIHJldHVybiAnbXVsdGloYXNoIG11c3QgYmUgYSBCdWZmZXInXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIG1oLnZhbGlkYXRlKG90aGVyLm11bHRpaGFzaClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCBlcnJvck1zZyA9IGVyci5tZXNzYWdlXG4gICAgICBpZiAoIWVycm9yTXNnKSB7IC8vIEp1c3QgaW4gY2FzZSBtaC52YWxpZGF0ZSgpIHRocm93cyBhbiBlcnJvciB3aXRoIGVtcHR5IGVycm9yIG1lc3NhZ2VcbiAgICAgICAgZXJyb3JNc2cgPSAnTXVsdGloYXNoIHZhbGlkYXRpb24gZmFpbGVkJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9yTXNnXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ0lEVXRpbFxuIiwiLypcbiAqIFtoaS1iYXNlMzJde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvaGktYmFzZTMyfVxuICpcbiAqIEB2ZXJzaW9uIDAuNS4wXG4gKiBAYXV0aG9yIENoZW4sIFlpLUN5dWFuIFtlbW4xNzhAZ21haWwuY29tXVxuICogQGNvcHlyaWdodCBDaGVuLCBZaS1DeXVhbiAyMDE1LTIwMThcbiAqIEBsaWNlbnNlIE1JVFxuICovXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4oZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHJvb3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHt9O1xuICB2YXIgTk9ERV9KUyA9ICFyb290LkhJX0JBU0UzMl9OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbiAgaWYgKE5PREVfSlMpIHtcbiAgICByb290ID0gZ2xvYmFsO1xuICB9XG4gIHZhciBDT01NT05fSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fQ09NTU9OX0pTICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzO1xuICB2YXIgQU1EID0gdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kO1xuICB2YXIgQkFTRTMyX0VOQ09ERV9DSEFSID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3Jy5zcGxpdCgnJyk7XG4gIHZhciBCQVNFMzJfREVDT0RFX0NIQVIgPSB7XG4gICAgJ0EnOiAwLCAnQic6IDEsICdDJzogMiwgJ0QnOiAzLCAnRSc6IDQsICdGJzogNSwgJ0cnOiA2LCAnSCc6IDcsICdJJzogOCxcbiAgICAnSic6IDksICdLJzogMTAsICdMJzogMTEsICdNJzogMTIsICdOJzogMTMsICdPJzogMTQsICdQJzogMTUsICdRJzogMTYsXG4gICAgJ1InOiAxNywgJ1MnOiAxOCwgJ1QnOiAxOSwgJ1UnOiAyMCwgJ1YnOiAyMSwgJ1cnOiAyMiwgJ1gnOiAyMywgJ1knOiAyNCxcbiAgICAnWic6IDI1LCAnMic6IDI2LCAnMyc6IDI3LCAnNCc6IDI4LCAnNSc6IDI5LCAnNic6IDMwLCAnNyc6IDMxXG4gIH07XG5cbiAgdmFyIGJsb2NrcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcblxuICB2YXIgdGhyb3dJbnZhbGlkVXRmOCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgcGFydGlhbCkge1xuICAgIGlmIChwYXJ0aWFsLmxlbmd0aCA+IDEwKSB7XG4gICAgICBwYXJ0aWFsID0gJy4uLicgKyBwYXJ0aWFsLnN1YnN0cigtMTApO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdEZWNvZGVkIGRhdGEgaXMgbm90IHZhbGlkIFVURi04LidcbiAgICAgICsgJyBNYXliZSB0cnkgYmFzZTMyLmRlY29kZS5hc0J5dGVzKCk/J1xuICAgICAgKyAnIFBhcnRpYWwgZGF0YSBhZnRlciByZWFkaW5nICcgKyBwb3NpdGlvbiArICcgYnl0ZXM6ICcgKyBwYXJ0aWFsICsgJyA8LScpO1xuICAgIGVyci5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRocm93IGVycjtcbiAgfTtcblxuICB2YXIgdG9VdGY4U3RyaW5nID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHN0ciA9ICcnLCBsZW5ndGggPSBieXRlcy5sZW5ndGgsIGkgPSAwLCBmb2xsb3dpbmdDaGFycyA9IDAsIGIsIGM7XG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgIGIgPSBieXRlc1tpKytdO1xuICAgICAgaWYgKGIgPD0gMHg3Rikge1xuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKGIgPiAweEJGICYmIGIgPD0gMHhERikge1xuICAgICAgICBjID0gYiAmIDB4MUY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEVGKSB7XG4gICAgICAgIGMgPSBiICYgMHgwRjtcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAyO1xuICAgICAgfSBlbHNlIGlmIChiIDw9IDB4RjcpIHtcbiAgICAgICAgYyA9IGIgJiAweDA3O1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0ludmFsaWRVdGY4KGksIHN0cik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9sbG93aW5nQ2hhcnM7ICsraikge1xuICAgICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgICAgaWYgKGIgPCAweDgwIHx8IGIgPiAweEJGKSB7XG4gICAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgICB9XG4gICAgICAgIGMgPDw9IDY7XG4gICAgICAgIGMgKz0gYiAmIDB4M0Y7XG4gICAgICB9XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuICAgICAgaWYgKGMgPiAweDEwRkZGRikge1xuICAgICAgICB0aHJvd0ludmFsaWRVdGY4KGksIHN0cik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjIDw9IDB4RkZGRikge1xuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGMgLT0gMHgxMDAwMDtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgPj4gMTApICsgMHhEODAwKTtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAweDNGRikgKyAweERDMDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIHZhciBkZWNvZGVBc0J5dGVzID0gZnVuY3Rpb24gKGJhc2UzMlN0cikge1xuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgYmFzZTMyU3RyID0gYmFzZTMyU3RyLnJlcGxhY2UoLz0vZywgJycpO1xuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIGJ5dGVzID0gW10sIGluZGV4ID0gMCwgbGVuZ3RoID0gYmFzZTMyU3RyLmxlbmd0aDtcblxuICAgIC8vIDQgY2hhciB0byAzIGJ5dGVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gbGVuZ3RoID4+IDMgPDwgMzsgaSA8IGNvdW50Oykge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjcgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY4ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NyA8PCA1IHwgdjgpICYgMjU1O1xuICAgIH1cblxuICAgIC8vIHJlbWFpbiBieXRlc1xuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDUpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNykge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjcgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9O1xuXG4gIHZhciBlbmNvZGVBc2NpaSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBiYXNlMzJTdHIgPSAnJywgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHY0ID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHY1ID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHY0ID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGVVdGY4ID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIGNvZGUsIGVuZCA9IGZhbHNlLCBiYXNlMzJTdHIgPSAnJyxcbiAgICAgIGluZGV4ID0gMCwgaSwgc3RhcnQgPSAwLCBieXRlcyA9IDAsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZG8ge1xuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzWzVdO1xuICAgICAgYmxvY2tzWzFdID0gYmxvY2tzWzZdO1xuICAgICAgYmxvY2tzWzJdID0gYmxvY2tzWzddO1xuICAgICAgZm9yIChpID0gc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCA1OyArK2luZGV4KSB7XG4gICAgICAgIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gY29kZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4YzAgfCAoY29kZSA+PiA2KTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ZTAgfCAoY29kZSA+PiAxMik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlID0gMHgxMDAwMCArICgoKGNvZGUgJiAweDNmZikgPDwgMTApIHwgKHN0ci5jaGFyQ29kZUF0KCsraW5kZXgpICYgMHgzZmYpKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ZjAgfCAoY29kZSA+PiAxOCk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKChjb2RlID4+IDEyKSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ5dGVzICs9IGkgLSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gaSAtIDU7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICArK2luZGV4O1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID4gbGVuZ3RoICYmIGkgPCA2KSB7XG4gICAgICAgIGVuZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB2MSA9IGJsb2Nrc1swXTtcbiAgICAgIGlmIChpID4gNCkge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIHY0ID0gYmxvY2tzWzNdO1xuICAgICAgICB2NSA9IGJsb2Nrc1s0XTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzIHwgdjUgPj4+IDUpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMikgJiAzMV0gK1xuICAgICAgICAgICc9PT09PT0nO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgIHYyID0gYmxvY2tzWzFdO1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICAgJz09PT0nO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgIHYyID0gYmxvY2tzWzFdO1xuICAgICAgICB2MyA9IGJsb2Nrc1syXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICAgJz09PSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIHY0ID0gYmxvY2tzWzNdO1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgICAnPSc7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoIWVuZCk7XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlQnl0ZXMgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBiYXNlMzJTdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IHBhcnNlSW50KGxlbmd0aCAvIDUpICogNTsgaSA8IGNvdW50Oykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpKytdO1xuICAgICAgdjQgPSBieXRlc1tpKytdO1xuICAgICAgdjUgPSBieXRlc1tpKytdO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzIHwgdjUgPj4+IDUpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgIH1cblxuICAgIC8vIHJlbWFpbiBjaGFyXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDEpIHtcbiAgICAgIHYxID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMikgJiAzMV0gK1xuICAgICAgICAnPT09PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQpICYgMzFdICtcbiAgICAgICAgJz09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAzKSB7XG4gICAgICB2MSA9IGJ5dGVzW2krK107XG4gICAgICB2MiA9IGJ5dGVzW2krK107XG4gICAgICB2MyA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAnPT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNCkge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpKytdO1xuICAgICAgdjQgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMykgJiAzMV0gK1xuICAgICAgICAnPSc7XG4gICAgfVxuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uIChpbnB1dCwgYXNjaWlPbmx5KSB7XG4gICAgdmFyIG5vdFN0cmluZyA9IHR5cGVvZihpbnB1dCkgIT09ICdzdHJpbmcnO1xuICAgIGlmIChub3RTdHJpbmcgJiYgaW5wdXQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XG4gICAgICBpbnB1dCA9IG5ldyBVaW50OEFycmF5KGlucHV0KTtcbiAgICB9XG4gICAgaWYgKG5vdFN0cmluZykge1xuICAgICAgcmV0dXJuIGVuY29kZUJ5dGVzKGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKGFzY2lpT25seSkge1xuICAgICAgcmV0dXJuIGVuY29kZUFzY2lpKGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVuY29kZVV0ZjgoaW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGJhc2UzMlN0ciwgYXNjaWlPbmx5KSB7XG4gICAgaWYgKCFhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiB0b1V0ZjhTdHJpbmcoZGVjb2RlQXNCeXRlcyhiYXNlMzJTdHIpKTtcbiAgICB9XG4gICAgaWYgKCEvXltBLVoyLTc9XSskLy50ZXN0KGJhc2UzMlN0cikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYXNlMzIgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBzdHIgPSAnJywgbGVuZ3RoID0gYmFzZTMyU3RyLmluZGV4T2YoJz0nKTtcbiAgICBpZiAobGVuZ3RoID09PSAtMSkge1xuICAgICAgbGVuZ3RoID0gYmFzZTMyU3RyLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyA4IGNoYXIgdG8gNSBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NyA8PCA1IHwgdjgpICYgMjU1KTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSk7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NSk7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDUpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSk7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1KTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZXhwb3J0cyA9IHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9O1xuICBkZWNvZGUuYXNCeXRlcyA9IGRlY29kZUFzQnl0ZXM7XG5cbiAgaWYgKENPTU1PTl9KUykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cztcbiAgfSBlbHNlIHtcbiAgICByb290LmJhc2UzMiA9IGV4cG9ydHM7XG4gICAgaWYgKEFNRCkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcbiIsIi8qIGdsb2JhbHMgX193ZWJwYWNrX2FtZF9vcHRpb25zX18gKi9cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbXVsdGlhZGRyID0gcmVxdWlyZSgnbXVsdGlhZGRyJylcblxuLypcbiAqIFZhbGlkIGNvbWJpbmF0aW9uc1xuICovXG5jb25zdCBETlM0ID0gYmFzZSgnZG5zNCcpXG5jb25zdCBETlM2ID0gYmFzZSgnZG5zNicpXG5jb25zdCBETlMgPSBvcihcbiAgYmFzZSgnZG5zJyksXG4gIGJhc2UoJ2Ruc2FkZHInKSxcbiAgRE5TNCxcbiAgRE5TNlxuKVxuXG5jb25zdCBJUCA9IG9yKGJhc2UoJ2lwNCcpLCBiYXNlKCdpcDYnKSlcbmNvbnN0IFRDUCA9IG9yKFxuICBhbmQoSVAsIGJhc2UoJ3RjcCcpKSxcbiAgYW5kKEROUywgYmFzZSgndGNwJykpXG4pXG5jb25zdCBVRFAgPSBhbmQoSVAsIGJhc2UoJ3VkcCcpKVxuY29uc3QgVVRQID0gYW5kKFVEUCwgYmFzZSgndXRwJykpXG5cbmNvbnN0IFdlYlNvY2tldHMgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnd3MnKSksXG4gIGFuZChETlMsIGJhc2UoJ3dzJykpXG4pXG5cbmNvbnN0IFdlYlNvY2tldHNTZWN1cmUgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnd3NzJykpLFxuICBhbmQoRE5TLCBiYXNlKCd3c3MnKSlcbilcblxuY29uc3QgSFRUUCA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCdodHRwJykpLFxuICBhbmQoSVAsIGJhc2UoJ2h0dHAnKSksXG4gIGFuZChETlMsIGJhc2UoJ2h0dHAnKSlcbilcblxuY29uc3QgSFRUUFMgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnaHR0cHMnKSksXG4gIGFuZChJUCwgYmFzZSgnaHR0cHMnKSksXG4gIGFuZChETlMsIGJhc2UoJ2h0dHBzJykpXG4pXG5cbmNvbnN0IFdlYlJUQ1N0YXIgPSBvcihcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJykpXG4pXG5cbmNvbnN0IFdlYlNvY2tldFN0YXIgPSBvcihcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJykpXG4pXG5cbmNvbnN0IFdlYlJUQ0RpcmVjdCA9IG9yKFxuICBhbmQoSFRUUCwgYmFzZSgncDJwLXdlYnJ0Yy1kaXJlY3QnKSksXG4gIGFuZChIVFRQUywgYmFzZSgncDJwLXdlYnJ0Yy1kaXJlY3QnKSlcbilcblxuY29uc3QgUmVsaWFibGUgPSBvcihcbiAgV2ViU29ja2V0cyxcbiAgV2ViU29ja2V0c1NlY3VyZSxcbiAgSFRUUCxcbiAgSFRUUFMsXG4gIFdlYlJUQ1N0YXIsXG4gIFdlYlJUQ0RpcmVjdCxcbiAgVENQLFxuICBVVFBcbilcblxuLy8gVW5saWtlIHdzLXN0YXIsIHN0YXJkdXN0IGNhbiBydW4gb3ZlciBhbnkgdHJhbnNwb3J0IHRodXMgcmVtb3ZpbmcgdGhlIHJlcXVpcmVtZW50IGZvciB3ZWJzb2NrZXRzIChidXQgZG9uJ3QgZXZlbiB0aGluayBhYm91dCBydW5uaW5nIGEgc3RhcmR1c3Qgc2VydmVyIG92ZXIgd2VicnRjLXN0YXIgOykgKVxuY29uc3QgU3RhcmR1c3QgPSBvcihcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtc3RhcmR1c3QnKSwgYmFzZSgncDJwJykpLFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycC1zdGFyZHVzdCcpKVxuKVxuXG5jb25zdCBfUDJQID0gb3IoXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwJykpLFxuICBXZWJSVENTdGFyLFxuICBiYXNlKCdwMnAnKVxuKVxuXG5jb25zdCBfQ2lyY3VpdCA9IG9yKFxuICBhbmQoX1AyUCwgYmFzZSgncDJwLWNpcmN1aXQnKSwgX1AyUCksXG4gIGFuZChfUDJQLCBiYXNlKCdwMnAtY2lyY3VpdCcpKSxcbiAgYW5kKGJhc2UoJ3AycC1jaXJjdWl0JyksIF9QMlApLFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycC1jaXJjdWl0JykpLFxuICBhbmQoYmFzZSgncDJwLWNpcmN1aXQnKSwgUmVsaWFibGUpLFxuICBiYXNlKCdwMnAtY2lyY3VpdCcpXG4pXG5cbmNvbnN0IENpcmN1aXRSZWN1cnNpdmUgPSAoKSA9PiBvcihcbiAgYW5kKF9DaXJjdWl0LCBDaXJjdWl0UmVjdXJzaXZlKSxcbiAgX0NpcmN1aXRcbilcblxuY29uc3QgQ2lyY3VpdCA9IENpcmN1aXRSZWN1cnNpdmUoKVxuXG5jb25zdCBQMlAgPSBvcihcbiAgYW5kKENpcmN1aXQsIF9QMlAsIENpcmN1aXQpLFxuICBhbmQoX1AyUCwgQ2lyY3VpdCksXG4gIGFuZChDaXJjdWl0LCBfUDJQKSxcbiAgQ2lyY3VpdCxcbiAgX1AyUFxuKVxuXG5leHBvcnRzLkROUyA9IEROU1xuZXhwb3J0cy5ETlM0ID0gRE5TNFxuZXhwb3J0cy5ETlM2ID0gRE5TNlxuZXhwb3J0cy5JUCA9IElQXG5leHBvcnRzLlRDUCA9IFRDUFxuZXhwb3J0cy5VRFAgPSBVRFBcbmV4cG9ydHMuVVRQID0gVVRQXG5leHBvcnRzLkhUVFAgPSBIVFRQXG5leHBvcnRzLkhUVFBTID0gSFRUUFNcbmV4cG9ydHMuV2ViU29ja2V0cyA9IFdlYlNvY2tldHNcbmV4cG9ydHMuV2ViU29ja2V0c1NlY3VyZSA9IFdlYlNvY2tldHNTZWN1cmVcbmV4cG9ydHMuV2ViU29ja2V0U3RhciA9IFdlYlNvY2tldFN0YXJcbmV4cG9ydHMuV2ViUlRDU3RhciA9IFdlYlJUQ1N0YXJcbmV4cG9ydHMuV2ViUlRDRGlyZWN0ID0gV2ViUlRDRGlyZWN0XG5leHBvcnRzLlJlbGlhYmxlID0gUmVsaWFibGVcbmV4cG9ydHMuU3RhcmR1c3QgPSBTdGFyZHVzdFxuZXhwb3J0cy5DaXJjdWl0ID0gQ2lyY3VpdFxuZXhwb3J0cy5QMlAgPSBQMlBcbmV4cG9ydHMuSVBGUyA9IFAyUFxuXG4vKlxuICogVmFsaWRhdGlvbiBmdW5jc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VNYXRjaGVzRnVuY3Rpb24gKHBhcnRpYWxNYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gbWF0Y2hlcyAoYSkge1xuICAgIGlmICghbXVsdGlhZGRyLmlzTXVsdGlhZGRyKGEpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gbXVsdGlhZGRyKGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHsgLy8gY2F0Y2ggZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vIGFsc28gaWYgaXQncyBpbnZhbGlkIGl0J3MgcHJvcGFibHkgbm90IG1hdGNoaW5nIGFzIHdlbGwgc28gcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IHBhcnRpYWxNYXRjaChhLnByb3RvTmFtZXMoKSlcbiAgICBpZiAob3V0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG91dC5sZW5ndGggPT09IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBhbmQgKCkge1xuICBjb25zdCBhcmdzID0gQXJyYXkuZnJvbShhcmd1bWVudHMpXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAoYSkge1xuICAgIGlmIChhLmxlbmd0aCA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBhcmdzLnNvbWUoKGFyZykgPT4ge1xuICAgICAgYSA9IHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBhcmcoKS5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgICAgOiBhcmcucGFydGlhbE1hdGNoKGEpXG5cbiAgICAgIGlmIChhID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBhXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAneyAnICsgYXJncy5qb2luKCcgJykgKyAnIH0nIH0sXG4gICAgaW5wdXQ6IGFyZ3MsXG4gICAgbWF0Y2hlczogbWFrZU1hdGNoZXNGdW5jdGlvbihwYXJ0aWFsTWF0Y2gpLFxuICAgIHBhcnRpYWxNYXRjaDogcGFydGlhbE1hdGNoXG4gIH1cbn1cblxuZnVuY3Rpb24gb3IgKCkge1xuICBjb25zdCBhcmdzID0gQXJyYXkuZnJvbShhcmd1bWVudHMpXG5cbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChhKSB7XG4gICAgbGV0IG91dCA9IG51bGxcbiAgICBhcmdzLnNvbWUoKGFyZykgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGFyZygpLnBhcnRpYWxNYXRjaChhKVxuICAgICAgICA6IGFyZy5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgb3V0ID0gcmVzXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ3sgJyArIGFyZ3Muam9pbignICcpICsgJyB9JyB9LFxuICAgIGlucHV0OiBhcmdzLFxuICAgIG1hdGNoZXM6IG1ha2VNYXRjaGVzRnVuY3Rpb24ocGFydGlhbE1hdGNoKSxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBiYXNlIChuKSB7XG4gIGNvbnN0IG5hbWUgPSBuXG5cbiAgZnVuY3Rpb24gbWF0Y2hlcyAoYSkge1xuICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBtdWx0aWFkZHIoYSlcbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvLyBjYXRjaCBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2UgLy8gYWxzbyBpZiBpdCdzIGludmFsaWQgaXQncyBwcm9wYWJseSBub3QgbWF0Y2hpbmcgYXMgd2VsbCBzbyByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwbmFtZXMgPSBhLnByb3RvTmFtZXMoKVxuICAgIGlmIChwbmFtZXMubGVuZ3RoID09PSAxICYmIHBuYW1lc1swXSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKHByb3Rvcykge1xuICAgIGlmIChwcm90b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChwcm90b3NbMF0gPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBwcm90b3Muc2xpY2UoMSlcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hbWUgfSxcbiAgICBtYXRjaGVzOiBtYXRjaGVzLFxuICAgIHBhcnRpYWxNYXRjaDogcGFydGlhbE1hdGNoXG4gIH1cbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogSGFzaCBNZXRhIERhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gaXBmc1Bpbkhhc2hcbiAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoTWV0YWRhdGEocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBtZXRhZGF0YSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBpZiAoIWlwZnNQaW5IYXNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXBmc1Bpbkhhc2ggdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0lQRlMuY2lkKGlwZnNQaW5IYXNoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIGFuIGludmFsaWQgSVBGUyBDSUQnKTtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gbWV0YWRhdGEgb2JqZWN0IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvaGFzaE1ldGFkYXRhYDtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBpcGZzUGluSGFzaDogaXBmc1Bpbkhhc2hcbiAgICB9O1xuXG4gICAgaWYgKG1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgYm9keS5uYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGJvZHkua2V5dmFsdWVzID0gbWV0YWRhdGEua2V5dmFsdWVzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBtZXRhZGF0YSBmb3IgaGFzaDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIEhhc2ggUGluIFBvbGljeVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBpcGZzUGluSGFzaFxuICogQHBhcmFtIHsqfSBuZXdQaW5Qb2xpY3lcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFpcGZzUGluSGFzaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGlmICghaXNJUEZTLmNpZChpcGZzUGluSGFzaCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL2hhc2hQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGlwZnNQaW5IYXNoOiBpcGZzUGluSGFzaCxcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIGhhc2g6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogUGluIEZpbGUgdG8gSVBGU1xuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSByZWFkU3RyZWFtXG4gKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5GaWxlVG9JUEZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCByZWFkU3RyZWFtLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICBkYXRhLmFwcGVuZCgnZmlsZScsIHJlYWRTdHJlYW0pO1xuXG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5GaWxlVG9JUEZTYDtcblxuICAgICAgICBpZiAoIShyZWFkU3RyZWFtIGluc3RhbmNlb2Ygc3RyZWFtLlJlYWRhYmxlKSkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigncmVhZFN0cmVhbSBpcyBub3QgYSByZWFkYWJsZSBzdHJlYW0nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFNZXRhZGF0YScsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhTWV0YWRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucy5waW5hdGFPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhT3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JywgLy90aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGF4aW9zIGZyb20gZXJyb3Jpbmcgb3V0IHdpdGggbGFyZ2UgZmlsZXNcbiAgICAgICAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiAnSW5maW5pdHknLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG4gIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ29tYmluZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkNvbWJpbmVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNvbWJpbmVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBjb21iaW5lZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkU3RyZWFtO1xufTtcblxuQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHJldHVybiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ3N0cmluZycpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdib29sZWFuJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ251bWJlcicpXG4gICAgJiYgKCFCdWZmZXIuaXNCdWZmZXIoc3RyZWFtKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcblxuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgRGVsYXllZFN0cmVhbSkpIHtcbiAgICAgIHZhciBuZXdTdHJlYW0gPSBEZWxheWVkU3RyZWFtLmNyZWF0ZShzdHJlYW0sIHtcbiAgICAgICAgbWF4RGF0YVNpemU6IEluZmluaXR5LFxuICAgICAgICBwYXVzZVN0cmVhbTogdGhpcy5wYXVzZVN0cmVhbXMsXG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICBzdHJlYW0gPSBuZXdTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG5cbiAgICBpZiAodGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0cmVhbXMucHVzaChzdHJlYW0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2dldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2luc2lkZUxvb3ApIHtcbiAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IHRydWU7XG4gICAgcmV0dXJuOyAvLyBkZWZlciBjYWxsXG4gIH1cblxuICB0aGlzLl9pbnNpZGVMb29wID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBkbyB7XG4gICAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhbEdldE5leHQoKTtcbiAgICB9IHdoaWxlICh0aGlzLl9wZW5kaW5nTmV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3JlYWxHZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zdHJlYW1zLnNoaWZ0KCk7XG5cblxuICBpZiAodHlwZW9mIHN0cmVhbSA9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXRTdHJlYW0gPSBzdHJlYW07XG4gIGdldFN0cmVhbShmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gICAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3BpcGVOZXh0ID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBzdHJlYW07XG5cbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCB0aGlzLl9nZXROZXh0LmJpbmQodGhpcykpO1xuICAgIHN0cmVhbS5waXBlKHRoaXMsIHtlbmQ6IGZhbHNlfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gc3RyZWFtO1xuICB0aGlzLndyaXRlKHZhbHVlKTtcbiAgdGhpcy5fZ2V0TmV4dCgpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFcnJvcnMgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5fZW1pdEVycm9yKGVycik7XG4gIH0pO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSgpO1xuICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5fZ2V0TmV4dCgpO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKCk7XG4gIHRoaXMuZW1pdCgncmVzdW1lJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl91cGRhdGVEYXRhU2l6ZSgpO1xuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nO1xuICB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fdXBkYXRlRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9zdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgaWYgKCFzdHJlYW0uZGF0YVNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmRhdGFTaXplICs9IHN0cmVhbS5kYXRhU2l6ZTtcbiAgfSk7XG5cbiAgaWYgKHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZSkge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9lbWl0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICBwYXJhbGxlbCAgICAgIDogcmVxdWlyZSgnLi9wYXJhbGxlbC5qcycpLFxuICBzZXJpYWwgICAgICAgIDogcmVxdWlyZSgnLi9zZXJpYWwuanMnKSxcbiAgc2VyaWFsT3JkZXJlZCA6IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpXG59O1xuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZGVmZXI7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBmdW5jdGlvbiBvbiBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcFxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gcnVuXG4gKi9cbmZ1bmN0aW9uIGRlZmVyKGZuKVxue1xuICB2YXIgbmV4dFRpY2sgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09ICdmdW5jdGlvbidcbiAgICA/IHNldEltbWVkaWF0ZVxuICAgIDogKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm9jZXNzLm5leHRUaWNrXG4gICAgICA6IG51bGxcbiAgICApO1xuXG4gIGlmIChuZXh0VGljaylcbiAge1xuICAgIG5leHRUaWNrKGZuKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgfVxufVxuIiwidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGJhc2VQYXRoQ29udmVydGVyIGZyb20gJ2Jhc2UtcGF0aC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcmVjdXJzaXZlID0gcmVxdWlyZSgncmVjdXJzaXZlLWZzJyk7XG5cbi8qKlxuICogUGluRnJvbUZTXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5GaWxlVG9JUEZTYDtcblxuICAgICAgICBmcy5zdGF0KHNvdXJjZVBhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICAvL3dlIG5lZWQgdG8gY3JlYXRlIGEgc2luZ2xlIHJlYWQgc3RyZWFtIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbShzb3VyY2VQYXRoKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFNZXRhZGF0YScsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhTWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucy5waW5hdGFPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JywgLy90aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGF4aW9zIGZyb20gZXJyb3Jpbmcgb3V0IHdpdGggbGFyZ2UgZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvZHlMZW5ndGg6ICdJbmZpbml0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlLnJlYWRkaXJyKHNvdXJjZVBhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICAgICAgICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBlYWNoIGZpbGUgc3RyZWFtLCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGNvcnJlY3QgcmVsYXRpdmUgZmlsZSBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnZmlsZScsIGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcGF0aDogYmFzZVBhdGhDb252ZXJ0ZXIoc291cmNlUGF0aCwgZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFNZXRhZGF0YScsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhTWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucy5waW5hdGFPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhT3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJmdW5jdGlvbiBjb252ZXJ0RmlsZVBhdGhUb0Jhc2VEaXJlY3RvcnlQYXRoKHNvdXJjZVBhdGgsIGZpbGVQYXRoKSB7XG4gICAgbGV0IG5ld1N0cmluZyA9IChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoJy4vJykgPyBzb3VyY2VQYXRoLnN1YnN0cmluZygyKSA6IHNvdXJjZVBhdGgpO1xuICAgIC8vbWFrZSBzdXJlIHRoZXJlIGlzbid0IGEgZGFuZ2xpbmcgLyB0byB0aHJvdyBhIGZhbHNlIHBvc2l0aXZlIGludG8gdGhlIG1peFxuICAgIGNvbnN0IGxhc3RJbmRleE9mRGlyZWN0b3J5ID0gbmV3U3RyaW5nLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYobGFzdEluZGV4T2ZEaXJlY3RvcnkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoT2ZTb3VyY2UgPSBzb3VyY2VQYXRoLmxlbmd0aDtcbiAgICAvL29ubHkgdHJpbSBpZiB0aGUgLyBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZ1xuICAgIGlmIChsYXN0SW5kZXhPZkRpcmVjdG9yeSA9PT0gKGxlbmd0aE9mU291cmNlIC0gMSkpIHtcbiAgICAgICAgbmV3U3RyaW5nID0gc291cmNlUGF0aC5zbGljZSgwLC0xKTtcbiAgICB9XG5cbiAgICAvL25vdyB0aGF0IHdlJ3JlIHN1cmUgb2Ygbm8gZmFsc2UgcG9zaXRpdmUsIGxldCdzIGNoZWNrIGFuZCBzZWUgd2hlcmUgdGhlIFwicm9vdFwiIGRpcmVjdG9yeSBpc1xuICAgIGNvbnN0IG5ld0xhc3RJbmRleCA9IG5ld1N0cmluZy5sYXN0SW5kZXhPZignLycpO1xuICAgIGlmICggbmV3TGFzdEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhdGhHYXJiYWdlID0gbmV3U3RyaW5nLnN1YnN0cmluZygwLCBuZXdMYXN0SW5kZXggKyAxKTtcbiAgICAgICAgbmV3U3RyaW5nID0gZmlsZVBhdGguc3BsaXQocGF0aEdhcmJhZ2UpWzFdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydEZpbGVQYXRoVG9CYXNlRGlyZWN0b3J5UGF0aCIsIlxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRkaXJyOiByZXF1aXJlKCcuL2xpYi9yZWFkZGlycicpLnJlYWRkaXJyLFxuXG4gIHJtZGlycjogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1kaXJyLFxuICBybWRpcnM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycyxcbiAgcm1maWxlczogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1maWxlcyxcblxuICBjcGRpcnI6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZGlycixcbiAgY3BkaXJzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnMsXG4gIGNwZmlsZXM6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZmlsZXNcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBKU09OIHRvIElQRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gYm9keVxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgcmVxdWVzdEJvZHkgPSBib2R5O1xuXG4gICAgaWYgKHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBwaW5hdGFDb250ZW50OiBib2R5XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5KU09OVG9JUEZTYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgSlNPTiB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHF1ZXJ5QnVpbGRlciBmcm9tICcuL3F1ZXJ5QnVpbGRlcic7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogUGluIEpvYnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gZmlsdGVyc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkpvYnMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgbGV0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5Kb2JzYDtcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIGVuZHBvaW50ID0gcXVlcnlCdWlsZGVyKGVuZHBvaW50LCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHBpbiBqb2JzOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuLyoqXG4gKiBRdWVyeSBCdWlkbGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVybFxuICogQHBhcmFtIHsqfSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xuICAgIH1cblxuICAgIGxldCBuZXdVcmwgPSBiYXNlVXJsO1xuXG4gICAgbGV0IGZpcnN0RmlsdGVyQXBwbGllZCA9IGZhbHNlOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBcIj9cIiBjaGFyYWN0ZXIgaXMgb25seSBhcHBsaWVkIG9uY2VcblxuICAgIGZ1bmN0aW9uIGFkZEZpbHRlcihuZXdGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGZpcnN0RmlsdGVyQXBwbGllZCkge1xuICAgICAgICAgICAgbmV3VXJsID0gYCR7bmV3VXJsfSYke25ld0ZpbHRlcn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RGaWx0ZXJBcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0/JHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuc29ydCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc29ydCA9PT0gJ0FTQycgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnNvcnQgPT09ICdERVNDJykge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc29ydD0ke2ZpbHRlcnMuc29ydH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvcnQgdmFsdWU6ICR7ZmlsdGVycy5zb3J0fSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgPT09ICdzZWFyY2hpbmcnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdleHBpcmVkJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9mcmVlX2xpbWl0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9tYXhfc2l6ZScgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2ludmFsaWRfb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnYmFkX2hvc3Rfbm9kZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0dXMgdmFsdWU6ICR7ZmlsdGVycy5zdGF0dXN9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSB7XG4gICAgICAgICAgICBpZiAoaXNJUEZTLmNpZChmaWx0ZXJzLmlwZnNfcGluX2hhc2gpKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBpcGZzX3Bpbl9oYXNoPSR7ZmlsdGVycy5pcGZzX3Bpbl9oYXNofWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSVBGUyBoYXNoOiAke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJzLmxpbWl0KSAmJiAoZmlsdGVycy5saW1pdCA+IDApICYmIChmaWx0ZXJzLmxpbWl0IDwgMTAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgbGltaXQ9JHtmaWx0ZXJzLmxpbWl0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7ZmlsdGVycy5saW1pdH0uIFZhbGlkIGxpbWl0cyBhcmUgMS0xMDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLm9mZnNldCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5vZmZzZXQpICYmIChmaWx0ZXJzLm9mZnNldCA+IDApKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBvZmZzZXQ9JHtmaWx0ZXJzLm9mZnNldH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9mZnNldDogJHtmaWx0ZXJzLm9mZnNldH0uIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgaW50ZWdlciBmb3IgdGhlIG9mZnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFVucGluXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFRvVW5waW5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnBpbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvVW5waW4pIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9VbnBpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1VucGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciByZW1vdmluZyBhIHBpbiBmcm9tIFBpbmF0YScpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvVW5waW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtoYXNoVG9VbnBpbn0gaXMgYW4gaW52YWxpZCBJUEZTIENJRGApO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy91bnBpbi8ke2hhc2hUb1VucGlufWA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5kZWxldGUoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSByZW1vdmluZyBwaW4gZnJvbSBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbiBQb2xpY3lcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3VzZXJQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIG5ld1BpblBvbGljeTogbmV3UGluUG9saWN5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBwaW4gcG9saWN5IGZvciB1c2VyOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5c30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBUZXN0IEF1dGhlbnRpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIC8vICB0ZXN0IGF1dGhlbnRpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyJ3MgcHJvdmlkZWQga2V5cyBhcmUgbGVnaXRcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcbmltcG9ydCBxdWVyeUJ1aWxkZXIgZnJvbSAnLi9xdWVyeUJ1aWxkZXInO1xuXG4vKipcbiAqIFBpbiBMaXN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgY29uc3QgYmFzZUVuZHBvaW50ID0gYCR7YmFzZVVybH0vZGF0YS9waW5MaXN0YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHF1ZXJ5QnVpbGRlcihiYXNlRW5kcG9pbnQsIGZpbHRlcnMpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSB1c2VyIHBpbiBsaXN0OiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiLyoqXG4gKiBWYWxpZGF0ZSBhbmQgcmV0dXJuIGRhdGFcbiAqIEBwYXJhbSB7Kn0gZGF0ZVRvVmFsaWRhdGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFuZFJldHVybkRhdGUoZGF0ZVRvVmFsaWRhdGUpIHtcbiAgICBsZXQgZGF0ZVBhcnNlZCA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZVRvVmFsaWRhdGUpKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRlUGFyc2VkLnRvSVNPU3RyaW5nKCkgPT09IGRhdGVUb1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZVRvVmFsaWRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRlcyBtdXN0IGJlIGluIHZhbGlkIElTT184NjAxIGZvcm1hdCcpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGVzIG11c3QgYmUgaW4gdmFsaWQgSVNPXzg2MDEgZm9ybWF0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFF1ZXJ5IEJ1aWxkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVXJsXG4gKiBAcGFyYW0geyp9IGZpbHRlcnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1ZXJ5QnVpbGRlcihiYXNlVXJsLCBmaWx0ZXJzKSB7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gYmFzZVVybCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vICBwcmVzZXQgZmlsdGVyIHZhbHVlc1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9ICc/JztcblxuICAgIGxldCBtZXRhZGF0YVF1ZXJ5ID0gJyc7XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAvLyAgbm93IHdlIG5lZWQgdG8gY29uc3RydWN0IHRoZSBhY3R1YWwgVVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBmaWx0ZXJzIHByb3ZpZGVkXG4gICAgICAgIGlmIChmaWx0ZXJzLmhhc2hDb250YWlucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmhhc2hDb250YWlucyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hDb250YWlucyB2YWx1ZSBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgaGFzaENvbnRhaW5zPSR7ZmlsdGVycy5oYXNoQ29udGFpbnN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU3RhcnQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy5waW5TdGFydCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluRW5kKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpbkVuZCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpblN0YXJ0PSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMudW5waW5TdGFydCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgdW5waW5FbmQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpbkVuZCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU2l6ZU1pbikge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGluU2l6ZU1pbikgfHwgZmlsdGVycy5waW5TaXplTWluIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGluU2l6ZU1pbiBpcyBhIHZhbGlkIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU2l6ZU1pbj0ke2ZpbHRlcnMucGluU2l6ZU1pbn0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWF4KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWF4KSB8fCBmaWx0ZXJzLnBpblNpemVNYXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWF4IGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWF4PSR7ZmlsdGVycy5waW5TaXplTWF4fSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzICE9PSAnYWxsJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3Bpbm5lZCcgJiYgZmlsdGVycy5zdGF0dXMgIT09ICd1bnBpbm5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXR1cyB2YWx1ZSBtdXN0IGJlIGVpdGhlcjogYWxsLCBwaW5uZWQsIG9yIHVucGlubmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHN0YXR1cz0ke2ZpbHRlcnMuc3RhdHVzfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBhZ2VMaW1pdCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZUxpbWl0KSB8fCBmaWx0ZXJzLnBhZ2VMaW1pdCA8PSAwIHx8IGZpbHRlcnMucGFnZUxpbWl0ID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFnZUxpbWl0IGlzIGEgdmFsaWQgaW50ZWdlciBiZXR3ZWVuIDEtMTAwMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwYWdlTGltaXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VMaW1pdCl9JmA7IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgZGVjaW1hbHMgZ2V0IHJvdW5kZWQgdG8gaW50ZWdlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLnBhZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBhZ2VPZmZzZXQpIHx8IGZpbHRlcnMucGFnZU9mZnNldCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlT2Zmc2V0IGlzIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwYWdlT2Zmc2V0PSR7cGFyc2VJbnQoZmlsdGVycy5wYWdlT2Zmc2V0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBgbWV0YWRhdGFbbmFtZV09JHtmaWx0ZXJzLm1ldGFkYXRhLm5hbWV9JmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBtZXRhZGF0YVF1ZXJ5ICsgJ21ldGFkYXRhW2tleXZhbHVlc109JztcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVycy5tZXRhZGF0YS5rZXl2YWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEga2V5dmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJ1bmVkS2V5VmFsdWVzID0ge307IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG9ubHkgZ3JhYmJpbmcgdGhlIHZhbHVlcyB3ZSB3YW50IGZvciB0aGUgcXVlcnksIGFuZCBub3RoaW5nIGV4dHJhXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaCgoa2V5VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5VmFsdWVbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ga2V5VmFsdWVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBpcyBub3QgYW4gb2JqZWN0YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudmFsdWUgfHwgIXZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlOiAke2tleX0gbXVzdCBoYXZlIGJvdGggdmFsdWUgYW5kIG9wIGF0dHJpYnV0ZXNgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBSdW4gY2hlY2tzIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIGtleXZhbHVlcyBhcmUgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2dyZWF0ZXIgdGhhbiBvciBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3RlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiBvciBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGVxdWFsIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVxdWFsIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlcSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JldHdlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWNhdXNlIGJldHdlZW4gb3AgY29kZSB3YXMgcGFzc2VkIGluLCBrZXlWYWx1ZTogJHtrZXlWYWx1ZVswXX0gbXVzdCBoYXZlIGJvdGggYWxzbyBpbmNsdWRlIGEgc2Vjb25kVmFsdWVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHNlY29uZFZhbHVlIG11c3QgYmUgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIG51bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlOiB2YWx1ZS5zZWNvbmRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90QmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2Ugbm90QmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90TGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaUxpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RJTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIHJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpUmVnZXhwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlIG9wOiAke3ZhbHVlLm9wfSBpcyBub3QgYSB2YWxpZCBvcCBjb2RlYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBtZXRhZGF0YVF1ZXJ5ICsgYCR7SlNPTi5zdHJpbmdpZnkocHJ1bmVkS2V5VmFsdWVzKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtiYXNlVXJsfSR7ZmlsdGVyUXVlcnl9JHttZXRhZGF0YVF1ZXJ5fWA7XG59XG5cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbm5lZCBEYXRhIFRvdGFsXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL3V0aWwvdmFsaWRhdG9ycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL3V0aWwvZXJyb3JSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcGZzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInV0aWxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JzNTgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInVybFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGloYXNoZXMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9wcm90b2NvbHMtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jaWRzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvcmVhZGRpcnIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL3JtZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvY3BkaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC10by1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9jb21tb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcIm9zXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYmFzZS14L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYnVmZmVyXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL3V0aWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jbGFzcy1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3NlcmlhbE9yZGVyZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNicnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaW11bC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFzYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2RlYnVnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ0dHlcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInpsaWJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZW5jb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2RlY29kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTE2LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29kZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2NvbnZlcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC9saWIvaXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lwLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9pbnQtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy92YXJpbnQtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9wcmludC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGktYmFzZTMyL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21hZm10L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaE1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9oYXNoUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5GaWxlVG9JUEZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbS9saWIvZGVsYXllZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9taW1lLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL3BvcHVsYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Gcm9tRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXBhdGgtY29udmVydGVyL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVjdXJzaXZlLWZzL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcXVlcnlCdWlsZGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy91bnBpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvdXNlclBpblBvbGljeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3Bpbkxpc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcXVlcnlCdWlsZGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsLmpzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJ0aGlzIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsImNvcmUiLCJoaWRlIiwicmVkZWZpbmUiLCJjdHgiLCIkZXhwb3J0IiwidHlwZSIsInNvdXJjZSIsIm93biIsIm91dCIsImV4cCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJCIiwidGFyZ2V0IiwiZXhwUHJvdG8iLCJ1bmRlZmluZWQiLCJGdW5jdGlvbiIsIlUiLCJXIiwiUiIsImlzT2JqZWN0IiwiaXQiLCJUeXBlRXJyb3IiLCJ3aW5kb3ciLCJNYXRoIiwiX19nIiwiZXhlYyIsImUiLCJzdG9yZSIsInVpZCIsIlVTRV9TWU1CT0wiLCJ0b0ludGVnZXIiLCJtaW4iLCJhIiwiYW5PYmplY3QiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiZFAiLCJmIiwiTyIsIkF0dHJpYnV0ZXMiLCJkZWZpbmVkIiwidG9TdHJpbmciLCJpc0FycmF5IiwidmFsIiwiaXNVbmRlZmluZWQiLCJpc1BsYWluT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJpc0Z1bmN0aW9uIiwiZm9yRWFjaCIsIm9iaiIsImZuIiwibGVuZ3RoIiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzU3RyZWFtIiwicGlwZSIsImlzVVJMU2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJuYXZpZ2F0b3IiLCJwcm9kdWN0IiwiZG9jdW1lbnQiLCJtZXJnZSIsInJlc3VsdCIsImFzc2lnblZhbHVlIiwic2xpY2UiLCJhcmd1bWVudHMiLCJleHRlbmQiLCJiIiwidGhpc0FyZyIsInRyaW0iLCJzdHIiLCJyZXBsYWNlIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsImNyZWF0ZURlc2MiLCJoYXMiLCJTUkMiLCIkdG9TdHJpbmciLCJUUEwiLCJzcGxpdCIsImluc3BlY3RTb3VyY2UiLCJzYWZlIiwiam9pbiIsIlN0cmluZyIsImZhaWxzIiwicXVvdCIsImNyZWF0ZUhUTUwiLCJzdHJpbmciLCJ0YWciLCJhdHRyaWJ1dGUiLCJwMSIsIk5BTUUiLCJ0ZXN0IiwidG9Mb3dlckNhc2UiLCJJT2JqZWN0IiwicElFIiwidG9JT2JqZWN0IiwiZ09QRCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInRvT2JqZWN0IiwiSUVfUFJPVE8iLCJPYmplY3RQcm90byIsInBpbmF0YUFwaUtleSIsInBpbmF0YVNlY3JldEFwaUtleSIsIkVycm9yIiwibWV0YWRhdGEiLCJrZXl2YWx1ZXMiLCJlbnRyaWVzIiwia2V5VmFsdWUiLCJpc05hTiIsIm9wdGlvbnMiLCJjaWRWZXJzaW9uIiwid3JhcFdpdGhEaXJlY3RvcnkiLCJob3N0Tm9kZXMiLCJ2YWxpZGF0ZUhvc3ROb2RlcyIsImN1c3RvbVBpblBvbGljeSIsInZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIiwiQXJyYXkiLCJub2RlIiwiaXNJUEZTIiwicGVlck11bHRpYWRkciIsInBpblBvbGljeSIsInJlZ2lvbnMiLCJyZWdpb24iLCJpZCIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiZXJyb3IiLCJyZXNwb25zZSIsImRhdGEiLCJ2ZXJzaW9uIiwiX19lIiwiYUZ1bmN0aW9uIiwidGhhdCIsImFwcGx5IiwiY2VpbCIsImZsb29yIiwibWV0aG9kIiwiYXJnIiwidmFsdWVPZiIsIktFWSIsInRvTGVuZ3RoIiwiYXNjIiwiVFlQRSIsIiRjcmVhdGUiLCJJU19NQVAiLCJJU19GSUxURVIiLCJJU19TT01FIiwiSVNfRVZFUlkiLCJJU19GSU5EX0lOREVYIiwiTk9fSE9MRVMiLCIkdGhpcyIsImNhbGxiYWNrZm4iLCJyZXMiLCJpbmRleCIsInB1c2giLCJMSUJSQVJZIiwiJHR5cGVkIiwiJGJ1ZmZlciIsImFuSW5zdGFuY2UiLCJwcm9wZXJ0eURlc2MiLCJyZWRlZmluZUFsbCIsInRvSW5kZXgiLCJ0b0Fic29sdXRlSW5kZXgiLCJjbGFzc29mIiwiaXNBcnJheUl0ZXIiLCJnT1BOIiwiZ2V0SXRlckZuIiwid2tzIiwiY3JlYXRlQXJyYXlNZXRob2QiLCJjcmVhdGVBcnJheUluY2x1ZGVzIiwic3BlY2llc0NvbnN0cnVjdG9yIiwiQXJyYXlJdGVyYXRvcnMiLCJJdGVyYXRvcnMiLCIkaXRlckRldGVjdCIsInNldFNwZWNpZXMiLCJhcnJheUZpbGwiLCJhcnJheUNvcHlXaXRoaW4iLCIkRFAiLCIkR09QRCIsIlJhbmdlRXJyb3IiLCJVaW50OEFycmF5IiwiQXJyYXlQcm90byIsIiRBcnJheUJ1ZmZlciIsIiREYXRhVmlldyIsIkRhdGFWaWV3IiwiYXJyYXlGb3JFYWNoIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVNvbWUiLCJhcnJheUV2ZXJ5IiwiYXJyYXlGaW5kIiwiYXJyYXlGaW5kSW5kZXgiLCJhcnJheUluY2x1ZGVzIiwiYXJyYXlJbmRleE9mIiwiYXJyYXlWYWx1ZXMiLCJ2YWx1ZXMiLCJhcnJheUtleXMiLCJrZXlzIiwiYXJyYXlFbnRyaWVzIiwiYXJyYXlMYXN0SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJhcnJheVJlZHVjZVJpZ2h0IiwicmVkdWNlUmlnaHQiLCJhcnJheUpvaW4iLCJhcnJheVNvcnQiLCJzb3J0IiwiYXJyYXlTbGljZSIsImFycmF5VG9TdHJpbmciLCJhcnJheVRvTG9jYWxlU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJJVEVSQVRPUiIsIlRBRyIsIlRZUEVEX0NPTlNUUlVDVE9SIiwiREVGX0NPTlNUUlVDVE9SIiwiQUxMX0NPTlNUUlVDVE9SUyIsIkNPTlNUUiIsIlRZUEVEX0FSUkFZIiwiVFlQRUQiLCJWSUVXIiwiJG1hcCIsImFsbG9jYXRlIiwiTElUVExFX0VORElBTiIsIlVpbnQxNkFycmF5IiwiRk9SQ0VEX1NFVCIsInNldCIsInRvT2Zmc2V0IiwiQllURVMiLCJvZmZzZXQiLCJ2YWxpZGF0ZSIsIkMiLCJzcGVjaWVzRnJvbUxpc3QiLCJsaXN0IiwiZnJvbUxpc3QiLCJhZGRHZXR0ZXIiLCJpbnRlcm5hbCIsIl9kIiwiJGZyb20iLCJzdGVwIiwiaXRlcmF0b3IiLCJhTGVuIiwibWFwZm4iLCJtYXBwaW5nIiwiaXRlckZuIiwibmV4dCIsImRvbmUiLCIkb2YiLCJUT19MT0NBTEVfQlVHIiwiJHRvTG9jYWxlU3RyaW5nIiwicHJvdG8iLCJjb3B5V2l0aGluIiwic3RhcnQiLCJldmVyeSIsImZpbGwiLCJmaWx0ZXIiLCJmaW5kIiwicHJlZGljYXRlIiwiZmluZEluZGV4IiwiaW5kZXhPZiIsInNlYXJjaEVsZW1lbnQiLCJpbmNsdWRlcyIsInNlcGFyYXRvciIsIm1hcCIsInJldmVyc2UiLCJtaWRkbGUiLCJzb21lIiwiY29tcGFyZWZuIiwic3ViYXJyYXkiLCJiZWdpbiIsImVuZCIsIiRiZWdpbiIsImJ5dGVPZmZzZXQiLCJCWVRFU19QRVJfRUxFTUVOVCIsIiRzbGljZSIsIiRzZXQiLCJhcnJheUxpa2UiLCJzcmMiLCJsZW4iLCIkaXRlcmF0b3JzIiwiaXNUQUluZGV4IiwiJGdldERlc2MiLCIkc2V0RGVzYyIsImRlc2MiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIiRUeXBlZEFycmF5UHJvdG90eXBlJCIsIndyYXBwZXIiLCJDTEFNUEVEIiwiR0VUVEVSIiwiU0VUVEVSIiwiVHlwZWRBcnJheSIsIkJhc2UiLCJUQUMiLCJGT1JDRUQiLCJBQlYiLCJUeXBlZEFycmF5UHJvdG90eXBlIiwiYWRkRWxlbWVudCIsInYiLCJyb3VuZCIsInNldHRlciIsIiRvZmZzZXQiLCIkbGVuZ3RoIiwiYnl0ZUxlbmd0aCIsImtsYXNzIiwiJGxlbiIsIml0ZXIiLCJjb25jYXQiLCIkbmF0aXZlSXRlcmF0b3IiLCJDT1JSRUNUX0lURVJfTkFNRSIsIiRpdGVyYXRvciIsIm9mIiwiZnJvbSIsIk1hcCIsInNoYXJlZCIsImdldE9yQ3JlYXRlTWV0YWRhdGFNYXAiLCJ0YXJnZXRLZXkiLCJ0YXJnZXRNZXRhZGF0YSIsImtleU1ldGFkYXRhIiwiTWV0YWRhdGFLZXkiLCJtZXRhZGF0YU1hcCIsIk1ldGFkYXRhVmFsdWUiLCJfIiwiTUVUQSIsInNldERlc2MiLCJpc0V4dGVuc2libGUiLCJGUkVFWkUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsInNldE1ldGEiLCJ3IiwibWV0YSIsIk5FRUQiLCJmYXN0S2V5IiwiZ2V0V2VhayIsIm9uRnJlZXplIiwiVU5TQ09QQUJMRVMiLCJiaXRtYXAiLCJweCIsInJhbmRvbSIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJtYXgiLCJkUHMiLCJFbXB0eSIsImNyZWF0ZURpY3QiLCJpZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsInN0eWxlIiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJ3cml0ZSIsImx0IiwiY2xvc2UiLCJQcm9wZXJ0aWVzIiwiaGlkZGVuS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJERVNDUklQVE9SUyIsIlNQRUNJRVMiLCJDb25zdHJ1Y3RvciIsImZvcmJpZGRlbkZpZWxkIiwiQlJFQUsiLCJSRVRVUk4iLCJpdGVyYWJsZSIsIl90IiwiZGVmIiwic3RhdCIsImNvZiIsIkFSRyIsIlQiLCJ0cnlHZXQiLCJjYWxsZWUiLCJzcGFjZXMiLCJzcGFjZSIsImx0cmltIiwiUmVnRXhwIiwicnRyaW0iLCJleHBvcnRlciIsIkFMSUFTIiwiRk9SQ0UiLCJiYXNlNTgiLCJtdWx0aWhhc2giLCJtdWx0aWJhc2UiLCJNdWx0aWFkZHIiLCJtYWZtdCIsIkNJRCIsInVybFBhdHRlcm4iLCJwYXRoUGF0dGVybiIsImZxZG5QYXR0ZXJuIiwiaXNDSUQiLCJoYXNoIiwiaXNNdWx0aWFkZHIiLCJpbnB1dCIsImlzSXBmcyIsInBhdHRlcm4iLCJwcm90b2NvbE1hdGNoIiwiaGFzaE1hdGNoIiwiZm9ybWF0dGVkIiwiY29udmVydFRvU3RyaW5nIiwibWF0Y2giLCJpc0lwbnMiLCJCdWZmZXIiLCJlbmNvZGUiLCJpcGZzU3ViZG9tYWluIiwidXJsIiwiaXBuc1N1YmRvbWFpbiIsImRlY29kZSIsIm11bHRpYWRkciIsIklQRlMiLCJtYXRjaGVzIiwiY2lkIiwiYmFzZTMyY2lkIiwiaXNFbmNvZGVkIiwiaXNNdWx0aWJhc2UiLCJzdWJkb21haW4iLCJzdWJkb21haW5QYXR0ZXJuIiwiaXBmc1VybCIsImlwbnNVcmwiLCJpcGZzUGF0aCIsInBhdGgiLCJpcG5zUGF0aCIsInVybE9yUGF0aCIsIngiLCJjaWRQYXRoIiwiZW5jb2RpbmdMZW5ndGgiLCJjb3B5cmlnaHQiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJ1bmljb2RlIiwic3RpY2t5IiwiRCIsInJlcXVpcmUiLCJJU19JTkNMVURFUyIsImVsIiwiZnJvbUluZGV4IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiVE9fU1RSSU5HIiwicG9zIiwiY2hhckF0IiwiTUFUQ0giLCJpc1JlZ0V4cCIsIlNBRkVfQ0xPU0lORyIsInJpdGVyIiwic2tpcENsb3NpbmciLCJhcnIiLCJidWlsdGluRXhlYyIsInJlZ2V4cEV4ZWMiLCJSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyIsInJlIiwiZ3JvdXBzIiwiU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDIiwib3JpZ2luYWxFeGVjIiwiU1lNQk9MIiwiREVMRUdBVEVTX1RPX1NZTUJPTCIsIkRFTEVHQVRFU19UT19FWEVDIiwiZXhlY0NhbGxlZCIsIm5hdGl2ZVJlZ0V4cE1ldGhvZCIsImZucyIsIm5hdGl2ZU1ldGhvZCIsInJlZ2V4cCIsImFyZzIiLCJmb3JjZVN0cmluZ01ldGhvZCIsInN0cmZuIiwicnhmbiIsInVzZXJBZ2VudCIsImZvck9mIiwic2V0VG9TdHJpbmdUYWciLCJpbmhlcml0SWZSZXF1aXJlZCIsIm1ldGhvZHMiLCJjb21tb24iLCJJU19XRUFLIiwiQURERVIiLCJmaXhNZXRob2QiLCJpbnN0YW5jZSIsIkhBU05UX0NIQUlOSU5HIiwiVEhST1dTX09OX1BSSU1JVElWRVMiLCJBQ0NFUFRfSVRFUkFCTEVTIiwiQlVHR1lfWkVSTyIsIiRpbnN0YW5jZSIsImNsZWFyIiwiZ2V0Q29uc3RydWN0b3IiLCJzZXRTdHJvbmciLCJUeXBlZCIsIlR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMiLCJLIiwiX19kZWZpbmVTZXR0ZXJfXyIsIkNPTExFQ1RJT04iLCJBIiwiY2IiLCJtYXBGbiIsIm5leHRJdGVtIiwiYmFzZXgiLCJpcyIsImNyZWF0ZUVsZW1lbnQiLCJ3a3NFeHQiLCIkU3ltYm9sIiwiZG9jdW1lbnRFbGVtZW50IiwiY2hlY2siLCJzZXRQcm90b3R5cGVPZiIsImJ1Z2d5IiwiX19wcm90b19fIiwiY291bnQiLCJJbmZpbml0eSIsInNpZ24iLCIkZXhwbTEiLCJleHBtMSIsIiRpdGVyQ3JlYXRlIiwiQlVHR1kiLCJyZXR1cm5UaGlzIiwiREVGQVVMVCIsIklTX1NFVCIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0TWV0aG9kIiwia2luZCIsIkRFRl9WQUxVRVMiLCJWQUxVRVNfQlVHIiwiJG5hdGl2ZSIsIiRkZWZhdWx0IiwiJGVudHJpZXMiLCIkYW55TmF0aXZlIiwiZGVzY3JpcHRvciIsInNlYXJjaFN0cmluZyIsIiRkZWZpbmVQcm9wZXJ0eSIsImdldEl0ZXJhdG9yTWV0aG9kIiwib3JpZ2luYWwiLCJlbmRQb3MiLCJhZGRUb1Vuc2NvcGFibGVzIiwiaXRlcmF0ZWQiLCJfaSIsIl9rIiwiQXJndW1lbnRzIiwicmUxIiwicmUyIiwicmVnZXhwRmxhZ3MiLCJuYXRpdmVFeGVjIiwibmF0aXZlUmVwbGFjZSIsInBhdGNoZWRFeGVjIiwiVVBEQVRFU19MQVNUX0lOREVYX1dST05HIiwiTlBDR19JTkNMVURFRCIsImxhc3RJbmRleCIsInJlQ29weSIsImF0IiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsImludm9rZSIsImh0bWwiLCJjZWwiLCJwcm9jZXNzIiwic2V0VGFzayIsInNldEltbWVkaWF0ZSIsImNsZWFyVGFzayIsImNsZWFySW1tZWRpYXRlIiwiTWVzc2FnZUNoYW5uZWwiLCJEaXNwYXRjaCIsImNvdW50ZXIiLCJxdWV1ZSIsInJ1biIsImxpc3RlbmVyIiwiZXZlbnQiLCJhcmdzIiwibmV4dFRpY2siLCJub3ciLCJwb3J0MiIsInBvcnQxIiwib25tZXNzYWdlIiwicG9zdE1lc3NhZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwiaW1wb3J0U2NyaXB0cyIsInJlbW92ZUNoaWxkIiwic2V0VGltZW91dCIsIm1hY3JvdGFzayIsIk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJQcm9taXNlIiwiaXNOb2RlIiwiaGVhZCIsImxhc3QiLCJub3RpZnkiLCJmbHVzaCIsInBhcmVudCIsImRvbWFpbiIsImV4aXQiLCJlbnRlciIsInN0YW5kYWxvbmUiLCJyZXNvbHZlIiwicHJvbWlzZSIsInRoZW4iLCJ0b2dnbGUiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwidGFzayIsIlByb21pc2VDYXBhYmlsaXR5IiwicmVqZWN0IiwiJCRyZXNvbHZlIiwiJCRyZWplY3QiLCJCYXNlQnVmZmVyIiwiYWJzIiwicG93IiwibG9nIiwiTE4yIiwiJEJVRkZFUiIsIiRMRU5HVEgiLCIkT0ZGU0VUIiwicGFja0lFRUU3NTQiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsInJ0IiwidW5wYWNrSUVFRTc1NCIsIm5CaXRzIiwiTmFOIiwidW5wYWNrSTMyIiwiYnl0ZXMiLCJwYWNrSTgiLCJwYWNrSTE2IiwicGFja0kzMiIsInBhY2tGNjQiLCJwYWNrRjMyIiwidmlldyIsImlzTGl0dGxlRW5kaWFuIiwiaW50SW5kZXgiLCJfYiIsInBhY2siLCJjb252ZXJzaW9uIiwiQXJyYXlCdWZmZXJQcm90byIsImoiLCIkc2V0SW50OCIsInNldEludDgiLCJnZXRJbnQ4Iiwic2V0VWludDgiLCJidWZmZXJMZW5ndGgiLCJnZXRVaW50OCIsImdldEludDE2IiwiZ2V0VWludDE2IiwiZ2V0SW50MzIiLCJnZXRVaW50MzIiLCJnZXRGbG9hdDMyIiwiZ2V0RmxvYXQ2NCIsInNldEludDE2Iiwic2V0VWludDE2Iiwic2V0SW50MzIiLCJzZXRVaW50MzIiLCJzZXRGbG9hdDMyIiwic2V0RmxvYXQ2NCIsInV0aWxzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInRvSVNPU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc2htYXJrSW5kZXgiLCJlbmhhbmNlRXJyb3IiLCJtZXNzYWdlIiwiY29uZmlnIiwiY29kZSIsInJlcXVlc3QiLCJiczU4IiwiY3MiLCJuYW1lcyIsImNvZGVzIiwiZGVmYXVsdExlbmd0aHMiLCJ2YXJpbnQiLCJ0b0hleFN0cmluZyIsImZyb21IZXhTdHJpbmciLCJ0b0I1OFN0cmluZyIsImZyb21CNThTdHJpbmciLCJlbmNvZGVkIiwiYnVmIiwiaXNWYWxpZENvZGUiLCJkaWdlc3QiLCJoYXNoZm4iLCJjb2VyY2VDb2RlIiwiaXNBcHBDb2RlIiwicHJlZml4IiwiUHJvdG9jb2xzIiwiViIsInNpemUiLCJyZXNvbHZhYmxlIiwiQm9vbGVhbiIsImxlbmd0aFByZWZpeGVkVmFyU2l6ZSIsInRhYmxlIiwicm93IiwibWgiLCJtdWx0aWNvZGVjIiwiY29kZWNzIiwiQ0lEVXRpbCIsImNvZGVjIiwibXVsdGliYXNlTmFtZSIsIl9DSUQiLCJiYXNlTmFtZSIsInBhcnNlSW50IiwiZ2V0Q29kZWMiLCJybVByZWZpeCIsInZhbGlkYXRlQ0lEIiwiZmlyc3RCeXRlIiwiX2J1ZmZlciIsImdldENvZGVWYXJpbnQiLCJiYXNlIiwidG9CYXNlRW5jb2RlZFN0cmluZyIsIm90aGVyIiwiZXF1YWxzIiwiZXJyb3JNc2ciLCJjaGVja0NJRENvbXBvbmVudHMiLCJ3aXRoSXMiLCJjbGFzc05hbWUiLCJzeW1ib2xOYW1lIiwiZnMiLCJyZWFkZGlyciIsImRwYXRoIiwiZGlycyIsImZpbGVzIiwibG9vcCIsInJlYWRkaXIiLCJlcnIiLCJfZmlsZXMiLCJmcGF0aCIsInN0YXRzIiwiaXNEaXJlY3RvcnkiLCJnZXRzdGF0Iiwicm1kaXJyIiwicm1maWxlcyIsInJtZGlycyIsInVubGluayIsInJtZGlyIiwiY3BkaXJyIiwic3BhdGgiLCJ0cGF0aCIsImNwZGlycyIsImNwZmlsZXMiLCJycGF0aCIsInJlbGF0aXZlIiwiZXhpc3RzIiwibWtkaXIiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImdldEtleXMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwid2luZG93TmFtZXMiLCJnZXRXaW5kb3dOYW1lcyIsImdPUFMiLCIkYXNzaWduIiwiYXNzaWduIiwiayIsImdldFN5bWJvbHMiLCJpc0VudW0iLCJ5IiwiZmFjdG9yaWVzIiwiY29uc3RydWN0IiwicGFydEFyZ3MiLCJib3VuZCIsInVuIiwiJHBhcnNlSW50IiwiJHRyaW0iLCJ3cyIsImhleCIsInJhZGl4IiwiJHBhcnNlRmxvYXQiLCJwYXJzZUZsb2F0IiwibXNnIiwiaXNGaW5pdGUiLCJsb2cxcCIsIkVQU0lMT04iLCJFUFNJTE9OMzIiLCJNQVgzMiIsIk1JTjMyIiwiZnJvdW5kIiwiJGFicyIsIiRzaWduIiwicmV0IiwibWVtbyIsImlzUmlnaHQiLCJ0byIsImluYyIsImZvcmNlZCIsImZsYWdzIiwibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCJwcm9taXNlQ2FwYWJpbGl0eSIsInN0cm9uZyIsImVudHJ5IiwiZ2V0RW50cnkiLCIkaXRlckRlZmluZSIsIlNJWkUiLCJfZiIsIl9sIiwicHJldiIsImFkZCIsIkludGVybmFsTWFwIiwiZWFjaCIsIndlYWsiLCJOQVRJVkVfV0VBS19NQVAiLCJJU19JRTExIiwiQWN0aXZlWE9iamVjdCIsInVuY2F1Z2h0RnJvemVuU3RvcmUiLCJ1ZnN0b3JlIiwiJFdlYWtNYXAiLCIkaGFzIiwiVW5jYXVnaHRGcm96ZW5TdG9yZSIsImZpbmRVbmNhdWdodEZyb3plbiIsInNwbGljZSIsIm51bWJlciIsIlJlZmxlY3QiLCJvd25LZXlzIiwiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCJmbGF0dGVuSW50b0FycmF5Iiwic291cmNlTGVuIiwiZGVwdGgiLCJtYXBwZXIiLCJlbGVtZW50Iiwic3ByZWFkYWJsZSIsInRhcmdldEluZGV4Iiwic291cmNlSW5kZXgiLCJyZXBlYXQiLCJtYXhMZW5ndGgiLCJmaWxsU3RyaW5nIiwibGVmdCIsInN0cmluZ0xlbmd0aCIsImZpbGxTdHIiLCJpbnRNYXhMZW5ndGgiLCJmaWxsTGVuIiwic3RyaW5nRmlsbGVyIiwiaXNFbnRyaWVzIiwic2NhbGUiLCJpbkxvdyIsImluSGlnaCIsIm91dExvdyIsIm91dEhpZ2giLCJfX0NBTkNFTF9fIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsIlhNTEh0dHBSZXF1ZXN0IiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyc2UiLCJ0aW1lb3V0IiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJzdGF0dXMiLCJjcmVhdGVFcnJvciIsImlzQXhpb3NFcnJvciIsInRvSlNPTiIsImRlc2NyaXB0aW9uIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwiVVJMIiwiaHR0cCIsImh0dHBzIiwiV3JpdGFibGUiLCJhc3NlcnQiLCJkZWJ1ZyIsImV2ZW50SGFuZGxlcnMiLCJhcmcxIiwiYXJnMyIsIl9yZWRpcmVjdGFibGUiLCJlbWl0IiwiUmVkaXJlY3Rpb25FcnJvciIsImNyZWF0ZUVycm9yVHlwZSIsIlRvb01hbnlSZWRpcmVjdHNFcnJvciIsIk1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yIiwiV3JpdGVBZnRlckVuZEVycm9yIiwiUmVkaXJlY3RhYmxlUmVxdWVzdCIsInJlc3BvbnNlQ2FsbGJhY2siLCJfc2FuaXRpemVPcHRpb25zIiwiX29wdGlvbnMiLCJfZW5kZWQiLCJfZW5kaW5nIiwiX3JlZGlyZWN0Q291bnQiLCJfcmVkaXJlY3RzIiwiX3JlcXVlc3RCb2R5TGVuZ3RoIiwiX3JlcXVlc3RCb2R5QnVmZmVycyIsIm9uIiwiX29uTmF0aXZlUmVzcG9uc2UiLCJfcHJvY2Vzc1Jlc3BvbnNlIiwiX3BlcmZvcm1SZXF1ZXN0Iiwic3RhcnRUaW1lciIsIm1zZWNzIiwiY2xlYXJUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVyIiwid3JhcCIsInByb3RvY29scyIsIm1heFJlZGlyZWN0cyIsIm5hdGl2ZVByb3RvY29scyIsInNjaGVtZSIsInByb3RvY29sIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJjYWxsYmFjayIsInVybFN0ciIsInVybFRvT3B0aW9ucyIsImVxdWFsIiwid3JhcHBlZFJlcXVlc3QiLCJub29wIiwidXJsT2JqZWN0IiwiaG9zdG5hbWUiLCJzdGFydHNXaXRoIiwic2VhcmNoIiwicGF0aG5hbWUiLCJocmVmIiwicmVtb3ZlTWF0Y2hpbmdIZWFkZXJzIiwicmVnZXgiLCJsYXN0VmFsdWUiLCJoZWFkZXIiLCJkZWZhdWx0TWVzc2FnZSIsIkN1c3RvbUVycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJlbmNvZGluZyIsIl9jdXJyZW50UmVxdWVzdCIsImFib3J0IiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJvbmNlIiwic29ja2V0IiwiaG9zdCIsInNlYXJjaFBvcyIsInN1YnN0cmluZyIsImFnZW50cyIsInN1YnN0ciIsImFnZW50IiwiX2N1cnJlbnRVcmwiLCJmb3JtYXQiLCJfaXNSZWRpcmVjdCIsImJ1ZmZlcnMiLCJ3cml0ZU5leHQiLCJmaW5pc2hlZCIsInN0YXR1c0NvZGUiLCJ0cmFja1JlZGlyZWN0cyIsImxvY2F0aW9uIiwiZm9sbG93UmVkaXJlY3RzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZGVzdHJveSIsInByZXZpb3VzSG9zdE5hbWUiLCJyZWRpcmVjdFVybCIsInJlZGlyZWN0VXJsUGFydHMiLCJiZWZvcmVSZWRpcmVjdCIsInJlc3BvbnNlRGV0YWlscyIsImNhdXNlIiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdHMiLCJlbnYiLCJjcmVhdGVEZWJ1ZyIsIm5hbWVzcGFjZSIsInByZXZUaW1lIiwiZW5hYmxlT3ZlcnJpZGUiLCJlbmFibGVkIiwiY3VyciIsIkRhdGUiLCJtcyIsImRpZmYiLCJjb2VyY2UiLCJ1bnNoaWZ0IiwiZm9ybWF0dGVyIiwiZm9ybWF0dGVycyIsImZvcm1hdEFyZ3MiLCJ1c2VDb2xvcnMiLCJjb2xvciIsInNlbGVjdENvbG9yIiwiaW5pdCIsImRlbGltaXRlciIsIm5ld0RlYnVnIiwidG9OYW1lc3BhY2UiLCJkZWZhdWx0IiwiZGlzYWJsZSIsIm5hbWVzcGFjZXMiLCJza2lwcyIsImVuYWJsZSIsInNhdmUiLCJodW1hbml6ZSIsImNvbnNvbGUiLCJ3YXJuIiwiY29sb3JzIiwibG9hZCIsImNvbmZpZzEiLCJjb25maWcyIiwidmFsdWVGcm9tQ29uZmlnMktleXMiLCJtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyIsImRlZmF1bHRUb0NvbmZpZzJLZXlzIiwiZGlyZWN0TWVyZ2VLZXlzIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsImF4aW9zS2V5cyIsIm90aGVyS2V5cyIsIkNhbmNlbCIsIl9CdWZmZXIiLCJBTFBIQUJFVCIsIkJBU0VfTUFQIiwieGMiLCJCQVNFIiwiTEVBREVSIiwiRkFDVE9SIiwiaUZBQ1RPUiIsImRlY29kZVVuc2FmZSIsImFsbG9jIiwicHN6IiwiemVyb2VzIiwiYjI1NiIsImNhcnJ5IiwiaXQzIiwiaXQ0IiwidmNoIiwiYWxsb2NVbnNhZmUiLCJwYmVnaW4iLCJwZW5kIiwiYjU4IiwiaXQxIiwiaXQyIiwiY29uc3RhbnRzIiwibmFtZU9yQ29kZSIsImdldEJhc2UiLCJidWZPclN0cmluZyIsImZyZWV6ZSIsImVyck5vdFN1cHBvcnRlZCIsImNvZGVCdWYiLCJ2YWxpZEVuY29kZSIsImlzSW1wbGVtZW50ZWQiLCJpbnNwZWN0IiwiZm9yIiwiYWRkciIsImZyb21CdWZmZXIiLCJmcm9tU3RyaW5nIiwicHJvdG9zIiwicHJvdG9Db2RlcyIsImJ1ZmZlclRvU3RyaW5nIiwidG9PcHRpb25zIiwib3B0cyIsInBhcnNlZCIsImZhbWlseSIsInRyYW5zcG9ydCIsInNpemVGb3JBZGRyIiwicHJvdG9OYW1lcyIsInR1cGxlcyIsImJ1ZmZlclRvVHVwbGVzIiwic3RyaW5nVHVwbGVzIiwidHVwbGVzVG9TdHJpbmdUdXBsZXMiLCJlbmNhcHN1bGF0ZSIsImRlY2Fwc3VsYXRlIiwiZGVjYXBzdWxhdGVDb2RlIiwidHVwbGVzVG9CdWZmZXIiLCJnZXRQZWVySWQiLCJiNThzdHIiLCJ0dXBsZSIsImlwZnMiLCJwb3AiLCJnZXRQYXRoIiwibm9kZUFkZHJlc3MiLCJhZGRyZXNzIiwiZnJvbU5vZGVBZGRyZXNzIiwiaXAiLCJpc1RoaW5XYWlzdEFkZHJlc3MiLCJpc05hbWUiLCJidWZmZXJUb051bWJlciIsIm51bWJlclRvQnVmZmVyIiwibnVtIiwiaGV4U3RyaW5nIiwidmFyaW50QnVmZmVyRW5jb2RlIiwidmFyaW50QnVmZmVyRGVjb2RlIiwidmFyaW50RW5jb2RlIiwiQ2xhc3MiLCJzeW1ib2wiLCJDbGFzc0lzV3JhcHBlciIsInN1cGVyIiwid2l0aG91dE5ldyIsIl90aGlzIiwiQ29tYmluZWRTdHJlYW0iLCJ1dGlsIiwicGFyc2VVcmwiLCJtaW1lIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsIm9wdGlvbiIsIl9vdmVyaGVhZExlbmd0aCIsIl92YWx1ZUxlbmd0aCIsIl92YWx1ZXNUb01lYXN1cmUiLCJpbmhlcml0cyIsIkxJTkVfQlJFQUsiLCJhcHBlbmQiLCJmaWVsZCIsImZpbGVuYW1lIiwiX2Vycm9yIiwiX211bHRpUGFydEhlYWRlciIsImZvb3RlciIsIl9tdWx0aVBhcnRGb290ZXIiLCJfdHJhY2tMZW5ndGgiLCJ2YWx1ZUxlbmd0aCIsImtub3duTGVuZ3RoIiwicmVhZGFibGUiLCJfbGVuZ3RoUmV0cmlldmVyIiwiZmlsZVNpemUiLCJwYXVzZSIsInJlc3VtZSIsImNvbnRlbnREaXNwb3NpdGlvbiIsIl9nZXRDb250ZW50RGlzcG9zaXRpb24iLCJjb250ZW50VHlwZSIsIl9nZXRDb250ZW50VHlwZSIsImNvbnRlbnRzIiwiZ2V0Qm91bmRhcnkiLCJmaWxlcGF0aCIsIm5vcm1hbGl6ZSIsImJhc2VuYW1lIiwiY2xpZW50IiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwiX3N0cmVhbXMiLCJfbGFzdEJvdW5kYXJ5IiwiZ2V0SGVhZGVycyIsInVzZXJIZWFkZXJzIiwiZm9ybUhlYWRlcnMiLCJfYm91bmRhcnkiLCJfZ2VuZXJhdGVCb3VuZGFyeSIsImdldEJ1ZmZlciIsImRhdGFCdWZmZXIiLCJib3VuZGFyeSIsImdldExlbmd0aFN5bmMiLCJoYXNLbm93bkxlbmd0aCIsImdldExlbmd0aCIsInBhcmFsbGVsIiwic3VibWl0IiwiYXN5bmMiLCJzdGF0ZSIsImpvYnMiLCJpdGVtIiwiYWJvcnRlciIsInJ1bkpvYiIsIm91dHB1dCIsInJlc3VsdHMiLCJpc0FzeW5jIiwiY2xlYW4iLCJzb3J0TWV0aG9kIiwiaXNOYW1lZExpc3QiLCJpbml0U3RhdGUiLCJrZXllZExpc3QiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJfYmFiZWxQb2x5ZmlsbCIsInBhZFN0YXJ0IiwicGFkRW5kIiwiJGZhaWxzIiwid2tzRGVmaW5lIiwiZW51bUtleXMiLCJfY3JlYXRlIiwiZ09QTkV4dCIsIiRHT1BTIiwiJEpTT04iLCJfc3RyaW5naWZ5IiwiSElEREVOIiwiVE9fUFJJTUlUSVZFIiwiU3ltYm9sUmVnaXN0cnkiLCJBbGxTeW1ib2xzIiwiT1BTeW1ib2xzIiwiVVNFX05BVElWRSIsIlFPYmplY3QiLCJmaW5kQ2hpbGQiLCJzZXRTeW1ib2xEZXNjIiwicHJvdG9EZXNjIiwic3ltIiwiaXNTeW1ib2wiLCIkZGVmaW5lUHJvcGVydGllcyIsIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiJGdldE93blByb3BlcnR5TmFtZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiSVNfT1AiLCJlczZTeW1ib2xzIiwid2VsbEtub3duU3ltYm9scyIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCJyZXBsYWNlciIsIiRyZXBsYWNlciIsInN5bWJvbHMiLCIkZ2V0UHJvdG90eXBlT2YiLCIkZnJlZXplIiwiJHNlYWwiLCIkcHJldmVudEV4dGVuc2lvbnMiLCIkaXNGcm96ZW4iLCIkaXNTZWFsZWQiLCIkaXNFeHRlbnNpYmxlIiwiRlByb3RvIiwibmFtZVJFIiwiSEFTX0lOU1RBTkNFIiwiRnVuY3Rpb25Qcm90byIsIiROdW1iZXIiLCJCUk9LRU5fQ09GIiwiVFJJTSIsInRvTnVtYmVyIiwiYXJndW1lbnQiLCJ0aGlyZCIsIm1heENvZGUiLCJmaXJzdCIsImRpZ2l0cyIsImFOdW1iZXJWYWx1ZSIsIiR0b0ZpeGVkIiwidG9GaXhlZCIsIkVSUk9SIiwibXVsdGlwbHkiLCJjMiIsImRpdmlkZSIsIm51bVRvU3RyaW5nIiwiYWNjIiwiZnJhY3Rpb25EaWdpdHMiLCJ6IiwieDIiLCIkdG9QcmVjaXNpb24iLCJ0b1ByZWNpc2lvbiIsInByZWNpc2lvbiIsIl9pc0Zpbml0ZSIsImlzU2FmZUludGVnZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUlOX1NBRkVfSU5URUdFUiIsInNxcnQiLCIkYWNvc2giLCJhY29zaCIsIk1BWF9WQUxVRSIsIiRhc2luaCIsImFzaW5oIiwiJGF0YW5oIiwiYXRhbmgiLCJjYnJ0IiwiY2x6MzIiLCJMT0cyRSIsImNvc2giLCJoeXBvdCIsInZhbHVlMSIsInZhbHVlMiIsImRpdiIsInN1bSIsImxhcmciLCIkaW11bCIsImltdWwiLCJ4biIsInluIiwieGwiLCJ5bCIsImxvZzEwIiwiTE9HMTBFIiwibG9nMiIsInNpbmgiLCJ0YW5oIiwidHJ1bmMiLCJmcm9tQ2hhckNvZGUiLCIkZnJvbUNvZGVQb2ludCIsImZyb21Db2RlUG9pbnQiLCJyYXciLCJjYWxsU2l0ZSIsInRwbCIsIiRhdCIsInBvaW50IiwiY29kZVBvaW50QXQiLCJjb250ZXh0IiwiJGVuZHNXaXRoIiwiZW5kc1dpdGgiLCJlbmRQb3NpdGlvbiIsIiRzdGFydHNXaXRoIiwiZ2V0VGltZSIsInB2IiwiJHRvSVNPU3RyaW5nIiwibHoiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJEYXRlUHJvdG8iLCJoaW50IiwiY3JlYXRlUHJvcGVydHkiLCJ1cFRvIiwiY2xvbmVkIiwiJHNvcnQiLCIkZm9yRWFjaCIsIlNUUklDVCIsIiRmaWx0ZXIiLCIkc29tZSIsIiRldmVyeSIsIiRyZWR1Y2UiLCIkaW5kZXhPZiIsIk5FR0FUSVZFX1pFUk8iLCIkZmluZCIsIiRmbGFncyIsIiRSZWdFeHAiLCJDT1JSRUNUX05FVyIsInRpUkUiLCJwaVJFIiwiZmlVIiwicHJveHkiLCJhZHZhbmNlU3RyaW5nSW5kZXgiLCJyZWdFeHBFeGVjIiwiJG1hdGNoIiwibWF5YmVDYWxsTmF0aXZlIiwicngiLCJmdWxsVW5pY29kZSIsIm1hdGNoU3RyIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFMiLCJTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCIsIlJFUExBQ0UiLCIkcmVwbGFjZSIsInNlYXJjaFZhbHVlIiwicmVwbGFjZVZhbHVlIiwiZnVuY3Rpb25hbFJlcGxhY2UiLCJhY2N1bXVsYXRlZFJlc3VsdCIsIm5leHRTb3VyY2VQb3NpdGlvbiIsIm1hdGNoZWQiLCJwb3NpdGlvbiIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInJlcGxhY2VyQXJncyIsInJlcGxhY2VtZW50IiwiZ2V0U3Vic3RpdHV0aW9uIiwidGFpbFBvcyIsImNoIiwiY2FwdHVyZSIsInNhbWVWYWx1ZSIsIlNFQVJDSCIsIiRzZWFyY2giLCJwcmV2aW91c0xhc3RJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiJG1pbiIsIiRwdXNoIiwiU1VQUE9SVFNfWSIsIlNQTElUIiwiJHNwbGl0IiwiaW50ZXJuYWxTcGxpdCIsImxpbWl0IiwibGFzdExlbmd0aCIsImxhc3RMYXN0SW5kZXgiLCJzcGxpdExpbWl0Iiwic2VwYXJhdG9yQ29weSIsInNwbGl0dGVyIiwidW5pY29kZU1hdGNoaW5nIiwibGltIiwicSIsIkludGVybmFsIiwibmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5IiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJXcmFwcGVyIiwibWljcm90YXNrIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwicHJvbWlzZVJlc29sdmUiLCJ2ZXJzaW9ucyIsInY4IiwiJFByb21pc2UiLCJlbXB0eSIsIkZha2VQcm9taXNlIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiaXNUaGVuYWJsZSIsImlzUmVqZWN0IiwiX24iLCJjaGFpbiIsIl9jIiwiX3YiLCJvayIsIl9zIiwicmVhY3Rpb24iLCJleGl0ZWQiLCJoYW5kbGVyIiwiZmFpbCIsIl9oIiwib25IYW5kbGVVbmhhbmRsZWQiLCJvblVuaGFuZGxlZCIsInVuaGFuZGxlZCIsImlzVW5oYW5kbGVkIiwib251bmhhbmRsZWRyZWplY3Rpb24iLCJyZWFzb24iLCJfYSIsIm9ucmVqZWN0aW9uaGFuZGxlZCIsIiRyZWplY3QiLCJfdyIsIiRyZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYXBhYmlsaXR5IiwiYWxsIiwicmVtYWluaW5nIiwiJGluZGV4IiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCIkaXNWaWV3IiwiZmluIiwidmlld1MiLCJ2aWV3VCIsInJBcHBseSIsImZBcHBseSIsInRoaXNBcmd1bWVudCIsImFyZ3VtZW50c0xpc3QiLCJMIiwickNvbnN0cnVjdCIsIk5FV19UQVJHRVRfQlVHIiwiQVJHU19CVUciLCJUYXJnZXQiLCJuZXdUYXJnZXQiLCIkYXJncyIsInByb3BlcnR5S2V5IiwiYXR0cmlidXRlcyIsImRlbGV0ZVByb3BlcnR5IiwiRW51bWVyYXRlIiwiZW51bWVyYXRlIiwicmVjZWl2ZXIiLCJnZXRQcm90byIsImV4aXN0aW5nRGVzY3JpcHRvciIsIm93bkRlc2MiLCJzZXRQcm90byIsIiRpbmNsdWRlcyIsImFycmF5U3BlY2llc0NyZWF0ZSIsImZsYXRNYXAiLCJmbGF0dGVuIiwiZGVwdGhBcmciLCIkcGFkIiwiV0VCS0lUX0JVRyIsImdldEZsYWdzIiwiUmVnRXhwUHJvdG8iLCIkUmVnRXhwU3RyaW5nSXRlcmF0b3IiLCJfciIsIm1hdGNoQWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImdldERlc2MiLCIkdmFsdWVzIiwiX19kZWZpbmVHZXR0ZXJfXyIsIl9fbG9va3VwR2V0dGVyX18iLCJfX2xvb2t1cFNldHRlcl9fIiwiaXNFcnJvciIsImNsYW1wIiwibG93ZXIiLCJ1cHBlciIsIkRFR19QRVJfUkFEIiwiUEkiLCJSQURfUEVSX0RFRyIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiZnNjYWxlIiwiaWFkZGgiLCJ4MCIsIngxIiwieTAiLCJ5MSIsIiR4MCIsIiR5MCIsImlzdWJoIiwiaW11bGgiLCJ1IiwiJHUiLCIkdiIsInUwIiwidjAiLCJ1MSIsInYxIiwidW11bGgiLCJzaWduYml0Iiwib25GaW5hbGx5IiwidG9NZXRhS2V5Iiwib3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSIsImRlZmluZU1ldGFkYXRhIiwibWV0YWRhdGFLZXkiLCJtZXRhZGF0YVZhbHVlIiwiZGVsZXRlTWV0YWRhdGEiLCJvcmRpbmFyeUhhc093bk1ldGFkYXRhIiwib3JkaW5hcnlHZXRPd25NZXRhZGF0YSIsIm9yZGluYXJ5R2V0TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsIlNldCIsIm9yZGluYXJ5T3duTWV0YWRhdGFLZXlzIiwib3JkaW5hcnlNZXRhZGF0YUtleXMiLCJvS2V5cyIsInBLZXlzIiwiZ2V0TWV0YWRhdGFLZXlzIiwiZ2V0T3duTWV0YWRhdGEiLCJnZXRPd25NZXRhZGF0YUtleXMiLCJvcmRpbmFyeUhhc01ldGFkYXRhIiwiaGFzTWV0YWRhdGEiLCJoYXNPd25NZXRhZGF0YSIsIiRtZXRhZGF0YSIsImFzYXAiLCJPQlNFUlZBQkxFIiwiY2xlYW51cFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbiIsImNsZWFudXAiLCJzdWJzY3JpcHRpb25DbG9zZWQiLCJfbyIsImNsb3NlU3Vic2NyaXB0aW9uIiwiU3Vic2NyaXB0aW9uIiwib2JzZXJ2ZXIiLCJzdWJzY3JpYmVyIiwiU3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJ1bnN1YnNjcmliZSIsImNvbXBsZXRlIiwiJE9ic2VydmFibGUiLCJzdWJzY3JpYmUiLCJvYnNlcnZhYmxlIiwiaXRlbXMiLCJPYnNlcnZhYmxlIiwiTVNJRSIsInRpbWUiLCJib3VuZEFyZ3MiLCJzZXRJbnRlcnZhbCIsIiR0YXNrIiwiVE9fU1RSSU5HX1RBRyIsIkFycmF5VmFsdWVzIiwiRE9NSXRlcmFibGVzIiwiQ1NTUnVsZUxpc3QiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwiQ1NTVmFsdWVMaXN0IiwiQ2xpZW50UmVjdExpc3QiLCJET01SZWN0TGlzdCIsIkRPTVN0cmluZ0xpc3QiLCJET01Ub2tlbkxpc3QiLCJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsIkZpbGVMaXN0IiwiSFRNTEFsbENvbGxlY3Rpb24iLCJIVE1MQ29sbGVjdGlvbiIsIkhUTUxGb3JtRWxlbWVudCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiTWVkaWFMaXN0IiwiTWltZVR5cGVBcnJheSIsIk5hbWVkTm9kZU1hcCIsIk5vZGVMaXN0IiwiUGFpbnRSZXF1ZXN0TGlzdCIsIlBsdWdpbiIsIlBsdWdpbkFycmF5IiwiU1ZHTGVuZ3RoTGlzdCIsIlNWR051bWJlckxpc3QiLCJTVkdQYXRoU2VnTGlzdCIsIlNWR1BvaW50TGlzdCIsIlNWR1N0cmluZ0xpc3QiLCJTVkdUcmFuc2Zvcm1MaXN0IiwiU291cmNlQnVmZmVyTGlzdCIsIlN0eWxlU2hlZXRMaXN0IiwiVGV4dFRyYWNrQ3VlTGlzdCIsIlRleHRUcmFja0xpc3QiLCJUb3VjaExpc3QiLCJjb2xsZWN0aW9ucyIsImV4cGxpY2l0IiwiQ29sbGVjdGlvbiIsIk9wIiwiaGFzT3duIiwiaXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwiaW5Nb2R1bGUiLCJydW50aW1lIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiQ29udGludWVTZW50aW5lbCIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwiR3AiLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkdlbmVyYXRvciIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJhd3JhcCIsIl9fYXdhaXQiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJBc3luY0l0ZXJhdG9yIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsIkNvbnRleHQiLCJyZXNldCIsInNraXBUZW1wUmVzZXQiLCJzZW50IiwiX3NlbnQiLCJkZWxlZ2F0ZSIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5Iiwic3RvcCIsInJvb3RSZWNvcmQiLCJjb21wbGV0aW9uIiwicnZhbCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwicmVjb3JkIiwidHJ5TG9jIiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWJydXB0IiwiZmluYWxseUVudHJ5IiwiYWZ0ZXJMb2MiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwcm90b0dlbmVyYXRvciIsImdlbmVyYXRvciIsIl9pbnZva2UiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwidHJ5Q2F0Y2giLCJtYWtlSW52b2tlTWV0aG9kIiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXR1cm4iLCJpbmZvIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsIml0ZXJhdG9yTWV0aG9kIiwiZXNjYXBlIiwiJHJlIiwicmVnRXhwIiwicGFydCIsInBpbkJ5SGFzaCIsImhhc2hUb1BpbiIsImhhc2hNZXRhZGF0YSIsImlwZnNQaW5IYXNoIiwiaGFzaFBpblBvbGljeSIsIm5ld1BpblBvbGljeSIsInBpbkZpbGVUb0lQRlMiLCJyZWFkYWJsZVN0cmVhbSIsInBpbkZyb21GUyIsInNvdXJjZVBhdGgiLCJwaW5KU09OVG9JUEZTIiwiYm9keSIsInBpbkpvYnMiLCJmaWx0ZXJzIiwidW5waW4iLCJoYXNoVG9VbnBpbiIsInVzZXJQaW5Qb2xpY3kiLCJ0ZXN0QXV0aGVudGljYXRpb24iLCJwaW5MaXN0IiwidXNlclBpbm5lZERhdGFUb3RhbCIsInZhbGlkYXRlQXBpS2V5cyIsImVuZHBvaW50IiwiYmFzZVVybCIsInBpbmF0YU9wdGlvbnMiLCJwaW5hdGFNZXRhZGF0YSIsInZhbGlkYXRlTWV0YWRhdGEiLCJheGlvcyIsInBvc3QiLCJ3aXRoQ3JlZGVudGlhbHMiLCJmb3JtYXR0ZWRFcnJvciIsImhhbmRsZUVycm9yIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsInByb21pc2VzIiwic3ByZWFkIiwiYnVpbGRVUkwiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJpbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic2hpZnQiLCJnZXRVcmkiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwiaCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwiY2FuY2VsVG9rZW4iLCJ0aHJvd0lmUmVxdWVzdGVkIiwibm9ybWFsaXplZE5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNldHRsZSIsImNvb2tpZXMiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uYWJvcnQiLCJvbmVycm9yIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsInhzcmZWYWx1ZSIsInJlYWQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbCIsInNlbmQiLCJleHBpcmVzIiwic2VjdXJlIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJyZWxhdGl2ZVVSTCIsImlnbm9yZUR1cGxpY2F0ZU9mIiwibGluZSIsIm9yaWdpblVSTCIsIm1zaWUiLCJ1cmxQYXJzaW5nTm9kZSIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJyZXF1ZXN0VVJMIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwiemxpYiIsInBrZyIsImlzSHR0cHMiLCJyZXNvbHZlUHJvbWlzZSIsInJlamVjdFByb21pc2UiLCJ1cmxBdXRoIiwiaXNIdHRwc1JlcXVlc3QiLCJodHRwc0FnZW50IiwiaHR0cEFnZW50Iiwic29ja2V0UGF0aCIsInByb3h5RW52IiwicHJveHlVcmwiLCJwYXJzZWRQcm94eVVybCIsIm5vUHJveHlFbnYiLCJub19wcm94eSIsIk5PX1BST1hZIiwic2hvdWxkUHJveHkiLCJwcm94eUVsZW1lbnQiLCJwcm94eVVybEF1dGgiLCJzZXRQcm94eSIsImJhc2U2NCIsInJlZGlyZWN0aW9uIiwiaXNIdHRwc1Byb3h5IiwicmVxIiwiYWJvcnRlZCIsInN0cmVhbSIsImxhc3RSZXF1ZXN0IiwiZGVjb21wcmVzcyIsImNyZWF0ZVVuemlwIiwic3RhdHVzTWVzc2FnZSIsInJlc3BvbnNlQnVmZmVyIiwiY2h1bmsiLCJyZXNwb25zZURhdGEiLCJyZXNwb25zZUVuY29kaW5nIiwiYnJvd3NlciIsIl9fbndqcyIsImxhc3RDIiwic3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZ2V0SXRlbSIsIkRFQlVHIiwiV2Via2l0QXBwZWFyYW5jZSIsImZpcmVidWciLCIkMSIsImxvY2FsU3RvcmFnZSIsImxvY2Fsc3RvcmFnZSIsIndhcm5lZCIsInBsdXJhbCIsImxvbmciLCJmbXRTaG9ydCIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJnZXREYXRlIiwiaXNhdHR5IiwiZmQiLCJkZXByZWNhdGUiLCJzdXBwb3J0c0NvbG9yIiwibGV2ZWwiLCJvcyIsImhhc0ZsYWciLCJmb3JjZUNvbG9yIiwiZ2V0U3VwcG9ydExldmVsIiwiaGFzQmFzaWMiLCJoYXMyNTYiLCJoYXMxNm0iLCJ0cmFuc2xhdGVMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJyZWxlYXNlIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJGT1JDRV9DT0xPUiIsInN0ZG91dCIsImZsYWciLCJhcmd2IiwidGVybWluYXRvclBvcyIsInRva2VuIiwicGF5bG9hZCIsImNvcHlQcm9wcyIsImRzdCIsIlNhZmVCdWZmZXIiLCJlbmNvZGluZ09yT2Zmc2V0IiwiYWxsb2NVbnNhZmVTbG93IiwiU2xvd0J1ZmZlciIsIjAiLCJvbGRPZmZzZXQiLCJJTlQiLCJOMSIsIk4yIiwiTjMiLCJONCIsIk41IiwiTjYiLCJONyIsIk44IiwiTjkiLCJiYXNlWCIsImJhc2UxNiIsImJhc2UzMiIsInR1cHBsZSIsImltcGxlbWVudGF0aW9uIiwiYWxwaGFiZXQiLCJlbmdpbmUiLCJzdHJpbmdPckJ1ZmZlciIsImNoYXIiLCJwYWRkaW5nIiwiYml0cyIsInBhZCIsImNvbnZlcnQiLCJzdHJpbmdUb1N0cmluZ1R1cGxlcyIsIlBhcnNlRXJyb3IiLCJjbGVhblBhdGgiLCJzdHJpbmdUdXBsZXNUb1N0cmluZyIsInR1cCIsInByb3RvRnJvbVR1cGxlIiwic3RyaW5nVHVwbGVzVG9UdXBsZXMiLCJ0b0J1ZmZlciIsInN0cmluZ1RvQnVmZmVyIiwidmFsaWRhdGVCdWZmZXIiLCJpc1ZhbGlkQnVmZmVyIiwiaXNJcCIsIkNvbnZlcnQiLCJpcDJidWYiLCJpcFN0cmluZyIsInBvcnQyYnVmIiwid3JpdGVVSW50MTZCRSIsImJ1ZjJwb3J0IiwicmVhZFVJbnQxNkJFIiwiYnVmMm9uaW9uIiwiYWRkckJ5dGVzIiwicG9ydEJ5dGVzIiwiaXBCdWZmIiwiYnVmMmlwIiwiYnVmMnN0ciIsImJ1ZjJtaCIsInN0cjJidWYiLCJtaDJidWYiLCJhc0J5dGVzIiwicG9ydEJ1ZiIsIm9uaW9uMmJ1ZiIsIm9uaW9uMzJidWYiLCJidWZmIiwiaXNWNEZvcm1hdCIsImJ5dGUiLCJpc1Y2Rm9ybWF0Iiwic2VjdGlvbnMiLCJ2NEJ1ZmZlciIsIndvcmQiLCJpcHY0UmVnZXgiLCJpcHY2UmVnZXgiLCJfbm9ybWFsaXplRmFtaWx5IiwiZnJvbVByZWZpeExlbiIsInByZWZpeGxlbiIsIm1hc2siLCJjaWRyIiwiY2lkclN0cmluZyIsImNpZHJQYXJ0cyIsInN1Ym5ldCIsIm5ldHdvcmtBZGRyZXNzIiwidG9Mb25nIiwibWFza0J1ZmZlciIsIm1hc2tMZW5ndGgiLCJvY3RldCIsIm51bWJlck9mQWRkcmVzc2VzIiwiZnJvbUxvbmciLCJmaXJzdEFkZHJlc3MiLCJsYXN0QWRkcmVzcyIsImJyb2FkY2FzdEFkZHJlc3MiLCJzdWJuZXRNYXNrIiwic3VibmV0TWFza0xlbmd0aCIsIm51bUhvc3RzIiwiY29udGFpbnMiLCJjaWRyU3VibmV0Iiwibm90Iiwib3IiLCJpc0VxdWFsIiwiaXNQcml2YXRlIiwiaXNQdWJsaWMiLCJpc0xvb3BiYWNrIiwibG9vcGJhY2siLCJpbnRlcmZhY2VzIiwibmV0d29ya0ludGVyZmFjZXMiLCJkZXRhaWxzIiwibmljIiwiYWRkcmVzc2VzIiwiaXBsIiwiaXBSZWdleCIsImV4YWN0IiwidjQiLCJ2NiIsImluY2x1ZGVCb3VuZGFyaWVzIiwidjZzZWciLCJpbnRUYWJsZSIsImNvZGVjTmFtZVRvQ29kZVZhcmludCIsImFkZFByZWZpeCIsIm11bHRpY29kZWNTdHJPckNvZGUiLCJwcmVmaXhlZERhdGEiLCJjb2RlY05hbWUiLCJnZXROYW1lIiwiZ2V0TnVtYmVyIiwiZ2V0Q29kZSIsImdldFZhcmludCIsInByaW50IiwiYmFzZVRhYmxlIiwibmFtZVRhYmxlIiwiZW5jb2RpbmdOYW1lIiwidmFyaW50VGFibGUiLCJ0YWJsZUJ5Q29kZSIsIkhJX0JBU0UzMl9OT19OT0RFX0pTIiwiQ09NTU9OX0pTIiwiSElfQkFTRTMyX05PX0NPTU1PTl9KUyIsIkFNRCIsIkJBU0UzMl9FTkNPREVfQ0hBUiIsIkJBU0UzMl9ERUNPREVfQ0hBUiIsImJsb2NrcyIsInRocm93SW52YWxpZFV0ZjgiLCJwYXJ0aWFsIiwiZGVjb2RlQXNCeXRlcyIsImJhc2UzMlN0ciIsInYyIiwidjMiLCJ2NSIsInY3IiwicmVtYWluIiwiYXNjaWlPbmx5IiwiZm9sbG93aW5nQ2hhcnMiLCJ0b1V0ZjhTdHJpbmciLCJub3RTdHJpbmciLCJlbmNvZGVCeXRlcyIsImVuY29kZUFzY2lpIiwiZW5jb2RlVXRmOCIsIl9fd2VicGFja19hbWRfb3B0aW9uc19fIiwiRE5TNCIsIkROUzYiLCJETlMiLCJJUCIsIlRDUCIsImFuZCIsIlVEUCIsIlVUUCIsIldlYlNvY2tldHMiLCJXZWJTb2NrZXRzU2VjdXJlIiwiSFRUUCIsIkhUVFBTIiwiV2ViUlRDU3RhciIsIldlYlNvY2tldFN0YXIiLCJXZWJSVENEaXJlY3QiLCJSZWxpYWJsZSIsIlN0YXJkdXN0IiwiX1AyUCIsIl9DaXJjdWl0IiwiQ2lyY3VpdFJlY3Vyc2l2ZSIsIkNpcmN1aXQiLCJQMlAiLCJtYWtlTWF0Y2hlc0Z1bmN0aW9uIiwicGFydGlhbE1hdGNoIiwicG5hbWVzIiwicHV0IiwicmVhZFN0cmVhbSIsIk5vZGVGb3JtRGF0YSIsIlJlYWRhYmxlIiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiU3RyZWFtIiwiRGVsYXllZFN0cmVhbSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfY3VycmVudFN0cmVhbSIsIl9pbnNpZGVMb29wIiwiX3BlbmRpbmdOZXh0IiwiY29tYmluZWRTdHJlYW0iLCJpc1N0cmVhbUxpa2UiLCJuZXdTdHJlYW0iLCJwYXVzZVN0cmVhbSIsIl9jaGVja0RhdGFTaXplIiwiX2hhbmRsZUVycm9ycyIsImRlc3QiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsIl9waXBlTmV4dCIsIl9lbWl0RXJyb3IiLCJfcmVzZXQiLCJfdXBkYXRlRGF0YVNpemUiLCJfbWF4RGF0YVNpemVFeGNlZWRlZCIsIl9idWZmZXJlZEV2ZW50cyIsImRlbGF5ZWRTdHJlYW0iLCJyZWFsRW1pdCIsIl9oYW5kbGVFbWl0Iiwic2V0RW5jb2RpbmciLCJfY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQiLCJleHRlbnNpb25zIiwidHlwZXMiLCJwcmVmZXJlbmNlIiwiZGIiLCJleHRuYW1lIiwiRVhUUkFDVF9UWVBFX1JFR0VYUCIsIlRFWFRfVFlQRV9SRUdFWFAiLCJjaGFyc2V0IiwiY2hhcnNldHMiLCJleHRlbnNpb24iLCJleHRzIiwic2VyaWFsIiwic2VyaWFsT3JkZXJlZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZWN1cnNpdmUiLCJmaWxlIiwiZmlsZVBhdGgiLCJuZXdTdHJpbmciLCJsYXN0SW5kZXhPZkRpcmVjdG9yeSIsIm5ld0xhc3RJbmRleCIsInBhdGhHYXJiYWdlIiwicmVxdWVzdEJvZHkiLCJwaW5hdGFDb250ZW50IiwibmV3VXJsIiwiZmlyc3RGaWx0ZXJBcHBsaWVkIiwiYWRkRmlsdGVyIiwibmV3RmlsdGVyIiwiaXBmc19waW5faGFzaCIsImF1dGhlbnRpY2F0ZWQiLCJiYXNlRW5kcG9pbnQiLCJ2YWxpZGF0ZUFuZFJldHVybkRhdGUiLCJkYXRlVG9WYWxpZGF0ZSIsImRhdGVQYXJzZWQiLCJmaWx0ZXJRdWVyeSIsIm1ldGFkYXRhUXVlcnkiLCJoYXNoQ29udGFpbnMiLCJwaW5TdGFydCIsInBpbkVuZCIsInVucGluU3RhcnQiLCJ1bnBpbkVuZCIsInBpblNpemVNaW4iLCJwaW5TaXplTWF4IiwicGFnZUxpbWl0IiwicGFnZU9mZnNldCIsInBydW5lZEtleVZhbHVlcyIsIm9wIiwic2Vjb25kVmFsdWUiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxJQUNRLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sYUFBYyxHQUFJSCxHQUNDLGlCQUFaQyxRQUNkQSxRQUFRLGNBQWdCRCxJQUV4QkQsRUFBSyxjQUFnQkMsSUFSdkIsQ0FTbUIsb0JBQVRLLEtBQXVCQSxLQUFPQyxNQUFNLFdBQzlDLE8sWUNURSxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9B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LEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxJQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFR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ZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixZQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGFBQWMsTUFDZCxjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGFBQWMsTUFDZCxjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGVBQWdCLE1BQ2hCLGNBQWUsTUFDZixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLEtBQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsaUJBQWtCLE1BQ2xCLGlCQUFrQixNQUNsQixpQkFBa0IsTUFDbEIsaUJBQWtCLFFBR3BCM2tDLEVBQVE4dEIsTUFBUTNzQixPQUFPd2pDLE9BQU8sQ0FDNUIweUIsRUFBSyxXQUdMLEdBQU0sT0FDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sZUFDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sV0FDTixHQUFNLFdBQ04sR0FBTSxZQUNOLEdBQU0sWUFDTixHQUFNLGFBQ04sR0FBTSxhQUNOLEdBQU0sYUFDTixHQUFNLGFBRU4sR0FBTSxjQUNOLEdBQU0sYUFHTixNQUFRLFlBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxZQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FHUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsYUFDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGNBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLEtBQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsaUJBQ1IsTUFBUSxpQkFDUixNQUFRLGlCQUNSLE1BQVEsbUJBR1ZyM0QsRUFBUSt0QixlQUFpQjVzQixPQUFPd2pDLE9BQU8sQ0FDckMsR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBRU4sTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFB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dWxFLEdBQUl2bEUsRUFBTXVsRSxJQUVkLE1BQ0osUUFDSSxNQUFNLElBQUl6OEQsTUFBSix1QkFBMEI5SSxFQUFNdWxFLEdBQWhDLGdDQUlsQlgsR0FBZ0MsR0FBSCxPQUFNbjVDLEtBQUtDLFVBQVU0NUMsTUFJOUQsZ0JBQVVoYixHQUFWLE9BQW9CcWEsR0FBcEIsT0FBa0NDLEksNkdDdk92QixTQUE2Qmg4RCxFQUFjQyxJQUN0RCxJQUFBdWhELGlCQUFnQnhoRCxFQUFjQyxHQUU5QixJQUFJd2hELEVBQVcsR0FBSCxPQUFNQyxVQUFOLDZCQUVaLE9BQU8sSUFBSTlqQyxTQUFRLFNBQUNXLEVBQVNTLEdBQ3pCOGlDLFVBQU05cUQsSUFDRnlxRCxFQUNBLENBQ0lPLGlCQUFpQixFQUNqQjd6QixRQUFTLENBQ0wsZUFBa0JudUIsRUFDbEIsc0JBQXlCQyxLQUU5QndlLE1BQUssU0FBVWxoQixHQUNJLE1BQWxCQSxFQUFPeXhCLFFBQ1BoUSxFQUFPLElBQUk5ZSxNQUFKLGtGQUFxRjNDLEtBRWhHZ2hCLEVBQVFoaEIsRUFBT3FFLFNBWm5CLE9BYVMsU0FBVUYsR0FDZixJQUFNdWdELEdBQWlCLElBQUFDLGFBQVl4Z0QsR0FDbkNzZCxFQUFPaWpDLFVBaENuQixJLEVBQUEsRyxFQUFBLFEsMkJBQ0EsUUFDQSxRQUNBLFEiLCJmaWxlIjoicGluYXRhLXNkay5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInBpbmF0YS1zZGtcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGluYXRhLXNka1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaW5hdGEtc2RrXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNzcpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmICh0b1N0cmluZy5jYWxsKHZhbCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NXG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgcXVvdCA9IC9cIi9nO1xuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG52YXIgY3JlYXRlSFRNTCA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCBleGVjKSB7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KSwgJ1N0cmluZycsIE8pO1xufTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCJleHBvcnQgY29uc3QgYmFzZVVybCA9ICdodHRwczovL2FwaS5waW5hdGEuY2xvdWQnO1xuIiwiaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuLyoqXG4gKiBWYWxpZGF0ZSBBUEkgS2V5c1xuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgaWYgKCFwaW5hdGFBcGlLZXkgfHwgcGluYXRhQXBpS2V5ID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbmF0YUFwaUtleSBwcm92aWRlZCEgUGxlYXNlIHByb3ZpZGUgeW91ciBwaW5hdGEgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbiAgICBpZiAoIXBpbmF0YVNlY3JldEFwaUtleSB8fCBwaW5hdGFTZWNyZXRBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhU2VjcmV0QXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBzZWNyZXQgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBob3N0IE5vZGVzXG4gKiBAcGFyYW0geyp9IGhvc3ROb2Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIb3N0Tm9kZXMoaG9zdE5vZGVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhvc3ROb2RlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdob3N0X25vZGVzIHZhbHVlIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgaG9zdE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFpc0lQRlMucGVlck11bHRpYWRkcihub2RlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBob3N0X25vZGUgYXJyYXkgZW50cnk6ICR7bm9kZX0gaXMgbm90IGEgdmFsaWQgcGVlciBtdWx0aWFkZHJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIE1ldGFEYXRhXG4gKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgaWYgKG1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIG1ldGFkYXRhLm5hbWUgPT09ICdzdHJpbmcnIHx8IG1ldGFkYXRhLm5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGFkYXRhIG5hbWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmtleXZhbHVlcykge1xuICAgICAgICBpZiAoISh0eXBlb2YgbWV0YWRhdGEua2V5dmFsdWVzID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YXRhZGF0YSBrZXl2YWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICBPYmplY3QuZW50cmllcyhtZXRhZGF0YS5rZXl2YWx1ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleVZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoaSA+IDkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1vcmUgdGhhbiAxMCBrZXl2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIGZvciBtZXRhZGF0YSBlbnRyaWVzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5wdXQgaXMgYSBzdHJpbmcsIGEgYm9vbGVhbiwgb3IgYSBudW1iZXIsIHNvIHdlIGRvbid0IGdldCBhbiBvYmplY3QgcGFzc2VkIGluIGJ5IGFjY2lkZW50XG4gICAgICAgICAgICBpZiAoISh0eXBlb2Yga2V5VmFsdWVbMV0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXlWYWx1ZVsxXSA9PT0gJ2Jvb2xlYW4nIHx8ICFpc05hTihrZXlWYWx1ZVsxXSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBib29sZWFucywgb3IgbnVtYmVycycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgUGluIFBvbGljeSBTdHJ1Y3R1cmVcbiAqIEBwYXJhbSB7Kn0gcGluUG9saWN5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShwaW5Qb2xpY3kpIHtcbiAgICAvL3RoaXMgZnVuY3Rpb24gdGFrZXMgaW4gYSBwaW4gcG9saWN5IGFuZCBjaGVja3MgdGhlIEpTT04gc3RydWN0dXJlIHRvIG1ha2Ugc3VyZSBpdCdzIHZhbGlkXG4gICAgaWYgKCFwaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwaW4gcG9saWN5IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwaW5Qb2xpY3kucmVnaW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZ2lvbnMgcHJvdmlkZWQgaW4gcGluIHBvbGljeScpO1xuICAgIH1cbiAgICBpZiAocGluUG9saWN5LnJlZ2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIHBpblBvbGljeS5yZWdpb25zLmZvckVhY2goKHJlZ2lvbikgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWdpb24uaWQgfHwgIShPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmVnaW9uLmlkKSA9PT0gJ1tvYmplY3QgU3RyaW5nXScpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWdpb24gaWQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIShyZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgfHwgcmVnaW9uLmRlc2lyZWRSZXBsaWNhdGlvbkNvdW50ID09PSAwKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXNpcmVkUmVwbGljYXRpb25Db3VudCBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIFBpbmF0YSBPcHRpb25zXG4gKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jaWRWZXJzaW9uKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgaWYgKG9wdGlvbnMuY2lkVmVyc2lvbiAhPSAwICYmIG9wdGlvbnMuY2lkVmVyc2lvbiAhPSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIG9yIGludmFsaWQgY2lkVmVyc2lvbicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgaWYgKG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkgIT09IHRydWUgJiYgb3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3JhcFdpdGhEaXJlY3RvcnkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUgb2YgdHJ1ZSBvciBmYWxzZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaG9zdE5vZGVzKSB7XG4gICAgICAgIHZhbGlkYXRlSG9zdE5vZGVzKG9wdGlvbnMuaG9zdE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jdXN0b21QaW5Qb2xpY3kpIHtcbiAgICAgICAgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUob3B0aW9ucy5jdXN0b21QaW5Qb2xpY3kpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBoYW5kbGVFcnJvciA9IChlcnJvcikgPT4ge1xuICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3I7XG4gIH0gZWxzZSBpZiAoZXJyb3IuZGF0YSAmJiBlcnJvci5kYXRhLmVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLmRhdGEuZXJyb3I7XG4gIH0gZWxzZSBpZiAoZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IucmVzcG9uc2UuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTEnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2U1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgbXVsdGloYXNoID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuY29uc3QgbXVsdGliYXNlID0gcmVxdWlyZSgnbXVsdGliYXNlJylcbmNvbnN0IE11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5jb25zdCBtYWZtdCA9IHJlcXVpcmUoJ21hZm10JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuXG5jb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvW14vXStcXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IHBhdGhQYXR0ZXJuID0gL15cXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IGRlZmF1bHRQcm90b2NvbE1hdGNoID0gMVxuY29uc3QgZGVmYXVsdEhhc2hNYXRoID0gNFxuXG5jb25zdCBmcWRuUGF0dGVybiA9IC9eaHR0cHM/OlxcL1xcLyhbXi9dKylcXC4oaXAoPzpmfG4pcylcXC5bXi9dKy9cbmNvbnN0IGZxZG5IYXNoTWF0Y2ggPSAxXG5jb25zdCBmcWRuUHJvdG9jb2xNYXRjaCA9IDJcblxuZnVuY3Rpb24gaXNNdWx0aWhhc2ggKGhhc2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGhhc2gpXG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShmb3JtYXR0ZWQpKVxuICAgIG11bHRpaGFzaC5kZWNvZGUoYnVmZmVyKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYmFzZSAoaGFzaCkge1xuICB0cnkge1xuICAgIHJldHVybiBtdWx0aWJhc2UuaXNFbmNvZGVkKGhhc2gpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NJRCAoaGFzaCkge1xuICB0cnkge1xuICAgIG5ldyBDSUQoaGFzaCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aWFkZHIgKGlucHV0KSB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZVxuICBpZiAoTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGlucHV0KSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICBuZXcgTXVsdGlhZGRyKGlucHV0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BlZXJNdWx0aWFkZHIgKGlucHV0KSB7XG4gIHJldHVybiBpc011bHRpYWRkcihpbnB1dCkgJiYgbWFmbXQuSVBGUy5tYXRjaGVzKGlucHV0KVxufVxuXG5mdW5jdGlvbiBpc0lwZnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCA9IGRlZmF1bHRIYXNoTWF0aCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGZvcm1hdHRlZC5tYXRjaChwYXR0ZXJuKVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWF0Y2hbcHJvdG9jb2xNYXRjaF0gIT09ICdpcGZzJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG5cbiAgaWYgKGhhc2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gaXNDSUQoaGFzaClcbn1cblxuZnVuY3Rpb24gaXNJcG5zIChpbnB1dCwgcGF0dGVybiwgcHJvdG9jb2xNYXRjaCA9IGRlZmF1bHRQcm90b2NvbE1hdGNoLCBoYXNoTWF0Y2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGlucHV0KVxuICBpZiAoIWZvcm1hdHRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwbnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoaGFzaE1hdGNoICYmIHBhdHRlcm4gPT09IGZxZG5QYXR0ZXJuKSB7XG4gICAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG4gICAgLy8gd2hlbiBkb2luZyBjaGVja3MgZm9yIHN1YmRvbWFpbiBjb250ZXh0XG4gICAgLy8gZW5zdXJlIGhhc2ggaXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIChicm93c2VycyBmb3JjZS1sb3dlcmNhc2UgYXV0aG9yaXR5IGNvbXBvdGVudCBhbnl3YXkpXG4gICAgaGFzaCA9IGhhc2gudG9Mb3dlckNhc2UoKVxuICAgIHJldHVybiBpc0NJRChoYXNoKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcgKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAoaW5wdXQpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpbnB1dCkpIHtcbiAgICByZXR1cm4gYmFzZTU4LmVuY29kZShpbnB1dClcbiAgfVxuXG4gIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBpcGZzU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcGZzKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuY29uc3QgaXBuc1N1YmRvbWFpbiA9ICh1cmwpID0+IGlzSXBucyh1cmwsIGZxZG5QYXR0ZXJuLCBmcWRuUHJvdG9jb2xNYXRjaCwgZnFkbkhhc2hNYXRjaClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpaGFzaDogaXNNdWx0aWhhc2gsXG4gIG11bHRpYWRkcjogaXNNdWx0aWFkZHIsXG4gIHBlZXJNdWx0aWFkZHI6IGlzUGVlck11bHRpYWRkcixcbiAgY2lkOiBpc0NJRCxcbiAgYmFzZTMyY2lkOiAoY2lkKSA9PiAoaXNNdWx0aWJhc2UoY2lkKSA9PT0gJ2Jhc2UzMicgJiYgaXNDSUQoY2lkKSksXG4gIGlwZnNTdWJkb21haW46IGlwZnNTdWJkb21haW4sXG4gIGlwbnNTdWJkb21haW46IGlwbnNTdWJkb21haW4sXG4gIHN1YmRvbWFpbjogKHVybCkgPT4gKGlwZnNTdWJkb21haW4odXJsKSB8fCBpcG5zU3ViZG9tYWluKHVybCkpLFxuICBzdWJkb21haW5QYXR0ZXJuOiBmcWRuUGF0dGVybixcbiAgaXBmc1VybDogKHVybCkgPT4gaXNJcGZzKHVybCwgdXJsUGF0dGVybiksXG4gIGlwbnNVcmw6ICh1cmwpID0+IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pLFxuICB1cmw6ICh1cmwpID0+IChpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnModXJsLCB1cmxQYXR0ZXJuKSksXG4gIHVybFBhdHRlcm46IHVybFBhdHRlcm4sXG4gIGlwZnNQYXRoOiAocGF0aCkgPT4gaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSxcbiAgaXBuc1BhdGg6IChwYXRoKSA9PiBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBwYXRoOiAocGF0aCkgPT4gKGlzSXBmcyhwYXRoLCBwYXRoUGF0dGVybikgfHwgaXNJcG5zKHBhdGgsIHBhdGhQYXR0ZXJuKSksXG4gIHBhdGhQYXR0ZXJuOiBwYXRoUGF0dGVybixcbiAgdXJsT3JQYXRoOiAoeCkgPT4gKGlzSXBmcyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgdXJsUGF0dGVybikgfHwgaXNJcGZzKHgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgcGF0aFBhdHRlcm4pKSxcbiAgY2lkUGF0aDogcGF0aCA9PiBpc1N0cmluZyhwYXRoKSAmJiAhaXNDSUQocGF0aCkgJiYgaXNJcGZzKGAvaXBmcy8ke3BhdGh9YCwgcGF0aFBhdHRlcm4pXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBlbmNvZGU6IHJlcXVpcmUoJy4vZW5jb2RlLmpzJylcbiAgLCBkZWNvZGU6IHJlcXVpcmUoJy4vZGVjb2RlLmpzJylcbiAgLCBlbmNvZGluZ0xlbmd0aDogcmVxdWlyZSgnLi9sZW5ndGguanMnKVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgcmVkZWZpbmUocHJvdG8sIEtFWSxcbiAgICAgIEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSkgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7IHJldHVybiB0aGlzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gc2V0KGEsIGIpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEsIGIpOyByZXR1cm4gdGhpczsgfVxuICAgICk7XG4gIH07XG4gIGlmICh0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHsgbmV3IEMoaXRlcik7IH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSgpLCB0YXJnZXQsIEMpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBwcm90by5jbGVhcikgZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFRZUEVEID0gdWlkKCd0eXBlZF9hcnJheScpO1xudmFyIFZJRVcgPSB1aWQoJ3ZpZXcnKTtcbnZhciBBQlYgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KTtcbnZhciBDT05TVFIgPSBBQlY7XG52YXIgaSA9IDA7XG52YXIgbCA9IDk7XG52YXIgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlIChpIDwgbCkge1xuICBpZiAoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSkge1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBUWVBFRCwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICB9IGVsc2UgQ09OU1RSID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBQlY6IEFCVixcbiAgQ09OU1RSOiBDT05TVFIsXG4gIFRZUEVEOiBUWVBFRCxcbiAgVklFVzogVklFV1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEZvcmNlZCByZXBsYWNlbWVudCBwcm90b3R5cGUgYWNjZXNzb3JzIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fbGlicmFyeScpIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEsgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbFxuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwgSywgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIHJlcXVpcmUoJy4vX2dsb2JhbCcpW0tdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3RyZWFtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV0aWxcIik7IiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJsXCIpOyIsIi8qKlxuICogTXVsdGloYXNoIGltcGxlbWVudGF0aW9uIGluIEphdmFTY3JpcHQuXG4gKlxuICogQG1vZHVsZSBtdWx0aWhhc2hcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcblxuY29uc3QgY3MgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmV4cG9ydHMubmFtZXMgPSBjcy5uYW1lc1xuZXhwb3J0cy5jb2RlcyA9IGNzLmNvZGVzXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gY3MuZGVmYXVsdExlbmd0aHNcblxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBtdWx0aWhhc2ggdG8gYSBoZXggZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMudG9IZXhTdHJpbmcgPSBmdW5jdGlvbiB0b0hleFN0cmluZyAoaGFzaCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYXNoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBiZSBwYXNzZWQgYSBidWZmZXInKVxuICB9XG5cbiAgcmV0dXJuIGhhc2gudG9TdHJpbmcoJ2hleCcpXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gaGV4IGVuY29kZWQgc3RyaW5nIHRvIGEgbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmZyb21IZXhTdHJpbmcgPSBmdW5jdGlvbiBmcm9tSGV4U3RyaW5nIChoYXNoKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShoYXNoLCAnaGV4Jylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBtdWx0aWhhc2ggdG8gYSBiYXNlNTggZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMudG9CNThTdHJpbmcgPSBmdW5jdGlvbiB0b0I1OFN0cmluZyAoaGFzaCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYXNoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBiZSBwYXNzZWQgYSBidWZmZXInKVxuICB9XG5cbiAgcmV0dXJuIGJzNTguZW5jb2RlKGhhc2gpXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gYmFzZTU4IGVuY29kZWQgc3RyaW5nIHRvIGEgbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5mcm9tQjU4U3RyaW5nID0gZnVuY3Rpb24gZnJvbUI1OFN0cmluZyAoaGFzaCkge1xuICBsZXQgZW5jb2RlZCA9IGhhc2hcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihoYXNoKSkge1xuICAgIGVuY29kZWQgPSBoYXNoLnRvU3RyaW5nKClcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShiczU4LmRlY29kZShlbmNvZGVkKSlcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBoYXNoIGZyb20gdGhlIGdpdmVuIG11bHRpaGFzaC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcmV0dXJucyB7e2NvZGU6IG51bWJlciwgbmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciwgZGlnZXN0OiBCdWZmZXJ9fSByZXN1bHRcbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUgKGJ1Zikge1xuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoYnVmKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChidWYubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIHRvbyBzaG9ydC4gbXVzdCBiZSA+IDMgYnl0ZXMuJylcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZilcbiAgaWYgKCFleHBvcnRzLmlzVmFsaWRDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWhhc2ggdW5rbm93biBmdW5jdGlvbiBjb2RlOiAweCR7Y29kZS50b1N0cmluZygxNil9YClcbiAgfVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBjb25zdCBsZW4gPSB2YXJpbnQuZGVjb2RlKGJ1ZilcbiAgaWYgKGxlbiA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCBpbnZhbGlkIGxlbmd0aDogMHgke2xlbi50b1N0cmluZygxNil9YClcbiAgfVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYnVmLmxlbmd0aCAhPT0gbGVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWhhc2ggbGVuZ3RoIGluY29uc2lzdGVudDogMHgke2J1Zi50b1N0cmluZygnaGV4Jyl9YClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29kZTogY29kZSxcbiAgICBuYW1lOiBjcy5jb2Rlc1tjb2RlXSxcbiAgICBsZW5ndGg6IGxlbixcbiAgICBkaWdlc3Q6IGJ1ZlxuICB9XG59XG5cbi8qKlxuICogIEVuY29kZSBhIGhhc2ggZGlnZXN0IGFsb25nIHdpdGggdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBjb2RlLlxuICpcbiAqID4gKipOb3RlOioqIHRoZSBsZW5ndGggaXMgZGVyaXZlZCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdCBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRpZ2VzdFxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF1cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlIChkaWdlc3QsIGNvZGUsIGxlbmd0aCkge1xuICBpZiAoIWRpZ2VzdCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpaGFzaCBlbmNvZGUgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGFyZ3M6IGRpZ2VzdCwgY29kZScpXG4gIH1cblxuICAvLyBlbnN1cmUgaXQncyBhIGhhc2hmdW5jdGlvbiBjb2RlLlxuICBjb25zdCBoYXNoZm4gPSBleHBvcnRzLmNvZXJjZUNvZGUoY29kZSlcblxuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoZGlnZXN0KSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA9PSBudWxsKSB7XG4gICAgbGVuZ3RoID0gZGlnZXN0Lmxlbmd0aFxuICB9XG5cbiAgaWYgKGxlbmd0aCAmJiBkaWdlc3QubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCBsZW5ndGggc2hvdWxkIGJlIGVxdWFsIHRvIHNwZWNpZmllZCBsZW5ndGguJylcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKGhhc2hmbikpLFxuICAgIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobGVuZ3RoKSksXG4gICAgZGlnZXN0XG4gIF0pXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBoYXNoIGZ1bmN0aW9uIG5hbWUgaW50byB0aGUgbWF0Y2hpbmcgY29kZS5cbiAqIElmIHBhc3NlZCBhIG51bWJlciBpdCB3aWxsIHJldHVybiB0aGUgbnVtYmVyIGlmIGl0J3MgYSB2YWxpZCBjb2RlLlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBuYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmNvZXJjZUNvZGUgPSBmdW5jdGlvbiBjb2VyY2VDb2RlIChuYW1lKSB7XG4gIGxldCBjb2RlID0gbmFtZVxuXG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoY3MubmFtZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmdW5jdGlvbiBuYW1lZDogJHtuYW1lfWApXG4gICAgfVxuICAgIGNvZGUgPSBjcy5uYW1lc1tuYW1lXVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb2RlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSGFzaCBmdW5jdGlvbiBjb2RlIHNob3VsZCBiZSBhIG51bWJlci4gR290OiAke2NvZGV9YClcbiAgfVxuXG4gIGlmIChjcy5jb2Rlc1tjb2RlXSA9PT0gdW5kZWZpbmVkICYmICFleHBvcnRzLmlzQXBwQ29kZShjb2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGZ1bmN0aW9uIGNvZGU6ICR7Y29kZX1gKVxuICB9XG5cbiAgcmV0dXJuIGNvZGVcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2V0aGVyIGEgY29kZSBpcyBwYXJ0IG9mIHRoZSBhcHAgcmFuZ2VcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuaXNBcHBDb2RlID0gZnVuY3Rpb24gYXBwQ29kZSAoY29kZSkge1xuICByZXR1cm4gY29kZSA+IDAgJiYgY29kZSA8IDB4MTBcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG11bHRpaGFzaCBjb2RlIGlzIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc1ZhbGlkQ29kZSA9IGZ1bmN0aW9uIHZhbGlkQ29kZSAoY29kZSkge1xuICBpZiAoZXhwb3J0cy5pc0FwcENvZGUoY29kZSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKGNzLmNvZGVzW2NvZGVdKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBidWZmZXIgaXMgYSB2YWxpZCBtdWx0aWhhc2guIFRocm93cyBhbiBlcnJvciBpZiBpdCBpcyBub3QgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IG11bHRpaGFzaFxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZSAobXVsdGloYXNoKSB7XG4gIGV4cG9ydHMuZGVjb2RlKG11bHRpaGFzaCkgLy8gdGhyb3dzIGlmIGJhZC5cbn1cbmV4cG9ydHMudmFsaWRhdGUgPSB2YWxpZGF0ZVxuXG4vKipcbiAqIFJldHVybnMgYSBwcmVmaXggZnJvbSBhIHZhbGlkIG11bHRpaGFzaC4gVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydHMucHJlZml4ID0gZnVuY3Rpb24gcHJlZml4IChtdWx0aWhhc2gpIHtcbiAgdmFsaWRhdGUobXVsdGloYXNoKVxuXG4gIHJldHVybiBtdWx0aWhhc2guc2xpY2UoMCwgMilcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBQcm90b2NvbHMgKHByb3RvKSB7XG4gIGlmICh0eXBlb2YgKHByb3RvKSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoUHJvdG9jb2xzLmNvZGVzW3Byb3RvXSkge1xuICAgICAgcmV0dXJuIFByb3RvY29scy5jb2Rlc1twcm90b11cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByb3RvY29sIHdpdGggY29kZTogJyArIHByb3RvKVxuICB9IGVsc2UgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnc3RyaW5nJyB8fCBwcm90byBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIGlmIChQcm90b2NvbHMubmFtZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLm5hbWVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBuYW1lOiAnICsgcHJvdG8pXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJvdG9jb2wgaWQgdHlwZTogJyArIHByb3RvKVxufVxuXG5jb25zdCBWID0gLTFcblByb3RvY29scy5sZW5ndGhQcmVmaXhlZFZhclNpemUgPSBWXG5Qcm90b2NvbHMuViA9IFZcblxuUHJvdG9jb2xzLnRhYmxlID0gW1xuICBbNCwgMzIsICdpcDQnXSxcbiAgWzYsIDE2LCAndGNwJ10sXG4gIFszMywgMTYsICdkY2NwJ10sXG4gIFs0MSwgMTI4LCAnaXA2J10sXG4gIFs0MiwgViwgJ2lwNnpvbmUnXSxcbiAgWzUzLCBWLCAnZG5zJywgJ3Jlc29sdmFibGUnXSxcbiAgWzU0LCBWLCAnZG5zNCcsICdyZXNvbHZhYmxlJ10sXG4gIFs1NSwgViwgJ2RuczYnLCAncmVzb2x2YWJsZSddLFxuICBbNTYsIFYsICdkbnNhZGRyJywgJ3Jlc29sdmFibGUnXSxcbiAgWzEzMiwgMTYsICdzY3RwJ10sXG4gIFsyNzMsIDE2LCAndWRwJ10sXG4gIFsyNzUsIDAsICdwMnAtd2VicnRjLXN0YXInXSxcbiAgWzI3NiwgMCwgJ3AycC13ZWJydGMtZGlyZWN0J10sXG4gIFsyNzcsIDAsICdwMnAtc3RhcmR1c3QnXSxcbiAgWzI5MCwgMCwgJ3AycC1jaXJjdWl0J10sXG4gIFszMDEsIDAsICd1ZHQnXSxcbiAgWzMwMiwgMCwgJ3V0cCddLFxuICBbNDAwLCBWLCAndW5peCcsIGZhbHNlLCAncGF0aCddLFxuICAvLyBgaXBmc2AgaXMgYWRkZWQgYmVmb3JlIGBwMnBgIGZvciBsZWdhY3kgc3VwcG9ydC5cbiAgLy8gQWxsIHRleHQgcmVwcmVzZW50YXRpb25zIHdpbGwgZGVmYXVsdCB0byBgcDJwYCwgYnV0IGBpcGZzYCB3aWxsXG4gIC8vIHN0aWxsIGJlIHN1cHBvcnRlZFxuICBbNDIxLCBWLCAnaXBmcyddLFxuICAvLyBgcDJwYCBpcyB0aGUgcHJlZmVycmVkIG5hbWUgZm9yIDQyMSwgYW5kIGlzIG5vdyB0aGUgZGVmYXVsdFxuICBbNDIxLCBWLCAncDJwJ10sXG4gIFs0NDMsIDAsICdodHRwcyddLFxuICBbNDQ0LCA5NiwgJ29uaW9uJ10sXG4gIFs0NDUsIDI5NiwgJ29uaW9uMyddLFxuICBbNDQ2LCBWLCAnZ2FybGljNjQnXSxcbiAgWzQ2MCwgMCwgJ3F1aWMnXSxcbiAgWzQ3NywgMCwgJ3dzJ10sXG4gIFs0NzgsIDAsICd3c3MnXSxcbiAgWzQ3OSwgMCwgJ3AycC13ZWJzb2NrZXQtc3RhciddLFxuICBbNDgwLCAwLCAnaHR0cCddXG5dXG5cblByb3RvY29scy5uYW1lcyA9IHt9XG5Qcm90b2NvbHMuY29kZXMgPSB7fVxuXG4vLyBwb3B1bGF0ZSB0YWJsZXNcblByb3RvY29scy50YWJsZS5tYXAocm93ID0+IHtcbiAgY29uc3QgcHJvdG8gPSBwLmFwcGx5KG51bGwsIHJvdylcbiAgUHJvdG9jb2xzLmNvZGVzW3Byb3RvLmNvZGVdID0gcHJvdG9cbiAgUHJvdG9jb2xzLm5hbWVzW3Byb3RvLm5hbWVdID0gcHJvdG9cbn0pXG5cblByb3RvY29scy5vYmplY3QgPSBwXG5cbmZ1bmN0aW9uIHAgKGNvZGUsIHNpemUsIG5hbWUsIHJlc29sdmFibGUsIHBhdGgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBjb2RlLFxuICAgIHNpemU6IHNpemUsXG4gICAgbmFtZTogbmFtZSxcbiAgICByZXNvbHZhYmxlOiBCb29sZWFuKHJlc29sdmFibGUpLFxuICAgIHBhdGg6IEJvb2xlYW4ocGF0aClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3RvY29sc1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuY29uc3QgbXVsdGliYXNlID0gcmVxdWlyZSgnbXVsdGliYXNlJylcbmNvbnN0IG11bHRpY29kZWMgPSByZXF1aXJlKCdtdWx0aWNvZGVjJylcbmNvbnN0IGNvZGVjcyA9IHJlcXVpcmUoJ211bHRpY29kZWMvc3JjL2Jhc2UtdGFibGUuanNvbicpXG5jb25zdCBDSURVdGlsID0gcmVxdWlyZSgnLi9jaWQtdXRpbCcpXG5jb25zdCB3aXRoSXMgPSByZXF1aXJlKCdjbGFzcy1pcycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2VyaWFsaXplZENJRFxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGVjXG4gKiBAcGFyYW0ge251bWJlcn0gdmVyc2lvblxuICogQHBhcmFtIHtCdWZmZXJ9IG11bHRpaGFzaFxuICovXG5cbi8qKlxuICogVGVzdCBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgYSBDSUQuXG4gKiBAZnVuY3Rpb24gaXNDSURcbiAqIEBtZW1iZXJvZiBDSURcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7YW55fSBvdGhlclxuICogQHJldHVybnMge2Jvb2x9XG4gKi9cblxuLyoqXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgYSBDSUQgYDxtYmFzZT48dmVyc2lvbj48bWNvZGVjPjxtaGFzaD5gXG4gKiAsIGFzIGRlZmluZWQgaW4gW2lwbGQvY2lkXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL2NpZCkuXG4gKiBAY2xhc3MgQ0lEXG4gKi9cbmNsYXNzIENJRCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQ0lELlxuICAgKlxuICAgKiBUaGUgYWxnb3JpdGhtIGZvciBhcmd1bWVudCBpbnB1dCBpcyByb3VnaGx5OlxuICAgKiBgYGBcbiAgICogaWYgKGNpZClcbiAgICogICAtPiBjcmVhdGUgYSBjb3B5XG4gICAqIGVsc2UgaWYgKHN0cilcbiAgICogICBpZiAoMXN0IGNoYXIgaXMgb24gbXVsdGliYXNlIHRhYmxlKSAtPiBDSUQgU3RyaW5nXG4gICAqICAgZWxzZSAtPiBiczU4IGVuY29kZWQgbXVsdGloYXNoXG4gICAqIGVsc2UgaWYgKEJ1ZmZlcilcbiAgICogICBpZiAoMXN0IGJ5dGUgaXMgMCBvciAxKSAtPiBDSURcbiAgICogICBlbHNlIC0+IG11bHRpaGFzaFxuICAgKiBlbHNlIGlmIChOdW1iZXIpXG4gICAqICAgLT4gY29uc3RydWN0IENJRCBieSBwYXJ0c1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfENJRH0gdmVyc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVjXVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gW211bHRpaGFzaF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttdWx0aWJhc2VOYW1lXVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgQ0lEKDx2ZXJzaW9uPiwgPGNvZGVjPiwgPG11bHRpaGFzaD4sIDxtdWx0aWJhc2VOYW1lPilcbiAgICogbmV3IENJRCg8Y2lkU3RyPilcbiAgICogbmV3IENJRCg8Y2lkLmJ1ZmZlcj4pXG4gICAqIG5ldyBDSUQoPG11bHRpaGFzaD4pXG4gICAqIG5ldyBDSUQoPGJzNTggZW5jb2RlZCBtdWx0aWhhc2g+KVxuICAgKiBuZXcgQ0lEKDxjaWQ+KVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHZlcnNpb24sIGNvZGVjLCBtdWx0aWhhc2gsIG11bHRpYmFzZU5hbWUpIHtcbiAgICBpZiAoX0NJRC5pc0NJRCh2ZXJzaW9uKSkge1xuICAgICAgLy8gdmVyc2lvbiBpcyBhbiBleGlzaW5nIENJRCBpbnN0YW5jZVxuICAgICAgY29uc3QgY2lkID0gdmVyc2lvblxuICAgICAgdGhpcy52ZXJzaW9uID0gY2lkLnZlcnNpb25cbiAgICAgIHRoaXMuY29kZWMgPSBjaWQuY29kZWNcbiAgICAgIHRoaXMubXVsdGloYXNoID0gQnVmZmVyLmZyb20oY2lkLm11bHRpaGFzaClcbiAgICAgIC8vIERlZmF1bHQgZ3VhcmQgZm9yIHdoZW4gYSBDSUQgPCAwLjcgaXMgcGFzc2VkIHdpdGggbm8gbXVsdGliYXNlTmFtZVxuICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gY2lkLm11bHRpYmFzZU5hbWUgfHwgKGNpZC52ZXJzaW9uID09PSAwID8gJ2Jhc2U1OGJ0YycgOiAnYmFzZTMyJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGUuZy4gJ2Jhc2UzMicgb3IgZmFsc2VcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gbXVsdGliYXNlLmlzRW5jb2RlZCh2ZXJzaW9uKVxuICAgICAgaWYgKGJhc2VOYW1lKSB7XG4gICAgICAgIC8vIHZlcnNpb24gaXMgYSBDSUQgU3RyaW5nIGVuY29kZWQgd2l0aCBtdWx0aWJhc2UsIHNvIHYxXG4gICAgICAgIGNvbnN0IGNpZCA9IG11bHRpYmFzZS5kZWNvZGUodmVyc2lvbilcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gcGFyc2VJbnQoY2lkLnNsaWNlKDAsIDEpLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG4gICAgICAgIHRoaXMuY29kZWMgPSBtdWx0aWNvZGVjLmdldENvZGVjKGNpZC5zbGljZSgxKSlcbiAgICAgICAgdGhpcy5tdWx0aWhhc2ggPSBtdWx0aWNvZGVjLnJtUHJlZml4KGNpZC5zbGljZSgxKSlcbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gYmFzZU5hbWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZlcnNpb24gaXMgYSBiYXNlNThidGMgc3RyaW5nIG11bHRpaGFzaCwgc28gdjBcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMFxuICAgICAgICB0aGlzLmNvZGVjID0gJ2RhZy1wYidcbiAgICAgICAgdGhpcy5tdWx0aWhhc2ggPSBtaC5mcm9tQjU4U3RyaW5nKHZlcnNpb24pXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9ICdiYXNlNThidGMnXG4gICAgICB9XG4gICAgICBDSUQudmFsaWRhdGVDSUQodGhpcylcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RyaW5nJywgeyB2YWx1ZTogdmVyc2lvbiB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2ZXJzaW9uKSkge1xuICAgICAgY29uc3QgZmlyc3RCeXRlID0gdmVyc2lvbi5zbGljZSgwLCAxKVxuICAgICAgY29uc3QgdiA9IHBhcnNlSW50KGZpcnN0Qnl0ZS50b1N0cmluZygnaGV4JyksIDE2KVxuICAgICAgaWYgKHYgPT09IDEpIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIENJRCBidWZmZXJcbiAgICAgICAgY29uc3QgY2lkID0gdmVyc2lvblxuICAgICAgICB0aGlzLnZlcnNpb24gPSB2XG4gICAgICAgIHRoaXMuY29kZWMgPSBtdWx0aWNvZGVjLmdldENvZGVjKGNpZC5zbGljZSgxKSlcbiAgICAgICAgdGhpcy5tdWx0aWhhc2ggPSBtdWx0aWNvZGVjLnJtUHJlZml4KGNpZC5zbGljZSgxKSlcbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2UzMidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHZlcnNpb24gaXMgYSByYXcgbXVsdGloYXNoIGJ1ZmZlciwgc28gdjBcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMFxuICAgICAgICB0aGlzLmNvZGVjID0gJ2RhZy1wYidcbiAgICAgICAgdGhpcy5tdWx0aWhhc2ggPSB2ZXJzaW9uXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9ICdiYXNlNThidGMnXG4gICAgICB9XG4gICAgICBDSUQudmFsaWRhdGVDSUQodGhpcylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSwgYXNzZW1ibGUgdGhlIENJRCBmcm9tIHRoZSBwYXJhbWV0ZXJzXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb25cblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5jb2RlYyA9IGNvZGVjXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgICAqL1xuICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGloYXNoXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IG11bHRpYmFzZU5hbWUgfHwgKHZlcnNpb24gPT09IDAgPyAnYmFzZTU4YnRjJyA6ICdiYXNlMzInKVxuXG4gICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gIH1cblxuICAvKipcbiAgICogVGhlIENJRCBhcyBhIGBCdWZmZXJgXG4gICAqXG4gICAqIEByZXR1cm4ge0J1ZmZlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqXG4gICAqIEBtZW1iZXJPZiBDSURcbiAgICovXG4gIGdldCBidWZmZXIgKCkge1xuICAgIGxldCBidWZmZXIgPSB0aGlzLl9idWZmZXJcblxuICAgIGlmICghYnVmZmVyKSB7XG4gICAgICBpZiAodGhpcy52ZXJzaW9uID09PSAwKSB7XG4gICAgICAgIGJ1ZmZlciA9IHRoaXMubXVsdGloYXNoXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmVyc2lvbiA9PT0gMSkge1xuICAgICAgICBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgICBCdWZmZXIuZnJvbSgnMDEnLCAnaGV4JyksXG4gICAgICAgICAgbXVsdGljb2RlYy5nZXRDb2RlVmFyaW50KHRoaXMuY29kZWMpLFxuICAgICAgICAgIHRoaXMubXVsdGloYXNoXG4gICAgICAgIF0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHZlcnNpb24nKVxuICAgICAgfVxuXG4gICAgICAvLyBDYWNoZSB0aGlzIGJ1ZmZlciBzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgcmVjcmVhdGVkXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19idWZmZXInLCB7IHZhbHVlOiBidWZmZXIgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmVmaXggb2YgdGhlIENJRC5cbiAgICpcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBnZXQgcHJlZml4ICgpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShgMCR7dGhpcy52ZXJzaW9ufWAsICdoZXgnKSxcbiAgICAgIG11bHRpY29kZWMuZ2V0Q29kZVZhcmludCh0aGlzLmNvZGVjKSxcbiAgICAgIG1oLnByZWZpeCh0aGlzLm11bHRpaGFzaClcbiAgICBdKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gYSBDSUQgb2YgdmVyc2lvbiBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDSUR9XG4gICAqL1xuICB0b1YwICgpIHtcbiAgICBpZiAodGhpcy5jb2RlYyAhPT0gJ2RhZy1wYicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBub24gZGFnLXBiIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgY29uc3QgeyBuYW1lLCBsZW5ndGggfSA9IG1oLmRlY29kZSh0aGlzLm11bHRpaGFzaClcblxuICAgIGlmIChuYW1lICE9PSAnc2hhMi0yNTYnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IG5vbiBzaGEyLTI1NiBtdWx0aWhhc2ggQ0lEIHRvIENJRHYwJylcbiAgICB9XG5cbiAgICBpZiAobGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBub24gMzIgYnl0ZSBtdWx0aWhhc2ggQ0lEIHRvIENJRHYwJylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IF9DSUQoMCwgdGhpcy5jb2RlYywgdGhpcy5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBhIENJRCBvZiB2ZXJzaW9uIGAxYC5cbiAgICpcbiAgICogQHJldHVybnMge0NJRH1cbiAgICovXG4gIHRvVjEgKCkge1xuICAgIHJldHVybiBuZXcgX0NJRCgxLCB0aGlzLmNvZGVjLCB0aGlzLm11bHRpaGFzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgdGhlIENJRCBpbnRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2U9dGhpcy5tdWx0aWJhc2VOYW1lXSAtIEJhc2UgZW5jb2RpbmcgdG8gdXNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdG9CYXNlRW5jb2RlZFN0cmluZyAoYmFzZSA9IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgIGlmICh0aGlzLnN0cmluZyAmJiBiYXNlID09PSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZ1xuICAgIH1cbiAgICBsZXQgc3RyID0gbnVsbFxuICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDApIHtcbiAgICAgIGlmIChiYXNlICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBzdXBwb3J0ZWQgd2l0aCBDSUR2MCwgdG8gc3VwcG9ydCBkaWZmZXJlbnQgYmFzZXMsIHBsZWFzZSBtaWdyYXRlIHRoZSBpbnN0YW5jZSBkbyBDSUR2MSwgeW91IGNhbiBkbyB0aGF0IHRocm91Z2ggY2lkLnRvVjEoKScpXG4gICAgICB9XG4gICAgICBzdHIgPSBtaC50b0I1OFN0cmluZyh0aGlzLm11bHRpaGFzaClcbiAgICB9IGVsc2UgaWYgKHRoaXMudmVyc2lvbiA9PT0gMSkge1xuICAgICAgc3RyID0gbXVsdGliYXNlLmVuY29kZShiYXNlLCB0aGlzLmJ1ZmZlcikudG9TdHJpbmcoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHZlcnNpb24nKVxuICAgIH1cbiAgICBpZiAoYmFzZSA9PT0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgICAvLyBjYWNoZSB0aGUgc3RyaW5nIHZhbHVlXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0cmluZycsIHsgdmFsdWU6IHN0ciB9KVxuICAgIH1cbiAgICByZXR1cm4gc3RyXG4gIH1cblxuICB0b1N0cmluZyAoYmFzZSkge1xuICAgIHJldHVybiB0aGlzLnRvQmFzZUVuY29kZWRTdHJpbmcoYmFzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdG8gYSBwbGFpbiBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZXJpYWxpemVkQ0lEfVxuICAgKi9cbiAgdG9KU09OICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZWM6IHRoaXMuY29kZWMsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBoYXNoOiB0aGlzLm11bHRpaGFzaFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGVxdWFsaXR5IHdpdGggYW5vdGhlciBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q0lEfSBvdGhlclxuICAgKiBAcmV0dXJucyB7Ym9vbH1cbiAgICovXG4gIGVxdWFscyAob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jb2RlYyA9PT0gb3RoZXIuY29kZWMgJiZcbiAgICAgIHRoaXMudmVyc2lvbiA9PT0gb3RoZXIudmVyc2lvbiAmJlxuICAgICAgdGhpcy5tdWx0aWhhc2guZXF1YWxzKG90aGVyLm11bHRpaGFzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IGlmIHRoZSBnaXZlbiBpbnB1dCBpcyBhIHZhbGlkIENJRCBvYmplY3QuXG4gICAqIFRocm93cyBpZiBpdCBpcyBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUNJRCAob3RoZXIpIHtcbiAgICBjb25zdCBlcnJvck1zZyA9IENJRFV0aWwuY2hlY2tDSURDb21wb25lbnRzKG90aGVyKVxuICAgIGlmIChlcnJvck1zZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBfQ0lEID0gd2l0aElzKENJRCwge1xuICBjbGFzc05hbWU6ICdDSUQnLFxuICBzeW1ib2xOYW1lOiAnQGlwbGQvanMtY2lkL0NJRCdcbn0pXG5cbl9DSUQuY29kZWNzID0gY29kZWNzXG5cbm1vZHVsZS5leHBvcnRzID0gX0NJRFxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuXG5cbi8qKlxuICogUmVhZCBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheXN9IGRpcnMgJiBmaWxlc1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJlYWRkaXJyID0gZnVuY3Rpb24gKGRwYXRoLCBjYikge1xuICB2YXIgZGlycyA9IFtdLCBmaWxlcyA9IFtdXG4gIGRpcnMucHVzaChkcGF0aClcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKG51bGwsIGRpcnMsIGZpbGVzKVxuICAgIGZzLnJlYWRkaXIoZGlyc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIF9maWxlcykge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGdldHN0YXQoZGlyc1tpbmRleF0sIF9maWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG5cbiAgLyoqXG4gICAqIEdldCBzdGF0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldHN0YXQgKGRwYXRoLCBfZmlsZXMsIGNiKSB7XG4gICAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09IF9maWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgICB2YXIgZnBhdGggPSBwYXRoLmpvaW4oZHBhdGgsIF9maWxlc1tpbmRleF0pXG4gICAgICBmcy5zdGF0KGZwYXRoLCBmdW5jdGlvbiAoZXJyLCBzdGF0cykge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGRpcnMucHVzaChmcGF0aClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlcy5wdXNoKGZwYXRoKVxuICAgICAgICB9XG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSgwKSlcbiAgfVxufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIFJlbW92ZSBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1kaXJyID0gZnVuY3Rpb24gKGRwYXRoLCBjYikge1xuICByZWFkZGlycihkcGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGV4cG9ydHMucm1maWxlcyhmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGV4cG9ydHMucm1kaXJzKGRpcnMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogUmVtb3ZlIGEgbGlzdCBvZiBmaWxlc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZmlsZXMgPSBmdW5jdGlvbiAoZmlsZXMsIGNiKSB7XG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZmlsZXMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIGZzLnVubGluayhmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBsb29wKCsraW5kZXgpXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnMgPSBmdW5jdGlvbiAoZGlycywgY2IpIHtcbiAgZGlycy5zb3J0KGRlc2MpXG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZGlycy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMucm1kaXIoZGlyc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBsb29wKCsraW5kZXgpXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBTb3J0IGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYVxuICogQHBhcmFtIHtTdHJpbmd9IGJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGRlc2MoYSwgYikge1xuICBpZiAoYSA+IGIpIHJldHVybiAtMVxuICBpZiAoYSA8IGIpIHJldHVybiAgMVxuICByZXR1cm4gMFxufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIHJlYWRkaXJyID0gcmVxdWlyZSgnLi9yZWFkZGlycicpLnJlYWRkaXJyXG5cblxuLyoqXG4gKiBDb3B5IGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2UgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldCBwYXRoXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNwZGlyciA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGNiKSB7XG4gIHJlYWRkaXJyKHNwYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgZXhwb3J0cy5jcGRpcnMoc3BhdGgsIHRwYXRoLCBkaXJzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZXhwb3J0cy5jcGZpbGVzKHNwYXRoLCB0cGF0aCwgZmlsZXMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgY2IoKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIENvcHkgYSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGRpcnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJzID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgZGlycywgY2IpIHtcbiAgZGlycy5zb3J0KClcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBkaXJzW2luZGV4XSlcbiAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgZnMuZXhpc3RzKHJwYXRoLCBmdW5jdGlvbiAoZXhpc3RzKSB7XG4gICAgICBpZiAoZXhpc3RzKSByZXR1cm4gbG9vcCgrK2luZGV4KVxuICAgICAgZnMubWtkaXIocnBhdGgsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIENvcHkgYSBsaXN0IG9mIGZpbGVzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNwZmlsZXMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBmaWxlcywgY2IpIHtcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBmaWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMucmVhZEZpbGUoZmlsZXNbaW5kZXhdLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgdmFyIHJwYXRoID0gcGF0aC5yZWxhdGl2ZShzcGF0aCwgZmlsZXNbaW5kZXhdKVxuICAgICAgcnBhdGggPSBwYXRoLmpvaW4odHBhdGgsIHJwYXRoKVxuICAgICAgZnMud3JpdGVGaWxlKHJwYXRoLCBkYXRhLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJ2YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDEgLyAkcGFyc2VGbG9hdChyZXF1aXJlKCcuL19zdHJpbmctd3MnKSArICctMCcpICE9PSAtSW5maW5pdHkgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cikge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBzdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwidmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIG1zZykge1xuICBpZiAodHlwZW9mIGl0ICE9ICdudW1iZXInICYmIGNvZihpdCkgIT0gJ051bWJlcicpIHRocm93IFR5cGVFcnJvcihtc2cpO1xuICByZXR1cm4gK2l0O1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiIsIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0V2VhayA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xudmFyICRoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbnZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYSA9IFtdO1xufTtcbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5hLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGlkKys7ICAgICAgLy8gY29sbGVjdGlvbiBpZFxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgLy8gbGVhayBzdG9yZSBmb3IgdW5jYXVnaHQgZnJvemVuIG9iamVjdHNcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4zLjMuNCBXZWFrTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuNC4zLjQgV2Vha1NldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgZWxzZSBkYXRhW3RoYXQuX2ldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbn07XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXIoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGghJyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgUmVmbGVjdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3QgJiYgUmVmbGVjdC5vd25LZXlzIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnT1BOLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHJldHVybiBnZXRTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG5mdW5jdGlvbiBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gY3R4KG1hcHBlciwgdGhpc0FyZywgMykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIHNwcmVhZGFibGU7XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIHNwcmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmIChpc09iamVjdChlbGVtZW50KSkge1xuICAgICAgICBzcHJlYWRhYmxlID0gZWxlbWVudFtJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gICAgICAgIHNwcmVhZGFibGUgPSBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3ByZWFkYWJsZSAmJiBkZXB0aCA+IDApIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIHRvTGVuZ3RoKGVsZW1lbnQubGVuZ3RoKSwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDB4MWZmZmZmZmZmZmZmZmYpIHRocm93IFR5cGVFcnJvcigpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIElnbm9yZSAqLyB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cblxuICBlcnJvci5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgZXJyb3IuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcblxuICBlcnJvci50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIFVSTCA9IHVybC5VUkw7XG52YXIgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5cbi8vIENyZWF0ZSBoYW5kbGVycyB0aGF0IHBhc3MgZXZlbnRzIGZyb20gbmF0aXZlIHJlcXVlc3RzXG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5bXCJhYm9ydFwiLCBcImFib3J0ZWRcIiwgXCJjb25uZWN0XCIsIFwiZXJyb3JcIiwgXCJzb2NrZXRcIiwgXCJ0aW1lb3V0XCJdLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50SGFuZGxlcnNbZXZlbnRdID0gZnVuY3Rpb24gKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdGFibGUuZW1pdChldmVudCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gIH07XG59KTtcblxuLy8gRXJyb3IgdHlwZXMgd2l0aCBjb2Rlc1xudmFyIFJlZGlyZWN0aW9uRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX1JFRElSRUNUSU9OX0ZBSUxVUkVcIixcbiAgXCJcIlxuKTtcbnZhciBUb29NYW55UmVkaXJlY3RzRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUU1wiLFxuICBcIk1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyBleGNlZWRlZFwiXG4pO1xudmFyIE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9NQVhfQk9EWV9MRU5HVEhfRVhDRUVERURcIixcbiAgXCJSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdFwiXG4pO1xudmFyIFdyaXRlQWZ0ZXJFbmRFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFxuICBcIndyaXRlIGFmdGVyIGVuZFwiXG4pO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgdGhpcy5fc2FuaXRpemVPcHRpb25zKG9wdGlvbnMpO1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5fZW5kaW5nID0gZmFsc2U7XG4gIHRoaXMuX3JlZGlyZWN0Q291bnQgPSAwO1xuICB0aGlzLl9yZWRpcmVjdHMgPSBbXTtcbiAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggPSAwO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayBpZiBwYXNzZWRcbiAgaWYgKHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgcmVzcG9uc2VDYWxsYmFjayk7XG4gIH1cblxuICAvLyBSZWFjdCB0byByZXNwb25zZXMgb2YgbmF0aXZlIHJlcXVlc3RzXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fb25OYXRpdmVSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gIH07XG5cbiAgLy8gUGVyZm9ybSB0aGUgZmlyc3QgcmVxdWVzdFxuICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xufVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRhYmxlLnByb3RvdHlwZSk7XG5cbi8vIFdyaXRlcyBidWZmZXJlZCBkYXRhIHRvIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gV3JpdGluZyBpcyBub3QgYWxsb3dlZCBpZiBlbmQgaGFzIGJlZW4gY2FsbGVkXG4gIGlmICh0aGlzLl9lbmRpbmcpIHtcbiAgICB0aHJvdyBuZXcgV3JpdGVBZnRlckVuZEVycm9yKCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBpbnB1dCBhbmQgc2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKCEodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgKFwibGVuZ3RoXCIgaW4gZGF0YSkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbmNlKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gIH1cblxuICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICBzdGFydFRpbWVyKHRoaXMsIG1zZWNzKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qub25jZShcInNvY2tldFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzdGFydFRpbWVyKHNlbGYsIG1zZWNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMub25jZShcInJlc3BvbnNlXCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uY2UoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0VGltZXIocmVxdWVzdCwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KHJlcXVlc3QuX3RpbWVvdXQpO1xuICByZXF1ZXN0Ll90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgcmVxdWVzdC5lbWl0KFwidGltZW91dFwiKTtcbiAgfSwgbXNlY3MpO1xufVxuXG5mdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG59XG5cbi8vIFByb3h5IGFsbCBvdGhlciBwdWJsaWMgQ2xpZW50UmVxdWVzdCBtZXRob2RzXG5bXG4gIFwiYWJvcnRcIiwgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHNwZWNpZmllZCwgdXNlIHRoZSBhZ2VudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90b2NvbFxuICAvLyAoSFRUUCBhbmQgSFRUUFMgdXNlIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMpXG4gIGlmICh0aGlzLl9vcHRpb25zLmFnZW50cykge1xuICAgIHZhciBzY2hlbWUgPSBwcm90b2NvbC5zdWJzdHIoMCwgcHJvdG9jb2wubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5fb3B0aW9ucy5hZ2VudCA9IHRoaXMuX29wdGlvbnMuYWdlbnRzW3NjaGVtZV07XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5hdGl2ZSByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3QgPVxuICAgICAgICBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0KHRoaXMuX29wdGlvbnMsIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UpO1xuICB0aGlzLl9jdXJyZW50VXJsID0gdXJsLmZvcm1hdCh0aGlzLl9vcHRpb25zKTtcblxuICAvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnNcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgaW4gZXZlbnRIYW5kbGVycykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICByZXF1ZXN0Lm9uKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZC5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzO1xuICAgIChmdW5jdGlvbiB3cml0ZU5leHQoZXJyb3IpIHtcbiAgICAgIC8vIE9ubHkgd3JpdGUgaWYgdGhpcyByZXF1ZXN0IGhhcyBub3QgYmVlbiByZWRpcmVjdGVkIHlldFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChyZXF1ZXN0ID09PSBzZWxmLl9jdXJyZW50UmVxdWVzdCkge1xuICAgICAgICAvLyBSZXBvcnQgYW55IHdyaXRlIGVycm9yc1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdyaXRlIHRoZSBuZXh0IGJ1ZmZlciBpZiB0aGVyZSBhcmUgc3RpbGwgbGVmdFxuICAgICAgICBlbHNlIGlmIChpIDwgYnVmZmVycy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgYnVmZmVyID0gYnVmZmVyc1tpKytdO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKCFyZXF1ZXN0LmZpbmlzaGVkKSB7XG4gICAgICAgICAgICByZXF1ZXN0LndyaXRlKGJ1ZmZlci5kYXRhLCBidWZmZXIuZW5jb2RpbmcsIHdyaXRlTmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVuZCB0aGUgcmVxdWVzdCBpZiBgZW5kYCBoYXMgYmVlbiBjYWxsZWQgb24gdXNcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5fZW5kZWQpIHtcbiAgICAgICAgICByZXF1ZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSgpKTtcbiAgfVxufTtcblxuLy8gUHJvY2Vzc2VzIGEgcmVzcG9uc2UgZnJvbSB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Byb2Nlc3NSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAvLyBTdG9yZSB0aGUgcmVkaXJlY3RlZCByZXNwb25zZVxuICB2YXIgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gIGlmICh0aGlzLl9vcHRpb25zLnRyYWNrUmVkaXJlY3RzKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RzLnB1c2goe1xuICAgICAgdXJsOiB0aGlzLl9jdXJyZW50VXJsLFxuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSRkM3MjMxwqc2LjQ6IFRoZSAzeHggKFJlZGlyZWN0aW9uKSBjbGFzcyBvZiBzdGF0dXMgY29kZSBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBmdXJ0aGVyIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbiBieSB0aGUgdXNlciBhZ2VudCBpbiBvcmRlciB0b1xuICAvLyBmdWxmaWxsIHRoZSByZXF1ZXN0LiBJZiBhIExvY2F0aW9uIGhlYWRlciBmaWVsZCBpcyBwcm92aWRlZCxcbiAgLy8gdGhlIHVzZXIgYWdlbnQgTUFZIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3QgaXRzIHJlcXVlc3QgdG8gdGhlIFVSSVxuICAvLyByZWZlcmVuY2VkIGJ5IHRoZSBMb2NhdGlvbiBmaWVsZCB2YWx1ZSxcbiAgLy8gZXZlbiBpZiB0aGUgc3BlY2lmaWMgc3RhdHVzIGNvZGUgaXMgbm90IHVuZGVyc3Rvb2QuXG4gIHZhciBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMubG9jYXRpb247XG4gIGlmIChsb2NhdGlvbiAmJiB0aGlzLl9vcHRpb25zLmZvbGxvd1JlZGlyZWN0cyAhPT0gZmFsc2UgJiZcbiAgICAgIHN0YXR1c0NvZGUgPj0gMzAwICYmIHN0YXR1c0NvZGUgPCA0MDApIHtcbiAgICAvLyBBYm9ydCB0aGUgY3VycmVudCByZXF1ZXN0XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qub24oXCJlcnJvclwiLCBub29wKTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5hYm9ydCgpO1xuICAgIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICAgIHJlc3BvbnNlLmRlc3Ryb3koKTtcblxuICAgIC8vIFJGQzcyMzHCpzYuNDogQSBjbGllbnQgU0hPVUxEIGRldGVjdCBhbmQgaW50ZXJ2ZW5lXG4gICAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICAgIGlmICgrK3RoaXMuX3JlZGlyZWN0Q291bnQgPiB0aGlzLl9vcHRpb25zLm1heFJlZGlyZWN0cykge1xuICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IFRvb01hbnlSZWRpcmVjdHNFcnJvcigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSRkM3MjMxwqc2LjQ6IEF1dG9tYXRpYyByZWRpcmVjdGlvbiBuZWVkcyB0byBkb25lIHdpdGhcbiAgICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAgIC8vIFJGQzcyMzHCpzYuNC4y4oCTMzogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgYSB1c2VyIGFnZW50IE1BWSBjaGFuZ2VcbiAgICAvLyB0aGUgcmVxdWVzdCBtZXRob2QgZnJvbSBQT1NUIHRvIEdFVCBmb3IgdGhlIHN1YnNlcXVlbnQgcmVxdWVzdC5cbiAgICBpZiAoKHN0YXR1c0NvZGUgPT09IDMwMSB8fCBzdGF0dXNDb2RlID09PSAzMDIpICYmIHRoaXMuX29wdGlvbnMubWV0aG9kID09PSBcIlBPU1RcIiB8fFxuICAgICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgICAvLyB0aGUgc2VydmVyIGlzIHJlZGlyZWN0aW5nIHRoZSB1c2VyIGFnZW50IHRvIGEgZGlmZmVyZW50IHJlc291cmNlIFvigKZdXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBjYW4gcGVyZm9ybSBhIHJldHJpZXZhbCByZXF1ZXN0IHRhcmdldGluZyB0aGF0IFVSSVxuICAgICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAgIChzdGF0dXNDb2RlID09PSAzMDMpICYmICEvXig/OkdFVHxIRUFEKSQvLnRlc3QodGhpcy5fb3B0aW9ucy5tZXRob2QpKSB7XG4gICAgICB0aGlzLl9vcHRpb25zLm1ldGhvZCA9IFwiR0VUXCI7XG4gICAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgICAgcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eY29udGVudC0vaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgICB9XG5cbiAgICAvLyBEcm9wIHRoZSBIb3N0IGhlYWRlciwgYXMgdGhlIHJlZGlyZWN0IG1pZ2h0IGxlYWQgdG8gYSBkaWZmZXJlbnQgaG9zdFxuICAgIHZhciBwcmV2aW91c0hvc3ROYW1lID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKSB8fFxuICAgICAgdXJsLnBhcnNlKHRoaXMuX2N1cnJlbnRVcmwpLmhvc3RuYW1lO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgICB2YXIgcmVkaXJlY3RVcmwgPSB1cmwucmVzb2x2ZSh0aGlzLl9jdXJyZW50VXJsLCBsb2NhdGlvbik7XG4gICAgZGVidWcoXCJyZWRpcmVjdGluZyB0b1wiLCByZWRpcmVjdFVybCk7XG4gICAgdGhpcy5faXNSZWRpcmVjdCA9IHRydWU7XG4gICAgdmFyIHJlZGlyZWN0VXJsUGFydHMgPSB1cmwucGFyc2UocmVkaXJlY3RVcmwpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgcmVkaXJlY3RVcmxQYXJ0cyk7XG5cbiAgICAvLyBEcm9wIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpZiByZWRpcmVjdGluZyB0byBhbm90aGVyIGhvc3RcbiAgICBpZiAocmVkaXJlY3RVcmxQYXJ0cy5ob3N0bmFtZSAhPT0gcHJldmlvdXNIb3N0TmFtZSkge1xuICAgICAgcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eYXV0aG9yaXphdGlvbiQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgICB9XG5cbiAgICAvLyBFdmFsdWF0ZSB0aGUgYmVmb3JlUmVkaXJlY3QgY2FsbGJhY2tcbiAgICBpZiAodHlwZW9mIHRoaXMuX29wdGlvbnMuYmVmb3JlUmVkaXJlY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdmFyIHJlc3BvbnNlRGV0YWlscyA9IHsgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5iZWZvcmVSZWRpcmVjdC5jYWxsKG51bGwsIHRoaXMuX29wdGlvbnMsIHJlc3BvbnNlRGV0YWlscyk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3Nhbml0aXplT3B0aW9ucyh0aGlzLl9vcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgICB0cnkge1xuICAgICAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGNhdXNlKSB7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgUmVkaXJlY3Rpb25FcnJvcihcIlJlZGlyZWN0ZWQgcmVxdWVzdCBmYWlsZWQ6IFwiICsgY2F1c2UubWVzc2FnZSk7XG4gICAgICBlcnJvci5jYXVzZSA9IGNhdXNlO1xuICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBUaGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgfVxufTtcblxuLy8gV3JhcHMgdGhlIGtleS92YWx1ZSBvYmplY3Qgb2YgcHJvdG9jb2xzIHdpdGggcmVkaXJlY3QgZnVuY3Rpb25hbGl0eVxuZnVuY3Rpb24gd3JhcChwcm90b2NvbHMpIHtcbiAgLy8gRGVmYXVsdCBzZXR0aW5nc1xuICB2YXIgZXhwb3J0cyA9IHtcbiAgICBtYXhSZWRpcmVjdHM6IDIxLFxuICAgIG1heEJvZHlMZW5ndGg6IDEwICogMTAyNCAqIDEwMjQsXG4gIH07XG5cbiAgLy8gV3JhcCBlYWNoIHByb3RvY29sXG4gIHZhciBuYXRpdmVQcm90b2NvbHMgPSB7fTtcbiAgT2JqZWN0LmtleXMocHJvdG9jb2xzKS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWUpIHtcbiAgICB2YXIgcHJvdG9jb2wgPSBzY2hlbWUgKyBcIjpcIjtcbiAgICB2YXIgbmF0aXZlUHJvdG9jb2wgPSBuYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdID0gcHJvdG9jb2xzW3NjaGVtZV07XG4gICAgdmFyIHdyYXBwZWRQcm90b2NvbCA9IGV4cG9ydHNbc2NoZW1lXSA9IE9iamVjdC5jcmVhdGUobmF0aXZlUHJvdG9jb2wpO1xuXG4gICAgLy8gRXhlY3V0ZXMgYSByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gcmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIC8vIFBhcnNlIHBhcmFtZXRlcnNcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdmFyIHVybFN0ciA9IGlucHV0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlucHV0ID0gdXJsVG9PcHRpb25zKG5ldyBVUkwodXJsU3RyKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgaW5wdXQgPSB1cmwucGFyc2UodXJsU3RyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoVVJMICYmIChpbnB1dCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgICAgaW5wdXQgPSB1cmxUb09wdGlvbnMoaW5wdXQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IGlucHV0O1xuICAgICAgICBpbnB1dCA9IHsgcHJvdG9jb2w6IHByb3RvY29sIH07XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogZXhwb3J0cy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgfSwgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG5cbiAgICAgIGFzc2VydC5lcXVhbChvcHRpb25zLnByb3RvY29sLCBwcm90b2NvbCwgXCJwcm90b2NvbCBtaXNtYXRjaFwiKTtcbiAgICAgIGRlYnVnKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZXMgYSBHRVQgcmVxdWVzdCwgZm9sbG93aW5nIHJlZGlyZWN0c1xuICAgIGZ1bmN0aW9uIGdldChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciB3cmFwcGVkUmVxdWVzdCA9IHdyYXBwZWRQcm90b2NvbC5yZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICB3cmFwcGVkUmVxdWVzdC5lbmQoKTtcbiAgICAgIHJldHVybiB3cmFwcGVkUmVxdWVzdDtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgdGhlIHByb3BlcnRpZXMgb24gdGhlIHdyYXBwZWQgcHJvdG9jb2xcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cmFwcGVkUHJvdG9jb2wsIHtcbiAgICAgIHJlcXVlc3Q6IHsgdmFsdWU6IHJlcXVlc3QsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICAgIGdldDogeyB2YWx1ZTogZ2V0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZXhwb3J0cztcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7IC8qIGVtcHR5ICovIH1cblxuLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL3VybC5qc1xuZnVuY3Rpb24gdXJsVG9PcHRpb25zKHVybE9iamVjdCkge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBwcm90b2NvbDogdXJsT2JqZWN0LnByb3RvY29sLFxuICAgIGhvc3RuYW1lOiB1cmxPYmplY3QuaG9zdG5hbWUuc3RhcnRzV2l0aChcIltcIikgP1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHVybE9iamVjdC5ob3N0bmFtZS5zbGljZSgxLCAtMSkgOlxuICAgICAgdXJsT2JqZWN0Lmhvc3RuYW1lLFxuICAgIGhhc2g6IHVybE9iamVjdC5oYXNoLFxuICAgIHNlYXJjaDogdXJsT2JqZWN0LnNlYXJjaCxcbiAgICBwYXRobmFtZTogdXJsT2JqZWN0LnBhdGhuYW1lLFxuICAgIHBhdGg6IHVybE9iamVjdC5wYXRobmFtZSArIHVybE9iamVjdC5zZWFyY2gsXG4gICAgaHJlZjogdXJsT2JqZWN0LmhyZWYsXG4gIH07XG4gIGlmICh1cmxPYmplY3QucG9ydCAhPT0gXCJcIikge1xuICAgIG9wdGlvbnMucG9ydCA9IE51bWJlcih1cmxPYmplY3QucG9ydCk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdGNoaW5nSGVhZGVycyhyZWdleCwgaGVhZGVycykge1xuICB2YXIgbGFzdFZhbHVlO1xuICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgIGlmIChyZWdleC50ZXN0KGhlYWRlcikpIHtcbiAgICAgIGxhc3RWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiBsYXN0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBkZWZhdWx0TWVzc2FnZSkge1xuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCBkZWZhdWx0TWVzc2FnZTtcbiAgfVxuICBDdXN0b21FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3VzdG9tRXJyb3I7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5uYW1lID0gXCJFcnJvciBbXCIgKyBjb2RlICsgXCJdXCI7XG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZTtcbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXAoeyBodHRwOiBodHRwLCBodHRwczogaHR0cHMgfSk7XG5tb2R1bGUuZXhwb3J0cy53cmFwID0gd3JhcDtcbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cblx0XHRmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7XG5cdFx0XHQvLyBEaXNhYmxlZD9cblx0XHRcdGlmICghZGVidWcuZW5hYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlbGYgPSBkZWJ1ZztcblxuXHRcdFx0Ly8gU2V0IGBkaWZmYCB0aW1lc3RhbXBcblx0XHRcdGNvbnN0IGN1cnIgPSBOdW1iZXIobmV3IERhdGUoKSk7XG5cdFx0XHRjb25zdCBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG5cdFx0XHRzZWxmLmRpZmYgPSBtcztcblx0XHRcdHNlbGYucHJldiA9IHByZXZUaW1lO1xuXHRcdFx0c2VsZi5jdXJyID0gY3Vycjtcblx0XHRcdHByZXZUaW1lID0gY3VycjtcblxuXHRcdFx0YXJnc1swXSA9IGNyZWF0ZURlYnVnLmNvZXJjZShhcmdzWzBdKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhcmdzWzBdICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHQvLyBBbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuXHRcdFx0XHRhcmdzLnVuc2hpZnQoJyVPJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0YXJnc1swXSA9IGFyZ3NbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csIChtYXRjaCwgZm9ybWF0KSA9PiB7XG5cdFx0XHRcdC8vIElmIHdlIGVuY291bnRlciBhbiBlc2NhcGVkICUgdGhlbiBkb24ndCBpbmNyZWFzZSB0aGUgYXJyYXkgaW5kZXhcblx0XHRcdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuICclJztcblx0XHRcdFx0fVxuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cdFx0XHRcdGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gYXJnc1tpbmRleF07XG5cdFx0XHRcdFx0bWF0Y2ggPSBmb3JtYXR0ZXIuY2FsbChzZWxmLCB2YWwpO1xuXG5cdFx0XHRcdFx0Ly8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXHRcdFx0XHRcdGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdFx0XHRpbmRleC0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBBcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuXHRcdFx0Y3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG5cdFx0XHRjb25zdCBsb2dGbiA9IHNlbGYubG9nIHx8IGNyZWF0ZURlYnVnLmxvZztcblx0XHRcdGxvZ0ZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXHRcdH1cblxuXHRcdGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblx0XHRkZWJ1Zy51c2VDb2xvcnMgPSBjcmVhdGVEZWJ1Zy51c2VDb2xvcnMoKTtcblx0XHRkZWJ1Zy5jb2xvciA9IGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG5cdFx0ZGVidWcuZXh0ZW5kID0gZXh0ZW5kO1xuXHRcdGRlYnVnLmRlc3Ryb3kgPSBjcmVhdGVEZWJ1Zy5kZXN0cm95OyAvLyBYWFggVGVtcG9yYXJ5LiBXaWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWJ1ZywgJ2VuYWJsZWQnLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdGdldDogKCkgPT4gZW5hYmxlT3ZlcnJpZGUgPT09IG51bGwgPyBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSkgOiBlbmFibGVPdmVycmlkZSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcblx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmICghc3BsaXRbaV0pIHtcblx0XHRcdFx0Ly8gaWdub3JlIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuXG5cdFx0XHRpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnN1YnN0cigxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3NcIik7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdkYXRhJ107XG4gIHZhciBtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyA9IFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5JywgJ3BhcmFtcyddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndHJhbnNmb3JtUmVxdWVzdCcsICd0cmFuc2Zvcm1SZXNwb25zZScsICdwYXJhbXNTZXJpYWxpemVyJyxcbiAgICAndGltZW91dCcsICd0aW1lb3V0TWVzc2FnZScsICd3aXRoQ3JlZGVudGlhbHMnLCAnYWRhcHRlcicsICdyZXNwb25zZVR5cGUnLCAneHNyZkNvb2tpZU5hbWUnLFxuICAgICd4c3JmSGVhZGVyTmFtZScsICdvblVwbG9hZFByb2dyZXNzJywgJ29uRG93bmxvYWRQcm9ncmVzcycsICdkZWNvbXByZXNzJyxcbiAgICAnbWF4Q29udGVudExlbmd0aCcsICdtYXhCb2R5TGVuZ3RoJywgJ21heFJlZGlyZWN0cycsICd0cmFuc3BvcnQnLCAnaHR0cEFnZW50JyxcbiAgICAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsICdzb2NrZXRQYXRoJywgJ3Jlc3BvbnNlRW5jb2RpbmcnXG4gIF07XG4gIHZhciBkaXJlY3RNZXJnZUtleXMgPSBbJ3ZhbGlkYXRlU3RhdHVzJ107XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB1dGlscy5mb3JFYWNoKHZhbHVlRnJvbUNvbmZpZzJLZXlzLCBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgdXRpbHMuZm9yRWFjaChkZWZhdWx0VG9Db25maWcyS2V5cywgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGlyZWN0TWVyZ2VLZXlzLCBmdW5jdGlvbiBtZXJnZShwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpXG4gICAgLmNvbmNhdChkaXJlY3RNZXJnZUtleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcxKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpXG4gICAgLmZpbHRlcihmdW5jdGlvbiBmaWx0ZXJBeGlvc0tleXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXhpb3NLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChvdGhlcktleXMsIG1lcmdlRGVlcFByb3BlcnRpZXMpO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iLCIndXNlIHN0cmljdCdcbi8vIGJhc2UteCBlbmNvZGluZyAvIGRlY29kaW5nXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTggYmFzZS14IGNvbnRyaWJ1dG9yc1xuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTggVGhlIEJpdGNvaW4gQ29yZSBkZXZlbG9wZXJzIChiYXNlNTguY3BwKVxuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBzb2Z0d2FyZSBsaWNlbnNlLCBzZWUgdGhlIGFjY29tcGFueWluZ1xuLy8gZmlsZSBMSUNFTlNFIG9yIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwLlxuLy8gQHRzLWlnbm9yZVxudmFyIF9CdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuZnVuY3Rpb24gYmFzZSAoQUxQSEFCRVQpIHtcbiAgaWYgKEFMUEhBQkVULmxlbmd0aCA+PSAyNTUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxwaGFiZXQgdG9vIGxvbmcnKSB9XG4gIHZhciBCQVNFX01BUCA9IG5ldyBVaW50OEFycmF5KDI1NilcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBCQVNFX01BUC5sZW5ndGg7IGorKykge1xuICAgIEJBU0VfTUFQW2pdID0gMjU1XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBBTFBIQUJFVC5sZW5ndGg7IGkrKykge1xuICAgIHZhciB4ID0gQUxQSEFCRVQuY2hhckF0KGkpXG4gICAgdmFyIHhjID0geC5jaGFyQ29kZUF0KDApXG4gICAgaWYgKEJBU0VfTUFQW3hjXSAhPT0gMjU1KSB7IHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgYW1iaWd1b3VzJykgfVxuICAgIEJBU0VfTUFQW3hjXSA9IGlcbiAgfVxuICB2YXIgQkFTRSA9IEFMUEhBQkVULmxlbmd0aFxuICB2YXIgTEVBREVSID0gQUxQSEFCRVQuY2hhckF0KDApXG4gIHZhciBGQUNUT1IgPSBNYXRoLmxvZyhCQVNFKSAvIE1hdGgubG9nKDI1NikgLy8gbG9nKEJBU0UpIC8gbG9nKDI1NiksIHJvdW5kZWQgdXBcbiAgdmFyIGlGQUNUT1IgPSBNYXRoLmxvZygyNTYpIC8gTWF0aC5sb2coQkFTRSkgLy8gbG9nKDI1NikgLyBsb2coQkFTRSksIHJvdW5kZWQgdXBcbiAgZnVuY3Rpb24gZW5jb2RlIChzb3VyY2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpIHx8IHNvdXJjZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsgc291cmNlID0gX0J1ZmZlci5mcm9tKHNvdXJjZSkgfVxuICAgIGlmICghX0J1ZmZlci5pc0J1ZmZlcihzb3VyY2UpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEJ1ZmZlcicpIH1cbiAgICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJycgfVxuICAgICAgICAvLyBTa2lwICYgY291bnQgbGVhZGluZyB6ZXJvZXMuXG4gICAgdmFyIHplcm9lcyA9IDBcbiAgICB2YXIgbGVuZ3RoID0gMFxuICAgIHZhciBwYmVnaW4gPSAwXG4gICAgdmFyIHBlbmQgPSBzb3VyY2UubGVuZ3RoXG4gICAgd2hpbGUgKHBiZWdpbiAhPT0gcGVuZCAmJiBzb3VyY2VbcGJlZ2luXSA9PT0gMCkge1xuICAgICAgcGJlZ2luKytcbiAgICAgIHplcm9lcysrXG4gICAgfVxuICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW4gYmlnLWVuZGlhbiBiYXNlNTggcmVwcmVzZW50YXRpb24uXG4gICAgdmFyIHNpemUgPSAoKHBlbmQgLSBwYmVnaW4pICogaUZBQ1RPUiArIDEpID4+PiAwXG4gICAgdmFyIGI1OCA9IG5ldyBVaW50OEFycmF5KHNpemUpXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ5dGVzLlxuICAgIHdoaWxlIChwYmVnaW4gIT09IHBlbmQpIHtcbiAgICAgIHZhciBjYXJyeSA9IHNvdXJjZVtwYmVnaW5dXG4gICAgICAgICAgICAvLyBBcHBseSBcImI1OCA9IGI1OCAqIDI1NiArIGNoXCIuXG4gICAgICB2YXIgaSA9IDBcbiAgICAgIGZvciAodmFyIGl0MSA9IHNpemUgLSAxOyAoY2FycnkgIT09IDAgfHwgaSA8IGxlbmd0aCkgJiYgKGl0MSAhPT0gLTEpOyBpdDEtLSwgaSsrKSB7XG4gICAgICAgIGNhcnJ5ICs9ICgyNTYgKiBiNThbaXQxXSkgPj4+IDBcbiAgICAgICAgYjU4W2l0MV0gPSAoY2FycnkgJSBCQVNFKSA+Pj4gMFxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIEJBU0UpID4+PiAwXG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdOb24temVybyBjYXJyeScpIH1cbiAgICAgIGxlbmd0aCA9IGlcbiAgICAgIHBiZWdpbisrXG4gICAgfVxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzIGluIGJhc2U1OCByZXN1bHQuXG4gICAgdmFyIGl0MiA9IHNpemUgLSBsZW5ndGhcbiAgICB3aGlsZSAoaXQyICE9PSBzaXplICYmIGI1OFtpdDJdID09PSAwKSB7XG4gICAgICBpdDIrK1xuICAgIH1cbiAgICAgICAgLy8gVHJhbnNsYXRlIHRoZSByZXN1bHQgaW50byBhIHN0cmluZy5cbiAgICB2YXIgc3RyID0gTEVBREVSLnJlcGVhdCh6ZXJvZXMpXG4gICAgZm9yICg7IGl0MiA8IHNpemU7ICsraXQyKSB7IHN0ciArPSBBTFBIQUJFVC5jaGFyQXQoYjU4W2l0Ml0pIH1cbiAgICByZXR1cm4gc3RyXG4gIH1cbiAgZnVuY3Rpb24gZGVjb2RlVW5zYWZlIChzb3VyY2UpIHtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgU3RyaW5nJykgfVxuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7IHJldHVybiBfQnVmZmVyLmFsbG9jKDApIH1cbiAgICB2YXIgcHN6ID0gMFxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2VzLlxuICAgIGlmIChzb3VyY2VbcHN6XSA9PT0gJyAnKSB7IHJldHVybiB9XG4gICAgICAgIC8vIFNraXAgYW5kIGNvdW50IGxlYWRpbmcgJzEncy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgd2hpbGUgKHNvdXJjZVtwc3pdID09PSBMRUFERVIpIHtcbiAgICAgIHplcm9lcysrXG4gICAgICBwc3orK1xuICAgIH1cbiAgICAgICAgLy8gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGluIGJpZy1lbmRpYW4gYmFzZTI1NiByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgoKHNvdXJjZS5sZW5ndGggLSBwc3opICogRkFDVE9SKSArIDEpID4+PiAwIC8vIGxvZyg1OCkgLyBsb2coMjU2KSwgcm91bmRlZCB1cC5cbiAgICB2YXIgYjI1NiA9IG5ldyBVaW50OEFycmF5KHNpemUpXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGNoYXJhY3RlcnMuXG4gICAgd2hpbGUgKHNvdXJjZVtwc3pdKSB7XG4gICAgICAgICAgICAvLyBEZWNvZGUgY2hhcmFjdGVyXG4gICAgICB2YXIgY2FycnkgPSBCQVNFX01BUFtzb3VyY2UuY2hhckNvZGVBdChwc3opXVxuICAgICAgICAgICAgLy8gSW52YWxpZCBjaGFyYWN0ZXJcbiAgICAgIGlmIChjYXJyeSA9PT0gMjU1KSB7IHJldHVybiB9XG4gICAgICB2YXIgaSA9IDBcbiAgICAgIGZvciAodmFyIGl0MyA9IHNpemUgLSAxOyAoY2FycnkgIT09IDAgfHwgaSA8IGxlbmd0aCkgJiYgKGl0MyAhPT0gLTEpOyBpdDMtLSwgaSsrKSB7XG4gICAgICAgIGNhcnJ5ICs9IChCQVNFICogYjI1NltpdDNdKSA+Pj4gMFxuICAgICAgICBiMjU2W2l0M10gPSAoY2FycnkgJSAyNTYpID4+PiAwXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gMjU2KSA+Pj4gMFxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7IHRocm93IG5ldyBFcnJvcignTm9uLXplcm8gY2FycnknKSB9XG4gICAgICBsZW5ndGggPSBpXG4gICAgICBwc3orK1xuICAgIH1cbiAgICAgICAgLy8gU2tpcCB0cmFpbGluZyBzcGFjZXMuXG4gICAgaWYgKHNvdXJjZVtwc3pdID09PSAnICcpIHsgcmV0dXJuIH1cbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lcyBpbiBiMjU2LlxuICAgIHZhciBpdDQgPSBzaXplIC0gbGVuZ3RoXG4gICAgd2hpbGUgKGl0NCAhPT0gc2l6ZSAmJiBiMjU2W2l0NF0gPT09IDApIHtcbiAgICAgIGl0NCsrXG4gICAgfVxuICAgIHZhciB2Y2ggPSBfQnVmZmVyLmFsbG9jVW5zYWZlKHplcm9lcyArIChzaXplIC0gaXQ0KSlcbiAgICB2Y2guZmlsbCgweDAwLCAwLCB6ZXJvZXMpXG4gICAgdmFyIGogPSB6ZXJvZXNcbiAgICB3aGlsZSAoaXQ0ICE9PSBzaXplKSB7XG4gICAgICB2Y2hbaisrXSA9IGIyNTZbaXQ0KytdXG4gICAgfVxuICAgIHJldHVybiB2Y2hcbiAgfVxuICBmdW5jdGlvbiBkZWNvZGUgKHN0cmluZykge1xuICAgIHZhciBidWZmZXIgPSBkZWNvZGVVbnNhZmUoc3RyaW5nKVxuICAgIGlmIChidWZmZXIpIHsgcmV0dXJuIGJ1ZmZlciB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb24tYmFzZScgKyBCQVNFICsgJyBjaGFyYWN0ZXInKVxuICB9XG4gIHJldHVybiB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlVW5zYWZlOiBkZWNvZGVVbnNhZmUsXG4gICAgZGVjb2RlOiBkZWNvZGVcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBiYXNlXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJidWZmZXJcIik7IiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW211bHRpYmFzZV0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWJhc2UpIHNwZWNpZmljYXRpb24uXG4gKiBAbW9kdWxlIE11bHRpYmFzZVxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBtdWx0aWJhc2VcbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlXG5leHBvcnRzLmRlY29kZSA9IGRlY29kZVxuZXhwb3J0cy5pc0VuY29kZWQgPSBpc0VuY29kZWRcbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5uYW1lcykpXG5leHBvcnRzLmNvZGVzID0gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhjb25zdGFudHMuY29kZXMpKVxuXG5jb25zdCBlcnJOb3RTdXBwb3J0ZWQgPSBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGVuY29kaW5nJylcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgYnVmZmVyIHdpdGggdGhlIG11bHRpYmFzZSB2YXJpbnQrY29kZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgcHJlZml4ZWQgd2l0aCBtdWx0aWJhc2UuXG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5mdW5jdGlvbiBtdWx0aWJhc2UgKG5hbWVPckNvZGUsIGJ1Zikge1xuICBpZiAoIWJ1Zikge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgYW4gZW5jb2RlZCBidWZmZXInKVxuICB9XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IGNvZGVCdWYgPSBCdWZmZXIuZnJvbShiYXNlLmNvZGUpXG5cbiAgY29uc3QgbmFtZSA9IGJhc2UubmFtZVxuICB2YWxpZEVuY29kZShuYW1lLCBidWYpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtjb2RlQnVmLCBidWZdKVxufVxuXG4vKipcbiAqIEVuY29kZSBkYXRhIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlIGFuZCBhZGQgdGhlIG11bHRpYmFzZSBwcmVmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBuYW1lT3JDb2RlIC0gVGhlIG11bHRpYmFzZSBuYW1lIG9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZiAtIFRoZSBkYXRhIHRvIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICogQG1lbWJlcm9mIE11bHRpYmFzZVxuICovXG5mdW5jdGlvbiBlbmNvZGUgKG5hbWVPckNvZGUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lT3JDb2RlKVxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG5cbiAgcmV0dXJuIG11bHRpYmFzZShuYW1lLCBCdWZmZXIuZnJvbShiYXNlLmVuY29kZShidWYpKSlcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGJ1ZmZlciBvciBzdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSBoZWFkZXIsIGRlY29kZXMgaXQgYW5kXG4gKiByZXR1cm5zIHRoZSBkZWNvZGVkIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gYnVmT3JTdHJpbmdcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKlxuICovXG5mdW5jdGlvbiBkZWNvZGUgKGJ1Zk9yU3RyaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JTdHJpbmcpKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy50b1N0cmluZygpXG4gIH1cblxuICBjb25zdCBjb2RlID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDAsIDEpXG4gIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDEsIGJ1Zk9yU3RyaW5nLmxlbmd0aClcblxuICBpZiAodHlwZW9mIGJ1Zk9yU3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgIGJ1Zk9yU3RyaW5nID0gQnVmZmVyLmZyb20oYnVmT3JTdHJpbmcpXG4gIH1cblxuICBjb25zdCBiYXNlID0gZ2V0QmFzZShjb2RlKVxuICByZXR1cm4gQnVmZmVyLmZyb20oYmFzZS5kZWNvZGUoYnVmT3JTdHJpbmcudG9TdHJpbmcoKSkpXG59XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIGRhdGEgbXVsdGliYXNlIGVuY29kZWQ/XG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGlzRW5jb2RlZCAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIEVuc3VyZSBidWZPclN0cmluZyBpcyBhIHN0cmluZ1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJ1Zk9yU3RyaW5nKSAhPT0gJ1tvYmplY3QgU3RyaW5nXScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlID0gZ2V0QmFzZShjb2RlKVxuICAgIHJldHVybiBiYXNlLm5hbWVcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkRW5jb2RlIChuYW1lLCBidWYpIHtcbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZSlcbiAgYmFzZS5kZWNvZGUoYnVmLnRvU3RyaW5nKCkpXG59XG5cbmZ1bmN0aW9uIGdldEJhc2UgKG5hbWVPckNvZGUpIHtcbiAgbGV0IGJhc2VcblxuICBpZiAoY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5uYW1lc1tuYW1lT3JDb2RlXVxuICB9IGVsc2UgaWYgKGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXSkge1xuICAgIGJhc2UgPSBjb25zdGFudHMuY29kZXNbbmFtZU9yQ29kZV1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnJOb3RTdXBwb3J0ZWRcbiAgfVxuXG4gIGlmICghYmFzZS5pc0ltcGxlbWVudGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgJyArIG5hbWVPckNvZGUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKVxuICB9XG5cbiAgcmV0dXJuIGJhc2Vcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb2RlYyA9IHJlcXVpcmUoJy4vY29kZWMnKVxuY29uc3QgcHJvdG9jb2xzID0gcmVxdWlyZSgnLi9wcm90b2NvbHMtdGFibGUnKVxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuY29uc3Qgd2l0aElzID0gcmVxdWlyZSgnY2xhc3MtaXMnKVxuY29uc3QgaW5zcGVjdCA9IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJylcblxuLyoqXG4gKiBDcmVhdGVzIGEgW211bHRpYWRkcl0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIpIGZyb21cbiAqIGEgQnVmZmVyLCBTdHJpbmcgb3IgYW5vdGhlciBNdWx0aWFkZHIgaW5zdGFuY2VcbiAqIHB1YmxpYyBrZXkuXG4gKiBAY2xhc3MgTXVsdGlhZGRyXG4gKiBAcGFyYW0geyhTdHJpbmd8QnVmZmVyfE11bHRpYWRkcil9IGFkZHIgLSBJZiBTdHJpbmcgb3IgQnVmZmVyLCBuZWVkcyB0byBhZGhlcmVcbiAqIHRvIHRoZSBhZGRyZXNzIGZvcm1hdCBvZiBhIFttdWx0aWFkZHJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyI3N0cmluZy1mb3JtYXQpXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqL1xuY29uc3QgTXVsdGlhZGRyID0gd2l0aElzLnByb3RvKGZ1bmN0aW9uIChhZGRyKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBNdWx0aWFkZHIpKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aWFkZHIoYWRkcilcbiAgfVxuXG4gIC8vIGRlZmF1bHRcbiAgaWYgKGFkZHIgPT0gbnVsbCkge1xuICAgIGFkZHIgPSAnJ1xuICB9XG5cbiAgaWYgKGFkZHIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QnVmZmVyfSAtIFRoZSByYXcgYnl0ZXMgcmVwcmVzZW50aW5nIHRoaXMgbXVsdGlhZGRyZXNzXG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tQnVmZmVyKGFkZHIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnIHx8IGFkZHIgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICBpZiAoYWRkci5sZW5ndGggPiAwICYmIGFkZHIuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGlhZGRyIFwiJHthZGRyfVwiIG11c3Qgc3RhcnQgd2l0aCBhIFwiL1wiYClcbiAgICB9XG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tU3RyaW5nKGFkZHIpXG4gIH0gZWxzZSBpZiAoYWRkci5idWZmZXIgJiYgYWRkci5wcm90b3MgJiYgYWRkci5wcm90b0NvZGVzKSB7IC8vIE11bHRpYWRkclxuICAgIHRoaXMuYnVmZmVyID0gY29kZWMuZnJvbUJ1ZmZlcihhZGRyLmJ1ZmZlcikgLy8gdmFsaWRhdGUgKyBjb3B5IGJ1ZmZlclxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignYWRkciBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIG9yIGFub3RoZXIgTXVsdGlhZGRyJylcbiAgfVxufSwgeyBjbGFzc05hbWU6ICdNdWx0aWFkZHInLCBzeW1ib2xOYW1lOiAnQG11bHRpZm9ybWF0cy9qcy1tdWx0aWFkZHIvbXVsdGlhZGRyJyB9KVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgU3RyaW5nXG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICByZXR1cm4gY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBKU09OIGVuY29kZWQgb2JqZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBKU09OLnN0cmluZ2lmeShNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9KU09OID0gTXVsdGlhZGRyLnByb3RvdHlwZS50b1N0cmluZ1xuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgY29udmluaWVudCBvcHRpb25zIG9iamVjdCB0byBiZSB1c2VkIHdpdGggbmV0LmNyZWF0ZUNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyB7e2ZhbWlseTogU3RyaW5nLCBob3N0OiBTdHJpbmcsIHRyYW5zcG9ydDogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS50b09wdGlvbnMoKVxuICogLy8geyBmYW1pbHk6ICdpcHY0JywgaG9zdDogJzEyNy4wLjAuMScsIHRyYW5zcG9ydDogJ3RjcCcsIHBvcnQ6IDQwMDEgfVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnRvT3B0aW9ucyA9IGZ1bmN0aW9uIHRvT3B0aW9ucyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7fVxuICBjb25zdCBwYXJzZWQgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJy8nKVxuICBvcHRzLmZhbWlseSA9IHBhcnNlZFsxXSA9PT0gJ2lwNCcgPyAnaXB2NCcgOiAnaXB2NidcbiAgb3B0cy5ob3N0ID0gcGFyc2VkWzJdXG4gIG9wdHMudHJhbnNwb3J0ID0gcGFyc2VkWzNdXG4gIG9wdHMucG9ydCA9IHBhcnNlSW50KHBhcnNlZFs0XSlcbiAgcmV0dXJuIG9wdHNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqIEZvciBwb3N0IE5vZGUuanMgdjEwLjAuMC5cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZGVwcmVjYXRpb25zLmh0bWwjZGVwcmVjYXRpb25zX2RlcDAwNzlfY3VzdG9tX2luc3BlY3Rpb25fZnVuY3Rpb25fb25fb2JqZWN0c192aWFfaW5zcGVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpKVxuICogLy8gJzxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPidcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZVtpbnNwZWN0XSA9IGZ1bmN0aW9uIGluc3BlY3RDdXN0b20gKCkge1xuICByZXR1cm4gJzxNdWx0aWFkZHIgJyArXG4gICAgdGhpcy5idWZmZXIudG9TdHJpbmcoJ2hleCcpICsgJyAtICcgK1xuICAgIGNvZGVjLmJ1ZmZlclRvU3RyaW5nKHRoaXMuYnVmZmVyKSArICc+J1xufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogRmFsbGJhY2sgZm9yIHByZSBOb2RlLmpzIHYxMC4wLjAuXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL2RlcHJlY2F0aW9ucy5odG1sI2RlcHJlY2F0aW9uc19kZXAwMDc5X2N1c3RvbV9pbnNwZWN0aW9uX2Z1bmN0aW9uX29uX29iamVjdHNfdmlhX2luc3BlY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5pbnNwZWN0KClcbiAqIC8vICc8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT4nXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICByZXR1cm4gJzxNdWx0aWFkZHIgJyArXG4gICAgdGhpcy5idWZmZXIudG9TdHJpbmcoJ2hleCcpICsgJyAtICcgK1xuICAgIGNvZGVjLmJ1ZmZlclRvU3RyaW5nKHRoaXMuYnVmZmVyKSArICc+J1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHByb3RvY29scyB0aGUgTXVsdGlhZGRyIGlzIGRlZmluZWQgd2l0aCwgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cywgaW5cbiAqIGxlZnQtdG8tcmlnaHQgb3JkZXIuIEVhY2ggb2JqZWN0IGNvbnRhaW5zIHRoZSBwcm90b2NvbCBjb2RlLCBwcm90b2NvbCBuYW1lLFxuICogYW5kIHRoZSBzaXplIG9mIGl0cyBhZGRyZXNzIHNwYWNlIGluIGJpdHMuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48T2JqZWN0Pn0gcHJvdG9jb2xzIC0gQWxsIHRoZSBwcm90b2NvbHMgdGhlIGFkZHJlc3MgaXMgY29tcG9zZWQgb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHByb3RvY29sc1tdLmNvZGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHByb3RvY29sc1tdLnNpemVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHByb3RvY29sc1tdLm5hbWVcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9zKClcbiAqIC8vIFsgeyBjb2RlOiA0LCBzaXplOiAzMiwgbmFtZTogJ2lwNCcgfSxcbiAqIC8vICAgeyBjb2RlOiA2LCBzaXplOiAxNiwgbmFtZTogJ3RjcCcgfSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUucHJvdG9zID0gZnVuY3Rpb24gcHJvdG9zICgpIHtcbiAgcmV0dXJuIHRoaXMucHJvdG9Db2RlcygpLm1hcChjb2RlID0+IE9iamVjdC5hc3NpZ24oe30sIHByb3RvY29scyhjb2RlKSkpXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29kZXMgb2YgdGhlIHByb3RvY29scyBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICogW1NlZSBsaXN0IG9mIHByb3RvY29sc10oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdilcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPE51bWJlcj59IHByb3RvY29sIGNvZGVzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnByb3RvQ29kZXMoKVxuICogLy8gWyA0LCA2IF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b0NvZGVzID0gZnVuY3Rpb24gcHJvdG9Db2RlcyAoKSB7XG4gIGNvbnN0IGNvZGVzID0gW11cbiAgY29uc3QgYnVmID0gdGhpcy5idWZmZXJcbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZiwgaSlcbiAgICBjb25zdCBuID0gdmFyaW50LmRlY29kZS5ieXRlc1xuXG4gICAgY29uc3QgcCA9IHByb3RvY29scyhjb2RlKVxuICAgIGNvbnN0IHNpemUgPSBjb2RlYy5zaXplRm9yQWRkcihwLCBidWYuc2xpY2UoaSArIG4pKVxuXG4gICAgaSArPSAoc2l6ZSArIG4pXG4gICAgY29kZXMucHVzaChjb2RlKVxuICB9XG5cbiAgcmV0dXJuIGNvZGVzXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHByb3RvY29scyBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICogW1NlZSBsaXN0IG9mIHByb3RvY29sc10oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdilcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48U3RyaW5nPn0gcHJvdG9jb2wgbmFtZXNcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9OYW1lcygpXG4gKiAvLyBbICdpcDQnLCAndGNwJyBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUucHJvdG9OYW1lcyA9IGZ1bmN0aW9uIHByb3RvTmFtZXMgKCkge1xuICByZXR1cm4gdGhpcy5wcm90b3MoKS5tYXAocHJvdG8gPT4gcHJvdG8ubmFtZSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2YgcGFydHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48QXJyYXk+fSB0dXBsZXNcbiAqIEByZXR1cm4ge051bWJlcn0gdHVwbGVzW10uMCBjb2RlIG9mIHByb3RvY29sXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHR1cGxlc1tdLjEgY29udGVudHMgb2YgYWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcihcIi9pcDQvMTI3LjAuMC4xL3RjcC80MDAxXCIpLnR1cGxlcygpXG4gKiAvLyBbIFsgNCwgPEJ1ZmZlciA3ZiAwMCAwMCAwMT4gXSwgWyA2LCA8QnVmZmVyIDBmIGExPiBdIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50dXBsZXMgPSBmdW5jdGlvbiB0dXBsZXMgKCkge1xuICByZXR1cm4gY29kZWMuYnVmZmVyVG9UdXBsZXModGhpcy5idWZmZXIpXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHR1cGxlIG9mIHN0cmluZy9udW1iZXIgcGFydHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48QXJyYXk+fSB0dXBsZXNcbiAqIEByZXR1cm4ge051bWJlcn0gdHVwbGVzW10uMCBjb2RlIG9mIHByb3RvY29sXG4gKiBAcmV0dXJuIHsoU3RyaW5nfE51bWJlcil9IHR1cGxlc1tdLjEgY29udGVudHMgb2YgYWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcihcIi9pcDQvMTI3LjAuMC4xL3RjcC80MDAxXCIpLnN0cmluZ1R1cGxlcygpXG4gKiAvLyBbIFsgNCwgJzEyNy4wLjAuMScgXSwgWyA2LCA0MDAxIF0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnN0cmluZ1R1cGxlcyA9IGZ1bmN0aW9uIHN0cmluZ1R1cGxlcyAoKSB7XG4gIGNvbnN0IHQgPSBjb2RlYy5idWZmZXJUb1R1cGxlcyh0aGlzLmJ1ZmZlcilcbiAgcmV0dXJuIGNvZGVjLnR1cGxlc1RvU3RyaW5nVHVwbGVzKHQpXG59XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGEgTXVsdGlhZGRyIGluIGFub3RoZXIgTXVsdGlhZGRyXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHIgLSBNdWx0aWFkZHIgdG8gYWRkIGludG8gdGhpcyBNdWx0aWFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODA+XG4gKlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBjb25zdCBtaDMgPSBtaDEuZW5jYXBzdWxhdGUobWgyKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4MDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIG1oMy50b1N0cmluZygpXG4gKiAvLyAnL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZW5jYXBzdWxhdGUgPSBmdW5jdGlvbiBlbmNhcHN1bGF0ZSAoYWRkcikge1xuICBhZGRyID0gTXVsdGlhZGRyKGFkZHIpXG4gIHJldHVybiBNdWx0aWFkZHIodGhpcy50b1N0cmluZygpICsgYWRkci50b1N0cmluZygpKVxufVxuXG4vKipcbiAqIERlY2Fwc3VsYXRlcyBhIE11bHRpYWRkciBmcm9tIGFub3RoZXIgTXVsdGlhZGRyXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHIgLSBNdWx0aWFkZHIgdG8gcmVtb3ZlIGZyb20gdGhpcyBNdWx0aWFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODA+XG4gKlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBjb25zdCBtaDMgPSBtaDEuZW5jYXBzdWxhdGUobWgyKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4MDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIG1oMy5kZWNhcHN1bGF0ZShtaDIpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzguOC44LjgvdGNwLzEwODAnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZGVjYXBzdWxhdGUgPSBmdW5jdGlvbiBkZWNhcHN1bGF0ZSAoYWRkcikge1xuICBhZGRyID0gYWRkci50b1N0cmluZygpXG4gIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKClcbiAgY29uc3QgaSA9IHMubGFzdEluZGV4T2YoYWRkcilcbiAgaWYgKGkgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBZGRyZXNzICcgKyB0aGlzICsgJyBkb2VzIG5vdCBjb250YWluIHN1YmFkZHJlc3M6ICcgKyBhZGRyKVxuICB9XG4gIHJldHVybiBNdWx0aWFkZHIocy5zbGljZSgwLCBpKSlcbn1cblxuLyoqXG4gKiBBIG1vcmUgcmVsaWFibGUgdmVyc2lvbiBvZiBgZGVjYXBzdWxhdGVgIGlmIHlvdSBhcmUgdGFyZ2V0aW5nIGFcbiAqIHNwZWNpZmljIGNvZGUsIHN1Y2ggYXMgNDIxICh0aGUgYHAycGAgcHJvdG9jb2wgY29kZSkuIFRoZSBsYXN0IGluZGV4IG9mIHRoZSBjb2RlXG4gKiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgYE11bHRpYWRkcmAsIGFuZCBhIG5ldyBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGNvZGUgaXMgbm90IHByZXNlbnQsIHRoZSBvcmlnaW5hbCBgTXVsdGlhZGRyYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZSBUaGUgY29kZSBvZiB0aGUgcHJvdG9jb2wgdG8gZGVjYXBzdWxhdGUgZnJvbSB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFkZHIgPSBNdWx0aWFkZHIoJy9pcDQvMC4wLjAuMC90Y3AvODA4MC9wMnAvUW1jZ3BzeVdnSDhZOGFqSnoxQ3U3MktuUzV1bzJBYTJMcHpVN2tpblN1cE5LQycpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDAuLi4gLSAvaXA0LzAuMC4wLjAvdGNwLzgwODAvcDJwL1FtY2dwc3lXZ0g4WThhakp6MUN1NzJLblM1dW8yQWEyTHB6VTdraW5TdXBOS0M+XG4gKlxuICogYWRkci5kZWNhcHN1bGF0ZUNvZGUoNDIxKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8wLjAuMC4wL3RjcC84MDgwJ1xuICpcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzgwODAnKS5kZWNhcHN1bGF0ZUNvZGUoNDIxKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzgwODAnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZGVjYXBzdWxhdGVDb2RlID0gZnVuY3Rpb24gZGVjYXBzdWxhdGVDb2RlIChjb2RlKSB7XG4gIGNvbnN0IHR1cGxlcyA9IHRoaXMudHVwbGVzKClcbiAgZm9yIChsZXQgaSA9IHR1cGxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmICh0dXBsZXNbaV1bMF0gPT09IGNvZGUpIHtcbiAgICAgIHJldHVybiBNdWx0aWFkZHIoY29kZWMudHVwbGVzVG9CdWZmZXIodHVwbGVzLnNsaWNlKDAsIGkpKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwZWVySWQgaWYgdGhlIG11bHRpYWRkciBjb250YWlucyBvbmVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd8bnVsbH0gcGVlcklkIC0gVGhlIGlkIG9mIHRoZSBwZWVyIG9yIG51bGwgaWYgaW52YWxpZCBvciBtaXNzaW5nIGZyb20gdGhlIG1hXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAvaXBmcy9RbVZhbGlkQmFzZTU4c3RyaW5nJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC9pcGZzL1FtVmFsaWRCYXNlNThzdHJpbmc+XG4gKlxuICogLy8gc2hvdWxkIHJldHVybiBRbVZhbGlkQmFzZTU4c3RyaW5nIG9yIG51bGwgaWYgdGhlIGlkIGlzIG1pc3Npbmcgb3IgaW52YWxpZFxuICogY29uc3QgcGVlcklkID0gbWgxLmdldFBlZXJJZCgpXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZ2V0UGVlcklkID0gZnVuY3Rpb24gZ2V0UGVlcklkICgpIHtcbiAgbGV0IGI1OHN0ciA9IG51bGxcbiAgdHJ5IHtcbiAgICBjb25zdCB0dXBsZXMgPSB0aGlzLnN0cmluZ1R1cGxlcygpLmZpbHRlcigodHVwbGUpID0+IHtcbiAgICAgIGlmICh0dXBsZVswXSA9PT0gcHJvdG9jb2xzLm5hbWVzLmlwZnMuY29kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBHZXQgdGhlIGxhc3QgaWRcbiAgICBiNThzdHIgPSB0dXBsZXMucG9wKClbMV1cbiAgICAvLyBHZXQgbXVsdGloYXNoLCB1bndyYXAgZnJvbSBDSUQgaWYgbmVlZGVkXG4gICAgYjU4c3RyID0gYnM1OC5lbmNvZGUobmV3IENJRChiNThzdHIpLm11bHRpaGFzaClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGI1OHN0ciA9IG51bGxcbiAgfVxuXG4gIHJldHVybiBiNThzdHJcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwYXRoIGlmIHRoZSBtdWx0aWFkZHIgY29udGFpbnMgb25lXG4gKlxuICogQHJldHVybiB7U3RyaW5nfG51bGx9IHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgbXVsdGlhZGRyLCBvciBudWxsIGlmIG5vIHBhdGggcHJvdG9jb2wgaXMgcHJlc2VudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwL3VuaXgvdG1wL3AycC5zb2NrJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC91bml4L3RtcC9wMnAuc29jaz5cbiAqXG4gKiAvLyBzaG91bGQgcmV0dXJuIHV0Zjggc3RyaW5nIG9yIG51bGwgaWYgdGhlIGlkIGlzIG1pc3Npbmcgb3IgaW52YWxpZFxuICogY29uc3QgcGF0aCA9IG1oMS5nZXRQYXRoKClcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gZ2V0UGF0aCAoKSB7XG4gIGxldCBwYXRoID0gbnVsbFxuICB0cnkge1xuICAgIHBhdGggPSB0aGlzLnN0cmluZ1R1cGxlcygpLmZpbHRlcigodHVwbGUpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gcHJvdG9jb2xzKHR1cGxlWzBdKVxuICAgICAgaWYgKHByb3RvLnBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVswXVsxXVxuICB9IGNhdGNoIChlKSB7XG4gICAgcGF0aCA9IG51bGxcbiAgfVxuXG4gIHJldHVybiBwYXRoXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHR3byBNdWx0aWFkZHJzIGFyZSB0aGUgc2FtZVxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyXG4gKiBAcmV0dXJuIHtCb29sfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIG1oMS5lcXVhbHMobWgxKVxuICogLy8gdHJ1ZVxuICpcbiAqIG1oMS5lcXVhbHMobWgyKVxuICogLy8gZmFsc2VcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGFkZHIpIHtcbiAgcmV0dXJuIHRoaXMuYnVmZmVyLmVxdWFscyhhZGRyLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBHZXRzIGEgTXVsdGlhZGRycyBub2RlLWZyaWVuZGx5IGFkZHJlc3Mgb2JqZWN0LiBOb3RlIHRoYXQgcHJvdG9jb2wgaW5mb3JtYXRpb25cbiAqIGlzIGxlZnQgb3V0OiBpbiBOb2RlIChhbmQgbW9zdCBuZXR3b3JrIHN5c3RlbXMpIHRoZSBwcm90b2NvbCBpcyB1bmtub3dhYmxlXG4gKiBnaXZlbiBvbmx5IHRoZSBhZGRyZXNzLlxuICpcbiAqIEhhcyB0byBiZSBhIFRoaW5XYWlzdCBBZGRyZXNzLCBvdGhlcndpc2UgdGhyb3dzIGVycm9yXG4gKlxuICogQHJldHVybnMge3tmYW1pbHk6IFN0cmluZywgYWRkcmVzczogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fVxuICogQHRocm93cyB7RXJyb3J9IFRocm93cyBlcnJvciBpZiBNdWx0aWFkZHIgaXMgbm90IGEgVGhpbiBXYWlzdCBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLm5vZGVBZGRyZXNzKClcbiAqIC8vIHtmYW1pbHk6ICdJUHY0JywgYWRkcmVzczogJzEyNy4wLjAuMScsIHBvcnQ6ICc0MDAxJ31cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5ub2RlQWRkcmVzcyA9IGZ1bmN0aW9uIG5vZGVBZGRyZXNzICgpIHtcbiAgY29uc3QgY29kZXMgPSB0aGlzLnByb3RvQ29kZXMoKVxuICBjb25zdCBuYW1lcyA9IHRoaXMucHJvdG9OYW1lcygpXG4gIGNvbnN0IHBhcnRzID0gdGhpcy50b1N0cmluZygpLnNwbGl0KCcvJykuc2xpY2UoMSlcblxuICBpZiAocGFydHMubGVuZ3RoIDwgNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlhZGRyIG11c3QgaGF2ZSBhIHZhbGlkIGZvcm1hdDogXCIve2lwNCwgaXA2LCBkbnM0LCBkbnM2fS97YWRkcmVzc30ve3RjcCwgdWRwfS97cG9ydH1cIi4nKVxuICB9IGVsc2UgaWYgKGNvZGVzWzBdICE9PSA0ICYmIGNvZGVzWzBdICE9PSA0MSAmJiBjb2Rlc1swXSAhPT0gNTQgJiYgY29kZXNbMF0gIT09IDU1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBwcm90b2NvbCB3aXRoIG5hbWU6IFwiJyR7bmFtZXNbMF19J1wiLiBNdXN0IGhhdmUgYSB2YWxpZCBmYW1pbHkgbmFtZTogXCJ7aXA0LCBpcDYsIGRuczQsIGRuczZ9XCIuYClcbiAgfSBlbHNlIGlmIChwYXJ0c1syXSAhPT0gJ3RjcCcgJiYgcGFydHNbMl0gIT09ICd1ZHAnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBwcm90b2NvbCB3aXRoIG5hbWU6IFwiJyR7bmFtZXNbMV19J1wiLiBNdXN0IGhhdmUgYSB2YWxpZCB0cmFuc3BvcnQgcHJvdG9jb2w6IFwie3RjcCwgdWRwfVwiLmApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZhbWlseTogKGNvZGVzWzBdID09PSA0MSB8fCBjb2Rlc1swXSA9PT0gNTUpID8gNiA6IDQsXG4gICAgYWRkcmVzczogcGFydHNbMV0sIC8vIGlwIGFkZHJcbiAgICBwb3J0OiBwYXJzZUludChwYXJ0c1szXSkgLy8gdGNwIG9yIHVkcCBwb3J0XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTXVsdGlhZGRyIGZyb20gYSBub2RlLWZyaWVuZGx5IGFkZHJlc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHt7ZmFtaWx5OiBTdHJpbmcsIGFkZHJlc3M6IFN0cmluZywgcG9ydDogTnVtYmVyfX0gYWRkclxuICogQHBhcmFtIHtTdHJpbmd9IHRyYW5zcG9ydFxuICogQHJldHVybnMge011bHRpYWRkcn0gbXVsdGlhZGRyXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIGFkZHIgaXMgbm90IHRydXRoeVxuICogQHRocm93cyB7RXJyb3J9IFRocm93cyBlcnJvciBpZiB0cmFuc3BvcnQgaXMgbm90IHRydXRoeVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkci5mcm9tTm9kZUFkZHJlc3Moe2FkZHJlc3M6ICcxMjcuMC4wLjEnLCBwb3J0OiAnNDAwMSd9LCAndGNwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICovXG5NdWx0aWFkZHIuZnJvbU5vZGVBZGRyZXNzID0gZnVuY3Rpb24gZnJvbU5vZGVBZGRyZXNzIChhZGRyLCB0cmFuc3BvcnQpIHtcbiAgaWYgKCFhZGRyKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIG5vZGUgYWRkcmVzcyBvYmplY3QnKVxuICBpZiAoIXRyYW5zcG9ydCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyB0cmFuc3BvcnQgcHJvdG9jb2wnKVxuICBjb25zdCBpcCA9IChhZGRyLmZhbWlseSA9PT0gJ0lQdjYnKSA/ICdpcDYnIDogJ2lwNCdcbiAgcmV0dXJuIE11bHRpYWRkcignLycgKyBbaXAsIGFkZHIuYWRkcmVzcywgdHJhbnNwb3J0LCBhZGRyLnBvcnRdLmpvaW4oJy8nKSlcbn1cblxuLy8gVE9ETyBmaW5kIGEgYmV0dGVyIGV4YW1wbGUsIG5vdCBzdXJlIGFib3V0IGl0J3MgZ29vZCBlbm91Z2hcbi8qKlxuICogUmV0dXJucyBpZiBhIE11bHRpYWRkciBpcyBhIFRoaW4gV2Fpc3QgYWRkcmVzcyBvciBub3QuXG4gKlxuICogVGhpbiBXYWlzdCBpcyBpZiBhIE11bHRpYWRkciBhZGhlcmVzIHRvIHRoZSBzdGFuZGFyZCBjb21iaW5hdGlvbiBvZjpcbiAqXG4gKiBge0lQdjQsIElQdjZ9L3tUQ1AsIFVEUH1gXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IFthZGRyXSAtIERlZmF1bHRzIHRvIHVzaW5nIGB0aGlzYCBpbnN0YW5jZVxuICogQHJldHVybnMge0Jvb2xlYW59IGlzVGhpbldhaXN0QWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNGMwYTgwMjAxMDYxMzg5IC0gL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMT5cbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEwNGMwYTgwMjAxMDYxMzg5IC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxPlxuICogbWgxLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyB0cnVlXG4gKiBtaDIuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIHRydWVcbiAqIG1oMy5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gZmFsc2VcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5pc1RoaW5XYWlzdEFkZHJlc3MgPSBmdW5jdGlvbiBpc1RoaW5XYWlzdEFkZHJlc3MgKGFkZHIpIHtcbiAgY29uc3QgcHJvdG9zID0gKGFkZHIgfHwgdGhpcykucHJvdG9zKClcblxuICBpZiAocHJvdG9zLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHByb3Rvc1swXS5jb2RlICE9PSA0ICYmIHByb3Rvc1swXS5jb2RlICE9PSA0MSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChwcm90b3NbMV0uY29kZSAhPT0gNiAmJiBwcm90b3NbMV0uY29kZSAhPT0gMjczKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBPYmplY3QgY29udGFpbmluZyB0YWJsZSwgbmFtZXMgYW5kIGNvZGVzIG9mIGFsbCBzdXBwb3J0ZWQgcHJvdG9jb2xzLlxuICogVG8gZ2V0IHRoZSBwcm90b2NvbCB2YWx1ZXMgZnJvbSBhIE11bHRpYWRkciwgeW91IGNhbiB1c2VcbiAqIFtgLnByb3RvcygpYF0oI211bHRpYWRkcnByb3RvcyksXG4gKiBbYC5wcm90b0NvZGVzKClgXSgjbXVsdGlhZGRycHJvdG9jb2Rlcykgb3JcbiAqIFtgLnByb3RvTmFtZXMoKWBdKCNtdWx0aWFkZHJwcm90b25hbWVzKVxuICpcbiAqIEBpbnN0YW5jZVxuICogQHJldHVybnMge3t0YWJsZTogQXJyYXksIG5hbWVzOiBPYmplY3QsIGNvZGVzOiBPYmplY3R9fVxuICpcbiAqL1xuTXVsdGlhZGRyLnByb3RvY29scyA9IHByb3RvY29sc1xuXG4vKipcbiAqIFJldHVybnMgaWYgc29tZXRoaW5nIGlzIGEgTXVsdGlhZGRyIHRoYXQgaXMgYSBuYW1lXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge0Jvb2x9IGlzTmFtZVxuICovXG5NdWx0aWFkZHIuaXNOYW1lID0gZnVuY3Rpb24gaXNOYW1lIChhZGRyKSB7XG4gIGlmICghTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGFkZHIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBpZiBhIHBhcnQgb2YgdGhlIG11bHRpYWRkciBpcyByZXNvbHZhYmxlLCB0aGVuIHJldHVybiB0cnVlXG4gIHJldHVybiBhZGRyLnByb3RvcygpLnNvbWUoKHByb3RvKSA9PiBwcm90by5yZXNvbHZhYmxlKVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbXVsdGlhZGRycywgYnkgcmVzb2x2aW5nIHRoZSBtdWx0aWFkZHIgdGhhdCBpcyBhIG5hbWVcbiAqXG4gKiBAYXN5bmNcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJbXX1cbiAqL1xuTXVsdGlhZGRyLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlIChhZGRyKSB7XG4gIGlmICghTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGFkZHIpIHx8ICFNdWx0aWFkZHIuaXNOYW1lKGFkZHIpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEVycm9yKCdub3QgYSB2YWxpZCBuYW1lJykpXG4gIH1cblxuICAvKlxuICAgKiBOZWVkcyBtb3JlIGNvbnNpZGVyYXRpb24gZnJvbSBzcGVjIGRlc2lnbjpcbiAgICogICAtIHdoYXQgdG8gcmV0dXJuXG4gICAqICAgLSBob3cgdG8gYWNoaWV2ZSBpdCBpbiB0aGUgYnJvd3Nlcj9cbiAgICovXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCB5ZXQnKSlcbn1cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gTXVsdGlhZGRyXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBudW1iZXJUb0J1ZmZlcixcbiAgYnVmZmVyVG9OdW1iZXIsXG4gIHZhcmludEJ1ZmZlckVuY29kZSxcbiAgdmFyaW50QnVmZmVyRGVjb2RlLFxuICB2YXJpbnRFbmNvZGVcbn1cblxuZnVuY3Rpb24gYnVmZmVyVG9OdW1iZXIgKGJ1Zikge1xuICByZXR1cm4gcGFyc2VJbnQoYnVmLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG59XG5cbmZ1bmN0aW9uIG51bWJlclRvQnVmZmVyIChudW0pIHtcbiAgbGV0IGhleFN0cmluZyA9IG51bS50b1N0cmluZygxNilcbiAgaWYgKGhleFN0cmluZy5sZW5ndGggJSAyID09PSAxKSB7XG4gICAgaGV4U3RyaW5nID0gJzAnICsgaGV4U3RyaW5nXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleFN0cmluZywgJ2hleCcpXG59XG5cbmZ1bmN0aW9uIHZhcmludEJ1ZmZlckVuY29kZSAoaW5wdXQpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmZmVyVG9OdW1iZXIoaW5wdXQpKSlcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRGVjb2RlIChpbnB1dCkge1xuICByZXR1cm4gbnVtYmVyVG9CdWZmZXIodmFyaW50LmRlY29kZShpbnB1dCkpXG59XG5cbmZ1bmN0aW9uIHZhcmludEVuY29kZSAobnVtKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKG51bSkpXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHdpdGhJcyhDbGFzcywgeyBjbGFzc05hbWUsIHN5bWJvbE5hbWUgfSkge1xuICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3Ioc3ltYm9sTmFtZSk7XG5cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgLy8gVGhlIGNvZGUgYmVsb3cgYXNzaWducyB0aGUgY2xhc3Mgd3JhcHBlciB0byBhbiBvYmplY3QgdG8gdHJpY2tcbiAgICAgICAgLy8gSmF2YVNjcmlwdCBlbmdpbmVzIHRvIHNob3cgdGhlIG5hbWUgb2YgdGhlIGV4dGVuZGVkIGNsYXNzIHdoZW5cbiAgICAgICAgLy8gbG9nZ2luZyBhbiBpbnN0YW5jZXMuXG4gICAgICAgIC8vIFdlIGFyZSBhc3NpZ25pbmcgYW4gYW5vbnltb3VzIGNsYXNzIChjbGFzcyB3cmFwcGVyKSB0byB0aGUgb2JqZWN0XG4gICAgICAgIC8vIHdpdGgga2V5IGBjbGFzc05hbWVgIHRvIGtlZXAgdGhlIGNvcnJlY3QgbmFtZS5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGl0IGZhbGxzIGJhY2sgdG8gbG9nZ2luZyBgQ2xhc3NJc1dyYXBwZXJgLlxuICAgICAgICBbY2xhc3NOYW1lXTogY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN5bWJvbCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfVtjbGFzc05hbWVdO1xuXG4gICAgQ2xhc3NJc1dyYXBwZXJbYGlzJHtjbGFzc05hbWV9YF0gPSAob2JqKSA9PiAhIShvYmogJiYgb2JqW3N5bWJvbF0pO1xuXG4gICAgcmV0dXJuIENsYXNzSXNXcmFwcGVyO1xufVxuXG5mdW5jdGlvbiB3aXRoSXNQcm90byhDbGFzcywgeyBjbGFzc05hbWUsIHN5bWJvbE5hbWUsIHdpdGhvdXROZXcgfSkge1xuICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3Ioc3ltYm9sTmFtZSk7XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG4gICAgY29uc3QgQ2xhc3NJc1dyYXBwZXIgPSB7XG4gICAgICAgIFtjbGFzc05hbWVdOiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKHdpdGhvdXROZXcgJiYgISh0aGlzIGluc3RhbmNlb2YgQ2xhc3NJc1dyYXBwZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGFzc0lzV3JhcHBlciguLi5hcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgX3RoaXMgPSBDbGFzcy5jYWxsKHRoaXMsIC4uLmFyZ3MpIHx8IHRoaXM7XG5cbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiAhX3RoaXNbc3ltYm9sXSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgIH0sXG4gICAgfVtjbGFzc05hbWVdO1xuICAgIC8qIGVzbGludC1lbmFibGUgb2JqZWN0LXNob3J0aGFuZCAqL1xuXG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUpO1xuICAgIENsYXNzSXNXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzSXNXcmFwcGVyO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENsYXNzSXNXcmFwcGVyLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2l0aElzO1xubW9kdWxlLmV4cG9ydHMucHJvdG8gPSB3aXRoSXNQcm90bztcbiIsInZhciBDb21iaW5lZFN0cmVhbSA9IHJlcXVpcmUoJ2NvbWJpbmVkLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YSgpO1xuICB9XG5cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZUxlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSA9IFtdO1xuXG4gIENvbWJpbmVkU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG59XG5cbkZvcm1EYXRhLkxJTkVfQlJFQUsgPSAnXFxyXFxuJztcbkZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBhbGxvdyBmaWxlbmFtZSBhcyBzaW5nbGUgb3B0aW9uXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7ZmlsZW5hbWU6IG9wdGlvbnN9O1xuICB9XG5cbiAgdmFyIGFwcGVuZCA9IENvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQuYmluZCh0aGlzKTtcblxuICAvLyBhbGwgdGhhdCBzdHJlYW15IGJ1c2luZXNzIGNhbid0IGhhbmRsZSBudW1iZXJzXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmVsaXhnZS9ub2RlLWZvcm0tZGF0YS9pc3N1ZXMvMzhcbiAgaWYgKHV0aWwuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBQbGVhc2UgY29udmVydCB5b3VyIGFycmF5IGludG8gc3RyaW5nXG4gICAgLy8gdGhlIHdheSB3ZWIgc2VydmVyIGV4cGVjdHMgaXRcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0FycmF5cyBhcmUgbm90IHN1cHBvcnRlZC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGhlYWRlciA9IHRoaXMuX211bHRpUGFydEhlYWRlcihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpO1xuICB2YXIgZm9vdGVyID0gdGhpcy5fbXVsdGlQYXJ0Rm9vdGVyKCk7XG5cbiAgYXBwZW5kKGhlYWRlcik7XG4gIGFwcGVuZCh2YWx1ZSk7XG4gIGFwcGVuZChmb290ZXIpO1xuXG4gIC8vIHBhc3MgYWxvbmcgb3B0aW9ucy5rbm93bkxlbmd0aFxuICB0aGlzLl90cmFja0xlbmd0aChoZWFkZXIsIHZhbHVlLCBvcHRpb25zKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fdHJhY2tMZW5ndGggPSBmdW5jdGlvbihoZWFkZXIsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB2YWx1ZUxlbmd0aCA9IDA7XG5cbiAgLy8gdXNlZCB3LyBnZXRMZW5ndGhTeW5jKCksIHdoZW4gbGVuZ3RoIGlzIGtub3duLlxuICAvLyBlLmcuIGZvciBzdHJlYW1pbmcgZGlyZWN0bHkgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIsXG4gIC8vIHcvIGEga25vd24gZmlsZSBhIHNpemUsIGFuZCBub3Qgd2FudGluZyB0byB3YWl0IGZvclxuICAvLyBpbmNvbWluZyBmaWxlIHRvIGZpbmlzaCB0byBnZXQgaXRzIHNpemUuXG4gIGlmIChvcHRpb25zLmtub3duTGVuZ3RoICE9IG51bGwpIHtcbiAgICB2YWx1ZUxlbmd0aCArPSArb3B0aW9ucy5rbm93bkxlbmd0aDtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgdGhpcy5fdmFsdWVMZW5ndGggKz0gdmFsdWVMZW5ndGg7XG5cbiAgLy8gQGNoZWNrIHdoeSBhZGQgQ1JMRj8gZG9lcyB0aGlzIGFjY291bnQgZm9yIGN1c3RvbS9tdWx0aXBsZSBDUkxGcz9cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggKz1cbiAgICBCdWZmZXIuYnl0ZUxlbmd0aChoZWFkZXIpICtcbiAgICBGb3JtRGF0YS5MSU5FX0JSRUFLLmxlbmd0aDtcblxuICAvLyBlbXB0eSBvciBlaXRoZXIgZG9lc24ndCBoYXZlIHBhdGggb3Igbm90IGFuIGh0dHAgcmVzcG9uc2VcbiAgaWYgKCF2YWx1ZSB8fCAoICF2YWx1ZS5wYXRoICYmICEodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpICkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBubyBuZWVkIHRvIGJvdGhlciB3aXRoIHRoZSBsZW5ndGhcbiAgaWYgKCFvcHRpb25zLmtub3duTGVuZ3RoKSB7XG4gICAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlLnB1c2godmFsdWUpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xlbmd0aFJldHJpZXZlciA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuXG4gIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZmQnKSkge1xuXG4gICAgLy8gdGFrZSByZWFkIHJhbmdlIGludG8gYSBhY2NvdW50XG4gICAgLy8gYGVuZGAgPSBJbmZpbml0eSDigJM+IHJlYWQgZmlsZSB0aWxsIHRoZSBlbmRcbiAgICAvL1xuICAgIC8vIFRPRE86IExvb2tzIGxpa2UgdGhlcmUgaXMgYnVnIGluIE5vZGUgZnMuY3JlYXRlUmVhZFN0cmVhbVxuICAgIC8vIGl0IGRvZXNuJ3QgcmVzcGVjdCBgZW5kYCBvcHRpb25zIHdpdGhvdXQgYHN0YXJ0YCBvcHRpb25zXG4gICAgLy8gRml4IGl0IHdoZW4gbm9kZSBmaXhlcyBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzc4MTlcbiAgICBpZiAodmFsdWUuZW5kICE9IHVuZGVmaW5lZCAmJiB2YWx1ZS5lbmQgIT0gSW5maW5pdHkgJiYgdmFsdWUuc3RhcnQgIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIC8vIHdoZW4gZW5kIHNwZWNpZmllZFxuICAgICAgLy8gbm8gbmVlZCB0byBjYWxjdWxhdGUgcmFuZ2VcbiAgICAgIC8vIGluY2x1c2l2ZSwgc3RhcnRzIHdpdGggMFxuICAgICAgY2FsbGJhY2sobnVsbCwgdmFsdWUuZW5kICsgMSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCkpO1xuXG4gICAgLy8gbm90IHRoYXQgZmFzdCBzbm9vcHlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RpbGwgbmVlZCB0byBmZXRjaCBmaWxlIHNpemUgZnJvbSBmc1xuICAgICAgZnMuc3RhdCh2YWx1ZS5wYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcblxuICAgICAgICB2YXIgZmlsZVNpemU7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGZpbmFsIHNpemUgYmFzZWQgb24gdGhlIHJhbmdlIG9wdGlvbnNcbiAgICAgICAgZmlsZVNpemUgPSBzdGF0LnNpemUgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApO1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgLy8gb3IgaHR0cCByZXNwb25zZVxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgK3ZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuXG4gIC8vIG9yIHJlcXVlc3Qgc3RyZWFtIGh0dHA6Ly9naXRodWIuY29tL21pa2VhbC9yZXF1ZXN0XG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBNb2R1bGUnKSkge1xuICAgIC8vIHdhaXQgdGlsbCByZXNwb25zZSBjb21lIGJhY2tcbiAgICB2YWx1ZS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgdmFsdWUucGF1c2UoKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsICtyZXNwb25zZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcbiAgICB9KTtcbiAgICB2YWx1ZS5yZXN1bWUoKTtcblxuICAvLyBzb21ldGhpbmcgZWxzZVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKCdVbmtub3duIHN0cmVhbScpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEhlYWRlciA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBjdXN0b20gaGVhZGVyIHNwZWNpZmllZCAoYXMgc3RyaW5nKT9cbiAgLy8gaXQgYmVjb21lcyByZXNwb25zaWJsZSBmb3IgYm91bmRhcnlcbiAgLy8gKGUuZy4gdG8gaGFuZGxlIGV4dHJhIENSTEZzIG9uIC5ORVQgc2VydmVycylcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBvcHRpb25zLmhlYWRlcjtcbiAgfVxuXG4gIHZhciBjb250ZW50RGlzcG9zaXRpb24gPSB0aGlzLl9nZXRDb250ZW50RGlzcG9zaXRpb24odmFsdWUsIG9wdGlvbnMpO1xuICB2YXIgY29udGVudFR5cGUgPSB0aGlzLl9nZXRDb250ZW50VHlwZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgdmFyIGNvbnRlbnRzID0gJyc7XG4gIHZhciBoZWFkZXJzICA9IHtcbiAgICAvLyBhZGQgY3VzdG9tIGRpc3Bvc2l0aW9uIGFzIHRoaXJkIGVsZW1lbnQgb3Iga2VlcCBpdCB0d28gZWxlbWVudHMgaWYgbm90XG4gICAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nOiBbJ2Zvcm0tZGF0YScsICduYW1lPVwiJyArIGZpZWxkICsgJ1wiJ10uY29uY2F0KGNvbnRlbnREaXNwb3NpdGlvbiB8fCBbXSksXG4gICAgLy8gaWYgbm8gY29udGVudCB0eXBlLiBhbGxvdyBpdCB0byBiZSBlbXB0eSBhcnJheVxuICAgICdDb250ZW50LVR5cGUnOiBbXS5jb25jYXQoY29udGVudFR5cGUgfHwgW10pXG4gIH07XG5cbiAgLy8gYWxsb3cgY3VzdG9tIGhlYWRlcnMuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ29iamVjdCcpIHtcbiAgICBwb3B1bGF0ZShoZWFkZXJzLCBvcHRpb25zLmhlYWRlcik7XG4gIH1cblxuICB2YXIgaGVhZGVyO1xuICBmb3IgKHZhciBwcm9wIGluIGhlYWRlcnMpIHtcbiAgICBpZiAoIWhlYWRlcnMuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgIGhlYWRlciA9IGhlYWRlcnNbcHJvcF07XG5cbiAgICAvLyBza2lwIG51bGxpc2ggaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYWxsIGhlYWRlcnMgdG8gYXJyYXlzLlxuICAgIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIgPSBbaGVhZGVyXTtcbiAgICB9XG5cbiAgICAvLyBhZGQgbm9uLWVtcHR5IGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlci5sZW5ndGgpIHtcbiAgICAgIGNvbnRlbnRzICs9IHByb3AgKyAnOiAnICsgaGVhZGVyLmpvaW4oJzsgJykgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgRm9ybURhdGEuTElORV9CUkVBSyArIGNvbnRlbnRzICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudERpc3Bvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICB2YXIgZmlsZW5hbWVcbiAgICAsIGNvbnRlbnREaXNwb3NpdGlvblxuICAgIDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsZXBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVwYXRoIGZvciByZWxhdGl2ZSBwYXRoc1xuICAgIGZpbGVuYW1lID0gcGF0aC5ub3JtYWxpemUob3B0aW9ucy5maWxlcGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVuYW1lIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIGZvcm1pZGFibGUgYW5kIHRoZSBicm93c2VyIGFkZCBhIG5hbWUgcHJvcGVydHlcbiAgICAvLyBmcy0gYW5kIHJlcXVlc3QtIHN0cmVhbXMgaGF2ZSBwYXRoIHByb3BlcnR5XG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIC8vIG9yIHRyeSBodHRwIHJlc3BvbnNlXG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHZhbHVlLmNsaWVudC5faHR0cE1lc3NhZ2UucGF0aCB8fCAnJyk7XG4gIH1cblxuICBpZiAoZmlsZW5hbWUpIHtcbiAgICBjb250ZW50RGlzcG9zaXRpb24gPSAnZmlsZW5hbWU9XCInICsgZmlsZW5hbWUgKyAnXCInO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnREaXNwb3NpdGlvbjtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudFR5cGUgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIC8vIHVzZSBjdXN0b20gY29udGVudC10eXBlIGFib3ZlIGFsbFxuICB2YXIgY29udGVudFR5cGUgPSBvcHRpb25zLmNvbnRlbnRUeXBlO1xuXG4gIC8vIG9yIHRyeSBgbmFtZWAgZnJvbSBmb3JtaWRhYmxlLCBicm93c2VyXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUubmFtZSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAodmFsdWUubmFtZSk7XG4gIH1cblxuICAvLyBvciB0cnkgYHBhdGhgIGZyb20gZnMtLCByZXF1ZXN0LSBzdHJlYW1zXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucGF0aCkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAodmFsdWUucGF0aCk7XG4gIH1cblxuICAvLyBvciBpZiBpdCdzIGh0dHAtcmVwb25zZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgY29udGVudFR5cGUgPSB2YWx1ZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgfVxuXG4gIC8vIG9yIGd1ZXNzIGl0IGZyb20gdGhlIGZpbGVwYXRoIG9yIGZpbGVuYW1lXG4gIGlmICghY29udGVudFR5cGUgJiYgKG9wdGlvbnMuZmlsZXBhdGggfHwgb3B0aW9ucy5maWxlbmFtZSkpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKG9wdGlvbnMuZmlsZXBhdGggfHwgb3B0aW9ucy5maWxlbmFtZSk7XG4gIH1cblxuICAvLyBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBjb250ZW50IHR5cGUgaWYgYHZhbHVlYCBpcyBub3Qgc2ltcGxlIHZhbHVlXG4gIGlmICghY29udGVudFR5cGUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgY29udGVudFR5cGUgPSBGb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50VHlwZTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0Rm9vdGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBmdW5jdGlvbihuZXh0KSB7XG4gICAgdmFyIGZvb3RlciA9IEZvcm1EYXRhLkxJTkVfQlJFQUs7XG5cbiAgICB2YXIgbGFzdFBhcnQgPSAodGhpcy5fc3RyZWFtcy5sZW5ndGggPT09IDApO1xuICAgIGlmIChsYXN0UGFydCkge1xuICAgICAgZm9vdGVyICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpO1xuICAgIH1cblxuICAgIG5leHQoZm9vdGVyKTtcbiAgfS5iaW5kKHRoaXMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sYXN0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyAnLS0nICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRIZWFkZXJzID0gZnVuY3Rpb24odXNlckhlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcjtcbiAgdmFyIGZvcm1IZWFkZXJzID0ge1xuICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JyArIHRoaXMuZ2V0Qm91bmRhcnkoKVxuICB9O1xuXG4gIGZvciAoaGVhZGVyIGluIHVzZXJIZWFkZXJzKSB7XG4gICAgaWYgKHVzZXJIZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHtcbiAgICAgIGZvcm1IZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXSA9IHVzZXJIZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1IZWFkZXJzO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYm91bmRhcnkpIHtcbiAgICB0aGlzLl9nZW5lcmF0ZUJvdW5kYXJ5KCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhQnVmZmVyID0gbmV3IEJ1ZmZlci5hbGxvYyggMCApO1xuICB2YXIgYm91bmRhcnkgPSB0aGlzLmdldEJvdW5kYXJ5KCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBmb3JtIGNvbnRlbnQuIEFkZCBMaW5lIGJyZWFrcyB0byB0aGUgZW5kIG9mIGRhdGEuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9zdHJlYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgIC8vIEFkZCBjb250ZW50IHRvIHRoZSBidWZmZXIuXG4gICAgICBpZihCdWZmZXIuaXNCdWZmZXIodGhpcy5fc3RyZWFtc1tpXSkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCB0aGlzLl9zdHJlYW1zW2ldXSk7XG4gICAgICB9ZWxzZSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fc3RyZWFtc1tpXSldKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGJyZWFrIGFmdGVyIGNvbnRlbnQuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdzdHJpbmcnIHx8IHRoaXMuX3N0cmVhbXNbaV0uc3Vic3RyaW5nKCAyLCBib3VuZGFyeS5sZW5ndGggKyAyICkgIT09IGJvdW5kYXJ5KSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20oRm9ybURhdGEuTElORV9CUkVBSyldICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBmb290ZXIgYW5kIHJldHVybiB0aGUgQnVmZmVyIG9iamVjdC5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9sYXN0Qm91bmRhcnkoKSldICk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dlbmVyYXRlQm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgLy8gVGhpcyBnZW5lcmF0ZXMgYSA1MCBjaGFyYWN0ZXIgYm91bmRhcnkgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5IEZpcmVmb3guXG4gIC8vIFRoZXkgYXJlIG9wdGltaXplZCBmb3IgYm95ZXItbW9vcmUgcGFyc2luZy5cbiAgdmFyIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgYm91bmRhcnkgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG4vLyBOb3RlOiBnZXRMZW5ndGhTeW5jIERPRVNOJ1QgY2FsY3VsYXRlIHN0cmVhbXMgbGVuZ3RoXG4vLyBBcyB3b3JrYXJvdW5kIG9uZSBjYW4gY2FsY3VsYXRlIGZpbGUgc2l6ZSBtYW51YWxseVxuLy8gYW5kIGFkZCBpdCBhcyBrbm93bkxlbmd0aCBvcHRpb25cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGhTeW5jID0gZnVuY3Rpb24oKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgLy8gRG9uJ3QgZ2V0IGNvbmZ1c2VkLCB0aGVyZSBhcmUgMyBcImludGVybmFsXCIgc3RyZWFtcyBmb3IgZWFjaCBrZXl2YWwgcGFpclxuICAvLyBzbyBpdCBiYXNpY2FsbHkgY2hlY2tzIGlmIHRoZXJlIGlzIGFueSB2YWx1ZSBhZGRlZCB0byB0aGUgZm9ybVxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvNDBcbiAgaWYgKCF0aGlzLmhhc0tub3duTGVuZ3RoKCkpIHtcbiAgICAvLyBTb21lIGFzeW5jIGxlbmd0aCByZXRyaWV2ZXJzIGFyZSBwcmVzZW50XG4gICAgLy8gdGhlcmVmb3JlIHN5bmNocm9ub3VzIGxlbmd0aCBjYWxjdWxhdGlvbiBpcyBmYWxzZS5cbiAgICAvLyBQbGVhc2UgdXNlIGdldExlbmd0aChjYWxsYmFjaykgdG8gZ2V0IHByb3BlciBsZW5ndGhcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgcHJvcGVyIGxlbmd0aCBpbiBzeW5jaHJvbm91cyB3YXkuJykpO1xuICB9XG5cbiAgcmV0dXJuIGtub3duTGVuZ3RoO1xufTtcblxuLy8gUHVibGljIEFQSSB0byBjaGVjayBpZiBsZW5ndGggb2YgYWRkZWQgdmFsdWVzIGlzIGtub3duXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMTk2XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMjYyXG5Gb3JtRGF0YS5wcm90b3R5cGUuaGFzS25vd25MZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhc0tub3duTGVuZ3RoID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIGhhc0tub3duTGVuZ3RoID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaGFzS25vd25MZW5ndGg7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oY2IpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIXRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLmJpbmQodGhpcywgbnVsbCwga25vd25MZW5ndGgpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luY2tpdC5wYXJhbGxlbCh0aGlzLl92YWx1ZXNUb01lYXN1cmUsIHRoaXMuX2xlbmd0aFJldHJpZXZlciwgZnVuY3Rpb24oZXJyLCB2YWx1ZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgICAga25vd25MZW5ndGggKz0gbGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY2IobnVsbCwga25vd25MZW5ndGgpO1xuICB9KTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zdWJtaXQgPSBmdW5jdGlvbihwYXJhbXMsIGNiKSB7XG4gIHZhciByZXF1ZXN0XG4gICAgLCBvcHRpb25zXG4gICAgLCBkZWZhdWx0cyA9IHttZXRob2Q6ICdwb3N0J31cbiAgICA7XG5cbiAgLy8gcGFyc2UgcHJvdmlkZWQgdXJsIGlmIGl0J3Mgc3RyaW5nXG4gIC8vIG9yIHRyZWF0IGl0IGFzIG9wdGlvbnMgb2JqZWN0XG4gIGlmICh0eXBlb2YgcGFyYW1zID09ICdzdHJpbmcnKSB7XG5cbiAgICBwYXJhbXMgPSBwYXJzZVVybChwYXJhbXMpO1xuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZSh7XG4gICAgICBwb3J0OiBwYXJhbXMucG9ydCxcbiAgICAgIHBhdGg6IHBhcmFtcy5wYXRobmFtZSxcbiAgICAgIGhvc3Q6IHBhcmFtcy5ob3N0bmFtZSxcbiAgICAgIHByb3RvY29sOiBwYXJhbXMucHJvdG9jb2xcbiAgICB9LCBkZWZhdWx0cyk7XG5cbiAgLy8gdXNlIGN1c3RvbSBwYXJhbXNcbiAgfSBlbHNlIHtcblxuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZShwYXJhbXMsIGRlZmF1bHRzKTtcbiAgICAvLyBpZiBubyBwb3J0IHByb3ZpZGVkIHVzZSBkZWZhdWx0IG9uZVxuICAgIGlmICghb3B0aW9ucy5wb3J0KSB7XG4gICAgICBvcHRpb25zLnBvcnQgPSBvcHRpb25zLnByb3RvY29sID09ICdodHRwczonID8gNDQzIDogODA7XG4gICAgfVxuICB9XG5cbiAgLy8gcHV0IHRoYXQgZ29vZCBjb2RlIGluIGdldEhlYWRlcnMgdG8gc29tZSB1c2VcbiAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKHBhcmFtcy5oZWFkZXJzKTtcblxuICAvLyBodHRwcyBpZiBzcGVjaWZpZWQsIGZhbGxiYWNrIHRvIGh0dHAgaW4gYW55IG90aGVyIGNhc2VcbiAgaWYgKG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicpIHtcbiAgICByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gZ2V0IGNvbnRlbnQgbGVuZ3RoIGFuZCBmaXJlIGF3YXlcbiAgdGhpcy5nZXRMZW5ndGgoZnVuY3Rpb24oZXJyLCBsZW5ndGgpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG5cbiAgICB0aGlzLnBpcGUocmVxdWVzdCk7XG4gICAgaWYgKGNiKSB7XG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNiKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgY2IuYmluZCh0aGlzLCBudWxsKSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCJ2YXIgZGVmZXIgPSByZXF1aXJlKCcuL2RlZmVyLmpzJyk7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhc3luYztcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5XG4gKiBldmVuIGlmIGNhbGxiYWNrIGl0c2VsZiBpcyBub3RcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gY2FsbGJhY2sgdG8gaW52b2tlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYXVnbWVudGVkIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGFzeW5jKGNhbGxiYWNrKVxue1xuICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuXG4gIC8vIGNoZWNrIGlmIGFzeW5jIGhhcHBlbmVkXG4gIGRlZmVyKGZ1bmN0aW9uKCkgeyBpc0FzeW5jID0gdHJ1ZTsgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFzeW5jX2NhbGxiYWNrKGVyciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGlzQXN5bmMpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgZGVmZXIoZnVuY3Rpb24gbmV4dFRpY2tfY2FsbGJhY2soKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIiwiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHN0YXRlO1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqIGZvciBpdGVyYXRpb24gb3ZlciBsaXN0XG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGxpc3QgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb258bnVsbH0gc29ydE1ldGhvZCAtIGZ1bmN0aW9uIHRvIHVzZSBmb3Iga2V5cyBzb3J0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIHRvIGtlZXAgdGhlbSBhcyBpc1xuICogQHJldHVybnMge29iamVjdH0gLSBpbml0aWFsIHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBzdGF0ZShsaXN0LCBzb3J0TWV0aG9kKVxue1xuICB2YXIgaXNOYW1lZExpc3QgPSAhQXJyYXkuaXNBcnJheShsaXN0KVxuICAgICwgaW5pdFN0YXRlID1cbiAgICB7XG4gICAgICBpbmRleCAgICA6IDAsXG4gICAgICBrZXllZExpc3Q6IGlzTmFtZWRMaXN0IHx8IHNvcnRNZXRob2QgPyBPYmplY3Qua2V5cyhsaXN0KSA6IG51bGwsXG4gICAgICBqb2JzICAgICA6IHt9LFxuICAgICAgcmVzdWx0cyAgOiBpc05hbWVkTGlzdCA/IHt9IDogW10sXG4gICAgICBzaXplICAgICA6IGlzTmFtZWRMaXN0ID8gT2JqZWN0LmtleXMobGlzdCkubGVuZ3RoIDogbGlzdC5sZW5ndGhcbiAgICB9XG4gICAgO1xuXG4gIGlmIChzb3J0TWV0aG9kKVxuICB7XG4gICAgLy8gc29ydCBhcnJheSBrZXlzIGJhc2VkIG9uIGl0J3MgdmFsdWVzXG4gICAgLy8gc29ydCBvYmplY3QncyBrZXlzIGp1c3Qgb24gb3duIG1lcml0XG4gICAgaW5pdFN0YXRlLmtleWVkTGlzdC5zb3J0KGlzTmFtZWRMaXN0ID8gc29ydE1ldGhvZCA6IGZ1bmN0aW9uKGEsIGIpXG4gICAge1xuICAgICAgcmV0dXJuIHNvcnRNZXRob2QobGlzdFthXSwgbGlzdFtiXSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaW5pdFN0YXRlO1xufVxuIiwidmFyIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gICwgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gdGVybWluYXRvcjtcblxuLyoqXG4gKiBUZXJtaW5hdGVzIGpvYnMgaW4gdGhlIGF0dGFjaGVkIHN0YXRlIGNvbnRleHRcbiAqXG4gKiBAdGhpcyAgQXN5bmNLaXRTdGF0ZSNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZmluYWwgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRlcm1pbmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHRlcm1pbmF0b3IoY2FsbGJhY2spXG57XG4gIGlmICghT2JqZWN0LmtleXModGhpcy5qb2JzKS5sZW5ndGgpXG4gIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBmYXN0IGZvcndhcmQgaXRlcmF0aW9uIGluZGV4XG4gIHRoaXMuaW5kZXggPSB0aGlzLnNpemU7XG5cbiAgLy8gYWJvcnQgam9ic1xuICBhYm9ydCh0aGlzKTtcblxuICAvLyBzZW5kIGJhY2sgcmVzdWx0cyB3ZSBoYXZlIHNvIGZhclxuICBhc3luYyhjYWxsYmFjaykobnVsbCwgdGhpcy5yZXN1bHRzKTtcbn1cbiIsInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWxPcmRlcmVkO1xuLy8gc29ydGluZyBoZWxwZXJzXG5tb2R1bGUuZXhwb3J0cy5hc2NlbmRpbmcgID0gYXNjZW5kaW5nO1xubW9kdWxlLmV4cG9ydHMuZGVzY2VuZGluZyA9IGRlc2NlbmRpbmc7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIHNvcnRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gc29ydE1ldGhvZCAtIGN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgc29ydE1ldGhvZCwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0LCBzb3J0TWV0aG9kKTtcblxuICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24gaXRlcmF0b3JIYW5kbGVyKGVycm9yLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZXgrKztcblxuICAgIC8vIGFyZSB3ZSB0aGVyZSB5ZXQ/XG4gICAgaWYgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gICAge1xuICAgICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGl0ZXJhdG9ySGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZG9uZSBoZXJlXG4gICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cblxuLypcbiAqIC0tIFNvcnQgbWV0aG9kc1xuICovXG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIC0xICogYXNjZW5kaW5nKGEsIGIpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkR09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJyAmJiAhISRHT1BTLmY7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICRHT1BTLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxzKGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogRkFJTFNfT05fUFJJTUlUSVZFUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gJEdPUFMuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNyBPYmplY3Quc2VhbChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdzZWFsJywgZnVuY3Rpb24gKCRzZWFsKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzZWFsKGl0KSB7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMS4zLjI1IFN0cmluZy5wcm90b3R5cGUudHJpbSgpXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltJywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAzKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy45IFN0cmluZy5wcm90b3R5cGUuaXRhbGljcygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG52YXIgJHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBseiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgcmV0dXJuIG51bSA+IDkgPyBudW0gOiAnMCcgKyBudW07XG59O1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGQgPSB0aGlzO1xuICB2YXIgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG0gPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgcyA9IHkgPCAwID8gJy0nIDogeSA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHMgKyAoJzAwMDAwJyArIE1hdGguYWJzKHkpKS5zbGljZShzID8gLTYgOiAtNCkgK1xuICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAnVCcgKyBseihkLmdldFVUQ0hvdXJzKCkpICsgJzonICsgbHooZC5nZXRVVENNaW51dGVzKCkpICtcbiAgICAnOicgKyBseihkLmdldFVUQ1NlY29uZHMoKSkgKyAnLicgKyAobSA+IDk5ID8gbSA6ICcwJyArIGx6KG0pKSArICdaJztcbn0gOiAkdG9JU09TdHJpbmc7XG4iLCJ2YXIgRGF0ZVByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSBEYXRlUHJvdG9bVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvLmdldFRpbWU7XG5pZiAobmV3IERhdGUoTmFOKSArICcnICE9IElOVkFMSURfREFURSkge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKERhdGVQcm90bywgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAkdG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIFdlYktpdCBBcnJheS5vZiBpc24ndCBnZW5lcmljXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKEFycmF5Lm9mLmNhbGwoRikgaW5zdGFuY2VvZiBGKTtcbn0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4zIEFycmF5Lm9mKCAuLi5pdGVtcylcbiAgb2Y6IGZ1bmN0aW9uIG9mKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gbmV3ICh0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5KShhTGVuKTtcbiAgICB3aGlsZSAoYUxlbiA+IGluZGV4KSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBhTGVuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5Sm9pbiA9IFtdLmpvaW47XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBzdHJpbmdzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChyZXF1aXJlKCcuL19pb2JqZWN0JykgIT0gT2JqZWN0IHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoYXJyYXlKb2luKSksICdBcnJheScsIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodG9JT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgyKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5ldmVyeSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjUgLyAxNS40LjQuMTYgQXJyYXkucHJvdG90eXBlLmV2ZXJ5KGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2VSaWdodCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE5IC8gMTUuNC40LjIyIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodChjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsInJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ0FycmF5Jyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjcgUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS44IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnZXRQcm90byA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICByZXR1cm4gZ2V0UHJvdG8oYW5PYmplY3QodGFyZ2V0KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsIi8vIDI2LjEuMTQgUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzZXRQcm90byA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpO1xuXG5pZiAoc2V0UHJvdG8pICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICBzZXRQcm90by5jaGVjayh0YXJnZXQsIHByb3RvKTtcbiAgICB0cnkge1xuICAgICAgc2V0UHJvdG8uc2V0KHRhcmdldCwgcHJvdG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODAgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIFJBRF9QRVJfREVHID0gMTgwIC8gTWF0aC5QSTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBkZWdyZWVzOiBmdW5jdGlvbiBkZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqIFJBRF9QRVJfREVHO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNjYWxlOiByZXF1aXJlKCcuL19tYXRoLXNjYWxlJykgfSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yd2FsZHJvbi90YzM5LW5vdGVzL2Jsb2IvbWFzdGVyL2VzNi8yMDE0LTA5L3NlcHQtMjUubWQjNTEwLWdsb2JhbGFzYXAtZm9yLWVucXVldWluZy1hLW1pY3JvdGFza1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIHByb2Nlc3MgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBPQlNFUlZBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ29ic2VydmFibGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBSRVRVUk4gPSBmb3JPZi5SRVRVUk47XG5cbnZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyB1bmRlZmluZWQgOiBhRnVuY3Rpb24oZm4pO1xufTtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHZhciBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvbi5fYyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwKCk7XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb24uX28gPT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBjbG9zZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgYW5PYmplY3Qob2JzZXJ2ZXIpO1xuICB0aGlzLl9jID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vID0gb2JzZXJ2ZXI7XG4gIG9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihvYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBjbGVhbnVwID0gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgIGVsc2UgYUZ1bmN0aW9uKGNsZWFudXApO1xuICAgICAgdGhpcy5fYyA9IGNsZWFudXA7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25DbG9zZWQodGhpcykpIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeyBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTsgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdGhpcy5fcyA9IHN1YnNjcmlwdGlvbjtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkgdGhyb3cgdmFsdWU7XG4gICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuZXJyb3IpO1xuICAgICAgaWYgKCFtKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHZhbHVlID0gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmNvbXBsZXRlKTtcbiAgICAgICAgdmFsdWUgPSBtID8gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScsICdfZicpLl9mID0gYUZ1bmN0aW9uKHN1YnNjcmliZXIpO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX2YpO1xuICB9LFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgKGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGF0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUsIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbSh4KSB7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpW09CU0VSVkFCTEVdKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGZvck9mKHgsIGZhbHNlLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gUkVUVVJOO1xuICAgICAgICAgICAgfSkgPT09IFJFVFVSTikgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBlO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9LFxuICBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVtcyA9IG5ldyBBcnJheShsKTsgaSA8IGw7KSBpdGVtc1tpXSA9IGFyZ3VtZW50c1tpKytdO1xuICAgIHJldHVybiBuZXcgKHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlKShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2pdKTtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9XG59KTtcblxuaGlkZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZSB9KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnT2JzZXJ2YWJsZScpO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCJpbXBvcnQgcGluQnlIYXNoIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2gnO1xuaW1wb3J0IGhhc2hNZXRhZGF0YSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaE1ldGFkYXRhJztcbmltcG9ydCBoYXNoUGluUG9saWN5IGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9oYXNoUGluUG9saWN5JztcbmltcG9ydCBwaW5GaWxlVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5GaWxlVG9JUEZTJztcbmltcG9ydCBwaW5Gcm9tRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkZyb21GUyc7XG5pbXBvcnQgcGluSlNPTlRvSVBGUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluSlNPTlRvSVBGUyc7XG5pbXBvcnQgcGluSm9icyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9waW5Kb2JzJztcbmltcG9ydCB1bnBpbiBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvdW5waW4nO1xuaW1wb3J0IHVzZXJQaW5Qb2xpY3kgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3VzZXJQaW5Qb2xpY3knO1xuaW1wb3J0IHRlc3RBdXRoZW50aWNhdGlvbiBmcm9tICcuL2NvbW1hbmRzL2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uJztcbmltcG9ydCBwaW5MaXN0IGZyb20gJy4vY29tbWFuZHMvZGF0YS9waW5MaXN0L3Bpbkxpc3QnO1xuaW1wb3J0IHVzZXJQaW5uZWREYXRhVG90YWwgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWwnO1xuXG4vLyBPUFRJT05TXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IG51bGw+fSBQaW5hdGFNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhTWV0YWRhdGFGaWx0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV1cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcsIG9wOiBzdHJpbmd9Pn0ga2V5dmFsdWVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmcsIGRlc2lyZWRSZXBsaWNhdGlvbkNvdW50OiBudW1iZXJ9fSBQaW5hdGFQaW5Qb2xpY3lJdGVtXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5CeUhhc2hPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbaG9zdE5vZGVzXVxuICogQHByb3BlcnR5IHt7cmVnaW9uczogUGluYXRhUGluUG9saWN5SXRlbVtdfX0gW2N1c3RvbVBpblBvbGljeV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkJ5SGFzaFBpbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7UGluYXRhTWV0YWRhdGF9IFtwaW5hdGFNZXRhZGF0YV1cbiAqIEBwcm9wZXJ0eSB7UGluYXRhUGluQnlIYXNoT3B0aW9uc30gW3BpbmF0YU9wdGlvbnNdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFPcHRpb25zXG4gKiBAcHJvcGVydHkgezAgfCAxfSBbY2lkVmVyc2lvbl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3dyYXBXaXRoRGlyZWN0b3J5XVxuICogQHByb3BlcnR5IHt7cmVnaW9uczogUGluYXRhUGluUG9saWN5SXRlbVtdfX0gW2N1c3RvbVBpblBvbGljeV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7UGluYXRhTWV0YWRhdGF9IFtwaW5hdGFNZXRhZGF0YV1cbiAqIEBwcm9wZXJ0eSB7UGluYXRhT3B0aW9uc30gW3BpbmF0YU9wdGlvbnNdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5Kb2JzRmlsdGVyT3B0aW9uc1xuICogQHByb3BlcnR5IHsnQVNDJyB8ICdERVNDJ30gc29ydFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGF0dXNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2lwZnNfcGluX2hhc2hdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xpbWl0XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtvZmZzZXRdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5MaXN0RmlsdGVyT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtoYXNoQ29udGFpbnNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BpblN0YXJ0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwaW5FbmRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VucGluU3RhcnRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VucGluRW5kXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwaW5TaXplTWluXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwaW5TaXplTWF4XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGF0dXNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VMaW1pdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZU9mZnNldF1cbiAqIEBwcm9wZXJ0eSB7UGluYXRhTWV0YWRhdGFGaWx0ZXJ9IFttZXRhZGF0YV1cbiAqL1xuXG4vLyBSRVNQT05TRVNcblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5CeUhhc2hSZXNwb25zZVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXBmc0hhc2hcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0dXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQaW5hdGFQaW5SZXNwb25zZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElwZnNIYXNoXG4gKiBAcHJvcGVydHkge251bWJlcn0gUGluU2l6ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFRpbWVzdGFtcFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluSm9ic1Jlc3BvbnNlUm93XG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpcGZzX3Bpbl9oYXNoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0ZV9xdWV1ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbH0gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0YXR1c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluSm9ic1Jlc3BvbnNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7UGluYXRhUGluSm9ic1Jlc3BvbnNlUm93W119IHJvd3NcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBpbmF0YVBpbkxpc3RSZXNwb25zZVJvd1xuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXBmc19waW5faGFzaFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNpemVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVtYmVyfSB1c2VyX2lkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0ZV9waW5uZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRlX3VucGlubmVkXG4gKiBAcHJvcGVydHkge1BpbmF0YU1ldGFkYXRhfSBtZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhUGluTGlzdFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7UGluYXRhUGluTGlzdFJlc3BvbnNlUm93W119IHJvd3NcbiAqL1xuXG4vLyBNRVRIT0RTXG5cbi8qKlxuICogSGFzaCBtZXRhIGRhdGFcbiAqIEBjYWxsYmFjayBoYXNoTWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBpcGZzUGluSGFzaFxuICogQHBhcmFtIHtQaW5hdGFNZXRhZGF0YX0gbWV0YWRhdGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gKi9cblxuLyoqXG4gKiBIYXNoIHBpbiBwb2xpY3lcbiAqIEBjYWxsYmFjayBoYXNoUGluUG9saWN5XG4gKiBAcGFyYW0ge3N0cmluZ30gaXBmc1Bpbkhhc2hcbiAqIEBwYXJhbSB7e3JlZ2lvbnM6IFBpbmF0YVBpblBvbGljeUl0ZW1bXX19IG5ld1BpblBvbGljeVxuICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAqL1xuXG4vKipcbiAqIFBpbiBieSBoYXNoXG4gKiBAY2FsbGJhY2sgcGluQnlIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFRvUGluXG4gKiBAcGFyYW0ge1BpbmF0YVBpbkJ5SGFzaFBpbk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluQnlIYXNoUmVzcG9uc2U+fVxuICovXG5cbi8qKlxuICogUGluIGZpbGUgdG8gSVBGU1xuICogQGNhbGxiYWNrIHBpbkZpbGVUb0lQRlNcbiAqIEBwYXJhbSB7UmVhZFN0cmVhbX0gcmVhZGFibGVTdHJlYW1cbiAqIEBwYXJhbSB7UGluYXRhUGluT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5SZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBQaW4gZnJvbSBGU1xuICogQGNhbGxiYWNrIHBpbkZyb21GU1xuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGhcbiAqIEBwYXJhbSB7UGluYXRhUGluT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQaW5hdGFQaW5SZXNwb25zZT59XG4gKi9cblxuLyoqXG4gKiBQaW4gSm9ic1xuICogQGNhbGxiYWNrIHBpbkpvYnNcbiAqIEBwYXJhbSB7UGluYXRhUGluSm9ic0ZpbHRlck9wdGlvbnN9IFtmaWx0ZXJzXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluSm9ic1Jlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFBpbiBKU09OIHRvIElQRlNcbiAqIEBjYWxsYmFjayBwaW5KU09OVG9JUEZTXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHtQaW5hdGFQaW5PcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBpbmF0YVBpblJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFVucGluXG4gKiBAY2FsbGJhY2sgdW5waW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoVG9VbnBpblxuICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAqL1xuXG4vKipcbiAqIFVzZXIgUGluIFBvbGljeVxuICogQGNhbGxiYWNrIHVzZXJQaW5Qb2xpY3lcbiAqIEBwYXJhbSB7e3JlZ2lvbnM6IFBpbmF0YVBpblBvbGljeUl0ZW1bXX19IG5ld1BpblBvbGljeVxuICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAqL1xuXG4vKipcbiAqIFRlc3QgQXV0aGVudGljYXRpb25cbiAqIEBjYWxsYmFjayB0ZXN0QXV0aGVudGljYXRpb25cbiAqIEByZXR1cm5zIHtQcm9taXNlPHthdXRoZW50aWNhdGVkOiBib29sZWFufT59XG4gKi9cblxuLyoqXG4gKiBQaW4gTGlzdFxuICogQGNhbGxiYWNrIHBpbkxpc3RcbiAqIEBwYXJhbSB7UGluYXRhUGluTGlzdEZpbHRlck9wdGlvbnN9IFtmaWx0ZXJzXVxuICogQHJldHVybnMge1Byb21pc2U8UGluYXRhUGluTGlzdFJlc3BvbnNlPn1cbiAqL1xuXG4vKipcbiAqIFVzZXIgUGlubmVkIERhdGEgVG90YWxcbiAqIEBjYWxsYmFjayB1c2VyUGlubmVkRGF0YVRvdGFsXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUGluYXRhQ2xpZW50XG4gKiBAcHJvcGVydHkge3BpbkJ5SGFzaH0gcGluQnlIYXNoXG4gKiBAcHJvcGVydHkge2hhc2hNZXRhZGF0YX0gaGFzaE1ldGFkYXRhXG4gKiBAcHJvcGVydHkge2hhc2hQaW5Qb2xpY3l9IGhhc2hQaW5Qb2xpY3lcbiAqIEBwcm9wZXJ0eSB7cGluRmlsZVRvSVBGU30gcGluRmlsZVRvSVBGU1xuICogQHByb3BlcnR5IHtwaW5Gcm9tRlN9IHBpbkZyb21GU1xuICogQHByb3BlcnR5IHtwaW5KU09OVG9JUEZTfSBwaW5KU09OVG9JUEZTXG4gKiBAcHJvcGVydHkge3BpbkpvYnN9IHBpbkpvYnNcbiAqIEBwcm9wZXJ0eSB7dW5waW59IHVucGluXG4gKiBAcHJvcGVydHkge3VzZXJQaW5Qb2xpY3l9IHVzZXJQaW5Qb2xpY3lcbiAqIEBwcm9wZXJ0eSB7dGVzdEF1dGhlbnRpY2F0aW9ufSB0ZXN0QXV0aGVudGljYXRpb25cbiAqIEBwcm9wZXJ0eSB7cGluTGlzdH0gcGluTGlzdFxuICogQHByb3BlcnR5IHt1c2VyUGlubmVkRGF0YVRvdGFsfSB1c2VyUGlubmVkRGF0YVRvdGFsXG4gKi9cblxuLyoqXG4gKiBQaW5hdGEgQ2xpZW50XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHJldHVybnMge1BpbmF0YUNsaWVudH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluYXRhQ2xpZW50KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgbGV0IGNsaWVudCA9IHt9O1xuXG4gICAgLy8gIHNldHRpbmcgdXAgdGhlIGFjdHVhbCBjYWxscyB5b3UgY2FuIG1ha2UgdXNpbmcgdGhpcyBwYWNrYWdlXG4gICAgY2xpZW50LnBpbkJ5SGFzaCA9IGZ1bmN0aW9uIChoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkJ5SGFzaChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvUGluLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5oYXNoTWV0YWRhdGEgPSBmdW5jdGlvbiAoaXBmc1Bpbkhhc2gsIG1ldGFkYXRhKSB7XG4gICAgICAgIHJldHVybiBoYXNoTWV0YWRhdGEocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBtZXRhZGF0YSk7XG4gICAgfTtcbiAgICBjbGllbnQuaGFzaFBpblBvbGljeSA9IGZ1bmN0aW9uIChpcGZzUGluSGFzaCwgbmV3UGluUG9saWN5KSB7XG4gICAgICAgIHJldHVybiBoYXNoUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbmV3UGluUG9saWN5KTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5GaWxlVG9JUEZTID0gZnVuY3Rpb24gKHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5GaWxlVG9JUEZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCByZWFkYWJsZVN0cmVhbSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluRnJvbUZTID0gZnVuY3Rpb24gKHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkZyb21GUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgc291cmNlUGF0aCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluSlNPTlRvSVBGUyA9IGZ1bmN0aW9uIChib2R5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5KU09OVG9JUEZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBib2R5LCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5Kb2JzID0gZnVuY3Rpb24gKGZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkpvYnMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpO1xuICAgIH07XG4gICAgY2xpZW50LnVucGluID0gZnVuY3Rpb24gKGhhc2hUb1VucGluKSB7XG4gICAgICAgIHJldHVybiB1bnBpbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvVW5waW4pO1xuICAgIH07XG4gICAgY2xpZW50LnVzZXJQaW5Qb2xpY3kgPSBmdW5jdGlvbiAobmV3UGluUG9saWN5KSB7XG4gICAgICAgIHJldHVybiB1c2VyUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBuZXdQaW5Qb2xpY3kpO1xuICAgIH07XG4gICAgY2xpZW50LnRlc3RBdXRoZW50aWNhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RBdXRoZW50aWNhdGlvbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG4gICAgfTtcbiAgICBjbGllbnQucGluTGlzdCA9IGZ1bmN0aW9uIChmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBwaW5MaXN0KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKTtcbiAgICB9O1xuICAgIGNsaWVudC51c2VyUGlubmVkRGF0YVRvdGFsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG4gICAgfTtcbiAgICByZXR1cm4gY2xpZW50O1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBQaW4gQnkgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YUFwaUtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBpbmF0YVNlY3JldEFwaUtleVxuICogQHBhcmFtIHsqfSBoYXNoVG9QaW5cbiAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkJ5SGFzaChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvUGluLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGlmICghaGFzaFRvUGluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaFRvUGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBwaW5uaW5nIGJ5IGhhc2gnKTtcbiAgICB9XG4gICAgaWYgKCFpc0lQRlMuY2lkKGhhc2hUb1BpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgYW4gaW52YWxpZCBJUEZTIENJRCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5CeUhhc2hgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGhhc2hUb1BpbjogaGFzaFRvUGluLFxuICAgICAgICBwaW5hdGFPcHRpb25zOiB7fVxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICBib2R5LnBpbmF0YU9wdGlvbnMgPSBvcHRpb25zLnBpbmF0YU9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICBib2R5LnBpbmF0YU1ldGFkYXRhID0gb3B0aW9ucy5waW5hdGFNZXRhZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYWRkaW5nIHRvIHBpbiBxdWV1ZTogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoYXhpb3MuZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbihkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZVxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhY29uZmlnLnJlc3BvbnNlVHlwZSB8fCBjb25maWcucmVzcG9uc2VUeXBlID09PSAndGV4dCcgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcih0aW1lb3V0RXJyb3JNZXNzYWdlLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdERhdGEpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkRnVsbFBhdGggPSByZXF1aXJlKCcuLi9jb3JlL2J1aWxkRnVsbFBhdGgnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBsb2NhdGlvbikge1xuICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gbG9jYXRpb247XG5cbiAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICBpZiAocHJveHkuYXV0aCkge1xuICAgIHZhciBiYXNlNjQgPSBCdWZmZXIuZnJvbShwcm94eS5hdXRoLnVzZXJuYW1lICsgJzonICsgcHJveHkuYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgfVxuXG4gIC8vIElmIGEgcHJveHkgaXMgdXNlZCwgYW55IHJlZGlyZWN0cyBtdXN0IGFsc28gcGFzcyB0aHJvdWdoIHRoZSBwcm94eVxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3Rpb24pIHtcbiAgICByZWRpcmVjdGlvbi5oZWFkZXJzLmhvc3QgPSByZWRpcmVjdGlvbi5ob3N0O1xuICAgIHNldFByb3h5KHJlZGlyZWN0aW9uLCBwcm94eSwgcmVkaXJlY3Rpb24uaHJlZik7XG4gIH07XG59XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZVByb21pc2UsIHJlamVjdFByb21pc2UpIHtcbiAgICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHZhbHVlKTtcbiAgICB9O1xuICAgIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICAgIHJlamVjdFByb21pc2UodmFsdWUpO1xuICAgIH07XG4gICAgdmFyIGRhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCFoZWFkZXJzWydVc2VyLUFnZW50J10gJiYgIWhlYWRlcnNbJ3VzZXItYWdlbnQnXSkge1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBwa2cudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXlCdWZmZXIsIGEgQnVmZmVyLCBvciBhIFN0cmVhbScsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIHZhciBhdXRoID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIGF1dGggPSB1c2VybmFtZSArICc6JyArIHBhc3N3b3JkO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHZhciBwYXJzZWQgPSB1cmwucGFyc2UoZnVsbFBhdGgpO1xuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonO1xuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC5hdXRoKSB7XG4gICAgICB2YXIgdXJsQXV0aCA9IHBhcnNlZC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgdXJsVXNlcm5hbWUgPSB1cmxBdXRoWzBdIHx8ICcnO1xuICAgICAgdmFyIHVybFBhc3N3b3JkID0gdXJsQXV0aFsxXSB8fCAnJztcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmIChhdXRoKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIHZhciBpc0h0dHBzUmVxdWVzdCA9IGlzSHR0cHMudGVzdChwcm90b2NvbCk7XG4gICAgdmFyIGFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGFnZW50OiBhZ2VudCxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGg6IGF1dGhcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRQYXRoKSB7XG4gICAgICBvcHRpb25zLnNvY2tldFBhdGggPSBjb25maWcuc29ja2V0UGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHBhcnNlZC5wb3J0O1xuICAgIH1cblxuICAgIHZhciBwcm94eSA9IGNvbmZpZy5wcm94eTtcbiAgICBpZiAoIXByb3h5ICYmIHByb3h5ICE9PSBmYWxzZSkge1xuICAgICAgdmFyIHByb3h5RW52ID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpICsgJ19wcm94eSc7XG4gICAgICB2YXIgcHJveHlVcmwgPSBwcm9jZXNzLmVudltwcm94eUVudl0gfHwgcHJvY2Vzcy5lbnZbcHJveHlFbnYudG9VcHBlckNhc2UoKV07XG4gICAgICBpZiAocHJveHlVcmwpIHtcbiAgICAgICAgdmFyIHBhcnNlZFByb3h5VXJsID0gdXJsLnBhcnNlKHByb3h5VXJsKTtcbiAgICAgICAgdmFyIG5vUHJveHlFbnYgPSBwcm9jZXNzLmVudi5ub19wcm94eSB8fCBwcm9jZXNzLmVudi5OT19QUk9YWTtcbiAgICAgICAgdmFyIHNob3VsZFByb3h5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAobm9Qcm94eUVudikge1xuICAgICAgICAgIHZhciBub1Byb3h5ID0gbm9Qcm94eUVudi5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiB0cmltKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNob3VsZFByb3h5ID0gIW5vUHJveHkuc29tZShmdW5jdGlvbiBwcm94eU1hdGNoKHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKCFwcm94eUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudCA9PT0gJyonKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3h5RWxlbWVudFswXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgcGFyc2VkLmhvc3RuYW1lLnN1YnN0cihwYXJzZWQuaG9zdG5hbWUubGVuZ3RoIC0gcHJveHlFbGVtZW50Lmxlbmd0aCkgPT09IHByb3h5RWxlbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZC5ob3N0bmFtZSA9PT0gcHJveHlFbGVtZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFByb3h5KSB7XG4gICAgICAgICAgcHJveHkgPSB7XG4gICAgICAgICAgICBob3N0OiBwYXJzZWRQcm94eVVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnQsXG4gICAgICAgICAgICBwcm90b2NvbDogcGFyc2VkUHJveHlVcmwucHJvdG9jb2xcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHBhcnNlZFByb3h5VXJsLmF1dGgpIHtcbiAgICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBwcm94eS5hdXRoID0ge1xuICAgICAgICAgICAgICB1c2VybmFtZTogcHJveHlVcmxBdXRoWzBdLFxuICAgICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIHByb3h5LCBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aCk7XG4gICAgfVxuXG4gICAgdmFyIHRyYW5zcG9ydDtcbiAgICB2YXIgaXNIdHRwc1Byb3h5ID0gaXNIdHRwc1JlcXVlc3QgJiYgKHByb3h5ID8gaXNIdHRwcy50ZXN0KHByb3h5LnByb3RvY29sKSA6IHRydWUpO1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1Byb3h5ID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUHJveHkgPyBodHRwc0ZvbGxvdyA6IGh0dHBGb2xsb3c7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEpIHtcbiAgICAgIG9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IGNvbmZpZy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHZhciByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuXG4gICAgICAvLyBpZiBubyBjb250ZW50LCBpcyBIRUFEIHJlcXVlc3Qgb3IgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0ICYmIGxhc3RSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSkge1xuICAgICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1EYXRhKGNodW5rKSB7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpLmxlbmd0aCA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIGNvbmZpZywgbnVsbCwgbGFzdFJlcXVlc3QpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YS50b1N0cmluZyhjb25maWcucmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNwb25zZUVuY29kaW5nIHx8IGNvbmZpZy5yZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gdXRpbHMuc3RyaXBCT00ocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RFcnJvcihlcnIpIHtcbiAgICAgIGlmIChyZXEuYWJvcnRlZCAmJiBlcnIuY29kZSAhPT0gJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnKSByZXR1cm47XG4gICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCByZXEpKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSByZXF1ZXN0IHRpbWVvdXRcbiAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3JpbmcgQ1BVIGxpdHRsZSBieSBsaXR0bGUuXG4gICAgICAvLyBDbGllbnRSZXF1ZXN0LnNldFRpbWVvdXQgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3BlY2lmeSBtaWxsaXNlY29uZHMsIGFuZCBjYW4gbWFrZSBzdXJlIHRoYXQgYWJvcnQoKSB3aWxsIGJlIGZpcmVkIGFmdGVyIGNvbm5lY3QuXG4gICAgICByZXEuc2V0VGltZW91dChjb25maWcudGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGRhdGEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRXJyb3IoZXJyKSB7XG4gICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgICAgfSkucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXNzZXJ0XCIpOyIsInZhciBkZWJ1ZztcbnRyeSB7XG4gIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbn1cbmNhdGNoIChlcnJvcikge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZGVidWc7XG4iLCIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oKD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICBpZiAobXMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtcyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgcmV0dXJuIHBsdXJhbChtcywgZCwgJ2RheScpIHx8XG4gICAgcGx1cmFsKG1zLCBoLCAnaG91cicpIHx8XG4gICAgcGx1cmFsKG1zLCBtLCAnbWludXRlJykgfHxcbiAgICBwbHVyYWwobXMsIHMsICdzZWNvbmQnKSB8fFxuICAgIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBuLCBuYW1lKSB7XG4gIGlmIChtcyA8IG4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1zIDwgbiAqIDEuNSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICB9XG4gIHJldHVybiBNYXRoLmNlaWwobXMgLyBuKSArICcgJyArIG5hbWUgKyAncyc7XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5kZXN0cm95ID0gdXRpbC5kZXByZWNhdGUoXG5cdCgpID0+IHt9LFxuXHQnSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLidcbik7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWzYsIDIsIDMsIDQsIDUsIDFdO1xuXG50cnkge1xuXHQvLyBPcHRpb25hbCBkZXBlbmRlbmN5IChhcyBpbiwgZG9lc24ndCBuZWVkIHRvIGJlIGluc3RhbGxlZCwgTk9UIGxpa2Ugb3B0aW9uYWxEZXBlbmRlbmNpZXMgaW4gcGFja2FnZS5qc29uKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cdGNvbnN0IHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuXG5cdGlmIChzdXBwb3J0c0NvbG9yICYmIChzdXBwb3J0c0NvbG9yLnN0ZGVyciB8fCBzdXBwb3J0c0NvbG9yKS5sZXZlbCA+PSAyKSB7XG5cdFx0ZXhwb3J0cy5jb2xvcnMgPSBbXG5cdFx0XHQyMCxcblx0XHRcdDIxLFxuXHRcdFx0MjYsXG5cdFx0XHQyNyxcblx0XHRcdDMyLFxuXHRcdFx0MzMsXG5cdFx0XHQzOCxcblx0XHRcdDM5LFxuXHRcdFx0NDAsXG5cdFx0XHQ0MSxcblx0XHRcdDQyLFxuXHRcdFx0NDMsXG5cdFx0XHQ0NCxcblx0XHRcdDQ1LFxuXHRcdFx0NTYsXG5cdFx0XHQ1Nyxcblx0XHRcdDYyLFxuXHRcdFx0NjMsXG5cdFx0XHQ2OCxcblx0XHRcdDY5LFxuXHRcdFx0NzQsXG5cdFx0XHQ3NSxcblx0XHRcdDc2LFxuXHRcdFx0NzcsXG5cdFx0XHQ3OCxcblx0XHRcdDc5LFxuXHRcdFx0ODAsXG5cdFx0XHQ4MSxcblx0XHRcdDkyLFxuXHRcdFx0OTMsXG5cdFx0XHQ5OCxcblx0XHRcdDk5LFxuXHRcdFx0MTEyLFxuXHRcdFx0MTEzLFxuXHRcdFx0MTI4LFxuXHRcdFx0MTI5LFxuXHRcdFx0MTM0LFxuXHRcdFx0MTM1LFxuXHRcdFx0MTQ4LFxuXHRcdFx0MTQ5LFxuXHRcdFx0MTYwLFxuXHRcdFx0MTYxLFxuXHRcdFx0MTYyLFxuXHRcdFx0MTYzLFxuXHRcdFx0MTY0LFxuXHRcdFx0MTY1LFxuXHRcdFx0MTY2LFxuXHRcdFx0MTY3LFxuXHRcdFx0MTY4LFxuXHRcdFx0MTY5LFxuXHRcdFx0MTcwLFxuXHRcdFx0MTcxLFxuXHRcdFx0MTcyLFxuXHRcdFx0MTczLFxuXHRcdFx0MTc4LFxuXHRcdFx0MTc5LFxuXHRcdFx0MTg0LFxuXHRcdFx0MTg1LFxuXHRcdFx0MTk2LFxuXHRcdFx0MTk3LFxuXHRcdFx0MTk4LFxuXHRcdFx0MTk5LFxuXHRcdFx0MjAwLFxuXHRcdFx0MjAxLFxuXHRcdFx0MjAyLFxuXHRcdFx0MjAzLFxuXHRcdFx0MjA0LFxuXHRcdFx0MjA1LFxuXHRcdFx0MjA2LFxuXHRcdFx0MjA3LFxuXHRcdFx0MjA4LFxuXHRcdFx0MjA5LFxuXHRcdFx0MjE0LFxuXHRcdFx0MjE1LFxuXHRcdFx0MjIwLFxuXHRcdFx0MjIxXG5cdFx0XTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0Ly8gU3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihrZXkgPT4ge1xuXHRyZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdC8vIENhbWVsLWNhc2Vcblx0Y29uc3QgcHJvcCA9IGtleVxuXHRcdC5zdWJzdHJpbmcoNilcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgaykgPT4ge1xuXHRcdFx0cmV0dXJuIGsudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblxuXHQvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcblx0bGV0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG5cdGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gZmFsc2U7XG5cdH0gZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHtcblx0XHR2YWwgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdHZhbCA9IE51bWJlcih2YWwpO1xuXHR9XG5cblx0b2JqW3Byb3BdID0gdmFsO1xuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzID9cblx0XHRCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKSA6XG5cdFx0dHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGNvbnN0IHtuYW1lc3BhY2U6IG5hbWUsIHVzZUNvbG9yc30gPSB0aGlzO1xuXG5cdGlmICh1c2VDb2xvcnMpIHtcblx0XHRjb25zdCBjID0gdGhpcy5jb2xvcjtcblx0XHRjb25zdCBjb2xvckNvZGUgPSAnXFx1MDAxQlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcblx0XHRjb25zdCBwcmVmaXggPSBgICAke2NvbG9yQ29kZX07MW0ke25hbWV9IFxcdTAwMUJbMG1gO1xuXG5cdFx0YXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuXHRcdGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFCWzBtJyk7XG5cdH0gZWxzZSB7XG5cdFx0YXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG5cdGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXQoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQoLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidHR5XCIpOyIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpKSB7XG5cdGZvcmNlQ29sb3IgPSBmYWxzZTtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IHRydWU7XG59XG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgfHwgcGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKHN0cmVhbSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChzdHJlYW0gJiYgIXN0cmVhbS5pc1RUWSAmJiBmb3JjZUNvbG9yICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yID8gMSA6IDA7XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBOb2RlLmpzIDcuNS4wIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIE5vZGUuanMgdG8gaW5jbHVkZSBhIHBhdGNoIHRvXG5cdFx0Ly8gbGlidXYgdGhhdCBlbmFibGVzIDI1NiBjb2xvciBvdXRwdXQgb24gV2luZG93cy4gQW55dGhpbmcgZWFybGllciBhbmQgaXRcblx0XHQvLyB3b24ndCB3b3JrLiBIb3dldmVyLCBoZXJlIHdlIHRhcmdldCBOb2RlLmpzIDggYXQgbWluaW11bSBhcyBpdCBpcyBhbiBMVFNcblx0XHQvLyByZWxlYXNlLCBhbmQgTm9kZS5qcyA3IGlzIG5vdC4gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93c1xuXHRcdC8vIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLiBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlXG5cdFx0Ly8gdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKVswXSkgPj0gOCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRvdXQpLFxuXHRzdGRlcnI6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZGVycilcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2KSA9PiB7XG5cdGFyZ3YgPSBhcmd2IHx8IHByb2Nlc3MuYXJndjtcblx0Y29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKCctJykgPyAnJyA6IChmbGFnLmxlbmd0aCA9PT0gMSA/ICctJyA6ICctLScpO1xuXHRjb25zdCBwb3MgPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3MgPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3MgIT09IC0xICYmICh0ZXJtaW5hdG9yUG9zID09PSAtMSA/IHRydWUgOiBwb3MgPCB0ZXJtaW5hdG9yUG9zKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6bGliXCIpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gKHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JykgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCdWZmZXIucHJvdG90eXBlKVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogb2ZmICovXG4vKiBlc2xpbnQga2V5LXNwYWNpbmc6IG9mZiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgJ2lkZW50aXR5JzogICAweDAsXG4gICdzaGExJzogICAgICAgMHgxMSxcbiAgJ3NoYTItMjU2JzogICAweDEyLFxuICAnc2hhMi01MTInOiAgIDB4MTMsXG4gICdkYmwtc2hhMi0yNTYnOiAweDU2LFxuICAnc2hhMy0yMjQnOiAgIDB4MTcsXG4gICdzaGEzLTI1Nic6ICAgMHgxNixcbiAgJ3NoYTMtMzg0JzogICAweDE1LFxuICAnc2hhMy01MTInOiAgIDB4MTQsXG4gICdzaGFrZS0xMjgnOiAgMHgxOCxcbiAgJ3NoYWtlLTI1Nic6ICAweDE5LFxuICAna2VjY2FrLTIyNCc6IDB4MUEsXG4gICdrZWNjYWstMjU2JzogMHgxQixcbiAgJ2tlY2Nhay0zODQnOiAweDFDLFxuICAna2VjY2FrLTUxMic6IDB4MUQsXG4gICdtdXJtdXIzLTEyOCc6IDB4MjIsXG4gICdtdXJtdXIzLTMyJzogIDB4MjMsXG4gICdibGFrZTJiLTgnOiAgIDB4YjIwMSxcbiAgJ2JsYWtlMmItMTYnOiAgMHhiMjAyLFxuICAnYmxha2UyYi0yNCc6ICAweGIyMDMsXG4gICdibGFrZTJiLTMyJzogIDB4YjIwNCxcbiAgJ2JsYWtlMmItNDAnOiAgMHhiMjA1LFxuICAnYmxha2UyYi00OCc6ICAweGIyMDYsXG4gICdibGFrZTJiLTU2JzogIDB4YjIwNyxcbiAgJ2JsYWtlMmItNjQnOiAgMHhiMjA4LFxuICAnYmxha2UyYi03Mic6ICAweGIyMDksXG4gICdibGFrZTJiLTgwJzogIDB4YjIwYSxcbiAgJ2JsYWtlMmItODgnOiAgMHhiMjBiLFxuICAnYmxha2UyYi05Nic6ICAweGIyMGMsXG4gICdibGFrZTJiLTEwNCc6IDB4YjIwZCxcbiAgJ2JsYWtlMmItMTEyJzogMHhiMjBlLFxuICAnYmxha2UyYi0xMjAnOiAweGIyMGYsXG4gICdibGFrZTJiLTEyOCc6IDB4YjIxMCxcbiAgJ2JsYWtlMmItMTM2JzogMHhiMjExLFxuICAnYmxha2UyYi0xNDQnOiAweGIyMTIsXG4gICdibGFrZTJiLTE1Mic6IDB4YjIxMyxcbiAgJ2JsYWtlMmItMTYwJzogMHhiMjE0LFxuICAnYmxha2UyYi0xNjgnOiAweGIyMTUsXG4gICdibGFrZTJiLTE3Nic6IDB4YjIxNixcbiAgJ2JsYWtlMmItMTg0JzogMHhiMjE3LFxuICAnYmxha2UyYi0xOTInOiAweGIyMTgsXG4gICdibGFrZTJiLTIwMCc6IDB4YjIxOSxcbiAgJ2JsYWtlMmItMjA4JzogMHhiMjFhLFxuICAnYmxha2UyYi0yMTYnOiAweGIyMWIsXG4gICdibGFrZTJiLTIyNCc6IDB4YjIxYyxcbiAgJ2JsYWtlMmItMjMyJzogMHhiMjFkLFxuICAnYmxha2UyYi0yNDAnOiAweGIyMWUsXG4gICdibGFrZTJiLTI0OCc6IDB4YjIxZixcbiAgJ2JsYWtlMmItMjU2JzogMHhiMjIwLFxuICAnYmxha2UyYi0yNjQnOiAweGIyMjEsXG4gICdibGFrZTJiLTI3Mic6IDB4YjIyMixcbiAgJ2JsYWtlMmItMjgwJzogMHhiMjIzLFxuICAnYmxha2UyYi0yODgnOiAweGIyMjQsXG4gICdibGFrZTJiLTI5Nic6IDB4YjIyNSxcbiAgJ2JsYWtlMmItMzA0JzogMHhiMjI2LFxuICAnYmxha2UyYi0zMTInOiAweGIyMjcsXG4gICdibGFrZTJiLTMyMCc6IDB4YjIyOCxcbiAgJ2JsYWtlMmItMzI4JzogMHhiMjI5LFxuICAnYmxha2UyYi0zMzYnOiAweGIyMmEsXG4gICdibGFrZTJiLTM0NCc6IDB4YjIyYixcbiAgJ2JsYWtlMmItMzUyJzogMHhiMjJjLFxuICAnYmxha2UyYi0zNjAnOiAweGIyMmQsXG4gICdibGFrZTJiLTM2OCc6IDB4YjIyZSxcbiAgJ2JsYWtlMmItMzc2JzogMHhiMjJmLFxuICAnYmxha2UyYi0zODQnOiAweGIyMzAsXG4gICdibGFrZTJiLTM5Mic6IDB4YjIzMSxcbiAgJ2JsYWtlMmItNDAwJzogMHhiMjMyLFxuICAnYmxha2UyYi00MDgnOiAweGIyMzMsXG4gICdibGFrZTJiLTQxNic6IDB4YjIzNCxcbiAgJ2JsYWtlMmItNDI0JzogMHhiMjM1LFxuICAnYmxha2UyYi00MzInOiAweGIyMzYsXG4gICdibGFrZTJiLTQ0MCc6IDB4YjIzNyxcbiAgJ2JsYWtlMmItNDQ4JzogMHhiMjM4LFxuICAnYmxha2UyYi00NTYnOiAweGIyMzksXG4gICdibGFrZTJiLTQ2NCc6IDB4YjIzYSxcbiAgJ2JsYWtlMmItNDcyJzogMHhiMjNiLFxuICAnYmxha2UyYi00ODAnOiAweGIyM2MsXG4gICdibGFrZTJiLTQ4OCc6IDB4YjIzZCxcbiAgJ2JsYWtlMmItNDk2JzogMHhiMjNlLFxuICAnYmxha2UyYi01MDQnOiAweGIyM2YsXG4gICdibGFrZTJiLTUxMic6IDB4YjI0MCxcbiAgJ2JsYWtlMnMtOCc6ICAgMHhiMjQxLFxuICAnYmxha2Uycy0xNic6ICAweGIyNDIsXG4gICdibGFrZTJzLTI0JzogIDB4YjI0MyxcbiAgJ2JsYWtlMnMtMzInOiAgMHhiMjQ0LFxuICAnYmxha2Uycy00MCc6ICAweGIyNDUsXG4gICdibGFrZTJzLTQ4JzogIDB4YjI0NixcbiAgJ2JsYWtlMnMtNTYnOiAgMHhiMjQ3LFxuICAnYmxha2Uycy02NCc6ICAweGIyNDgsXG4gICdibGFrZTJzLTcyJzogIDB4YjI0OSxcbiAgJ2JsYWtlMnMtODAnOiAgMHhiMjRhLFxuICAnYmxha2Uycy04OCc6ICAweGIyNGIsXG4gICdibGFrZTJzLTk2JzogIDB4YjI0YyxcbiAgJ2JsYWtlMnMtMTA0JzogMHhiMjRkLFxuICAnYmxha2Uycy0xMTInOiAweGIyNGUsXG4gICdibGFrZTJzLTEyMCc6IDB4YjI0ZixcbiAgJ2JsYWtlMnMtMTI4JzogMHhiMjUwLFxuICAnYmxha2Uycy0xMzYnOiAweGIyNTEsXG4gICdibGFrZTJzLTE0NCc6IDB4YjI1MixcbiAgJ2JsYWtlMnMtMTUyJzogMHhiMjUzLFxuICAnYmxha2Uycy0xNjAnOiAweGIyNTQsXG4gICdibGFrZTJzLTE2OCc6IDB4YjI1NSxcbiAgJ2JsYWtlMnMtMTc2JzogMHhiMjU2LFxuICAnYmxha2Uycy0xODQnOiAweGIyNTcsXG4gICdibGFrZTJzLTE5Mic6IDB4YjI1OCxcbiAgJ2JsYWtlMnMtMjAwJzogMHhiMjU5LFxuICAnYmxha2Uycy0yMDgnOiAweGIyNWEsXG4gICdibGFrZTJzLTIxNic6IDB4YjI1YixcbiAgJ2JsYWtlMnMtMjI0JzogMHhiMjVjLFxuICAnYmxha2Uycy0yMzInOiAweGIyNWQsXG4gICdibGFrZTJzLTI0MCc6IDB4YjI1ZSxcbiAgJ2JsYWtlMnMtMjQ4JzogMHhiMjVmLFxuICAnYmxha2Uycy0yNTYnOiAweGIyNjAsXG4gICdTa2VpbjI1Ni04JzogMHhiMzAxLFxuICAnU2tlaW4yNTYtMTYnOiAweGIzMDIsXG4gICdTa2VpbjI1Ni0yNCc6IDB4YjMwMyxcbiAgJ1NrZWluMjU2LTMyJzogMHhiMzA0LFxuICAnU2tlaW4yNTYtNDAnOiAweGIzMDUsXG4gICdTa2VpbjI1Ni00OCc6IDB4YjMwNixcbiAgJ1NrZWluMjU2LTU2JzogMHhiMzA3LFxuICAnU2tlaW4yNTYtNjQnOiAweGIzMDgsXG4gICdTa2VpbjI1Ni03Mic6IDB4YjMwOSxcbiAgJ1NrZWluMjU2LTgwJzogMHhiMzBhLFxuICAnU2tlaW4yNTYtODgnOiAweGIzMGIsXG4gICdTa2VpbjI1Ni05Nic6IDB4YjMwYyxcbiAgJ1NrZWluMjU2LTEwNCc6IDB4YjMwZCxcbiAgJ1NrZWluMjU2LTExMic6IDB4YjMwZSxcbiAgJ1NrZWluMjU2LTEyMCc6IDB4YjMwZixcbiAgJ1NrZWluMjU2LTEyOCc6IDB4YjMxMCxcbiAgJ1NrZWluMjU2LTEzNic6IDB4YjMxMSxcbiAgJ1NrZWluMjU2LTE0NCc6IDB4YjMxMixcbiAgJ1NrZWluMjU2LTE1Mic6IDB4YjMxMyxcbiAgJ1NrZWluMjU2LTE2MCc6IDB4YjMxNCxcbiAgJ1NrZWluMjU2LTE2OCc6IDB4YjMxNSxcbiAgJ1NrZWluMjU2LTE3Nic6IDB4YjMxNixcbiAgJ1NrZWluMjU2LTE4NCc6IDB4YjMxNyxcbiAgJ1NrZWluMjU2LTE5Mic6IDB4YjMxOCxcbiAgJ1NrZWluMjU2LTIwMCc6IDB4YjMxOSxcbiAgJ1NrZWluMjU2LTIwOCc6IDB4YjMxYSxcbiAgJ1NrZWluMjU2LTIxNic6IDB4YjMxYixcbiAgJ1NrZWluMjU2LTIyNCc6IDB4YjMxYyxcbiAgJ1NrZWluMjU2LTIzMic6IDB4YjMxZCxcbiAgJ1NrZWluMjU2LTI0MCc6IDB4YjMxZSxcbiAgJ1NrZWluMjU2LTI0OCc6IDB4YjMxZixcbiAgJ1NrZWluMjU2LTI1Nic6IDB4YjMyMCxcbiAgJ1NrZWluNTEyLTgnOiAweGIzMjEsXG4gICdTa2VpbjUxMi0xNic6IDB4YjMyMixcbiAgJ1NrZWluNTEyLTI0JzogMHhiMzIzLFxuICAnU2tlaW41MTItMzInOiAweGIzMjQsXG4gICdTa2VpbjUxMi00MCc6IDB4YjMyNSxcbiAgJ1NrZWluNTEyLTQ4JzogMHhiMzI2LFxuICAnU2tlaW41MTItNTYnOiAweGIzMjcsXG4gICdTa2VpbjUxMi02NCc6IDB4YjMyOCxcbiAgJ1NrZWluNTEyLTcyJzogMHhiMzI5LFxuICAnU2tlaW41MTItODAnOiAweGIzMmEsXG4gICdTa2VpbjUxMi04OCc6IDB4YjMyYixcbiAgJ1NrZWluNTEyLTk2JzogMHhiMzJjLFxuICAnU2tlaW41MTItMTA0JzogMHhiMzJkLFxuICAnU2tlaW41MTItMTEyJzogMHhiMzJlLFxuICAnU2tlaW41MTItMTIwJzogMHhiMzJmLFxuICAnU2tlaW41MTItMTI4JzogMHhiMzMwLFxuICAnU2tlaW41MTItMTM2JzogMHhiMzMxLFxuICAnU2tlaW41MTItMTQ0JzogMHhiMzMyLFxuICAnU2tlaW41MTItMTUyJzogMHhiMzMzLFxuICAnU2tlaW41MTItMTYwJzogMHhiMzM0LFxuICAnU2tlaW41MTItMTY4JzogMHhiMzM1LFxuICAnU2tlaW41MTItMTc2JzogMHhiMzM2LFxuICAnU2tlaW41MTItMTg0JzogMHhiMzM3LFxuICAnU2tlaW41MTItMTkyJzogMHhiMzM4LFxuICAnU2tlaW41MTItMjAwJzogMHhiMzM5LFxuICAnU2tlaW41MTItMjA4JzogMHhiMzNhLFxuICAnU2tlaW41MTItMjE2JzogMHhiMzNiLFxuICAnU2tlaW41MTItMjI0JzogMHhiMzNjLFxuICAnU2tlaW41MTItMjMyJzogMHhiMzNkLFxuICAnU2tlaW41MTItMjQwJzogMHhiMzNlLFxuICAnU2tlaW41MTItMjQ4JzogMHhiMzNmLFxuICAnU2tlaW41MTItMjU2JzogMHhiMzQwLFxuICAnU2tlaW41MTItMjY0JzogMHhiMzQxLFxuICAnU2tlaW41MTItMjcyJzogMHhiMzQyLFxuICAnU2tlaW41MTItMjgwJzogMHhiMzQzLFxuICAnU2tlaW41MTItMjg4JzogMHhiMzQ0LFxuICAnU2tlaW41MTItMjk2JzogMHhiMzQ1LFxuICAnU2tlaW41MTItMzA0JzogMHhiMzQ2LFxuICAnU2tlaW41MTItMzEyJzogMHhiMzQ3LFxuICAnU2tlaW41MTItMzIwJzogMHhiMzQ4LFxuICAnU2tlaW41MTItMzI4JzogMHhiMzQ5LFxuICAnU2tlaW41MTItMzM2JzogMHhiMzRhLFxuICAnU2tlaW41MTItMzQ0JzogMHhiMzRiLFxuICAnU2tlaW41MTItMzUyJzogMHhiMzRjLFxuICAnU2tlaW41MTItMzYwJzogMHhiMzRkLFxuICAnU2tlaW41MTItMzY4JzogMHhiMzRlLFxuICAnU2tlaW41MTItMzc2JzogMHhiMzRmLFxuICAnU2tlaW41MTItMzg0JzogMHhiMzUwLFxuICAnU2tlaW41MTItMzkyJzogMHhiMzUxLFxuICAnU2tlaW41MTItNDAwJzogMHhiMzUyLFxuICAnU2tlaW41MTItNDA4JzogMHhiMzUzLFxuICAnU2tlaW41MTItNDE2JzogMHhiMzU0LFxuICAnU2tlaW41MTItNDI0JzogMHhiMzU1LFxuICAnU2tlaW41MTItNDMyJzogMHhiMzU2LFxuICAnU2tlaW41MTItNDQwJzogMHhiMzU3LFxuICAnU2tlaW41MTItNDQ4JzogMHhiMzU4LFxuICAnU2tlaW41MTItNDU2JzogMHhiMzU5LFxuICAnU2tlaW41MTItNDY0JzogMHhiMzVhLFxuICAnU2tlaW41MTItNDcyJzogMHhiMzViLFxuICAnU2tlaW41MTItNDgwJzogMHhiMzVjLFxuICAnU2tlaW41MTItNDg4JzogMHhiMzVkLFxuICAnU2tlaW41MTItNDk2JzogMHhiMzVlLFxuICAnU2tlaW41MTItNTA0JzogMHhiMzVmLFxuICAnU2tlaW41MTItNTEyJzogMHhiMzYwLFxuICAnU2tlaW4xMDI0LTgnOiAweGIzNjEsXG4gICdTa2VpbjEwMjQtMTYnOiAweGIzNjIsXG4gICdTa2VpbjEwMjQtMjQnOiAweGIzNjMsXG4gICdTa2VpbjEwMjQtMzInOiAweGIzNjQsXG4gICdTa2VpbjEwMjQtNDAnOiAweGIzNjUsXG4gICdTa2VpbjEwMjQtNDgnOiAweGIzNjYsXG4gICdTa2VpbjEwMjQtNTYnOiAweGIzNjcsXG4gICdTa2VpbjEwMjQtNjQnOiAweGIzNjgsXG4gICdTa2VpbjEwMjQtNzInOiAweGIzNjksXG4gICdTa2VpbjEwMjQtODAnOiAweGIzNmEsXG4gICdTa2VpbjEwMjQtODgnOiAweGIzNmIsXG4gICdTa2VpbjEwMjQtOTYnOiAweGIzNmMsXG4gICdTa2VpbjEwMjQtMTA0JzogMHhiMzZkLFxuICAnU2tlaW4xMDI0LTExMic6IDB4YjM2ZSxcbiAgJ1NrZWluMTAyNC0xMjAnOiAweGIzNmYsXG4gICdTa2VpbjEwMjQtMTI4JzogMHhiMzcwLFxuICAnU2tlaW4xMDI0LTEzNic6IDB4YjM3MSxcbiAgJ1NrZWluMTAyNC0xNDQnOiAweGIzNzIsXG4gICdTa2VpbjEwMjQtMTUyJzogMHhiMzczLFxuICAnU2tlaW4xMDI0LTE2MCc6IDB4YjM3NCxcbiAgJ1NrZWluMTAyNC0xNjgnOiAweGIzNzUsXG4gICdTa2VpbjEwMjQtMTc2JzogMHhiMzc2LFxuICAnU2tlaW4xMDI0LTE4NCc6IDB4YjM3NyxcbiAgJ1NrZWluMTAyNC0xOTInOiAweGIzNzgsXG4gICdTa2VpbjEwMjQtMjAwJzogMHhiMzc5LFxuICAnU2tlaW4xMDI0LTIwOCc6IDB4YjM3YSxcbiAgJ1NrZWluMTAyNC0yMTYnOiAweGIzN2IsXG4gICdTa2VpbjEwMjQtMjI0JzogMHhiMzdjLFxuICAnU2tlaW4xMDI0LTIzMic6IDB4YjM3ZCxcbiAgJ1NrZWluMTAyNC0yNDAnOiAweGIzN2UsXG4gICdTa2VpbjEwMjQtMjQ4JzogMHhiMzdmLFxuICAnU2tlaW4xMDI0LTI1Nic6IDB4YjM4MCxcbiAgJ1NrZWluMTAyNC0yNjQnOiAweGIzODEsXG4gICdTa2VpbjEwMjQtMjcyJzogMHhiMzgyLFxuICAnU2tlaW4xMDI0LTI4MCc6IDB4YjM4MyxcbiAgJ1NrZWluMTAyNC0yODgnOiAweGIzODQsXG4gICdTa2VpbjEwMjQtMjk2JzogMHhiMzg1LFxuICAnU2tlaW4xMDI0LTMwNCc6IDB4YjM4NixcbiAgJ1NrZWluMTAyNC0zMTInOiAweGIzODcsXG4gICdTa2VpbjEwMjQtMzIwJzogMHhiMzg4LFxuICAnU2tlaW4xMDI0LTMyOCc6IDB4YjM4OSxcbiAgJ1NrZWluMTAyNC0zMzYnOiAweGIzOGEsXG4gICdTa2VpbjEwMjQtMzQ0JzogMHhiMzhiLFxuICAnU2tlaW4xMDI0LTM1Mic6IDB4YjM4YyxcbiAgJ1NrZWluMTAyNC0zNjAnOiAweGIzOGQsXG4gICdTa2VpbjEwMjQtMzY4JzogMHhiMzhlLFxuICAnU2tlaW4xMDI0LTM3Nic6IDB4YjM4ZixcbiAgJ1NrZWluMTAyNC0zODQnOiAweGIzOTAsXG4gICdTa2VpbjEwMjQtMzkyJzogMHhiMzkxLFxuICAnU2tlaW4xMDI0LTQwMCc6IDB4YjM5MixcbiAgJ1NrZWluMTAyNC00MDgnOiAweGIzOTMsXG4gICdTa2VpbjEwMjQtNDE2JzogMHhiMzk0LFxuICAnU2tlaW4xMDI0LTQyNCc6IDB4YjM5NSxcbiAgJ1NrZWluMTAyNC00MzInOiAweGIzOTYsXG4gICdTa2VpbjEwMjQtNDQwJzogMHhiMzk3LFxuICAnU2tlaW4xMDI0LTQ0OCc6IDB4YjM5OCxcbiAgJ1NrZWluMTAyNC00NTYnOiAweGIzOTksXG4gICdTa2VpbjEwMjQtNDY0JzogMHhiMzlhLFxuICAnU2tlaW4xMDI0LTQ3Mic6IDB4YjM5YixcbiAgJ1NrZWluMTAyNC00ODAnOiAweGIzOWMsXG4gICdTa2VpbjEwMjQtNDg4JzogMHhiMzlkLFxuICAnU2tlaW4xMDI0LTQ5Nic6IDB4YjM5ZSxcbiAgJ1NrZWluMTAyNC01MDQnOiAweGIzOWYsXG4gICdTa2VpbjEwMjQtNTEyJzogMHhiM2EwLFxuICAnU2tlaW4xMDI0LTUyMCc6IDB4YjNhMSxcbiAgJ1NrZWluMTAyNC01MjgnOiAweGIzYTIsXG4gICdTa2VpbjEwMjQtNTM2JzogMHhiM2EzLFxuICAnU2tlaW4xMDI0LTU0NCc6IDB4YjNhNCxcbiAgJ1NrZWluMTAyNC01NTInOiAweGIzYTUsXG4gICdTa2VpbjEwMjQtNTYwJzogMHhiM2E2LFxuICAnU2tlaW4xMDI0LTU2OCc6IDB4YjNhNyxcbiAgJ1NrZWluMTAyNC01NzYnOiAweGIzYTgsXG4gICdTa2VpbjEwMjQtNTg0JzogMHhiM2E5LFxuICAnU2tlaW4xMDI0LTU5Mic6IDB4YjNhYSxcbiAgJ1NrZWluMTAyNC02MDAnOiAweGIzYWIsXG4gICdTa2VpbjEwMjQtNjA4JzogMHhiM2FjLFxuICAnU2tlaW4xMDI0LTYxNic6IDB4YjNhZCxcbiAgJ1NrZWluMTAyNC02MjQnOiAweGIzYWUsXG4gICdTa2VpbjEwMjQtNjMyJzogMHhiM2FmLFxuICAnU2tlaW4xMDI0LTY0MCc6IDB4YjNiMCxcbiAgJ1NrZWluMTAyNC02NDgnOiAweGIzYjEsXG4gICdTa2VpbjEwMjQtNjU2JzogMHhiM2IyLFxuICAnU2tlaW4xMDI0LTY2NCc6IDB4YjNiMyxcbiAgJ1NrZWluMTAyNC02NzInOiAweGIzYjQsXG4gICdTa2VpbjEwMjQtNjgwJzogMHhiM2I1LFxuICAnU2tlaW4xMDI0LTY4OCc6IDB4YjNiNixcbiAgJ1NrZWluMTAyNC02OTYnOiAweGIzYjcsXG4gICdTa2VpbjEwMjQtNzA0JzogMHhiM2I4LFxuICAnU2tlaW4xMDI0LTcxMic6IDB4YjNiOSxcbiAgJ1NrZWluMTAyNC03MjAnOiAweGIzYmEsXG4gICdTa2VpbjEwMjQtNzI4JzogMHhiM2JiLFxuICAnU2tlaW4xMDI0LTczNic6IDB4YjNiYyxcbiAgJ1NrZWluMTAyNC03NDQnOiAweGIzYmQsXG4gICdTa2VpbjEwMjQtNzUyJzogMHhiM2JlLFxuICAnU2tlaW4xMDI0LTc2MCc6IDB4YjNiZixcbiAgJ1NrZWluMTAyNC03NjgnOiAweGIzYzAsXG4gICdTa2VpbjEwMjQtNzc2JzogMHhiM2MxLFxuICAnU2tlaW4xMDI0LTc4NCc6IDB4YjNjMixcbiAgJ1NrZWluMTAyNC03OTInOiAweGIzYzMsXG4gICdTa2VpbjEwMjQtODAwJzogMHhiM2M0LFxuICAnU2tlaW4xMDI0LTgwOCc6IDB4YjNjNSxcbiAgJ1NrZWluMTAyNC04MTYnOiAweGIzYzYsXG4gICdTa2VpbjEwMjQtODI0JzogMHhiM2M3LFxuICAnU2tlaW4xMDI0LTgzMic6IDB4YjNjOCxcbiAgJ1NrZWluMTAyNC04NDAnOiAweGIzYzksXG4gICdTa2VpbjEwMjQtODQ4JzogMHhiM2NhLFxuICAnU2tlaW4xMDI0LTg1Nic6IDB4YjNjYixcbiAgJ1NrZWluMTAyNC04NjQnOiAweGIzY2MsXG4gICdTa2VpbjEwMjQtODcyJzogMHhiM2NkLFxuICAnU2tlaW4xMDI0LTg4MCc6IDB4YjNjZSxcbiAgJ1NrZWluMTAyNC04ODgnOiAweGIzY2YsXG4gICdTa2VpbjEwMjQtODk2JzogMHhiM2QwLFxuICAnU2tlaW4xMDI0LTkwNCc6IDB4YjNkMSxcbiAgJ1NrZWluMTAyNC05MTInOiAweGIzZDIsXG4gICdTa2VpbjEwMjQtOTIwJzogMHhiM2QzLFxuICAnU2tlaW4xMDI0LTkyOCc6IDB4YjNkNCxcbiAgJ1NrZWluMTAyNC05MzYnOiAweGIzZDUsXG4gICdTa2VpbjEwMjQtOTQ0JzogMHhiM2Q2LFxuICAnU2tlaW4xMDI0LTk1Mic6IDB4YjNkNyxcbiAgJ1NrZWluMTAyNC05NjAnOiAweGIzZDgsXG4gICdTa2VpbjEwMjQtOTY4JzogMHhiM2Q5LFxuICAnU2tlaW4xMDI0LTk3Nic6IDB4YjNkYSxcbiAgJ1NrZWluMTAyNC05ODQnOiAweGIzZGIsXG4gICdTa2VpbjEwMjQtOTkyJzogMHhiM2RjLFxuICAnU2tlaW4xMDI0LTEwMDAnOiAweGIzZGQsXG4gICdTa2VpbjEwMjQtMTAwOCc6IDB4YjNkZSxcbiAgJ1NrZWluMTAyNC0xMDE2JzogMHhiM2RmLFxuICAnU2tlaW4xMDI0LTEwMjQnOiAweGIzZTBcbn0pXG5cbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgwOiAnaWRlbnRpdHknLFxuXG4gIC8vIHNoYSBmYW1pbHlcbiAgMHgxMTogJ3NoYTEnLFxuICAweDEyOiAnc2hhMi0yNTYnLFxuICAweDEzOiAnc2hhMi01MTInLFxuICAweDU2OiAnZGJsLXNoYTItMjU2JyxcbiAgMHgxNzogJ3NoYTMtMjI0JyxcbiAgMHgxNjogJ3NoYTMtMjU2JyxcbiAgMHgxNTogJ3NoYTMtMzg0JyxcbiAgMHgxNDogJ3NoYTMtNTEyJyxcbiAgMHgxODogJ3NoYWtlLTEyOCcsXG4gIDB4MTk6ICdzaGFrZS0yNTYnLFxuICAweDFBOiAna2VjY2FrLTIyNCcsXG4gIDB4MUI6ICdrZWNjYWstMjU2JyxcbiAgMHgxQzogJ2tlY2Nhay0zODQnLFxuICAweDFEOiAna2VjY2FrLTUxMicsXG5cbiAgMHgyMjogJ211cm11cjMtMTI4JyxcbiAgMHgyMzogJ211cm11cjMtMzInLFxuXG4gIC8vIGJsYWtlMlxuICAweGIyMDE6ICdibGFrZTJiLTgnLFxuICAweGIyMDI6ICdibGFrZTJiLTE2JyxcbiAgMHhiMjAzOiAnYmxha2UyYi0yNCcsXG4gIDB4YjIwNDogJ2JsYWtlMmItMzInLFxuICAweGIyMDU6ICdibGFrZTJiLTQwJyxcbiAgMHhiMjA2OiAnYmxha2UyYi00OCcsXG4gIDB4YjIwNzogJ2JsYWtlMmItNTYnLFxuICAweGIyMDg6ICdibGFrZTJiLTY0JyxcbiAgMHhiMjA5OiAnYmxha2UyYi03MicsXG4gIDB4YjIwYTogJ2JsYWtlMmItODAnLFxuICAweGIyMGI6ICdibGFrZTJiLTg4JyxcbiAgMHhiMjBjOiAnYmxha2UyYi05NicsXG4gIDB4YjIwZDogJ2JsYWtlMmItMTA0JyxcbiAgMHhiMjBlOiAnYmxha2UyYi0xMTInLFxuICAweGIyMGY6ICdibGFrZTJiLTEyMCcsXG4gIDB4YjIxMDogJ2JsYWtlMmItMTI4JyxcbiAgMHhiMjExOiAnYmxha2UyYi0xMzYnLFxuICAweGIyMTI6ICdibGFrZTJiLTE0NCcsXG4gIDB4YjIxMzogJ2JsYWtlMmItMTUyJyxcbiAgMHhiMjE0OiAnYmxha2UyYi0xNjAnLFxuICAweGIyMTU6ICdibGFrZTJiLTE2OCcsXG4gIDB4YjIxNjogJ2JsYWtlMmItMTc2JyxcbiAgMHhiMjE3OiAnYmxha2UyYi0xODQnLFxuICAweGIyMTg6ICdibGFrZTJiLTE5MicsXG4gIDB4YjIxOTogJ2JsYWtlMmItMjAwJyxcbiAgMHhiMjFhOiAnYmxha2UyYi0yMDgnLFxuICAweGIyMWI6ICdibGFrZTJiLTIxNicsXG4gIDB4YjIxYzogJ2JsYWtlMmItMjI0JyxcbiAgMHhiMjFkOiAnYmxha2UyYi0yMzInLFxuICAweGIyMWU6ICdibGFrZTJiLTI0MCcsXG4gIDB4YjIxZjogJ2JsYWtlMmItMjQ4JyxcbiAgMHhiMjIwOiAnYmxha2UyYi0yNTYnLFxuICAweGIyMjE6ICdibGFrZTJiLTI2NCcsXG4gIDB4YjIyMjogJ2JsYWtlMmItMjcyJyxcbiAgMHhiMjIzOiAnYmxha2UyYi0yODAnLFxuICAweGIyMjQ6ICdibGFrZTJiLTI4OCcsXG4gIDB4YjIyNTogJ2JsYWtlMmItMjk2JyxcbiAgMHhiMjI2OiAnYmxha2UyYi0zMDQnLFxuICAweGIyMjc6ICdibGFrZTJiLTMxMicsXG4gIDB4YjIyODogJ2JsYWtlMmItMzIwJyxcbiAgMHhiMjI5OiAnYmxha2UyYi0zMjgnLFxuICAweGIyMmE6ICdibGFrZTJiLTMzNicsXG4gIDB4YjIyYjogJ2JsYWtlMmItMzQ0JyxcbiAgMHhiMjJjOiAnYmxha2UyYi0zNTInLFxuICAweGIyMmQ6ICdibGFrZTJiLTM2MCcsXG4gIDB4YjIyZTogJ2JsYWtlMmItMzY4JyxcbiAgMHhiMjJmOiAnYmxha2UyYi0zNzYnLFxuICAweGIyMzA6ICdibGFrZTJiLTM4NCcsXG4gIDB4YjIzMTogJ2JsYWtlMmItMzkyJyxcbiAgMHhiMjMyOiAnYmxha2UyYi00MDAnLFxuICAweGIyMzM6ICdibGFrZTJiLTQwOCcsXG4gIDB4YjIzNDogJ2JsYWtlMmItNDE2JyxcbiAgMHhiMjM1OiAnYmxha2UyYi00MjQnLFxuICAweGIyMzY6ICdibGFrZTJiLTQzMicsXG4gIDB4YjIzNzogJ2JsYWtlMmItNDQwJyxcbiAgMHhiMjM4OiAnYmxha2UyYi00NDgnLFxuICAweGIyMzk6ICdibGFrZTJiLTQ1NicsXG4gIDB4YjIzYTogJ2JsYWtlMmItNDY0JyxcbiAgMHhiMjNiOiAnYmxha2UyYi00NzInLFxuICAweGIyM2M6ICdibGFrZTJiLTQ4MCcsXG4gIDB4YjIzZDogJ2JsYWtlMmItNDg4JyxcbiAgMHhiMjNlOiAnYmxha2UyYi00OTYnLFxuICAweGIyM2Y6ICdibGFrZTJiLTUwNCcsXG4gIDB4YjI0MDogJ2JsYWtlMmItNTEyJyxcbiAgMHhiMjQxOiAnYmxha2Uycy04JyxcbiAgMHhiMjQyOiAnYmxha2Uycy0xNicsXG4gIDB4YjI0MzogJ2JsYWtlMnMtMjQnLFxuICAweGIyNDQ6ICdibGFrZTJzLTMyJyxcbiAgMHhiMjQ1OiAnYmxha2Uycy00MCcsXG4gIDB4YjI0NjogJ2JsYWtlMnMtNDgnLFxuICAweGIyNDc6ICdibGFrZTJzLTU2JyxcbiAgMHhiMjQ4OiAnYmxha2Uycy02NCcsXG4gIDB4YjI0OTogJ2JsYWtlMnMtNzInLFxuICAweGIyNGE6ICdibGFrZTJzLTgwJyxcbiAgMHhiMjRiOiAnYmxha2Uycy04OCcsXG4gIDB4YjI0YzogJ2JsYWtlMnMtOTYnLFxuICAweGIyNGQ6ICdibGFrZTJzLTEwNCcsXG4gIDB4YjI0ZTogJ2JsYWtlMnMtMTEyJyxcbiAgMHhiMjRmOiAnYmxha2Uycy0xMjAnLFxuICAweGIyNTA6ICdibGFrZTJzLTEyOCcsXG4gIDB4YjI1MTogJ2JsYWtlMnMtMTM2JyxcbiAgMHhiMjUyOiAnYmxha2Uycy0xNDQnLFxuICAweGIyNTM6ICdibGFrZTJzLTE1MicsXG4gIDB4YjI1NDogJ2JsYWtlMnMtMTYwJyxcbiAgMHhiMjU1OiAnYmxha2Uycy0xNjgnLFxuICAweGIyNTY6ICdibGFrZTJzLTE3NicsXG4gIDB4YjI1NzogJ2JsYWtlMnMtMTg0JyxcbiAgMHhiMjU4OiAnYmxha2Uycy0xOTInLFxuICAweGIyNTk6ICdibGFrZTJzLTIwMCcsXG4gIDB4YjI1YTogJ2JsYWtlMnMtMjA4JyxcbiAgMHhiMjViOiAnYmxha2Uycy0yMTYnLFxuICAweGIyNWM6ICdibGFrZTJzLTIyNCcsXG4gIDB4YjI1ZDogJ2JsYWtlMnMtMjMyJyxcbiAgMHhiMjVlOiAnYmxha2Uycy0yNDAnLFxuICAweGIyNWY6ICdibGFrZTJzLTI0OCcsXG4gIDB4YjI2MDogJ2JsYWtlMnMtMjU2JyxcblxuICAvLyBza2VpblxuICAweGIzMDE6ICdTa2VpbjI1Ni04JyxcbiAgMHhiMzAyOiAnU2tlaW4yNTYtMTYnLFxuICAweGIzMDM6ICdTa2VpbjI1Ni0yNCcsXG4gIDB4YjMwNDogJ1NrZWluMjU2LTMyJyxcbiAgMHhiMzA1OiAnU2tlaW4yNTYtNDAnLFxuICAweGIzMDY6ICdTa2VpbjI1Ni00OCcsXG4gIDB4YjMwNzogJ1NrZWluMjU2LTU2JyxcbiAgMHhiMzA4OiAnU2tlaW4yNTYtNjQnLFxuICAweGIzMDk6ICdTa2VpbjI1Ni03MicsXG4gIDB4YjMwYTogJ1NrZWluMjU2LTgwJyxcbiAgMHhiMzBiOiAnU2tlaW4yNTYtODgnLFxuICAweGIzMGM6ICdTa2VpbjI1Ni05NicsXG4gIDB4YjMwZDogJ1NrZWluMjU2LTEwNCcsXG4gIDB4YjMwZTogJ1NrZWluMjU2LTExMicsXG4gIDB4YjMwZjogJ1NrZWluMjU2LTEyMCcsXG4gIDB4YjMxMDogJ1NrZWluMjU2LTEyOCcsXG4gIDB4YjMxMTogJ1NrZWluMjU2LTEzNicsXG4gIDB4YjMxMjogJ1NrZWluMjU2LTE0NCcsXG4gIDB4YjMxMzogJ1NrZWluMjU2LTE1MicsXG4gIDB4YjMxNDogJ1NrZWluMjU2LTE2MCcsXG4gIDB4YjMxNTogJ1NrZWluMjU2LTE2OCcsXG4gIDB4YjMxNjogJ1NrZWluMjU2LTE3NicsXG4gIDB4YjMxNzogJ1NrZWluMjU2LTE4NCcsXG4gIDB4YjMxODogJ1NrZWluMjU2LTE5MicsXG4gIDB4YjMxOTogJ1NrZWluMjU2LTIwMCcsXG4gIDB4YjMxYTogJ1NrZWluMjU2LTIwOCcsXG4gIDB4YjMxYjogJ1NrZWluMjU2LTIxNicsXG4gIDB4YjMxYzogJ1NrZWluMjU2LTIyNCcsXG4gIDB4YjMxZDogJ1NrZWluMjU2LTIzMicsXG4gIDB4YjMxZTogJ1NrZWluMjU2LTI0MCcsXG4gIDB4YjMxZjogJ1NrZWluMjU2LTI0OCcsXG4gIDB4YjMyMDogJ1NrZWluMjU2LTI1NicsXG4gIDB4YjMyMTogJ1NrZWluNTEyLTgnLFxuICAweGIzMjI6ICdTa2VpbjUxMi0xNicsXG4gIDB4YjMyMzogJ1NrZWluNTEyLTI0JyxcbiAgMHhiMzI0OiAnU2tlaW41MTItMzInLFxuICAweGIzMjU6ICdTa2VpbjUxMi00MCcsXG4gIDB4YjMyNjogJ1NrZWluNTEyLTQ4JyxcbiAgMHhiMzI3OiAnU2tlaW41MTItNTYnLFxuICAweGIzMjg6ICdTa2VpbjUxMi02NCcsXG4gIDB4YjMyOTogJ1NrZWluNTEyLTcyJyxcbiAgMHhiMzJhOiAnU2tlaW41MTItODAnLFxuICAweGIzMmI6ICdTa2VpbjUxMi04OCcsXG4gIDB4YjMyYzogJ1NrZWluNTEyLTk2JyxcbiAgMHhiMzJkOiAnU2tlaW41MTItMTA0JyxcbiAgMHhiMzJlOiAnU2tlaW41MTItMTEyJyxcbiAgMHhiMzJmOiAnU2tlaW41MTItMTIwJyxcbiAgMHhiMzMwOiAnU2tlaW41MTItMTI4JyxcbiAgMHhiMzMxOiAnU2tlaW41MTItMTM2JyxcbiAgMHhiMzMyOiAnU2tlaW41MTItMTQ0JyxcbiAgMHhiMzMzOiAnU2tlaW41MTItMTUyJyxcbiAgMHhiMzM0OiAnU2tlaW41MTItMTYwJyxcbiAgMHhiMzM1OiAnU2tlaW41MTItMTY4JyxcbiAgMHhiMzM2OiAnU2tlaW41MTItMTc2JyxcbiAgMHhiMzM3OiAnU2tlaW41MTItMTg0JyxcbiAgMHhiMzM4OiAnU2tlaW41MTItMTkyJyxcbiAgMHhiMzM5OiAnU2tlaW41MTItMjAwJyxcbiAgMHhiMzNhOiAnU2tlaW41MTItMjA4JyxcbiAgMHhiMzNiOiAnU2tlaW41MTItMjE2JyxcbiAgMHhiMzNjOiAnU2tlaW41MTItMjI0JyxcbiAgMHhiMzNkOiAnU2tlaW41MTItMjMyJyxcbiAgMHhiMzNlOiAnU2tlaW41MTItMjQwJyxcbiAgMHhiMzNmOiAnU2tlaW41MTItMjQ4JyxcbiAgMHhiMzQwOiAnU2tlaW41MTItMjU2JyxcbiAgMHhiMzQxOiAnU2tlaW41MTItMjY0JyxcbiAgMHhiMzQyOiAnU2tlaW41MTItMjcyJyxcbiAgMHhiMzQzOiAnU2tlaW41MTItMjgwJyxcbiAgMHhiMzQ0OiAnU2tlaW41MTItMjg4JyxcbiAgMHhiMzQ1OiAnU2tlaW41MTItMjk2JyxcbiAgMHhiMzQ2OiAnU2tlaW41MTItMzA0JyxcbiAgMHhiMzQ3OiAnU2tlaW41MTItMzEyJyxcbiAgMHhiMzQ4OiAnU2tlaW41MTItMzIwJyxcbiAgMHhiMzQ5OiAnU2tlaW41MTItMzI4JyxcbiAgMHhiMzRhOiAnU2tlaW41MTItMzM2JyxcbiAgMHhiMzRiOiAnU2tlaW41MTItMzQ0JyxcbiAgMHhiMzRjOiAnU2tlaW41MTItMzUyJyxcbiAgMHhiMzRkOiAnU2tlaW41MTItMzYwJyxcbiAgMHhiMzRlOiAnU2tlaW41MTItMzY4JyxcbiAgMHhiMzRmOiAnU2tlaW41MTItMzc2JyxcbiAgMHhiMzUwOiAnU2tlaW41MTItMzg0JyxcbiAgMHhiMzUxOiAnU2tlaW41MTItMzkyJyxcbiAgMHhiMzUyOiAnU2tlaW41MTItNDAwJyxcbiAgMHhiMzUzOiAnU2tlaW41MTItNDA4JyxcbiAgMHhiMzU0OiAnU2tlaW41MTItNDE2JyxcbiAgMHhiMzU1OiAnU2tlaW41MTItNDI0JyxcbiAgMHhiMzU2OiAnU2tlaW41MTItNDMyJyxcbiAgMHhiMzU3OiAnU2tlaW41MTItNDQwJyxcbiAgMHhiMzU4OiAnU2tlaW41MTItNDQ4JyxcbiAgMHhiMzU5OiAnU2tlaW41MTItNDU2JyxcbiAgMHhiMzVhOiAnU2tlaW41MTItNDY0JyxcbiAgMHhiMzViOiAnU2tlaW41MTItNDcyJyxcbiAgMHhiMzVjOiAnU2tlaW41MTItNDgwJyxcbiAgMHhiMzVkOiAnU2tlaW41MTItNDg4JyxcbiAgMHhiMzVlOiAnU2tlaW41MTItNDk2JyxcbiAgMHhiMzVmOiAnU2tlaW41MTItNTA0JyxcbiAgMHhiMzYwOiAnU2tlaW41MTItNTEyJyxcbiAgMHhiMzYxOiAnU2tlaW4xMDI0LTgnLFxuICAweGIzNjI6ICdTa2VpbjEwMjQtMTYnLFxuICAweGIzNjM6ICdTa2VpbjEwMjQtMjQnLFxuICAweGIzNjQ6ICdTa2VpbjEwMjQtMzInLFxuICAweGIzNjU6ICdTa2VpbjEwMjQtNDAnLFxuICAweGIzNjY6ICdTa2VpbjEwMjQtNDgnLFxuICAweGIzNjc6ICdTa2VpbjEwMjQtNTYnLFxuICAweGIzNjg6ICdTa2VpbjEwMjQtNjQnLFxuICAweGIzNjk6ICdTa2VpbjEwMjQtNzInLFxuICAweGIzNmE6ICdTa2VpbjEwMjQtODAnLFxuICAweGIzNmI6ICdTa2VpbjEwMjQtODgnLFxuICAweGIzNmM6ICdTa2VpbjEwMjQtOTYnLFxuICAweGIzNmQ6ICdTa2VpbjEwMjQtMTA0JyxcbiAgMHhiMzZlOiAnU2tlaW4xMDI0LTExMicsXG4gIDB4YjM2ZjogJ1NrZWluMTAyNC0xMjAnLFxuICAweGIzNzA6ICdTa2VpbjEwMjQtMTI4JyxcbiAgMHhiMzcxOiAnU2tlaW4xMDI0LTEzNicsXG4gIDB4YjM3MjogJ1NrZWluMTAyNC0xNDQnLFxuICAweGIzNzM6ICdTa2VpbjEwMjQtMTUyJyxcbiAgMHhiMzc0OiAnU2tlaW4xMDI0LTE2MCcsXG4gIDB4YjM3NTogJ1NrZWluMTAyNC0xNjgnLFxuICAweGIzNzY6ICdTa2VpbjEwMjQtMTc2JyxcbiAgMHhiMzc3OiAnU2tlaW4xMDI0LTE4NCcsXG4gIDB4YjM3ODogJ1NrZWluMTAyNC0xOTInLFxuICAweGIzNzk6ICdTa2VpbjEwMjQtMjAwJyxcbiAgMHhiMzdhOiAnU2tlaW4xMDI0LTIwOCcsXG4gIDB4YjM3YjogJ1NrZWluMTAyNC0yMTYnLFxuICAweGIzN2M6ICdTa2VpbjEwMjQtMjI0JyxcbiAgMHhiMzdkOiAnU2tlaW4xMDI0LTIzMicsXG4gIDB4YjM3ZTogJ1NrZWluMTAyNC0yNDAnLFxuICAweGIzN2Y6ICdTa2VpbjEwMjQtMjQ4JyxcbiAgMHhiMzgwOiAnU2tlaW4xMDI0LTI1NicsXG4gIDB4YjM4MTogJ1NrZWluMTAyNC0yNjQnLFxuICAweGIzODI6ICdTa2VpbjEwMjQtMjcyJyxcbiAgMHhiMzgzOiAnU2tlaW4xMDI0LTI4MCcsXG4gIDB4YjM4NDogJ1NrZWluMTAyNC0yODgnLFxuICAweGIzODU6ICdTa2VpbjEwMjQtMjk2JyxcbiAgMHhiMzg2OiAnU2tlaW4xMDI0LTMwNCcsXG4gIDB4YjM4NzogJ1NrZWluMTAyNC0zMTInLFxuICAweGIzODg6ICdTa2VpbjEwMjQtMzIwJyxcbiAgMHhiMzg5OiAnU2tlaW4xMDI0LTMyOCcsXG4gIDB4YjM4YTogJ1NrZWluMTAyNC0zMzYnLFxuICAweGIzOGI6ICdTa2VpbjEwMjQtMzQ0JyxcbiAgMHhiMzhjOiAnU2tlaW4xMDI0LTM1MicsXG4gIDB4YjM4ZDogJ1NrZWluMTAyNC0zNjAnLFxuICAweGIzOGU6ICdTa2VpbjEwMjQtMzY4JyxcbiAgMHhiMzhmOiAnU2tlaW4xMDI0LTM3NicsXG4gIDB4YjM5MDogJ1NrZWluMTAyNC0zODQnLFxuICAweGIzOTE6ICdTa2VpbjEwMjQtMzkyJyxcbiAgMHhiMzkyOiAnU2tlaW4xMDI0LTQwMCcsXG4gIDB4YjM5MzogJ1NrZWluMTAyNC00MDgnLFxuICAweGIzOTQ6ICdTa2VpbjEwMjQtNDE2JyxcbiAgMHhiMzk1OiAnU2tlaW4xMDI0LTQyNCcsXG4gIDB4YjM5NjogJ1NrZWluMTAyNC00MzInLFxuICAweGIzOTc6ICdTa2VpbjEwMjQtNDQwJyxcbiAgMHhiMzk4OiAnU2tlaW4xMDI0LTQ0OCcsXG4gIDB4YjM5OTogJ1NrZWluMTAyNC00NTYnLFxuICAweGIzOWE6ICdTa2VpbjEwMjQtNDY0JyxcbiAgMHhiMzliOiAnU2tlaW4xMDI0LTQ3MicsXG4gIDB4YjM5YzogJ1NrZWluMTAyNC00ODAnLFxuICAweGIzOWQ6ICdTa2VpbjEwMjQtNDg4JyxcbiAgMHhiMzllOiAnU2tlaW4xMDI0LTQ5NicsXG4gIDB4YjM5ZjogJ1NrZWluMTAyNC01MDQnLFxuICAweGIzYTA6ICdTa2VpbjEwMjQtNTEyJyxcbiAgMHhiM2ExOiAnU2tlaW4xMDI0LTUyMCcsXG4gIDB4YjNhMjogJ1NrZWluMTAyNC01MjgnLFxuICAweGIzYTM6ICdTa2VpbjEwMjQtNTM2JyxcbiAgMHhiM2E0OiAnU2tlaW4xMDI0LTU0NCcsXG4gIDB4YjNhNTogJ1NrZWluMTAyNC01NTInLFxuICAweGIzYTY6ICdTa2VpbjEwMjQtNTYwJyxcbiAgMHhiM2E3OiAnU2tlaW4xMDI0LTU2OCcsXG4gIDB4YjNhODogJ1NrZWluMTAyNC01NzYnLFxuICAweGIzYTk6ICdTa2VpbjEwMjQtNTg0JyxcbiAgMHhiM2FhOiAnU2tlaW4xMDI0LTU5MicsXG4gIDB4YjNhYjogJ1NrZWluMTAyNC02MDAnLFxuICAweGIzYWM6ICdTa2VpbjEwMjQtNjA4JyxcbiAgMHhiM2FkOiAnU2tlaW4xMDI0LTYxNicsXG4gIDB4YjNhZTogJ1NrZWluMTAyNC02MjQnLFxuICAweGIzYWY6ICdTa2VpbjEwMjQtNjMyJyxcbiAgMHhiM2IwOiAnU2tlaW4xMDI0LTY0MCcsXG4gIDB4YjNiMTogJ1NrZWluMTAyNC02NDgnLFxuICAweGIzYjI6ICdTa2VpbjEwMjQtNjU2JyxcbiAgMHhiM2IzOiAnU2tlaW4xMDI0LTY2NCcsXG4gIDB4YjNiNDogJ1NrZWluMTAyNC02NzInLFxuICAweGIzYjU6ICdTa2VpbjEwMjQtNjgwJyxcbiAgMHhiM2I2OiAnU2tlaW4xMDI0LTY4OCcsXG4gIDB4YjNiNzogJ1NrZWluMTAyNC02OTYnLFxuICAweGIzYjg6ICdTa2VpbjEwMjQtNzA0JyxcbiAgMHhiM2I5OiAnU2tlaW4xMDI0LTcxMicsXG4gIDB4YjNiYTogJ1NrZWluMTAyNC03MjAnLFxuICAweGIzYmI6ICdTa2VpbjEwMjQtNzI4JyxcbiAgMHhiM2JjOiAnU2tlaW4xMDI0LTczNicsXG4gIDB4YjNiZDogJ1NrZWluMTAyNC03NDQnLFxuICAweGIzYmU6ICdTa2VpbjEwMjQtNzUyJyxcbiAgMHhiM2JmOiAnU2tlaW4xMDI0LTc2MCcsXG4gIDB4YjNjMDogJ1NrZWluMTAyNC03NjgnLFxuICAweGIzYzE6ICdTa2VpbjEwMjQtNzc2JyxcbiAgMHhiM2MyOiAnU2tlaW4xMDI0LTc4NCcsXG4gIDB4YjNjMzogJ1NrZWluMTAyNC03OTInLFxuICAweGIzYzQ6ICdTa2VpbjEwMjQtODAwJyxcbiAgMHhiM2M1OiAnU2tlaW4xMDI0LTgwOCcsXG4gIDB4YjNjNjogJ1NrZWluMTAyNC04MTYnLFxuICAweGIzYzc6ICdTa2VpbjEwMjQtODI0JyxcbiAgMHhiM2M4OiAnU2tlaW4xMDI0LTgzMicsXG4gIDB4YjNjOTogJ1NrZWluMTAyNC04NDAnLFxuICAweGIzY2E6ICdTa2VpbjEwMjQtODQ4JyxcbiAgMHhiM2NiOiAnU2tlaW4xMDI0LTg1NicsXG4gIDB4YjNjYzogJ1NrZWluMTAyNC04NjQnLFxuICAweGIzY2Q6ICdTa2VpbjEwMjQtODcyJyxcbiAgMHhiM2NlOiAnU2tlaW4xMDI0LTg4MCcsXG4gIDB4YjNjZjogJ1NrZWluMTAyNC04ODgnLFxuICAweGIzZDA6ICdTa2VpbjEwMjQtODk2JyxcbiAgMHhiM2QxOiAnU2tlaW4xMDI0LTkwNCcsXG4gIDB4YjNkMjogJ1NrZWluMTAyNC05MTInLFxuICAweGIzZDM6ICdTa2VpbjEwMjQtOTIwJyxcbiAgMHhiM2Q0OiAnU2tlaW4xMDI0LTkyOCcsXG4gIDB4YjNkNTogJ1NrZWluMTAyNC05MzYnLFxuICAweGIzZDY6ICdTa2VpbjEwMjQtOTQ0JyxcbiAgMHhiM2Q3OiAnU2tlaW4xMDI0LTk1MicsXG4gIDB4YjNkODogJ1NrZWluMTAyNC05NjAnLFxuICAweGIzZDk6ICdTa2VpbjEwMjQtOTY4JyxcbiAgMHhiM2RhOiAnU2tlaW4xMDI0LTk3NicsXG4gIDB4YjNkYjogJ1NrZWluMTAyNC05ODQnLFxuICAweGIzZGM6ICdTa2VpbjEwMjQtOTkyJyxcbiAgMHhiM2RkOiAnU2tlaW4xMDI0LTEwMDAnLFxuICAweGIzZGU6ICdTa2VpbjEwMjQtMTAwOCcsXG4gIDB4YjNkZjogJ1NrZWluMTAyNC0xMDE2JyxcbiAgMHhiM2UwOiAnU2tlaW4xMDI0LTEwMjQnXG59KVxuXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIDB4MTE6IDIwLFxuICAweDEyOiAzMixcbiAgMHgxMzogNjQsXG4gIDB4NTY6IDMyLFxuICAweDE3OiAyOCxcbiAgMHgxNjogMzIsXG4gIDB4MTU6IDQ4LFxuICAweDE0OiA2NCxcbiAgMHgxODogMzIsXG4gIDB4MTk6IDY0LFxuICAweDFBOiAyOCxcbiAgMHgxQjogMzIsXG4gIDB4MUM6IDQ4LFxuICAweDFEOiA2NCxcbiAgMHgyMjogMzIsXG5cbiAgMHhiMjAxOiAweDAxLFxuICAweGIyMDI6IDB4MDIsXG4gIDB4YjIwMzogMHgwMyxcbiAgMHhiMjA0OiAweDA0LFxuICAweGIyMDU6IDB4MDUsXG4gIDB4YjIwNjogMHgwNixcbiAgMHhiMjA3OiAweDA3LFxuICAweGIyMDg6IDB4MDgsXG4gIDB4YjIwOTogMHgwOSxcbiAgMHhiMjBhOiAweDBhLFxuICAweGIyMGI6IDB4MGIsXG4gIDB4YjIwYzogMHgwYyxcbiAgMHhiMjBkOiAweDBkLFxuICAweGIyMGU6IDB4MGUsXG4gIDB4YjIwZjogMHgwZixcbiAgMHhiMjEwOiAweDEwLFxuICAweGIyMTE6IDB4MTEsXG4gIDB4YjIxMjogMHgxMixcbiAgMHhiMjEzOiAweDEzLFxuICAweGIyMTQ6IDB4MTQsXG4gIDB4YjIxNTogMHgxNSxcbiAgMHhiMjE2OiAweDE2LFxuICAweGIyMTc6IDB4MTcsXG4gIDB4YjIxODogMHgxOCxcbiAgMHhiMjE5OiAweDE5LFxuICAweGIyMWE6IDB4MWEsXG4gIDB4YjIxYjogMHgxYixcbiAgMHhiMjFjOiAweDFjLFxuICAweGIyMWQ6IDB4MWQsXG4gIDB4YjIxZTogMHgxZSxcbiAgMHhiMjFmOiAweDFmLFxuICAweGIyMjA6IDB4MjAsXG4gIDB4YjIyMTogMHgyMSxcbiAgMHhiMjIyOiAweDIyLFxuICAweGIyMjM6IDB4MjMsXG4gIDB4YjIyNDogMHgyNCxcbiAgMHhiMjI1OiAweDI1LFxuICAweGIyMjY6IDB4MjYsXG4gIDB4YjIyNzogMHgyNyxcbiAgMHhiMjI4OiAweDI4LFxuICAweGIyMjk6IDB4MjksXG4gIDB4YjIyYTogMHgyYSxcbiAgMHhiMjJiOiAweDJiLFxuICAweGIyMmM6IDB4MmMsXG4gIDB4YjIyZDogMHgyZCxcbiAgMHhiMjJlOiAweDJlLFxuICAweGIyMmY6IDB4MmYsXG4gIDB4YjIzMDogMHgzMCxcbiAgMHhiMjMxOiAweDMxLFxuICAweGIyMzI6IDB4MzIsXG4gIDB4YjIzMzogMHgzMyxcbiAgMHhiMjM0OiAweDM0LFxuICAweGIyMzU6IDB4MzUsXG4gIDB4YjIzNjogMHgzNixcbiAgMHhiMjM3OiAweDM3LFxuICAweGIyMzg6IDB4MzgsXG4gIDB4YjIzOTogMHgzOSxcbiAgMHhiMjNhOiAweDNhLFxuICAweGIyM2I6IDB4M2IsXG4gIDB4YjIzYzogMHgzYyxcbiAgMHhiMjNkOiAweDNkLFxuICAweGIyM2U6IDB4M2UsXG4gIDB4YjIzZjogMHgzZixcbiAgMHhiMjQwOiAweDQwLFxuICAweGIyNDE6IDB4MDEsXG4gIDB4YjI0MjogMHgwMixcbiAgMHhiMjQzOiAweDAzLFxuICAweGIyNDQ6IDB4MDQsXG4gIDB4YjI0NTogMHgwNSxcbiAgMHhiMjQ2OiAweDA2LFxuICAweGIyNDc6IDB4MDcsXG4gIDB4YjI0ODogMHgwOCxcbiAgMHhiMjQ5OiAweDA5LFxuICAweGIyNGE6IDB4MGEsXG4gIDB4YjI0YjogMHgwYixcbiAgMHhiMjRjOiAweDBjLFxuICAweGIyNGQ6IDB4MGQsXG4gIDB4YjI0ZTogMHgwZSxcbiAgMHhiMjRmOiAweDBmLFxuICAweGIyNTA6IDB4MTAsXG4gIDB4YjI1MTogMHgxMSxcbiAgMHhiMjUyOiAweDEyLFxuICAweGIyNTM6IDB4MTMsXG4gIDB4YjI1NDogMHgxNCxcbiAgMHhiMjU1OiAweDE1LFxuICAweGIyNTY6IDB4MTYsXG4gIDB4YjI1NzogMHgxNyxcbiAgMHhiMjU4OiAweDE4LFxuICAweGIyNTk6IDB4MTksXG4gIDB4YjI1YTogMHgxYSxcbiAgMHhiMjViOiAweDFiLFxuICAweGIyNWM6IDB4MWMsXG4gIDB4YjI1ZDogMHgxZCxcbiAgMHhiMjVlOiAweDFlLFxuICAweGIyNWY6IDB4MWYsXG4gIDB4YjI2MDogMHgyMCxcbiAgMHhiMzAxOiAweDAxLFxuICAweGIzMDI6IDB4MDIsXG4gIDB4YjMwMzogMHgwMyxcbiAgMHhiMzA0OiAweDA0LFxuICAweGIzMDU6IDB4MDUsXG4gIDB4YjMwNjogMHgwNixcbiAgMHhiMzA3OiAweDA3LFxuICAweGIzMDg6IDB4MDgsXG4gIDB4YjMwOTogMHgwOSxcbiAgMHhiMzBhOiAweDBhLFxuICAweGIzMGI6IDB4MGIsXG4gIDB4YjMwYzogMHgwYyxcbiAgMHhiMzBkOiAweDBkLFxuICAweGIzMGU6IDB4MGUsXG4gIDB4YjMwZjogMHgwZixcbiAgMHhiMzEwOiAweDEwLFxuICAweGIzMTE6IDB4MTEsXG4gIDB4YjMxMjogMHgxMixcbiAgMHhiMzEzOiAweDEzLFxuICAweGIzMTQ6IDB4MTQsXG4gIDB4YjMxNTogMHgxNSxcbiAgMHhiMzE2OiAweDE2LFxuICAweGIzMTc6IDB4MTcsXG4gIDB4YjMxODogMHgxOCxcbiAgMHhiMzE5OiAweDE5LFxuICAweGIzMWE6IDB4MWEsXG4gIDB4YjMxYjogMHgxYixcbiAgMHhiMzFjOiAweDFjLFxuICAweGIzMWQ6IDB4MWQsXG4gIDB4YjMxZTogMHgxZSxcbiAgMHhiMzFmOiAweDFmLFxuICAweGIzMjA6IDB4MjAsXG4gIDB4YjMyMTogMHgwMSxcbiAgMHhiMzIyOiAweDAyLFxuICAweGIzMjM6IDB4MDMsXG4gIDB4YjMyNDogMHgwNCxcbiAgMHhiMzI1OiAweDA1LFxuICAweGIzMjY6IDB4MDYsXG4gIDB4YjMyNzogMHgwNyxcbiAgMHhiMzI4OiAweDA4LFxuICAweGIzMjk6IDB4MDksXG4gIDB4YjMyYTogMHgwYSxcbiAgMHhiMzJiOiAweDBiLFxuICAweGIzMmM6IDB4MGMsXG4gIDB4YjMyZDogMHgwZCxcbiAgMHhiMzJlOiAweDBlLFxuICAweGIzMmY6IDB4MGYsXG4gIDB4YjMzMDogMHgxMCxcbiAgMHhiMzMxOiAweDExLFxuICAweGIzMzI6IDB4MTIsXG4gIDB4YjMzMzogMHgxMyxcbiAgMHhiMzM0OiAweDE0LFxuICAweGIzMzU6IDB4MTUsXG4gIDB4YjMzNjogMHgxNixcbiAgMHhiMzM3OiAweDE3LFxuICAweGIzMzg6IDB4MTgsXG4gIDB4YjMzOTogMHgxOSxcbiAgMHhiMzNhOiAweDFhLFxuICAweGIzM2I6IDB4MWIsXG4gIDB4YjMzYzogMHgxYyxcbiAgMHhiMzNkOiAweDFkLFxuICAweGIzM2U6IDB4MWUsXG4gIDB4YjMzZjogMHgxZixcbiAgMHhiMzQwOiAweDIwLFxuICAweGIzNDE6IDB4MjEsXG4gIDB4YjM0MjogMHgyMixcbiAgMHhiMzQzOiAweDIzLFxuICAweGIzNDQ6IDB4MjQsXG4gIDB4YjM0NTogMHgyNSxcbiAgMHhiMzQ2OiAweDI2LFxuICAweGIzNDc6IDB4MjcsXG4gIDB4YjM0ODogMHgyOCxcbiAgMHhiMzQ5OiAweDI5LFxuICAweGIzNGE6IDB4MmEsXG4gIDB4YjM0YjogMHgyYixcbiAgMHhiMzRjOiAweDJjLFxuICAweGIzNGQ6IDB4MmQsXG4gIDB4YjM0ZTogMHgyZSxcbiAgMHhiMzRmOiAweDJmLFxuICAweGIzNTA6IDB4MzAsXG4gIDB4YjM1MTogMHgzMSxcbiAgMHhiMzUyOiAweDMyLFxuICAweGIzNTM6IDB4MzMsXG4gIDB4YjM1NDogMHgzNCxcbiAgMHhiMzU1OiAweDM1LFxuICAweGIzNTY6IDB4MzYsXG4gIDB4YjM1NzogMHgzNyxcbiAgMHhiMzU4OiAweDM4LFxuICAweGIzNTk6IDB4MzksXG4gIDB4YjM1YTogMHgzYSxcbiAgMHhiMzViOiAweDNiLFxuICAweGIzNWM6IDB4M2MsXG4gIDB4YjM1ZDogMHgzZCxcbiAgMHhiMzVlOiAweDNlLFxuICAweGIzNWY6IDB4M2YsXG4gIDB4YjM2MDogMHg0MCxcbiAgMHhiMzYxOiAweDAxLFxuICAweGIzNjI6IDB4MDIsXG4gIDB4YjM2MzogMHgwMyxcbiAgMHhiMzY0OiAweDA0LFxuICAweGIzNjU6IDB4MDUsXG4gIDB4YjM2NjogMHgwNixcbiAgMHhiMzY3OiAweDA3LFxuICAweGIzNjg6IDB4MDgsXG4gIDB4YjM2OTogMHgwOSxcbiAgMHhiMzZhOiAweDBhLFxuICAweGIzNmI6IDB4MGIsXG4gIDB4YjM2YzogMHgwYyxcbiAgMHhiMzZkOiAweDBkLFxuICAweGIzNmU6IDB4MGUsXG4gIDB4YjM2ZjogMHgwZixcbiAgMHhiMzcwOiAweDEwLFxuICAweGIzNzE6IDB4MTEsXG4gIDB4YjM3MjogMHgxMixcbiAgMHhiMzczOiAweDEzLFxuICAweGIzNzQ6IDB4MTQsXG4gIDB4YjM3NTogMHgxNSxcbiAgMHhiMzc2OiAweDE2LFxuICAweGIzNzc6IDB4MTcsXG4gIDB4YjM3ODogMHgxOCxcbiAgMHhiMzc5OiAweDE5LFxuICAweGIzN2E6IDB4MWEsXG4gIDB4YjM3YjogMHgxYixcbiAgMHhiMzdjOiAweDFjLFxuICAweGIzN2Q6IDB4MWQsXG4gIDB4YjM3ZTogMHgxZSxcbiAgMHhiMzdmOiAweDFmLFxuICAweGIzODA6IDB4MjAsXG4gIDB4YjM4MTogMHgyMSxcbiAgMHhiMzgyOiAweDIyLFxuICAweGIzODM6IDB4MjMsXG4gIDB4YjM4NDogMHgyNCxcbiAgMHhiMzg1OiAweDI1LFxuICAweGIzODY6IDB4MjYsXG4gIDB4YjM4NzogMHgyNyxcbiAgMHhiMzg4OiAweDI4LFxuICAweGIzODk6IDB4MjksXG4gIDB4YjM4YTogMHgyYSxcbiAgMHhiMzhiOiAweDJiLFxuICAweGIzOGM6IDB4MmMsXG4gIDB4YjM4ZDogMHgyZCxcbiAgMHhiMzhlOiAweDJlLFxuICAweGIzOGY6IDB4MmYsXG4gIDB4YjM5MDogMHgzMCxcbiAgMHhiMzkxOiAweDMxLFxuICAweGIzOTI6IDB4MzIsXG4gIDB4YjM5MzogMHgzMyxcbiAgMHhiMzk0OiAweDM0LFxuICAweGIzOTU6IDB4MzUsXG4gIDB4YjM5NjogMHgzNixcbiAgMHhiMzk3OiAweDM3LFxuICAweGIzOTg6IDB4MzgsXG4gIDB4YjM5OTogMHgzOSxcbiAgMHhiMzlhOiAweDNhLFxuICAweGIzOWI6IDB4M2IsXG4gIDB4YjM5YzogMHgzYyxcbiAgMHhiMzlkOiAweDNkLFxuICAweGIzOWU6IDB4M2UsXG4gIDB4YjM5ZjogMHgzZixcbiAgMHhiM2EwOiAweDQwLFxuICAweGIzYTE6IDB4NDEsXG4gIDB4YjNhMjogMHg0MixcbiAgMHhiM2EzOiAweDQzLFxuICAweGIzYTQ6IDB4NDQsXG4gIDB4YjNhNTogMHg0NSxcbiAgMHhiM2E2OiAweDQ2LFxuICAweGIzYTc6IDB4NDcsXG4gIDB4YjNhODogMHg0OCxcbiAgMHhiM2E5OiAweDQ5LFxuICAweGIzYWE6IDB4NGEsXG4gIDB4YjNhYjogMHg0YixcbiAgMHhiM2FjOiAweDRjLFxuICAweGIzYWQ6IDB4NGQsXG4gIDB4YjNhZTogMHg0ZSxcbiAgMHhiM2FmOiAweDRmLFxuICAweGIzYjA6IDB4NTAsXG4gIDB4YjNiMTogMHg1MSxcbiAgMHhiM2IyOiAweDUyLFxuICAweGIzYjM6IDB4NTMsXG4gIDB4YjNiNDogMHg1NCxcbiAgMHhiM2I1OiAweDU1LFxuICAweGIzYjY6IDB4NTYsXG4gIDB4YjNiNzogMHg1NyxcbiAgMHhiM2I4OiAweDU4LFxuICAweGIzYjk6IDB4NTksXG4gIDB4YjNiYTogMHg1YSxcbiAgMHhiM2JiOiAweDViLFxuICAweGIzYmM6IDB4NWMsXG4gIDB4YjNiZDogMHg1ZCxcbiAgMHhiM2JlOiAweDVlLFxuICAweGIzYmY6IDB4NWYsXG4gIDB4YjNjMDogMHg2MCxcbiAgMHhiM2MxOiAweDYxLFxuICAweGIzYzI6IDB4NjIsXG4gIDB4YjNjMzogMHg2MyxcbiAgMHhiM2M0OiAweDY0LFxuICAweGIzYzU6IDB4NjUsXG4gIDB4YjNjNjogMHg2NixcbiAgMHhiM2M3OiAweDY3LFxuICAweGIzYzg6IDB4NjgsXG4gIDB4YjNjOTogMHg2OSxcbiAgMHhiM2NhOiAweDZhLFxuICAweGIzY2I6IDB4NmIsXG4gIDB4YjNjYzogMHg2YyxcbiAgMHhiM2NkOiAweDZkLFxuICAweGIzY2U6IDB4NmUsXG4gIDB4YjNjZjogMHg2ZixcbiAgMHhiM2QwOiAweDcwLFxuICAweGIzZDE6IDB4NzEsXG4gIDB4YjNkMjogMHg3MixcbiAgMHhiM2QzOiAweDczLFxuICAweGIzZDQ6IDB4NzQsXG4gIDB4YjNkNTogMHg3NSxcbiAgMHhiM2Q2OiAweDc2LFxuICAweGIzZDc6IDB4NzcsXG4gIDB4YjNkODogMHg3OCxcbiAgMHhiM2Q5OiAweDc5LFxuICAweGIzZGE6IDB4N2EsXG4gIDB4YjNkYjogMHg3YixcbiAgMHhiM2RjOiAweDdjLFxuICAweGIzZGQ6IDB4N2QsXG4gIDB4YjNkZTogMHg3ZSxcbiAgMHhiM2RmOiAweDdmLFxuICAweGIzZTA6IDB4ODBcbn0pXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGVuY29kZVxuXG52YXIgTVNCID0gMHg4MFxuICAsIFJFU1QgPSAweDdGXG4gICwgTVNCQUxMID0gflJFU1RcbiAgLCBJTlQgPSBNYXRoLnBvdygyLCAzMSlcblxuZnVuY3Rpb24gZW5jb2RlKG51bSwgb3V0LCBvZmZzZXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdXG4gIG9mZnNldCA9IG9mZnNldCB8fCAwXG4gIHZhciBvbGRPZmZzZXQgPSBvZmZzZXRcblxuICB3aGlsZShudW0gPj0gSU5UKSB7XG4gICAgb3V0W29mZnNldCsrXSA9IChudW0gJiAweEZGKSB8IE1TQlxuICAgIG51bSAvPSAxMjhcbiAgfVxuICB3aGlsZShudW0gJiBNU0JBTEwpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtID4+Pj0gN1xuICB9XG4gIG91dFtvZmZzZXRdID0gbnVtIHwgMFxuICBcbiAgZW5jb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0ICsgMVxuICBcbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZWFkXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcblxuZnVuY3Rpb24gcmVhZChidWYsIG9mZnNldCkge1xuICB2YXIgcmVzICAgID0gMFxuICAgICwgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgICAsIHNoaWZ0ICA9IDBcbiAgICAsIGNvdW50ZXIgPSBvZmZzZXRcbiAgICAsIGJcbiAgICAsIGwgPSBidWYubGVuZ3RoXG5cbiAgZG8ge1xuICAgIGlmIChjb3VudGVyID49IGwpIHtcbiAgICAgIHJlYWQuYnl0ZXMgPSAwXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ291bGQgbm90IGRlY29kZSB2YXJpbnQnKVxuICAgIH1cbiAgICBiID0gYnVmW2NvdW50ZXIrK11cbiAgICByZXMgKz0gc2hpZnQgPCAyOFxuICAgICAgPyAoYiAmIFJFU1QpIDw8IHNoaWZ0XG4gICAgICA6IChiICYgUkVTVCkgKiBNYXRoLnBvdygyLCBzaGlmdClcbiAgICBzaGlmdCArPSA3XG4gIH0gd2hpbGUgKGIgPj0gTVNCKVxuXG4gIHJlYWQuYnl0ZXMgPSBjb3VudGVyIC0gb2Zmc2V0XG5cbiAgcmV0dXJuIHJlc1xufVxuIiwiXG52YXIgTjEgPSBNYXRoLnBvdygyLCAgNylcbnZhciBOMiA9IE1hdGgucG93KDIsIDE0KVxudmFyIE4zID0gTWF0aC5wb3coMiwgMjEpXG52YXIgTjQgPSBNYXRoLnBvdygyLCAyOClcbnZhciBONSA9IE1hdGgucG93KDIsIDM1KVxudmFyIE42ID0gTWF0aC5wb3coMiwgNDIpXG52YXIgTjcgPSBNYXRoLnBvdygyLCA0OSlcbnZhciBOOCA9IE1hdGgucG93KDIsIDU2KVxudmFyIE45ID0gTWF0aC5wb3coMiwgNjMpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPCBOMSA/IDFcbiAgOiB2YWx1ZSA8IE4yID8gMlxuICA6IHZhbHVlIDwgTjMgPyAzXG4gIDogdmFsdWUgPCBONCA/IDRcbiAgOiB2YWx1ZSA8IE41ID8gNVxuICA6IHZhbHVlIDwgTjYgPyA2XG4gIDogdmFsdWUgPCBONyA/IDdcbiAgOiB2YWx1ZSA8IE44ID8gOFxuICA6IHZhbHVlIDwgTjkgPyA5XG4gIDogICAgICAgICAgICAgIDEwXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBCYXNlID0gcmVxdWlyZSgnLi9iYXNlLmpzJylcbmNvbnN0IGJhc2VYID0gcmVxdWlyZSgnYmFzZS14JylcbmNvbnN0IGJhc2UxNiA9IHJlcXVpcmUoJy4vYmFzZTE2JylcbmNvbnN0IGJhc2UzMiA9IHJlcXVpcmUoJy4vYmFzZTMyJylcbmNvbnN0IGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0JylcblxuLy8gbmFtZSwgY29kZSwgaW1wbGVtZW50YXRpb24sIGFscGhhYmV0XG5jb25zdCBjb25zdGFudHMgPSBbXG4gIFsnYmFzZTEnLCAnMScsICcnLCAnMSddLFxuICBbJ2Jhc2UyJywgJzAnLCBiYXNlWCwgJzAxJ10sXG4gIFsnYmFzZTgnLCAnNycsIGJhc2VYLCAnMDEyMzQ1NjcnXSxcbiAgWydiYXNlMTAnLCAnOScsIGJhc2VYLCAnMDEyMzQ1Njc4OSddLFxuICBbJ2Jhc2UxNicsICdmJywgYmFzZTE2LCAnMDEyMzQ1Njc4OWFiY2RlZiddLFxuICBbJ2Jhc2UzMicsICdiJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjcnXSxcbiAgWydiYXNlMzJwYWQnLCAnYycsIGJhc2UzMiwgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3PSddLFxuICBbJ2Jhc2UzMmhleCcsICd2JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXYnXSxcbiAgWydiYXNlMzJoZXhwYWQnLCAndCcsIGJhc2UzMiwgJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2PSddLFxuICBbJ2Jhc2UzMnonLCAnaCcsIGJhc2UzMiwgJ3libmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5J10sXG4gIFsnYmFzZTU4ZmxpY2tyJywgJ1onLCBiYXNlWCwgJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonXSxcbiAgWydiYXNlNThidGMnLCAneicsIGJhc2VYLCAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eiddLFxuICBbJ2Jhc2U2NCcsICdtJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyddLFxuICBbJ2Jhc2U2NHBhZCcsICdNJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXSxcbiAgWydiYXNlNjR1cmwnLCAndScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nXSxcbiAgWydiYXNlNjR1cmxwYWQnLCAnVScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89J11cbl1cblxuY29uc3QgbmFtZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMF1dID0gbmV3IEJhc2UodHVwcGxlWzBdLCB0dXBwbGVbMV0sIHR1cHBsZVsyXSwgdHVwcGxlWzNdKVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbmNvbnN0IGNvZGVzID0gY29uc3RhbnRzLnJlZHVjZSgocHJldiwgdHVwcGxlKSA9PiB7XG4gIHByZXZbdHVwcGxlWzFdXSA9IG5hbWVzW3R1cHBsZVswXV1cbiAgcmV0dXJuIHByZXZcbn0sIHt9KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmFtZXM6IG5hbWVzLFxuICBjb2RlczogY29kZXNcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBCYXNlIHtcbiAgY29uc3RydWN0b3IgKG5hbWUsIGNvZGUsIGltcGxlbWVudGF0aW9uLCBhbHBoYWJldCkge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmNvZGUgPSBjb2RlXG4gICAgdGhpcy5hbHBoYWJldCA9IGFscGhhYmV0XG4gICAgaWYgKGltcGxlbWVudGF0aW9uICYmIGFscGhhYmV0KSB7XG4gICAgICB0aGlzLmVuZ2luZSA9IGltcGxlbWVudGF0aW9uKGFscGhhYmV0KVxuICAgIH1cbiAgfVxuXG4gIGVuY29kZSAoc3RyaW5nT3JCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuZW5jb2RlKHN0cmluZ09yQnVmZmVyKVxuICB9XG5cbiAgZGVjb2RlIChzdHJpbmdPckJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5kZWNvZGUoc3RyaW5nT3JCdWZmZXIpXG4gIH1cblxuICBpc0ltcGxlbWVudGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VcbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UxNiAoYWxwaGFiZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCdoZXgnKVxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTE2IGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2hleCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gZGVjb2RlIChpbnB1dCwgYWxwaGFiZXQpIHtcbiAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKG5ldyBSZWdFeHAoJz0nLCAnZycpLCAnJylcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aFxuXG4gIGxldCBiaXRzID0gMFxuICBsZXQgdmFsdWUgPSAwXG5cbiAgbGV0IGluZGV4ID0gMFxuICBsZXQgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbmd0aCAqIDUgLyA4KSB8IDApXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDUpIHwgYWxwaGFiZXQuaW5kZXhPZihpbnB1dFtpXSlcbiAgICBiaXRzICs9IDVcblxuICAgIGlmIChiaXRzID49IDgpIHtcbiAgICAgIG91dHB1dFtpbmRleCsrXSA9ICh2YWx1ZSA+Pj4gKGJpdHMgLSA4KSkgJiAyNTVcbiAgICAgIGJpdHMgLT0gOFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGVuY29kZSAoYnVmZmVyLCBhbHBoYWJldCkge1xuICBsZXQgbGVuZ3RoID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG4gIGxldCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID09PSBhbHBoYWJldC5sZW5ndGggLSAxXG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICBhbHBoYWJldCA9IGFscGhhYmV0LnN1YnN0cmluZygwLCBhbHBoYWJldC5sZW5ndGggLSAyKVxuICB9XG5cbiAgbGV0IGJpdHMgPSAwXG4gIGxldCB2YWx1ZSA9IDBcbiAgbGV0IG91dHB1dCA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpIHwgdmlld1tpXVxuICAgIGJpdHMgKz0gOFxuXG4gICAgd2hpbGUgKGJpdHMgPj0gNSkge1xuICAgICAgb3V0cHV0ICs9IGFscGhhYmV0Wyh2YWx1ZSA+Pj4gKGJpdHMgLSA1KSkgJiAzMV1cbiAgICAgIGJpdHMgLT0gNVxuICAgIH1cbiAgfVxuXG4gIGlmIChiaXRzID4gMCkge1xuICAgIG91dHB1dCArPSBhbHBoYWJldFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAzMV1cbiAgfVxuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgd2hpbGUgKChvdXRwdXQubGVuZ3RoICUgOCkgIT09IDApIHtcbiAgICAgIG91dHB1dCArPSAnPSdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTMyIChhbHBoYWJldCkge1xuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQpLCBhbHBoYWJldClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVuY29kZShpbnB1dCwgYWxwaGFiZXQpXG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlMzIgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVjb2RlKGlucHV0LCBhbHBoYWJldClcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2U2NCAoYWxwaGFiZXQpIHtcbiAgLy8gVGhlIGFscGhhYmV0IGlzIG9ubHkgdXNlZCB0byBrbm93OlxuICAvLyAgIDEuIElmIHBhZGRpbmcgaXMgZW5hYmxlZCAobXVzdCBjb250YWluICc9JylcbiAgLy8gICAyLiBJZiB0aGUgb3V0cHV0IG11c3QgYmUgdXJsLXNhZmUgKG11c3QgY29udGFpbiAnLScgYW5kICdfJylcbiAgLy8gICAzLiBJZiB0aGUgaW5wdXQgb2YgdGhlIG91dHB1dCBmdW5jdGlvbiBpcyB2YWxpZFxuICAvLyBUaGUgYWxwaGFiZXRzIGZyb20gUkZDIDQ2NDggYXJlIGFsd2F5cyB1c2VkLlxuICBjb25zdCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID4gLTFcbiAgY29uc3QgdXJsID0gYWxwaGFiZXQuaW5kZXhPZignLScpID4gLTEgJiYgYWxwaGFiZXQuaW5kZXhPZignXycpID4gLTFcblxuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGxldCBvdXRwdXQgPSAnJ1xuXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdXRwdXQgPSBCdWZmZXIuZnJvbShpbnB1dCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQgPSBpbnB1dC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkID0gb3V0cHV0LmluZGV4T2YoJz0nKVxuICAgICAgaWYgKHBhZCA+IDAgJiYgIXBhZGRpbmcpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnN1YnN0cmluZygwLCBwYWQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2U2NCBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgY29udmVydCA9IHJlcXVpcmUoJy4vY29udmVydCcpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vLyBleHBvcnQgY29kZWNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHJpbmdUb1N0cmluZ1R1cGxlczogc3RyaW5nVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvU3RyaW5nOiBzdHJpbmdUdXBsZXNUb1N0cmluZyxcblxuICB0dXBsZXNUb1N0cmluZ1R1cGxlczogdHVwbGVzVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvVHVwbGVzOiBzdHJpbmdUdXBsZXNUb1R1cGxlcyxcblxuICBidWZmZXJUb1R1cGxlczogYnVmZmVyVG9UdXBsZXMsXG4gIHR1cGxlc1RvQnVmZmVyOiB0dXBsZXNUb0J1ZmZlcixcblxuICBidWZmZXJUb1N0cmluZzogYnVmZmVyVG9TdHJpbmcsXG4gIHN0cmluZ1RvQnVmZmVyOiBzdHJpbmdUb0J1ZmZlcixcblxuICBmcm9tU3RyaW5nOiBmcm9tU3RyaW5nLFxuICBmcm9tQnVmZmVyOiBmcm9tQnVmZmVyLFxuICB2YWxpZGF0ZUJ1ZmZlcjogdmFsaWRhdGVCdWZmZXIsXG4gIGlzVmFsaWRCdWZmZXI6IGlzVmFsaWRCdWZmZXIsXG4gIGNsZWFuUGF0aDogY2xlYW5QYXRoLFxuXG4gIFBhcnNlRXJyb3I6IFBhcnNlRXJyb3IsXG4gIHByb3RvRnJvbVR1cGxlOiBwcm90b0Zyb21UdXBsZSxcblxuICBzaXplRm9yQWRkcjogc2l6ZUZvckFkZHJcbn1cblxuLy8gc3RyaW5nIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUb1N0cmluZ1R1cGxlcyAoc3RyKSB7XG4gIGNvbnN0IHR1cGxlcyA9IFtdXG4gIGNvbnN0IHBhcnRzID0gc3RyLnNwbGl0KCcvJykuc2xpY2UoMSkgLy8gc2tpcCBmaXJzdCBlbXB0eSBlbGVtXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEgJiYgcGFydHNbMF0gPT09ICcnKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBmb3IgKGxldCBwID0gMDsgcCA8IHBhcnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW3BdXG4gICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHMocGFydClcblxuICAgIGlmIChwcm90by5zaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbcGFydF0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHArKyAvLyBhZHZhbmNlIGFkZHIgcGFydFxuICAgIGlmIChwID49IHBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgUGFyc2VFcnJvcignaW52YWxpZCBhZGRyZXNzOiAnICsgc3RyKVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3MgYSBwYXRoIHByb3RvLCB0YWtlIHRoZSByZXN0XG4gICAgaWYgKHByb3RvLnBhdGgpIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtcbiAgICAgICAgcGFydCxcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIG5lZWQgdG8gY2hlY2sgZWFjaCBwYXRoIHBhcnQgdG8gc2VlIGlmIGl0J3MgYSBwcm90bz9cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBhbGxvdyBmb3Igb3RoZXIgcHJvdG9jb2xzIHRvIGJlIGFkZGVkIGFmdGVyIGEgdW5peCBwYXRoLFxuICAgICAgICAvLyBob3dldmVyIGl0IHdvdWxkIGhhdmUgaXNzdWVzIGlmIHRoZSBwYXRoIGhhZCBhIHByb3RvY29sIG5hbWUgaW4gdGhlIHBhdGhcbiAgICAgICAgY2xlYW5QYXRoKHBhcnRzLnNsaWNlKHApLmpvaW4oJy8nKSlcbiAgICAgIF0pXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIHR1cGxlcy5wdXNoKFtwYXJ0LCBwYXJ0c1twXV0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IHN0cmluZ1xuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9TdHJpbmcgKHR1cGxlcykge1xuICBjb25zdCBwYXJ0cyA9IFtdXG4gIHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBwYXJ0cy5wdXNoKHByb3RvLm5hbWUpXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICBwYXJ0cy5wdXNoKHR1cFsxXSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNsZWFuUGF0aChwYXJ0cy5qb2luKCcvJykpXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXVxuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9UdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0dXApKSB7XG4gICAgICB0dXAgPSBbdHVwXVxuICAgIH1cbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiBbcHJvdG8uY29kZSwgY29udmVydC50b0J1ZmZlcihwcm90by5jb2RlLCB0dXBbMV0pXVxuICAgIH1cbiAgICByZXR1cm4gW3Byb3RvLmNvZGVdXG4gIH0pXG59XG5cbi8vIFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXSAtPiBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXVxuZnVuY3Rpb24gdHVwbGVzVG9TdHJpbmdUdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvU3RyaW5nKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXSAtPiBCdWZmZXJcbmZ1bmN0aW9uIHR1cGxlc1RvQnVmZmVyICh0dXBsZXMpIHtcbiAgcmV0dXJuIGZyb21CdWZmZXIoQnVmZmVyLmNvbmNhdCh0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUocHJvdG8uY29kZSkpXG5cbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgdHVwWzFdXSkgLy8gYWRkIGFkZHJlc3MgYnVmZmVyXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZlxuICB9KSkpXG59XG5cbmZ1bmN0aW9uIHNpemVGb3JBZGRyIChwLCBhZGRyKSB7XG4gIGlmIChwLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIHAuc2l6ZSAvIDhcbiAgfSBlbHNlIGlmIChwLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNpemUgPSB2YXJpbnQuZGVjb2RlKGFkZHIpXG4gICAgcmV0dXJuIHNpemUgKyB2YXJpbnQuZGVjb2RlLmJ5dGVzXG4gIH1cbn1cblxuLy8gQnVmZmVyIC0+IFtbaW50IGNvZGUsIEJ1ZmZlciBdLi4uIF1cbmZ1bmN0aW9uIGJ1ZmZlclRvVHVwbGVzIChidWYpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZiwgaSlcbiAgICBjb25zdCBuID0gdmFyaW50LmRlY29kZS5ieXRlc1xuXG4gICAgY29uc3QgcCA9IHByb3RvY29scyhjb2RlKVxuXG4gICAgY29uc3Qgc2l6ZSA9IHNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgdHVwbGVzLnB1c2goW2NvZGVdKVxuICAgICAgaSArPSBuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGFkZHIgPSBidWYuc2xpY2UoaSArIG4sIGkgKyBuICsgc2l6ZSlcblxuICAgIGkgKz0gKHNpemUgKyBuKVxuXG4gICAgaWYgKGkgPiBidWYubGVuZ3RoKSB7IC8vIGRpZCBub3QgZW5kIF9leGFjdGx5XyBhdCBidWZmZXIubGVuZ3RoXG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MgYnVmZmVyOiAnICsgYnVmLnRvU3RyaW5nKCdoZXgnKSlcbiAgICB9XG5cbiAgICAvLyBvaywgdHVwbGUgc2VlbXMgZ29vZC5cbiAgICB0dXBsZXMucHVzaChbY29kZSwgYWRkcl0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIEJ1ZmZlciAtPiBTdHJpbmdcbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nIChidWYpIHtcbiAgY29uc3QgYSA9IGJ1ZmZlclRvVHVwbGVzKGJ1ZilcbiAgY29uc3QgYiA9IHR1cGxlc1RvU3RyaW5nVHVwbGVzKGEpXG4gIHJldHVybiBzdHJpbmdUdXBsZXNUb1N0cmluZyhiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlciAoc3RyKSB7XG4gIHN0ciA9IGNsZWFuUGF0aChzdHIpXG4gIGNvbnN0IGEgPSBzdHJpbmdUb1N0cmluZ1R1cGxlcyhzdHIpXG4gIGNvbnN0IGIgPSBzdHJpbmdUdXBsZXNUb1R1cGxlcyhhKVxuXG4gIHJldHVybiB0dXBsZXNUb0J1ZmZlcihiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0cmluZ1RvQnVmZmVyKHN0cilcbn1cblxuLy8gQnVmZmVyIC0+IEJ1ZmZlclxuZnVuY3Rpb24gZnJvbUJ1ZmZlciAoYnVmKSB7XG4gIGNvbnN0IGVyciA9IHZhbGlkYXRlQnVmZmVyKGJ1ZilcbiAgaWYgKGVycikgdGhyb3cgZXJyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWYpIC8vIGNvcHlcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCdWZmZXIgKGJ1Zikge1xuICB0cnkge1xuICAgIGJ1ZmZlclRvVHVwbGVzKGJ1ZikgLy8gdHJ5IHRvIHBhcnNlLiB3aWxsIHRocm93IGlmIGJyZWFrc1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZXJyXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZEJ1ZmZlciAoYnVmKSB7XG4gIHJldHVybiB2YWxpZGF0ZUJ1ZmZlcihidWYpID09PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChzdHIpIHtcbiAgcmV0dXJuICcvJyArIHN0ci50cmltKCkuc3BsaXQoJy8nKS5maWx0ZXIoYSA9PiBhKS5qb2luKCcvJylcbn1cblxuZnVuY3Rpb24gUGFyc2VFcnJvciAoc3RyKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0Vycm9yIHBhcnNpbmcgYWRkcmVzczogJyArIHN0cilcbn1cblxuZnVuY3Rpb24gcHJvdG9Gcm9tVHVwbGUgKHR1cCkge1xuICBjb25zdCBwcm90byA9IHByb3RvY29scyh0dXBbMF0pXG4gIHJldHVybiBwcm90b1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGlwID0gcmVxdWlyZSgnaXAnKVxuY29uc3QgaXNJcCA9IHJlcXVpcmUoJ2lzLWlwJylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnaGktYmFzZTMyJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0gQ29udmVydFxuXG4vLyBjb252ZXJ0cyAoc2VyaWFsaXplcykgYWRkcmVzc2VzXG5mdW5jdGlvbiBDb252ZXJ0IChwcm90bywgYSkge1xuICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBDb252ZXJ0LnRvU3RyaW5nKHByb3RvLCBhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBDb252ZXJ0LnRvQnVmZmVyKHByb3RvLCBhKVxuICB9XG59XG5cbkNvbnZlcnQudG9TdHJpbmcgPSBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcgKHByb3RvLCBidWYpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgIGNhc2UgNDE6IC8vIGlwdjZcbiAgICAgIHJldHVybiBidWYyaXAoYnVmKVxuXG4gICAgY2FzZSA2OiAvLyB0Y3BcbiAgICBjYXNlIDI3MzogLy8gdWRwXG4gICAgY2FzZSAzMzogLy8gZGNjcFxuICAgIGNhc2UgMTMyOiAvLyBzY3RwXG4gICAgICByZXR1cm4gYnVmMnBvcnQoYnVmKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBidWYyc3RyKGJ1ZilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gYnVmMm1oKGJ1ZilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IHRvIGhleFxuICB9XG59XG5cbkNvbnZlcnQudG9CdWZmZXIgPSBmdW5jdGlvbiBjb252ZXJ0VG9CdWZmZXIgKHByb3RvLCBzdHIpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBwb3J0MmJ1ZihwYXJzZUludChzdHIsIDEwKSlcblxuICAgIGNhc2UgNTM6IC8vIGRuc1xuICAgIGNhc2UgNTQ6IC8vIGRuczRcbiAgICBjYXNlIDU1OiAvLyBkbnM2XG4gICAgY2FzZSA1NjogLy8gZG5zYWRkclxuICAgIGNhc2UgNDAwOiAvLyB1bml4XG4gICAgICByZXR1cm4gc3RyMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDQyMTogLy8gaXBmc1xuICAgICAgcmV0dXJuIG1oMmJ1ZihzdHIpXG4gICAgY2FzZSA0NDQ6IC8vIG9uaW9uXG4gICAgICByZXR1cm4gb25pb24yYnVmKHN0cilcbiAgICBjYXNlIDQ0NTogLy8gb25pb24zXG4gICAgICByZXR1cm4gb25pb24zMmJ1ZihzdHIpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsICdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IGZyb20gaGV4XG4gIH1cbn1cblxuZnVuY3Rpb24gaXAyYnVmIChpcFN0cmluZykge1xuICBpZiAoIWlzSXAoaXBTdHJpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlwIGFkZHJlc3MnKVxuICB9XG4gIHJldHVybiBpcC50b0J1ZmZlcihpcFN0cmluZylcbn1cblxuZnVuY3Rpb24gYnVmMmlwIChpcEJ1ZmYpIHtcbiAgY29uc3QgaXBTdHJpbmcgPSBpcC50b1N0cmluZyhpcEJ1ZmYpXG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwU3RyaW5nXG59XG5cbmZ1bmN0aW9uIHBvcnQyYnVmIChwb3J0KSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKVxuICBidWYud3JpdGVVSW50MTZCRShwb3J0LCAwKVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGJ1ZjJwb3J0IChidWYpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoMClcbn1cblxuZnVuY3Rpb24gc3RyMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0cilcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmLmxlbmd0aCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtzaXplLCBidWZdKVxufVxuXG5mdW5jdGlvbiBidWYyc3RyIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYnVmLmxlbmd0aCAhPT0gc2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb25zaXN0ZW50IGxlbmd0aHMnKVxuICB9XG5cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIG1oMmJ1ZiAoaGFzaCkge1xuICAvLyB0aGUgYWRkcmVzcyBpcyBhIHZhcmludCBwcmVmaXhlZCBtdWx0aWhhc2ggc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gIGNvbnN0IG1oID0gbmV3IENJRChoYXNoKS5tdWx0aWhhc2hcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobWgubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIG1oXSlcbn1cblxuZnVuY3Rpb24gYnVmMm1oIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBjb25zdCBhZGRyZXNzID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoYWRkcmVzcylcbn1cblxuZnVuY3Rpb24gb25pb24yYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gMTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uIGFkZHJlc3MuJylcbiAgfVxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShiYXNlMzIuZGVjb2RlLmFzQnl0ZXMoYWRkclswXS50b1VwcGVyQ2FzZSgpKSlcblxuICAvLyBvbmlvbiBwb3J0IG51bWJlclxuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoYWRkclsxXSwgMTApXG4gIGlmIChwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgbnVtYmVyIGlzIG5vdCBpbiByYW5nZSgxLCA2NTUzNiknKVxuICB9XG4gIGNvbnN0IHBvcnRCdWYgPSBwb3J0MmJ1Zihwb3J0KVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBwb3J0QnVmXSlcbn1cblxuZnVuY3Rpb24gb25pb24zMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGFkZHIgPSBzdHIuc3BsaXQoJzonKVxuICBpZiAoYWRkci5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkciArICcgZG9lcyBub3QgY29udGFpbiBhIHBvcnQgbnVtYmVyJylcbiAgfVxuICBpZiAoYWRkclswXS5sZW5ndGggIT09IDU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHJbMF0gKyAnIG5vdCBhIFRvciBvbmlvbjMgYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBidWYyb25pb24gKGJ1Zikge1xuICBjb25zdCBhZGRyQnl0ZXMgPSBidWYuc2xpY2UoMCwgYnVmLmxlbmd0aCAtIDIpXG4gIGNvbnN0IHBvcnRCeXRlcyA9IGJ1Zi5zbGljZShidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgYWRkciA9IGJhc2UzMi5lbmNvZGUoYWRkckJ5dGVzKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHBvcnQgPSBidWYycG9ydChwb3J0Qnl0ZXMpXG4gIHJldHVybiBhZGRyICsgJzonICsgcG9ydFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXAgPSBleHBvcnRzO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5cbmlwLnRvQnVmZmVyID0gZnVuY3Rpb24oaXAsIGJ1ZmYsIG9mZnNldCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcblxuICB2YXIgcmVzdWx0O1xuXG4gIGlmICh0aGlzLmlzVjRGb3JtYXQoaXApKSB7XG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDQpO1xuICAgIGlwLnNwbGl0KC9cXC4vZykubWFwKGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSBwYXJzZUludChieXRlLCAxMCkgJiAweGZmO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNWNkZvcm1hdChpcCkpIHtcbiAgICB2YXIgc2VjdGlvbnMgPSBpcC5zcGxpdCgnOicsIDgpO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXN2NCA9IHRoaXMuaXNWNEZvcm1hdChzZWN0aW9uc1tpXSk7XG4gICAgICB2YXIgdjRCdWZmZXI7XG5cbiAgICAgIGlmIChpc3Y0KSB7XG4gICAgICAgIHY0QnVmZmVyID0gdGhpcy50b0J1ZmZlcihzZWN0aW9uc1tpXSk7XG4gICAgICAgIHNlY3Rpb25zW2ldID0gdjRCdWZmZXIuc2xpY2UoMCwgMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodjRCdWZmZXIgJiYgKytpIDwgOCkge1xuICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaSwgMCwgdjRCdWZmZXIuc2xpY2UoMiwgNCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VjdGlvbnNbMF0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMudW5zaGlmdCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMucHVzaCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnMubGVuZ3RoIDwgOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9uc1tpXSAhPT0gJyc7IGkrKyk7XG4gICAgICB2YXIgYXJndiA9IFsgaSwgMSBdO1xuICAgICAgZm9yIChpID0gOSAtIHNlY3Rpb25zLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICBhcmd2LnB1c2goJzAnKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25zLnNwbGljZS5hcHBseShzZWN0aW9ucywgYXJndik7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDE2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gcGFyc2VJbnQoc2VjdGlvbnNbaV0sIDE2KTtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gd29yZCAmIDB4ZmY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCBpcCBhZGRyZXNzOiAnICsgaXApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmlwLnRvU3RyaW5nID0gZnVuY3Rpb24oYnVmZiwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gfn5vZmZzZXQ7XG4gIGxlbmd0aCA9IGxlbmd0aCB8fCAoYnVmZi5sZW5ndGggLSBvZmZzZXQpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKGxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChidWZmW29mZnNldCArIGldKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJy4nKTtcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IDE2KSB7XG4gICAgLy8gSVB2NlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmYucmVhZFVJbnQxNkJFKG9mZnNldCArIGkpLnRvU3RyaW5nKDE2KSk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5qb2luKCc6Jyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyhefDopMCg6MCkqOjAoOnwkKS8sICckMTo6JDMnKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOnszLDR9LywgJzo6Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGlwdjRSZWdleCA9IC9eKFxcZHsxLDN9XFwuKXszLDN9XFxkezEsM30kLztcbnZhciBpcHY2UmVnZXggPVxuICAgIC9eKDo6KT8oKChcXGR7MSwzfVxcLil7M30oXFxkezEsM30pezF9KT8oWzAtOWEtZl0pezAsNH06ezAsMn0pezEsOH0oOjopPyQvaTtcblxuaXAuaXNWNEZvcm1hdCA9IGZ1bmN0aW9uKGlwKSB7XG4gIHJldHVybiBpcHY0UmVnZXgudGVzdChpcCk7XG59O1xuXG5pcC5pc1Y2Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjZSZWdleC50ZXN0KGlwKTtcbn07XG5mdW5jdGlvbiBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSkge1xuICByZXR1cm4gZmFtaWx5ID8gZmFtaWx5LnRvTG93ZXJDYXNlKCkgOiAnaXB2NCc7XG59XG5cbmlwLmZyb21QcmVmaXhMZW4gPSBmdW5jdGlvbihwcmVmaXhsZW4sIGZhbWlseSkge1xuICBpZiAocHJlZml4bGVuID4gMzIpIHtcbiAgICBmYW1pbHkgPSAnaXB2Nic7XG4gIH0gZWxzZSB7XG4gICAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuICB9XG5cbiAgdmFyIGxlbiA9IDQ7XG4gIGlmIChmYW1pbHkgPT09ICdpcHY2Jykge1xuICAgIGxlbiA9IDE2O1xuICB9XG4gIHZhciBidWZmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gYnVmZi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgYml0cyA9IDg7XG4gICAgaWYgKHByZWZpeGxlbiA8IDgpIHtcbiAgICAgIGJpdHMgPSBwcmVmaXhsZW47XG4gICAgfVxuICAgIHByZWZpeGxlbiAtPSBiaXRzO1xuXG4gICAgYnVmZltpXSA9IH4oMHhmZiA+PiBiaXRzKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG59O1xuXG5pcC5tYXNrID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICBhZGRyID0gaXAudG9CdWZmZXIoYWRkcik7XG4gIG1hc2sgPSBpcC50b0J1ZmZlcihtYXNrKTtcblxuICB2YXIgcmVzdWx0ID0gbmV3IEJ1ZmZlcihNYXRoLm1heChhZGRyLmxlbmd0aCwgbWFzay5sZW5ndGgpKTtcblxuICB2YXIgaSA9IDA7XG4gIC8vIFNhbWUgcHJvdG9jb2wgLSBkbyBiaXR3aXNlIGFuZFxuICBpZiAoYWRkci5sZW5ndGggPT09IG1hc2subGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGFkZHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXNrLmxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjYgYWRkcmVzcyBhbmQgSVB2NCBtYXNrXG4gICAgLy8gKE1hc2sgbG93IGJpdHMpXG4gICAgZm9yIChpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbYWRkci5sZW5ndGggLSA0ICArIGldICYgbWFza1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSVB2NiBtYXNrIGFuZCBJUHY0IGFkZHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGggLSA2OyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gOjpmZmZmOmlwdjRcbiAgICByZXN1bHRbMTBdID0gMHhmZjtcbiAgICByZXN1bHRbMTFdID0gMHhmZjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2kgKyAxMl0gPSBhZGRyW2ldICYgbWFza1tpICsgMTJdO1xuICAgIH1cbiAgICBpID0gaSArIDEyO1xuICB9XG4gIGZvciAoOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKVxuICAgIHJlc3VsdFtpXSA9IDA7XG5cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKHJlc3VsdCk7XG59O1xuXG5pcC5jaWRyID0gZnVuY3Rpb24oY2lkclN0cmluZykge1xuICB2YXIgY2lkclBhcnRzID0gY2lkclN0cmluZy5zcGxpdCgnLycpO1xuXG4gIHZhciBhZGRyID0gY2lkclBhcnRzWzBdO1xuICBpZiAoY2lkclBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ0lEUiBzdWJuZXQ6ICcgKyBhZGRyKTtcblxuICB2YXIgbWFzayA9IGlwLmZyb21QcmVmaXhMZW4ocGFyc2VJbnQoY2lkclBhcnRzWzFdLCAxMCkpO1xuXG4gIHJldHVybiBpcC5tYXNrKGFkZHIsIG1hc2spO1xufTtcblxuaXAuc3VibmV0ID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICB2YXIgbmV0d29ya0FkZHJlc3MgPSBpcC50b0xvbmcoaXAubWFzayhhZGRyLCBtYXNrKSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBtYXNrJ3MgbGVuZ3RoLlxuICB2YXIgbWFza0J1ZmZlciA9IGlwLnRvQnVmZmVyKG1hc2spO1xuICB2YXIgbWFza0xlbmd0aCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1hc2tCdWZmZXJbaV0gPT09IDB4ZmYpIHtcbiAgICAgIG1hc2tMZW5ndGggKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9jdGV0ID0gbWFza0J1ZmZlcltpXSAmIDB4ZmY7XG4gICAgICB3aGlsZSAob2N0ZXQpIHtcbiAgICAgICAgb2N0ZXQgPSAob2N0ZXQgPDwgMSkgJiAweGZmO1xuICAgICAgICBtYXNrTGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG51bWJlck9mQWRkcmVzc2VzID0gTWF0aC5wb3coMiwgMzIgLSBtYXNrTGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIG5ldHdvcmtBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyksXG4gICAgZmlyc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyAxKSxcbiAgICBsYXN0QWRkcmVzczogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAyKSxcbiAgICBicm9hZGNhc3RBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMSksXG4gICAgc3VibmV0TWFzazogbWFzayxcbiAgICBzdWJuZXRNYXNrTGVuZ3RoOiBtYXNrTGVuZ3RoLFxuICAgIG51bUhvc3RzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICBudW1iZXJPZkFkZHJlc3NlcyA6IG51bWJlck9mQWRkcmVzc2VzIC0gMixcbiAgICBsZW5ndGg6IG51bWJlck9mQWRkcmVzc2VzLFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgcmV0dXJuIG5ldHdvcmtBZGRyZXNzID09PSBpcC50b0xvbmcoaXAubWFzayhvdGhlciwgbWFzaykpO1xuICAgIH1cbiAgfTtcbn07XG5cbmlwLmNpZHJTdWJuZXQgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLnN1Ym5ldChhZGRyLCBtYXNrKTtcbn07XG5cbmlwLm5vdCA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgdmFyIGJ1ZmYgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgYnVmZltpXSA9IDB4ZmYgXiBidWZmW2ldO1xuICB9XG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm9yID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBzYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFbaV0gfD0gYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGEpO1xuXG4gIC8vIG1peGVkIHByb3RvY29sc1xuICB9IGVsc2Uge1xuICAgIHZhciBidWZmID0gYTtcbiAgICB2YXIgb3RoZXIgPSBiO1xuICAgIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICBidWZmID0gYjtcbiAgICAgIG90aGVyID0gYTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBvdGhlci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGJ1ZmYubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZbaV0gfD0gb3RoZXJbaSAtIG9mZnNldF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xuICB9XG59O1xuXG5pcC5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBTYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3dhcFxuICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgdCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICAvLyBhIC0gSVB2NCwgYiAtIElQdjZcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKGJbaV0gIT09IDApIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB3b3JkID0gYi5yZWFkVUludDE2QkUoMTApO1xuICBpZiAod29yZCAhPT0gMCAmJiB3b3JkICE9PSAweGZmZmYpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2kgKyAxMl0pIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuaXAuaXNQcml2YXRlID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTBcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTkyXFwuMTY4XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNzJcXC4oMVs2LTldfDJcXGR8MzB8MzEpXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTY5XFwuMjU0XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXmZbY2RdWzAtOWEtZl17Mn06L2kudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDovaS50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5pc1B1YmxpYyA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuICFpcC5pc1ByaXZhdGUoYWRkcik7XG59O1xuXG5pcC5pc0xvb3BiYWNrID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pL1xuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXmZlODA6OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5sb29wYmFjayA9IGZ1bmN0aW9uKGZhbWlseSkge1xuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgaWYgKGZhbWlseSAhPT0gJ2lwdjQnICYmIGZhbWlseSAhPT0gJ2lwdjYnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYW1pbHkgbXVzdCBiZSBpcHY0IG9yIGlwdjYnKTtcbiAgfVxuXG4gIHJldHVybiBmYW1pbHkgPT09ICdpcHY0JyA/ICcxMjcuMC4wLjEnIDogJ2ZlODA6OjEnO1xufTtcblxuLy9cbi8vICMjIyBmdW5jdGlvbiBhZGRyZXNzIChuYW1lLCBmYW1pbHkpXG4vLyAjIyMjIEBuYW1lIHtzdHJpbmd8J3B1YmxpYyd8J3ByaXZhdGUnfSAqKk9wdGlvbmFsKiogTmFtZSBvciBzZWN1cml0eVxuLy8gICAgICBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UuXG4vLyAjIyMjIEBmYW1pbHkge2lwdjR8aXB2Nn0gKipPcHRpb25hbCoqIElQIGZhbWlseSBvZiB0aGUgYWRkcmVzcyAoZGVmYXVsdHNcbi8vICAgICAgdG8gaXB2NCkuXG4vL1xuLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB3aXRoXG4vLyB0aGUgc3BlY2lmaWVkIGBuYW1lYDpcbi8vICAgKiBTdHJpbmc6IEZpcnN0IGBmYW1pbHlgIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS5cbi8vICAgICAgICAgICAgIElmIG5vdCBmb3VuZCBzZWUgYHVuZGVmaW5lZGAuXG4vLyAgICogJ3B1YmxpYyc6IHRoZSBmaXJzdCBwdWJsaWMgaXAgYWRkcmVzcyBvZiBmYW1pbHkuXG4vLyAgICogJ3ByaXZhdGUnOiB0aGUgZmlyc3QgcHJpdmF0ZSBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiB1bmRlZmluZWQ6IEZpcnN0IGFkZHJlc3Mgd2l0aCBgaXB2NGAgb3IgbG9vcGJhY2sgYWRkcmVzcyBgMTI3LjAuMC4xYC5cbi8vXG5pcC5hZGRyZXNzID0gZnVuY3Rpb24obmFtZSwgZmFtaWx5KSB7XG4gIHZhciBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTtcbiAgdmFyIGFsbDtcblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgLy9cbiAgLy8gSWYgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBoYXMgYmVlbiBuYW1lZCxcbiAgLy8gcmV0dXJuIHRoZSBhZGRyZXNzLlxuICAvL1xuICBpZiAobmFtZSAmJiBuYW1lICE9PSAncHJpdmF0ZScgJiYgbmFtZSAhPT0gJ3B1YmxpYycpIHtcbiAgICB2YXIgcmVzID0gaW50ZXJmYWNlc1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24oZGV0YWlscykge1xuICAgICAgdmFyIGl0ZW1GYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGl0ZW1GYW1pbHkgPT09IGZhbWlseTtcbiAgICB9KTtcbiAgICBpZiAocmVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc1swXS5hZGRyZXNzO1xuICB9XG5cbiAgdmFyIGFsbCA9IE9iamVjdC5rZXlzKGludGVyZmFjZXMpLm1hcChmdW5jdGlvbiAobmljKSB7XG4gICAgLy9cbiAgICAvLyBOb3RlOiBuYW1lIHdpbGwgb25seSBiZSBgcHVibGljYCBvciBgcHJpdmF0ZWBcbiAgICAvLyB3aGVuIHRoaXMgaXMgY2FsbGVkLlxuICAgIC8vXG4gICAgdmFyIGFkZHJlc3NlcyA9IGludGVyZmFjZXNbbmljXS5maWx0ZXIoZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMuZmFtaWx5ID0gZGV0YWlscy5mYW1pbHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChkZXRhaWxzLmZhbWlseSAhPT0gZmFtaWx5IHx8IGlwLmlzTG9vcGJhY2soZGV0YWlscy5hZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZSA9PT0gJ3B1YmxpYycgPyBpcC5pc1ByaXZhdGUoZGV0YWlscy5hZGRyZXNzKSA6XG4gICAgICAgICAgaXAuaXNQdWJsaWMoZGV0YWlscy5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhZGRyZXNzZXMubGVuZ3RoID8gYWRkcmVzc2VzWzBdLmFkZHJlc3MgOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4gIWFsbC5sZW5ndGggPyBpcC5sb29wYmFjayhmYW1pbHkpIDogYWxsWzBdO1xufTtcblxuaXAudG9Mb25nID0gZnVuY3Rpb24oaXApIHtcbiAgdmFyIGlwbCA9IDA7XG4gIGlwLnNwbGl0KCcuJykuZm9yRWFjaChmdW5jdGlvbihvY3RldCkge1xuICAgIGlwbCA8PD0gODtcbiAgICBpcGwgKz0gcGFyc2VJbnQob2N0ZXQpO1xuICB9KTtcbiAgcmV0dXJuKGlwbCA+Pj4gMCk7XG59O1xuXG5pcC5mcm9tTG9uZyA9IGZ1bmN0aW9uKGlwbCkge1xuICByZXR1cm4gKChpcGwgPj4+IDI0KSArICcuJyArXG4gICAgICAoaXBsID4+IDE2ICYgMjU1KSArICcuJyArXG4gICAgICAoaXBsID4+IDggJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgJiAyNTUpICk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgaXBSZWdleCA9IHJlcXVpcmUoJ2lwLXJlZ2V4Jyk7XG5cbmNvbnN0IGlzSXAgPSBzdHJpbmcgPT4gaXBSZWdleCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY0ID0gc3RyaW5nID0+IGlwUmVnZXgudjQoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52NiA9IHN0cmluZyA9PiBpcFJlZ2V4LnY2KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudmVyc2lvbiA9IHN0cmluZyA9PiBpc0lwKHN0cmluZykgPyAoaXNJcC52NChzdHJpbmcpID8gNCA6IDYpIDogdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXA7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdvcmQgPSAnW2EtZkEtRlxcXFxkOl0nO1xuY29uc3QgYiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmluY2x1ZGVCb3VuZGFyaWVzID9cblx0YCg/Oig/PD1cXFxcc3xeKSg/PSR7d29yZH0pfCg/PD0ke3dvcmR9KSg/PVxcXFxzfCQpKWAgOlxuXHQnJztcblxuY29uc3QgdjQgPSAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuXG5jb25zdCB2NnNlZyA9ICdbYS1mQS1GXFxcXGRdezEsNH0nO1xuY29uc3QgdjYgPSBgXG4oXG4oPzoke3Y2c2VnfTopezd9KD86JHt2NnNlZ318Oil8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo3OjogIDE6MjozOjQ6NTo2Ojc6OFxuKD86JHt2NnNlZ306KXs2fSg/OiR7djR9fDoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjY6OiAgICAxOjI6Mzo0OjU6Njo6OCAgIDE6MjozOjQ6NTo2Ojo4ICAxOjI6Mzo0OjU6Njo6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs1fSg/Ojoke3Y0fXwoOiR7djZzZWd9KXsxLDJ9fDopfCAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjogICAgICAxOjI6Mzo0OjU6Ojc6OCAgIDE6MjozOjQ6NTo6OCAgICAxOjI6Mzo0OjU6Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs0fSg/Oig6JHt2NnNlZ30pezAsMX06JHt2NH18KDoke3Y2c2VnfSl7MSwzfXw6KXwgLy8gMToyOjM6NDo6ICAgICAgICAxOjI6Mzo0Ojo2Ojc6OCAgIDE6MjozOjQ6OjggICAgICAxOjI6Mzo0Ojo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXszfSg/Oig6JHt2NnNlZ30pezAsMn06JHt2NH18KDoke3Y2c2VnfSl7MSw0fXw6KXwgLy8gMToyOjM6OiAgICAgICAgICAxOjI6Mzo6NTo2Ojc6OCAgIDE6MjozOjo4ICAgICAgICAxOjI6Mzo6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsyfSg/Oig6JHt2NnNlZ30pezAsM306JHt2NH18KDoke3Y2c2VnfSl7MSw1fXw6KXwgLy8gMToyOjogICAgICAgICAgICAxOjI6OjQ6NTo2Ojc6OCAgIDE6Mjo6OCAgICAgICAgICAxOjI6OjQ6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsxfSg/Oig6JHt2NnNlZ30pezAsNH06JHt2NH18KDoke3Y2c2VnfSl7MSw2fXw6KXwgLy8gMTo6ICAgICAgICAgICAgICAxOjozOjQ6NTo2Ojc6OCAgIDE6OjggICAgICAgICAgICAxOjozOjQ6NTo2Ojc6MS4yLjMuNFxuKD86OigoPzo6JHt2NnNlZ30pezAsNX06JHt2NH18KD86OiR7djZzZWd9KXsxLDd9fDopKSAgICAgICAgICAgLy8gOjoyOjM6NDo1OjY6Nzo4ICA6OjI6Mzo0OjU6Njo3OjggIDo6OCAgICAgICAgICAgICA6OjEuMi4zLjRcbikoJVswLTlhLXpBLVpdezEsfSk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICVldGgwICAgICAgICAgICAgJTFcbmAucmVwbGFjZSgvXFxzKlxcL1xcLy4qJC9nbSwgJycpLnJlcGxhY2UoL1xcbi9nLCAnJykudHJpbSgpO1xuXG5jb25zdCBpcCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID9cblx0bmV3IFJlZ0V4cChgKD86XiR7djR9JCl8KD86XiR7djZ9JClgKSA6XG5cdG5ldyBSZWdFeHAoYCg/OiR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX0pfCg/OiR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX0pYCwgJ2cnKTtcblxuaXAudjQgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y0fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX1gLCAnZycpO1xuaXAudjYgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y2fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX1gLCAnZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlwO1xuIiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXVsdGljb2RlYyBzcGVjaWZpY2F0aW9uLlxuICpcbiAqIEBtb2R1bGUgbXVsdGljb2RlY1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG11bHRpY29kZWMgPSByZXF1aXJlKCdtdWx0aWNvZGVjJylcbiAqXG4gKiBjb25zdCBwcmVmaXhlZFByb3RvYnVmID0gbXVsdGljb2RlYy5hZGRQcmVmaXgoJ3Byb3RvYnVmJywgcHJvdG9idWZCdWZmZXIpXG4gKiAvLyBwcmVmaXhlZFByb3RvYnVmIDB4NTAuLi5cbiAqXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgaW50VGFibGUgPSByZXF1aXJlKCcuL2ludC10YWJsZScpXG5jb25zdCBjb2RlY05hbWVUb0NvZGVWYXJpbnQgPSByZXF1aXJlKCcuL3ZhcmludC10YWJsZScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzXG5cbi8qKlxuICogUHJlZml4IGEgYnVmZmVyIHdpdGggYSBtdWx0aWNvZGVjLXBhY2tlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG11bHRpY29kZWNTdHJPckNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmFkZFByZWZpeCA9IChtdWx0aWNvZGVjU3RyT3JDb2RlLCBkYXRhKSA9PiB7XG4gIGxldCBwcmVmaXhcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG11bHRpY29kZWNTdHJPckNvZGUpKSB7XG4gICAgcHJlZml4ID0gdXRpbC52YXJpbnRCdWZmZXJFbmNvZGUobXVsdGljb2RlY1N0ck9yQ29kZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29kZWNOYW1lVG9Db2RlVmFyaW50W211bHRpY29kZWNTdHJPckNvZGVdKSB7XG4gICAgICBwcmVmaXggPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWNvZGVjIG5vdCByZWNvZ25pemVkJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3ByZWZpeCwgZGF0YV0pXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGUgdGhlIG11bHRpY29kZWMtcGFja2VkIHByZWZpeCBmcm9tIHRoZSBkYXRhLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLnJtUHJlZml4ID0gKGRhdGEpID0+IHtcbiAgdmFyaW50LmRlY29kZShkYXRhKVxuICByZXR1cm4gZGF0YS5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZWMgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldENvZGVjID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG4gIGNvbnN0IGNvZGVjTmFtZSA9IGludFRhYmxlLmdldChjb2RlKVxuICBpZiAoY29kZWNOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGUgJHtjb2RlfSBub3QgZm91bmRgKVxuICB9XG4gIHJldHVybiBjb2RlY05hbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGNvZGVjLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVjXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldE5hbWUgPSAoY29kZWMpID0+IHtcbiAgcmV0dXJuIGludFRhYmxlLmdldChjb2RlYylcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIGNvZGVjXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXROdW1iZXIgPSAobmFtZSkgPT4ge1xuICBjb25zdCBjb2RlID0gY29kZWNOYW1lVG9Db2RlVmFyaW50W25hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgbmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIHV0aWwudmFyaW50QnVmZmVyRGVjb2RlKGNvZGUpWzBdXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIG9mIHRoZSBwcmVmaXhlZCBkYXRhLlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeGVkRGF0YVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXRDb2RlID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICByZXR1cm4gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIGFzIHZhcmludCBvZiBhIGNvZGVjIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNOYW1lXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmdldENvZGVWYXJpbnQgPSAoY29kZWNOYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbY29kZWNOYW1lXVxuICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlYyBgJyArIGNvZGVjTmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIGNvZGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhcmludCBvZiBhIGNvZGUuXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICovXG5leHBvcnRzLmdldFZhcmludCA9IChjb2RlKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZW5jb2RlKGNvZGUpXG59XG5cbi8vIE1ha2UgdGhlIGNvbnN0YW50cyB0b3AtbGV2ZWwgY29uc3RhbnRzXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIGNvbnN0YW50cylcblxuLy8gSHVtYW4gZnJpZW5kbHkgbmFtZXMgZm9yIHByaW50aW5nLCBlLmcuIGluIGVycm9yIG1lc3NhZ2VzXG5leHBvcnRzLnByaW50ID0gcmVxdWlyZSgnLi9wcmludCcpXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IGJhc2VUYWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBoZXhTdHJpbmcgLT4gY29kZWNOYW1lXG5jb25zdCBuYW1lVGFibGUgPSBuZXcgTWFwKClcblxuZm9yIChjb25zdCBlbmNvZGluZ05hbWUgaW4gYmFzZVRhYmxlKSB7XG4gIGNvbnN0IGNvZGUgPSBiYXNlVGFibGVbZW5jb2RpbmdOYW1lXVxuICBuYW1lVGFibGUuc2V0KGNvZGUsIGVuY29kaW5nTmFtZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKG5hbWVUYWJsZSlcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlVGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5jb25zdCB2YXJpbnRFbmNvZGUgPSByZXF1aXJlKCcuL3V0aWwnKS52YXJpbnRFbmNvZGVcblxuLy8gbWFwIGZvciBjb2RlY05hbWUgLT4gY29kZVZhcmludEJ1ZmZlclxuY29uc3QgdmFyaW50VGFibGUgPSB7fVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIHZhcmludFRhYmxlW2VuY29kaW5nTmFtZV0gPSB2YXJpbnRFbmNvZGUoY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHZhcmludFRhYmxlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGVjQ29uc3RhbnQgLT4gY29kZVxuY29uc3QgY29uc3RhbnRzID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGNvbnN0YW50c1tuYW1lLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLS9nLCAnXycpXSA9IGNvZGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKGNvbnN0YW50cylcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB0YWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBjb2RlIC0+IHByaW50IGZyaWVuZGx5IG5hbWVcbmNvbnN0IHRhYmxlQnlDb2RlID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGlmICh0YWJsZUJ5Q29kZVtjb2RlXSA9PT0gdW5kZWZpbmVkKSB0YWJsZUJ5Q29kZVtjb2RlXSA9IG5hbWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHRhYmxlQnlDb2RlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuXG52YXIgQ0lEVXRpbCA9IHtcbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGlzIG5vdC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgaXQgaXMgYSB2YWxpZCBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tDSURDb21wb25lbnRzOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsIHZhbHVlcyBhcmUgbm90IHZhbGlkIENJRHMnXG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIudmVyc2lvbiA9PT0gMCB8fCBvdGhlci52ZXJzaW9uID09PSAxKSkge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIHZlcnNpb24sIG11c3QgYmUgYSBudW1iZXIgZXF1YWwgdG8gMSBvciAwJ1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3RoZXIuY29kZWMgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ2NvZGVjIG11c3QgYmUgc3RyaW5nJ1xuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAob3RoZXIuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICAgIHJldHVybiBcImNvZGVjIG11c3QgYmUgJ2RhZy1wYicgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlci5tdWx0aWJhc2VOYW1lICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICByZXR1cm4gXCJtdWx0aWJhc2VOYW1lIG11c3QgYmUgJ2Jhc2U1OGJ0YycgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlci5tdWx0aWhhc2gpKSB7XG4gICAgICByZXR1cm4gJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBtaC52YWxpZGF0ZShvdGhlci5tdWx0aWhhc2gpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgZXJyb3JNc2cgPSBlcnIubWVzc2FnZVxuICAgICAgaWYgKCFlcnJvck1zZykgeyAvLyBKdXN0IGluIGNhc2UgbWgudmFsaWRhdGUoKSB0aHJvd3MgYW4gZXJyb3Igd2l0aCBlbXB0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGVycm9yTXNnID0gJ011bHRpaGFzaCB2YWxpZGF0aW9uIGZhaWxlZCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvck1zZ1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENJRFV0aWxcbiIsIi8qXG4gKiBbaGktYmFzZTMyXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2hpLWJhc2UzMn1cbiAqXG4gKiBAdmVyc2lvbiAwLjUuMFxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE4XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB7fTtcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fTk9ERV9KUyAmJiB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gIGlmIChOT0RFX0pTKSB7XG4gICAgcm9vdCA9IGdsb2JhbDtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSElfQkFTRTMyX05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEJBU0UzMl9FTkNPREVfQ0hBUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nycuc3BsaXQoJycpO1xuICB2YXIgQkFTRTMyX0RFQ09ERV9DSEFSID0ge1xuICAgICdBJzogMCwgJ0InOiAxLCAnQyc6IDIsICdEJzogMywgJ0UnOiA0LCAnRic6IDUsICdHJzogNiwgJ0gnOiA3LCAnSSc6IDgsXG4gICAgJ0onOiA5LCAnSyc6IDEwLCAnTCc6IDExLCAnTSc6IDEyLCAnTic6IDEzLCAnTyc6IDE0LCAnUCc6IDE1LCAnUSc6IDE2LFxuICAgICdSJzogMTcsICdTJzogMTgsICdUJzogMTksICdVJzogMjAsICdWJzogMjEsICdXJzogMjIsICdYJzogMjMsICdZJzogMjQsXG4gICAgJ1onOiAyNSwgJzInOiAyNiwgJzMnOiAyNywgJzQnOiAyOCwgJzUnOiAyOSwgJzYnOiAzMCwgJzcnOiAzMVxuICB9O1xuXG4gIHZhciBibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgdmFyIHRocm93SW52YWxpZFV0ZjggPSBmdW5jdGlvbiAocG9zaXRpb24sIHBhcnRpYWwpIHtcbiAgICBpZiAocGFydGlhbC5sZW5ndGggPiAxMCkge1xuICAgICAgcGFydGlhbCA9ICcuLi4nICsgcGFydGlhbC5zdWJzdHIoLTEwKTtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignRGVjb2RlZCBkYXRhIGlzIG5vdCB2YWxpZCBVVEYtOC4nXG4gICAgICArICcgTWF5YmUgdHJ5IGJhc2UzMi5kZWNvZGUuYXNCeXRlcygpPydcbiAgICAgICsgJyBQYXJ0aWFsIGRhdGEgYWZ0ZXIgcmVhZGluZyAnICsgcG9zaXRpb24gKyAnIGJ5dGVzOiAnICsgcGFydGlhbCArICcgPC0nKTtcbiAgICBlcnIucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aHJvdyBlcnI7XG4gIH07XG5cbiAgdmFyIHRvVXRmOFN0cmluZyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoLCBpID0gMCwgZm9sbG93aW5nQ2hhcnMgPSAwLCBiLCBjO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgIGlmIChiIDw9IDB4N0YpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChiID4gMHhCRiAmJiBiIDw9IDB4REYpIHtcbiAgICAgICAgYyA9IGIgJiAweDFGO1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGIgPD0gMHhFRikge1xuICAgICAgICBjID0gYiAmIDB4MEY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEY3KSB7XG4gICAgICAgIGMgPSBiICYgMHgwNztcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGxvd2luZ0NoYXJzOyArK2opIHtcbiAgICAgICAgYiA9IGJ5dGVzW2krK107XG4gICAgICAgIGlmIChiIDwgMHg4MCB8fCBiID4gMHhCRikge1xuICAgICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjIDw8PSA2O1xuICAgICAgICBjICs9IGIgJiAweDNGO1xuICAgICAgfVxuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjID4gMHgxMEZGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEwKSArIDB4RDgwMCk7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZGVjb2RlQXNCeXRlcyA9IGZ1bmN0aW9uIChiYXNlMzJTdHIpIHtcbiAgICBpZiAoIS9eW0EtWjItNz1dKyQvLnRlc3QoYmFzZTMyU3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGJhc2UzMlN0ciA9IGJhc2UzMlN0ci5yZXBsYWNlKC89L2csICcnKTtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBieXRlcyA9IFtdLCBpbmRleCA9IDAsIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG5cbiAgICAvLyA0IGNoYXIgdG8gMyBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjcgPDwgNSB8IHY4KSAmIDI1NTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfTtcblxuICB2YXIgZW5jb2RlQXNjaWkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gcGFyc2VJbnQobGVuZ3RoIC8gNSkgKiA1OyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGNoYXJcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMSkge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICc9PT09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAnPT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDMpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICc9PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlVXRmOCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBjb2RlLCBlbmQgPSBmYWxzZSwgYmFzZTMyU3RyID0gJycsXG4gICAgICBpbmRleCA9IDAsIGksIHN0YXJ0ID0gMCwgYnl0ZXMgPSAwLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGRvIHtcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1s1XTtcbiAgICAgIGJsb2Nrc1sxXSA9IGJsb2Nrc1s2XTtcbiAgICAgIGJsb2Nrc1syXSA9IGJsb2Nrc1s3XTtcbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNTsgKytpbmRleCkge1xuICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGMwIHwgKGNvZGUgPj4gNik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGUwIHwgKGNvZGUgPj4gMTIpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2luZGV4KSAmIDB4M2ZmKSk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGYwIHwgKGNvZGUgPj4gMTgpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBieXRlcyArPSBpIC0gc3RhcnQ7XG4gICAgICBzdGFydCA9IGkgLSA1O1xuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IGxlbmd0aCAmJiBpIDwgNikge1xuICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdjEgPSBibG9ja3NbMF07XG4gICAgICBpZiAoaSA+IDQpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgdjUgPSBibG9ja3NbNF07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAxKSB7XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgICAnPT09PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAgICc9PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAgICc9PT0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICAgJz0nO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKCFlbmQpO1xuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZUJ5dGVzID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY1ID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQsIGFzY2lpT25seSkge1xuICAgIHZhciBub3RTdHJpbmcgPSB0eXBlb2YoaW5wdXQpICE9PSAnc3RyaW5nJztcbiAgICBpZiAobm90U3RyaW5nICYmIGlucHV0LmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgaW5wdXQgPSBuZXcgVWludDhBcnJheShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyhpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiBlbmNvZGVBc2NpaShpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVVdGY4KGlucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChiYXNlMzJTdHIsIGFzY2lpT25seSkge1xuICAgIGlmICghYXNjaWlPbmx5KSB7XG4gICAgICByZXR1cm4gdG9VdGY4U3RyaW5nKGRlY29kZUFzQnl0ZXMoYmFzZTMyU3RyKSk7XG4gICAgfVxuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgc3RyID0gJycsIGxlbmd0aCA9IGJhc2UzMlN0ci5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gLTEpIHtcbiAgICAgIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gOCBjaGFyIHRvIDUgYnl0ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBsZW5ndGggPj4gMyA8PCAzOyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjggPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjcgPDwgNSB8IHY4KSAmIDI1NSk7XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGJ5dGVzXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA3KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlOiBkZWNvZGVcbiAgfTtcbiAgZGVjb2RlLmFzQnl0ZXMgPSBkZWNvZGVBc0J5dGVzO1xuXG4gIGlmIChDT01NT05fSlMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5iYXNlMzIgPSBleHBvcnRzO1xuICAgIGlmIChBTUQpIHtcbiAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5cbi8qXG4gKiBWYWxpZCBjb21iaW5hdGlvbnNcbiAqL1xuY29uc3QgRE5TNCA9IGJhc2UoJ2RuczQnKVxuY29uc3QgRE5TNiA9IGJhc2UoJ2RuczYnKVxuY29uc3QgRE5TID0gb3IoXG4gIGJhc2UoJ2RucycpLFxuICBiYXNlKCdkbnNhZGRyJyksXG4gIEROUzQsXG4gIEROUzZcbilcblxuY29uc3QgSVAgPSBvcihiYXNlKCdpcDQnKSwgYmFzZSgnaXA2JykpXG5jb25zdCBUQ1AgPSBvcihcbiAgYW5kKElQLCBiYXNlKCd0Y3AnKSksXG4gIGFuZChETlMsIGJhc2UoJ3RjcCcpKVxuKVxuY29uc3QgVURQID0gYW5kKElQLCBiYXNlKCd1ZHAnKSlcbmNvbnN0IFVUUCA9IGFuZChVRFAsIGJhc2UoJ3V0cCcpKVxuXG5jb25zdCBXZWJTb2NrZXRzID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzJykpLFxuICBhbmQoRE5TLCBiYXNlKCd3cycpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRzU2VjdXJlID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzcycpKSxcbiAgYW5kKEROUywgYmFzZSgnd3NzJykpXG4pXG5cbmNvbnN0IEhUVFAgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnaHR0cCcpKSxcbiAgYW5kKElQLCBiYXNlKCdodHRwJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwJykpXG4pXG5cbmNvbnN0IEhUVFBTID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoSVAsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwcycpKVxuKVxuXG5jb25zdCBXZWJSVENTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJSVENEaXJlY3QgPSBvcihcbiAgYW5kKEhUVFAsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpLFxuICBhbmQoSFRUUFMsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpXG4pXG5cbmNvbnN0IFJlbGlhYmxlID0gb3IoXG4gIFdlYlNvY2tldHMsXG4gIFdlYlNvY2tldHNTZWN1cmUsXG4gIEhUVFAsXG4gIEhUVFBTLFxuICBXZWJSVENTdGFyLFxuICBXZWJSVENEaXJlY3QsXG4gIFRDUCxcbiAgVVRQXG4pXG5cbi8vIFVubGlrZSB3cy1zdGFyLCBzdGFyZHVzdCBjYW4gcnVuIG92ZXIgYW55IHRyYW5zcG9ydCB0aHVzIHJlbW92aW5nIHRoZSByZXF1aXJlbWVudCBmb3Igd2Vic29ja2V0cyAoYnV0IGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQgcnVubmluZyBhIHN0YXJkdXN0IHNlcnZlciBvdmVyIHdlYnJ0Yy1zdGFyIDspIClcbmNvbnN0IFN0YXJkdXN0ID0gb3IoXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLXN0YXJkdXN0JyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtc3RhcmR1c3QnKSlcbilcblxuY29uc3QgX1AyUCA9IG9yKFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycCcpKSxcbiAgV2ViUlRDU3RhcixcbiAgYmFzZSgncDJwJylcbilcblxuY29uc3QgX0NpcmN1aXQgPSBvcihcbiAgYW5kKF9QMlAsIGJhc2UoJ3AycC1jaXJjdWl0JyksIF9QMlApLFxuICBhbmQoX1AyUCwgYmFzZSgncDJwLWNpcmN1aXQnKSksXG4gIGFuZChiYXNlKCdwMnAtY2lyY3VpdCcpLCBfUDJQKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtY2lyY3VpdCcpKSxcbiAgYW5kKGJhc2UoJ3AycC1jaXJjdWl0JyksIFJlbGlhYmxlKSxcbiAgYmFzZSgncDJwLWNpcmN1aXQnKVxuKVxuXG5jb25zdCBDaXJjdWl0UmVjdXJzaXZlID0gKCkgPT4gb3IoXG4gIGFuZChfQ2lyY3VpdCwgQ2lyY3VpdFJlY3Vyc2l2ZSksXG4gIF9DaXJjdWl0XG4pXG5cbmNvbnN0IENpcmN1aXQgPSBDaXJjdWl0UmVjdXJzaXZlKClcblxuY29uc3QgUDJQID0gb3IoXG4gIGFuZChDaXJjdWl0LCBfUDJQLCBDaXJjdWl0KSxcbiAgYW5kKF9QMlAsIENpcmN1aXQpLFxuICBhbmQoQ2lyY3VpdCwgX1AyUCksXG4gIENpcmN1aXQsXG4gIF9QMlBcbilcblxuZXhwb3J0cy5ETlMgPSBETlNcbmV4cG9ydHMuRE5TNCA9IEROUzRcbmV4cG9ydHMuRE5TNiA9IEROUzZcbmV4cG9ydHMuSVAgPSBJUFxuZXhwb3J0cy5UQ1AgPSBUQ1BcbmV4cG9ydHMuVURQID0gVURQXG5leHBvcnRzLlVUUCA9IFVUUFxuZXhwb3J0cy5IVFRQID0gSFRUUFxuZXhwb3J0cy5IVFRQUyA9IEhUVFBTXG5leHBvcnRzLldlYlNvY2tldHMgPSBXZWJTb2NrZXRzXG5leHBvcnRzLldlYlNvY2tldHNTZWN1cmUgPSBXZWJTb2NrZXRzU2VjdXJlXG5leHBvcnRzLldlYlNvY2tldFN0YXIgPSBXZWJTb2NrZXRTdGFyXG5leHBvcnRzLldlYlJUQ1N0YXIgPSBXZWJSVENTdGFyXG5leHBvcnRzLldlYlJUQ0RpcmVjdCA9IFdlYlJUQ0RpcmVjdFxuZXhwb3J0cy5SZWxpYWJsZSA9IFJlbGlhYmxlXG5leHBvcnRzLlN0YXJkdXN0ID0gU3RhcmR1c3RcbmV4cG9ydHMuQ2lyY3VpdCA9IENpcmN1aXRcbmV4cG9ydHMuUDJQID0gUDJQXG5leHBvcnRzLklQRlMgPSBQMlBcblxuLypcbiAqIFZhbGlkYXRpb24gZnVuY3NcbiAqL1xuXG5mdW5jdGlvbiBtYWtlTWF0Y2hlc0Z1bmN0aW9uIChwYXJ0aWFsTWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAoIW11bHRpYWRkci5pc011bHRpYWRkcihhKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IG11bHRpYWRkcihhKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7IC8vIGNhdGNoIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZSAvLyBhbHNvIGlmIGl0J3MgaW52YWxpZCBpdCdzIHByb3BhYmx5IG5vdCBtYXRjaGluZyBhcyB3ZWxsIHNvIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvdXQgPSBwYXJ0aWFsTWF0Y2goYS5wcm90b05hbWVzKCkpXG4gICAgaWYgKG91dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBvdXQubGVuZ3RoID09PSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gYW5kICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKGEpIHtcbiAgICBpZiAoYS5sZW5ndGggPCBhcmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGEgPSB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYXJnKCkucGFydGlhbE1hdGNoKGEpXG4gICAgICAgIDogYXJnLnBhcnRpYWxNYXRjaChhKVxuXG4gICAgICBpZiAoYSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gYVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ3sgJyArIGFyZ3Muam9pbignICcpICsgJyB9JyB9LFxuICAgIGlucHV0OiBhcmdzLFxuICAgIG1hdGNoZXM6IG1ha2VNYXRjaGVzRnVuY3Rpb24ocGFydGlhbE1hdGNoKSxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG5cbmZ1bmN0aW9uIG9yICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAoYSkge1xuICAgIGxldCBvdXQgPSBudWxsXG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBhcmcoKS5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgICAgOiBhcmcucGFydGlhbE1hdGNoKGEpXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIG91dCA9IHJlc1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd7ICcgKyBhcmdzLmpvaW4oJyAnKSArICcgfScgfSxcbiAgICBpbnB1dDogYXJncyxcbiAgICBtYXRjaGVzOiBtYWtlTWF0Y2hlc0Z1bmN0aW9uKHBhcnRpYWxNYXRjaCksXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYmFzZSAobikge1xuICBjb25zdCBuYW1lID0gblxuXG4gIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gbXVsdGlhZGRyKGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHsgLy8gY2F0Y2ggZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vIGFsc28gaWYgaXQncyBpbnZhbGlkIGl0J3MgcHJvcGFibHkgbm90IG1hdGNoaW5nIGFzIHdlbGwgc28gcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG5hbWVzID0gYS5wcm90b05hbWVzKClcbiAgICBpZiAocG5hbWVzLmxlbmd0aCA9PT0gMSAmJiBwbmFtZXNbMF0gPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChwcm90b3MpIHtcbiAgICBpZiAocHJvdG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocHJvdG9zWzBdID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gcHJvdG9zLnNsaWNlKDEpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYW1lIH0sXG4gICAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIEhhc2ggTWV0YSBEYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0geyp9IGlwZnNQaW5IYXNoXG4gKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaE1ldGFkYXRhKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbWV0YWRhdGEpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFpcGZzUGluSGFzaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGlmICghaXNJUEZTLmNpZChpcGZzUGluSGFzaCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG1ldGFkYXRhIG9iamVjdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL2hhc2hNZXRhZGF0YWA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaXBmc1Bpbkhhc2g6IGlwZnNQaW5IYXNoXG4gICAgfTtcblxuICAgIGlmIChtZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgIGJvZHkubmFtZSA9IG1ldGFkYXRhLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmtleXZhbHVlcykge1xuICAgICAgICBib2R5LmtleXZhbHVlcyA9IG1ldGFkYXRhLmtleXZhbHVlcztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5wdXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgY2hhbmdpbmcgbWV0YWRhdGEgZm9yIGhhc2g6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVycm9yID0gaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBIYXNoIFBpbiBQb2xpY3lcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gaXBmc1Bpbkhhc2hcbiAqIEBwYXJhbSB7Kn0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaFBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaXBmc1Bpbkhhc2gsIG5ld1BpblBvbGljeSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG4gICAgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUobmV3UGluUG9saWN5KTtcblxuICAgIGlmICghaXBmc1Bpbkhhc2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlIHBpbiBwb2xpY3kgb2YgYSBwaW4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSVBGUy5jaWQoaXBmc1Bpbkhhc2gpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXBmc1Bpbkhhc2ggdmFsdWUgaXMgYW4gaW52YWxpZCBJUEZTIENJRCcpO1xuICAgIH1cblxuICAgIGlmICghbmV3UGluUG9saWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbmV3UGluUG9saWN5IGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9oYXNoUGluUG9saWN5YDtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBpcGZzUGluSGFzaDogaXBmc1Bpbkhhc2gsXG4gICAgICAgIG5ld1BpblBvbGljeTogbmV3UGluUG9saWN5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBwaW4gcG9saWN5IGZvciBoYXNoOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBGaWxlIHRvIElQRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gcmVhZFN0cmVhbVxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRmlsZVRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgcmVhZFN0cmVhbSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCByZWFkU3RyZWFtKTtcblxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluRmlsZVRvSVBGU2A7XG5cbiAgICAgICAgaWYgKCEocmVhZFN0cmVhbSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZSB8fCByZWFkU3RyZWFtIGluc3RhbmNlb2YgTm9kZUZvcm1EYXRhKSkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigncmVhZFN0cmVhbSBpcyBub3QgYSByZWFkYWJsZSBzdHJlYW0gb3IgZm9ybSBkYXRhJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU9wdGlvbnMnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlYWRTdHJlYW0gaW5zdGFuY2VvZiBOb2RlRm9ybURhdGEgPyByZWFkU3RyZWFtIDogZGF0YSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JywgLy90aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGF4aW9zIGZyb20gZXJyb3Jpbmcgb3V0IHdpdGggbGFyZ2UgZmlsZXNcbiAgICAgICAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiAnSW5maW5pdHknLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG4gIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ29tYmluZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkNvbWJpbmVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNvbWJpbmVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBjb21iaW5lZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkU3RyZWFtO1xufTtcblxuQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHJldHVybiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ3N0cmluZycpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdib29sZWFuJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ251bWJlcicpXG4gICAgJiYgKCFCdWZmZXIuaXNCdWZmZXIoc3RyZWFtKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcblxuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgRGVsYXllZFN0cmVhbSkpIHtcbiAgICAgIHZhciBuZXdTdHJlYW0gPSBEZWxheWVkU3RyZWFtLmNyZWF0ZShzdHJlYW0sIHtcbiAgICAgICAgbWF4RGF0YVNpemU6IEluZmluaXR5LFxuICAgICAgICBwYXVzZVN0cmVhbTogdGhpcy5wYXVzZVN0cmVhbXMsXG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICBzdHJlYW0gPSBuZXdTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG5cbiAgICBpZiAodGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0cmVhbXMucHVzaChzdHJlYW0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2dldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2luc2lkZUxvb3ApIHtcbiAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IHRydWU7XG4gICAgcmV0dXJuOyAvLyBkZWZlciBjYWxsXG4gIH1cblxuICB0aGlzLl9pbnNpZGVMb29wID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBkbyB7XG4gICAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhbEdldE5leHQoKTtcbiAgICB9IHdoaWxlICh0aGlzLl9wZW5kaW5nTmV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3JlYWxHZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zdHJlYW1zLnNoaWZ0KCk7XG5cblxuICBpZiAodHlwZW9mIHN0cmVhbSA9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXRTdHJlYW0gPSBzdHJlYW07XG4gIGdldFN0cmVhbShmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gICAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3BpcGVOZXh0ID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBzdHJlYW07XG5cbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCB0aGlzLl9nZXROZXh0LmJpbmQodGhpcykpO1xuICAgIHN0cmVhbS5waXBlKHRoaXMsIHtlbmQ6IGZhbHNlfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gc3RyZWFtO1xuICB0aGlzLndyaXRlKHZhbHVlKTtcbiAgdGhpcy5fZ2V0TmV4dCgpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFcnJvcnMgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5fZW1pdEVycm9yKGVycik7XG4gIH0pO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSgpO1xuICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5fZ2V0TmV4dCgpO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKCk7XG4gIHRoaXMuZW1pdCgncmVzdW1lJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl91cGRhdGVEYXRhU2l6ZSgpO1xuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nO1xuICB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fdXBkYXRlRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9zdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgaWYgKCFzdHJlYW0uZGF0YVNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmRhdGFTaXplICs9IHN0cmVhbS5kYXRhU2l6ZTtcbiAgfSk7XG5cbiAgaWYgKHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZSkge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9lbWl0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICBwYXJhbGxlbCAgICAgIDogcmVxdWlyZSgnLi9wYXJhbGxlbC5qcycpLFxuICBzZXJpYWwgICAgICAgIDogcmVxdWlyZSgnLi9zZXJpYWwuanMnKSxcbiAgc2VyaWFsT3JkZXJlZCA6IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpXG59O1xuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZGVmZXI7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBmdW5jdGlvbiBvbiBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcFxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gcnVuXG4gKi9cbmZ1bmN0aW9uIGRlZmVyKGZuKVxue1xuICB2YXIgbmV4dFRpY2sgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09ICdmdW5jdGlvbidcbiAgICA/IHNldEltbWVkaWF0ZVxuICAgIDogKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm9jZXNzLm5leHRUaWNrXG4gICAgICA6IG51bGxcbiAgICApO1xuXG4gIGlmIChuZXh0VGljaylcbiAge1xuICAgIG5leHRUaWNrKGZuKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgfVxufVxuIiwidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGJhc2VQYXRoQ29udmVydGVyIGZyb20gJ2Jhc2UtcGF0aC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcmVjdXJzaXZlID0gcmVxdWlyZSgncmVjdXJzaXZlLWZzJyk7XG5cbi8qKlxuICogUGluRnJvbUZTXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5GaWxlVG9JUEZTYDtcblxuICAgICAgICBmcy5zdGF0KHNvdXJjZVBhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICAvL3dlIG5lZWQgdG8gY3JlYXRlIGEgc2luZ2xlIHJlYWQgc3RyZWFtIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbShzb3VyY2VQYXRoKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFNZXRhZGF0YScsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhTWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucy5waW5hdGFPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JywgLy90aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGF4aW9zIGZyb20gZXJyb3Jpbmcgb3V0IHdpdGggbGFyZ2UgZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvZHlMZW5ndGg6ICdJbmZpbml0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGZvcm1hdHRlZEVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlLnJlYWRkaXJyKHNvdXJjZVBhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICAgICAgICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBlYWNoIGZpbGUgc3RyZWFtLCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGNvcnJlY3QgcmVsYXRpdmUgZmlsZSBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnZmlsZScsIGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcGF0aDogYmFzZVBhdGhDb252ZXJ0ZXIoc291cmNlUGF0aCwgZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFNZXRhZGF0YScsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhTWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucy5waW5hdGFPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhT3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udGVudExlbmd0aDogJ0luZmluaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJmdW5jdGlvbiBjb252ZXJ0RmlsZVBhdGhUb0Jhc2VEaXJlY3RvcnlQYXRoKHNvdXJjZVBhdGgsIGZpbGVQYXRoKSB7XG4gICAgbGV0IG5ld1N0cmluZyA9IChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoJy4vJykgPyBzb3VyY2VQYXRoLnN1YnN0cmluZygyKSA6IHNvdXJjZVBhdGgpO1xuICAgIC8vbWFrZSBzdXJlIHRoZXJlIGlzbid0IGEgZGFuZ2xpbmcgLyB0byB0aHJvdyBhIGZhbHNlIHBvc2l0aXZlIGludG8gdGhlIG1peFxuICAgIGNvbnN0IGxhc3RJbmRleE9mRGlyZWN0b3J5ID0gbmV3U3RyaW5nLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYobGFzdEluZGV4T2ZEaXJlY3RvcnkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoT2ZTb3VyY2UgPSBzb3VyY2VQYXRoLmxlbmd0aDtcbiAgICAvL29ubHkgdHJpbSBpZiB0aGUgLyBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZ1xuICAgIGlmIChsYXN0SW5kZXhPZkRpcmVjdG9yeSA9PT0gKGxlbmd0aE9mU291cmNlIC0gMSkpIHtcbiAgICAgICAgbmV3U3RyaW5nID0gc291cmNlUGF0aC5zbGljZSgwLC0xKTtcbiAgICB9XG5cbiAgICAvL25vdyB0aGF0IHdlJ3JlIHN1cmUgb2Ygbm8gZmFsc2UgcG9zaXRpdmUsIGxldCdzIGNoZWNrIGFuZCBzZWUgd2hlcmUgdGhlIFwicm9vdFwiIGRpcmVjdG9yeSBpc1xuICAgIGNvbnN0IG5ld0xhc3RJbmRleCA9IG5ld1N0cmluZy5sYXN0SW5kZXhPZignLycpO1xuICAgIGlmICggbmV3TGFzdEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhdGhHYXJiYWdlID0gbmV3U3RyaW5nLnN1YnN0cmluZygwLCBuZXdMYXN0SW5kZXggKyAxKTtcbiAgICAgICAgbmV3U3RyaW5nID0gZmlsZVBhdGguc3BsaXQocGF0aEdhcmJhZ2UpWzFdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydEZpbGVQYXRoVG9CYXNlRGlyZWN0b3J5UGF0aCIsIlxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRkaXJyOiByZXF1aXJlKCcuL2xpYi9yZWFkZGlycicpLnJlYWRkaXJyLFxuXG4gIHJtZGlycjogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1kaXJyLFxuICBybWRpcnM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycyxcbiAgcm1maWxlczogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1maWxlcyxcblxuICBjcGRpcnI6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZGlycixcbiAgY3BkaXJzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnMsXG4gIGNwZmlsZXM6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZmlsZXNcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFBpbiBKU09OIHRvIElQRlNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gYm9keVxuICogQHBhcmFtIHsqfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgcmVxdWVzdEJvZHkgPSBib2R5O1xuXG4gICAgaWYgKHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBwaW5hdGFDb250ZW50OiBib2R5XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5KU09OVG9JUEZTYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgSlNPTiB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHF1ZXJ5QnVpbGRlciBmcm9tICcuL3F1ZXJ5QnVpbGRlcic7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZXJyb3JSZXNwb25zZSc7XG5cbi8qKlxuICogUGluIEpvYnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gZmlsdGVyc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkpvYnMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgbGV0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5Kb2JzYDtcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIGVuZHBvaW50ID0gcXVlcnlCdWlsZGVyKGVuZHBvaW50LCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHBpbiBqb2JzOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuLyoqXG4gKiBRdWVyeSBCdWlkbGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVybFxuICogQHBhcmFtIHsqfSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xuICAgIH1cblxuICAgIGxldCBuZXdVcmwgPSBiYXNlVXJsO1xuXG4gICAgbGV0IGZpcnN0RmlsdGVyQXBwbGllZCA9IGZhbHNlOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBcIj9cIiBjaGFyYWN0ZXIgaXMgb25seSBhcHBsaWVkIG9uY2VcblxuICAgIGZ1bmN0aW9uIGFkZEZpbHRlcihuZXdGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGZpcnN0RmlsdGVyQXBwbGllZCkge1xuICAgICAgICAgICAgbmV3VXJsID0gYCR7bmV3VXJsfSYke25ld0ZpbHRlcn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RGaWx0ZXJBcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0/JHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuc29ydCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc29ydCA9PT0gJ0FTQycgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnNvcnQgPT09ICdERVNDJykge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc29ydD0ke2ZpbHRlcnMuc29ydH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvcnQgdmFsdWU6ICR7ZmlsdGVycy5zb3J0fSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgPT09ICdzZWFyY2hpbmcnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdleHBpcmVkJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9mcmVlX2xpbWl0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9tYXhfc2l6ZScgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2ludmFsaWRfb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnYmFkX2hvc3Rfbm9kZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0dXMgdmFsdWU6ICR7ZmlsdGVycy5zdGF0dXN9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSB7XG4gICAgICAgICAgICBpZiAoaXNJUEZTLmNpZChmaWx0ZXJzLmlwZnNfcGluX2hhc2gpKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBpcGZzX3Bpbl9oYXNoPSR7ZmlsdGVycy5pcGZzX3Bpbl9oYXNofWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSVBGUyBoYXNoOiAke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJzLmxpbWl0KSAmJiAoZmlsdGVycy5saW1pdCA+IDApICYmIChmaWx0ZXJzLmxpbWl0IDwgMTAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgbGltaXQ9JHtmaWx0ZXJzLmxpbWl0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7ZmlsdGVycy5saW1pdH0uIFZhbGlkIGxpbWl0cyBhcmUgMS0xMDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLm9mZnNldCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5vZmZzZXQpICYmIChmaWx0ZXJzLm9mZnNldCA+IDApKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBvZmZzZXQ9JHtmaWx0ZXJzLm9mZnNldH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9mZnNldDogJHtmaWx0ZXJzLm9mZnNldH0uIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgaW50ZWdlciBmb3IgdGhlIG9mZnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuaW1wb3J0IHsgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqIFVucGluXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFRvVW5waW5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnBpbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvVW5waW4pIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9VbnBpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1VucGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciByZW1vdmluZyBhIHBpbiBmcm9tIFBpbmF0YScpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvVW5waW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtoYXNoVG9VbnBpbn0gaXMgYW4gaW52YWxpZCBJUEZTIENJRGApO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy91bnBpbi8ke2hhc2hUb1VucGlufWA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5kZWxldGUoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSByZW1vdmluZyBwaW4gZnJvbSBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbiBQb2xpY3lcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFBcGlLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaW5hdGFTZWNyZXRBcGlLZXlcbiAqIEBwYXJhbSB7Kn0gbmV3UGluUG9saWN5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3VzZXJQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIG5ld1BpblBvbGljeTogbmV3UGluUG9saWN5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBwaW4gcG9saWN5IGZvciB1c2VyOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5c30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBUZXN0IEF1dGhlbnRpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIC8vICB0ZXN0IGF1dGhlbnRpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyJ3MgcHJvdmlkZWQga2V5cyBhcmUgbGVnaXRcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcbmltcG9ydCBxdWVyeUJ1aWxkZXIgZnJvbSAnLi9xdWVyeUJ1aWxkZXInO1xuXG4vKipcbiAqIFBpbiBMaXN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyc1xuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgY29uc3QgYmFzZUVuZHBvaW50ID0gYCR7YmFzZVVybH0vZGF0YS9waW5MaXN0YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHF1ZXJ5QnVpbGRlcihiYXNlRW5kcG9pbnQsIGZpbHRlcnMpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSB1c2VyIHBpbiBsaXN0OiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRFcnJvciA9IGhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChmb3JtYXR0ZWRFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiLyoqXG4gKiBWYWxpZGF0ZSBhbmQgcmV0dXJuIGRhdGFcbiAqIEBwYXJhbSB7Kn0gZGF0ZVRvVmFsaWRhdGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFuZFJldHVybkRhdGUoZGF0ZVRvVmFsaWRhdGUpIHtcbiAgICBsZXQgZGF0ZVBhcnNlZCA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZVRvVmFsaWRhdGUpKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRlUGFyc2VkLnRvSVNPU3RyaW5nKCkgPT09IGRhdGVUb1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZVRvVmFsaWRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRlcyBtdXN0IGJlIGluIHZhbGlkIElTT184NjAxIGZvcm1hdCcpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGVzIG11c3QgYmUgaW4gdmFsaWQgSVNPXzg2MDEgZm9ybWF0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFF1ZXJ5IEJ1aWxkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVXJsXG4gKiBAcGFyYW0geyp9IGZpbHRlcnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1ZXJ5QnVpbGRlcihiYXNlVXJsLCBmaWx0ZXJzKSB7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gYmFzZVVybCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vICBwcmVzZXQgZmlsdGVyIHZhbHVlc1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9ICc/JztcblxuICAgIGxldCBtZXRhZGF0YVF1ZXJ5ID0gJyc7XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAvLyAgbm93IHdlIG5lZWQgdG8gY29uc3RydWN0IHRoZSBhY3R1YWwgVVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBmaWx0ZXJzIHByb3ZpZGVkXG4gICAgICAgIGlmIChmaWx0ZXJzLmhhc2hDb250YWlucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmhhc2hDb250YWlucyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hDb250YWlucyB2YWx1ZSBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgaGFzaENvbnRhaW5zPSR7ZmlsdGVycy5oYXNoQ29udGFpbnN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU3RhcnQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy5waW5TdGFydCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluRW5kKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpbkVuZCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpblN0YXJ0PSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMudW5waW5TdGFydCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgdW5waW5FbmQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpbkVuZCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU2l6ZU1pbikge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGluU2l6ZU1pbikgfHwgZmlsdGVycy5waW5TaXplTWluIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGluU2l6ZU1pbiBpcyBhIHZhbGlkIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU2l6ZU1pbj0ke2ZpbHRlcnMucGluU2l6ZU1pbn0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWF4KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWF4KSB8fCBmaWx0ZXJzLnBpblNpemVNYXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWF4IGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWF4PSR7ZmlsdGVycy5waW5TaXplTWF4fSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzICE9PSAnYWxsJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3Bpbm5lZCcgJiYgZmlsdGVycy5zdGF0dXMgIT09ICd1bnBpbm5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXR1cyB2YWx1ZSBtdXN0IGJlIGVpdGhlcjogYWxsLCBwaW5uZWQsIG9yIHVucGlubmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHN0YXR1cz0ke2ZpbHRlcnMuc3RhdHVzfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBhZ2VMaW1pdCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZUxpbWl0KSB8fCBmaWx0ZXJzLnBhZ2VMaW1pdCA8PSAwIHx8IGZpbHRlcnMucGFnZUxpbWl0ID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFnZUxpbWl0IGlzIGEgdmFsaWQgaW50ZWdlciBiZXR3ZWVuIDEtMTAwMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwYWdlTGltaXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VMaW1pdCl9JmA7IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgZGVjaW1hbHMgZ2V0IHJvdW5kZWQgdG8gaW50ZWdlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLnBhZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBhZ2VPZmZzZXQpIHx8IGZpbHRlcnMucGFnZU9mZnNldCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlT2Zmc2V0IGlzIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwYWdlT2Zmc2V0PSR7cGFyc2VJbnQoZmlsdGVycy5wYWdlT2Zmc2V0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBgbWV0YWRhdGFbbmFtZV09JHtmaWx0ZXJzLm1ldGFkYXRhLm5hbWV9JmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBtZXRhZGF0YVF1ZXJ5ICsgJ21ldGFkYXRhW2tleXZhbHVlc109JztcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVycy5tZXRhZGF0YS5rZXl2YWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEga2V5dmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJ1bmVkS2V5VmFsdWVzID0ge307IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG9ubHkgZ3JhYmJpbmcgdGhlIHZhbHVlcyB3ZSB3YW50IGZvciB0aGUgcXVlcnksIGFuZCBub3RoaW5nIGV4dHJhXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaCgoa2V5VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5VmFsdWVbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ga2V5VmFsdWVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBpcyBub3QgYW4gb2JqZWN0YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudmFsdWUgfHwgIXZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlOiAke2tleX0gbXVzdCBoYXZlIGJvdGggdmFsdWUgYW5kIG9wIGF0dHJpYnV0ZXNgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBSdW4gY2hlY2tzIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIGtleXZhbHVlcyBhcmUgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2dyZWF0ZXIgdGhhbiBvciBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3RlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiBvciBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGVxdWFsIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVxdWFsIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlcSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JldHdlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWNhdXNlIGJldHdlZW4gb3AgY29kZSB3YXMgcGFzc2VkIGluLCBrZXlWYWx1ZTogJHtrZXlWYWx1ZVswXX0gbXVzdCBoYXZlIGJvdGggYWxzbyBpbmNsdWRlIGEgc2Vjb25kVmFsdWVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHNlY29uZFZhbHVlIG11c3QgYmUgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIG51bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlOiB2YWx1ZS5zZWNvbmRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90QmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2Ugbm90QmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90TGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaUxpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RJTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIHJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpUmVnZXhwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlIG9wOiAke3ZhbHVlLm9wfSBpcyBub3QgYSB2YWxpZCBvcCBjb2RlYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBtZXRhZGF0YVF1ZXJ5ICsgYCR7SlNPTi5zdHJpbmdpZnkocHJ1bmVkS2V5VmFsdWVzKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtiYXNlVXJsfSR7ZmlsdGVyUXVlcnl9JHttZXRhZGF0YVF1ZXJ5fWA7XG59XG5cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiBVc2VyIFBpbm5lZCBEYXRhIFRvdGFsXG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhQXBpS2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGluYXRhU2VjcmV0QXBpS2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZWplY3QoZm9ybWF0dGVkRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d09b0d9..f14e452 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pinata/sdk", - "version": "1.1.23", + "version": "1.1.24", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pinata/sdk", - "version": "1.1.23", + "version": "1.1.24", "license": "MIT", "dependencies": { "axios": "^0.21.1", diff --git a/package.json b/package.json index 46a2845..85be192 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pinata/sdk", - "version": "1.1.24", + "version": "1.1.25", "description": "Official SDK for the Pinata IPFS platform", "main": "lib/pinata-sdk.js", "types": "types/index.d.ts",