diff --git a/client/dist/bbj-grid-widget.js b/client/dist/bbj-grid-widget.js index 171ad87e..67f465e3 100644 --- a/client/dist/bbj-grid-widget.js +++ b/client/dist/bbj-grid-widget.js @@ -28411,7 +28411,7 @@ if(false) {} /* 123 */ /***/ (function(module, exports) { -module.exports = "/*\n* This file is part of the BBjGridExWidget plugin.\n* (c) Basis Europe \n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n" +module.exports = "/*\n* This file is part of the BBjGridExWidget plugin.\n* (c) Basis Europe \n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value,\n.gw-alignment-cell-right .templateRenderer {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value,\n.gw-alignment-cell-center .templateRenderer {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.gw-alignment-header-center .ag-header-cell-text {\n margin-left: -16px !important;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n" /***/ }), /* 124 */ @@ -28448,4 +28448,4 @@ module.exports = ".autocompleteInputWrapper__input {\n padding-left: 6px;\n bo /***/ }) /******/ ]))); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZXAtcGFyc2UtanNvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvU3RyaW5nTWFzay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXhwcmVzc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Jvd3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jaGFydHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jZWxscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL2Rpc3QvYmJqLW1hc2tzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1pbnB1dC1tYXNraW5nL2Rpc3QvYmFzaXMtaW5wdXQtbWFza2luZy5qcy1leHBvc2VkIiwid2VicGFjazovLy8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCBmZDdmNjA0MjE5MmUxMjMyY2Y2NSIsIndlYnBhY2s6Ly8vd2VicGFjazovZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiU3RyaW5nTWFza1wiXX0iLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC9UZXh0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L3Rvb2xzLmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L051bWJlcklucHV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrOi9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJjb21tb25qczJcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiYW1kXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcInJvb3RcIjpbXCJCQmpcIixcIk1hc2tzXCIsXCJOdW1iZXJNYXNrXCJdfSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrL1N0cmluZ01hc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzay9OdW1iZXJNYXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L3dlYnBhY2svYm9vdHN0cmFwIDBiYWUwNTllMmI1ZmUyNmM1YjEwIiwid2VicGFjazovLy8vc3JjL0NvbXBvbmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL2F1dG9iaW5kLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvb3ZlcnJpZGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9wcml2YXRlL3V0aWxzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy8od2VicGFjaykvYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9yZWFkb25seS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdXRjVG9ab25lZFRpbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0V2ZW50c01peGluL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRWRpdG9yL0Jvb2xlYW5FZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQ29tcG9uZW50L0NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9sYXp5LWluaXRpYWxpemUuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzcz83NmEzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblJlbmRlcmVyL0Jvb2xlYW5SZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5GaWx0ZXIvQm9vbGVhbkZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzPzBkNWUiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3M/YWEwZSIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzPzA5MWIiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9UZW1wbGF0ZVJlbmRlcmVyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0ltYWdlUmVuZGVyZXIvSW1hZ2VSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9EYXRlVGltZUZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elRva2VuaXplRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdG9EYXRlL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRXZlbnRzTWl4aW4vRXZlbnRzTWl4aW4uanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3M/NGY2NyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3M/NzZmYiIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9EYXRlVGltZUVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcG9seWZpbGxzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9pbml0LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvbWVudXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL3NlbGVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9lZGl0aW5nLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9IVE1MVG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9uRWRpdG9yLmpzIiwid2VicGFjazovLy9hdXRvY29tcGxldGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Rvb2xwYW5lbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3N0YXR1c2Jhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL292ZXJsYXlzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2pzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanNzL2pzcy5qcy1leHBvc2VkIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qc3MvanNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzPzA5NDciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvY2xhc3Nlcy5jc3M/MDU1NSIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvY2xhc3Nlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlL3N1Z2dlc3Rpb24tZWRpdG9yLmNzcz8zZjI0Iiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3MiXSwibmFtZXMiOlsiZ3dfZ2V0RG9jdW1lbnQiLCIkZG9jIiwiZG9jdW1lbnQiLCJnd19nZXRXaW5kb3ciLCIkd25kIiwid2luZG93IiwiZ3dfZXNjYXBlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJnd191dWlkIiwicmVwbGFjZSIsImMiLCJyIiwiTWF0aCIsInJhbmRvbSIsInYiLCJ0b1N0cmluZyIsImd3X2dldEdyaWQiLCJpZCIsIkJCakdyaWRFeFdpZGdldCIsImdyaWQiLCJyZWdpc3RlcmVkR3JpZHMiLCJKU09OIiwic3RyaW5naWZ5IiwiT2JqZWN0Iiwia2V5cyIsIlR5cGVFcnJvciIsImd3X2FkZEdyaWQiLCJvcHRpb25zIiwiZ3dfZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsInRpbWVvdXQiLCJjb250ZXh0IiwiYXJncyIsImFyZ3VtZW50cyIsImxhdGVyIiwiYXBwbHkiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImd3X3NlbmRFdmVudCIsInBheWxvYWQiLCJldmVudElkIiwicmVnaXN0ZXJlZEludGVyZXN0cyIsImludGVyZXN0cyIsImluY2x1ZGVzIiwiZGl2IiwiZ2V0RWxlbWVudEJ5SWQiLCJiYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQiLCJnd19wYXJzZU5vZGUiLCJub2RlIiwiZ3JvdXAiLCJnZXRSb3dOb2RlSWQiLCJyb3dQaW5uZWQiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJkYXRhIiwieCIsInJvd0luZGV4IiwicCIsInBhcmVudCIsImtleSIsImNoaWxkSW5kZXgiLCJzIiwiQm9vbGVhbiIsInNlbGVjdGVkIiwiY3IiLCJwcCIsImd3X3BhcnNlTm9kZUZyb21FdmVudCIsImUiLCJnIiwiRnVuY3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImwiLCJkZWVwUGFyc2VKc29uIiwianNvblN0cmluZyIsInBhcnNlIiwiZXJyIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwidmFsIiwicmVkdWNlIiwib2JqIiwiR1dfRVZFTlRfUk9XX1NFTEVDVCIsIkdXX0VWRU5UX1JPV19DTElDSyIsIkdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0NMSUNLIiwiR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVEIiwiR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VEIiwiR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQiLCJHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCIsIkdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIiwiR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQiLCJHV19FVkVOVF9LRVlQUkVTUyIsImlzT2JqZWN0IiwidHlwZSIsInJvb3QiLCJmcmVlU2VsZiIsInNlbGYiLCJmcmVlR2xvYmFsIiwiZXEiLCJvdGhlciIsImlzQXJyYXlMaWtlIiwibGVuZ3RoIiwiU3RyaW5nTWFzayIsIk51bWJlck1hc2siLCJyZXF1aXJlIiwiZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsImRlZiIsImNoZWNrYm94U2VsZWN0aW9uIiwiZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3giLCJoZWFkZXJDaGVja2JveFNlbGVjdGlvbiIsImd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24iLCJ0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uIiwidG9vbHRpcFZhbHVlR2V0dGVyIiwicGFyYW1zIiwidG9vbHRpcENvbXBvbmVudCIsImVkaXRhYmxlIiwicm93U3BhbiIsImNvbFNwYW4iLCJnd19zZXRDb2x1bW5EZWZpbml0aW9ucyIsImRlZXBQYXJzZWREZWZpbml0aW9ucyIsImFwaSIsInNldENvbHVtbkRlZnMiLCJjb2x1bW5EZWZzIiwiZ3dfc2l6ZUNvbHVtbnNUb0ZpdCIsIndpZHRoIiwiY29sdW1uc0FQSSIsImNvbHVtbkFwaSIsInNpemVDb2x1bW5zVG9GaXQiLCJOdW1iZXIiLCJnd19hdXRvU2l6ZUNvbHVtbnMiLCJza2lwSGVhZGVyIiwiY29sdW1ucyIsImFsbENvbHVtbklkcyIsImdldEFsbENvbHVtbnMiLCJmb3JFYWNoIiwiY29sdW1uIiwicHVzaCIsImNvbElkIiwiYXV0b1NpemVDb2x1bW5zIiwiZ3dfZW5zdXJlQ29sdW1uVmlzaWJsZSIsImNvbHVtbklkIiwiZW5zdXJlQ29sdW1uVmlzaWJsZSIsImd3X3NldENvbHVtbldpZHRoIiwic2V0Q29sdW1uV2lkdGgiLCJnd19waW5Db2x1bW4iLCJwaW4iLCJzZXRDb2x1bW5QaW5uZWQiLCJnd19tb3ZlQ29sdW1uIiwidG9JbmRleCIsIm1vdmVDb2x1bW4iLCJwYXJhbSIsInNob3dTZWxlY3Rpb25DaGVja2JveCIsImdldEFsbEdyaWRDb2x1bW5zIiwiY29sRGVmIiwiZmllbGQiLCJncmlkT3B0aW9uc1dyYXBwZXIiLCJncmlkT3B0aW9ucyIsInNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCIsImd3X2FkZFJvd0dyb3VwQ29sdW1uIiwic2V0Iiwic3BsaXQiLCJ0cmltIiwiZ3dfcmVtb3ZlUm93R3JvdXBDb2x1bW4iLCJyZW1vdmVSb3dHcm91cENvbHVtbnMiLCJnd19nZXRQaXZvdE1vZGUiLCJpc1Bpdm90TW9kZSIsImd3X3NldFBpdm90TW9kZSIsIm1vZGUiLCJzZXRQaXZvdE1vZGUiLCJnd19hZGRQaXZvdENvbHVtbnMiLCJnd19yZW1vdmVQaXZvdENvbHVtbnMiLCJyZW1vdmVQaXZvdENvbHVtbnMiLCJnd19hZGRWYWx1ZUNvbHVtbnMiLCJhZGRWYWx1ZUNvbHVtbnMiLCJnd19yZW1vdmVWYWx1ZUNvbHVtbnMiLCJyZW1vdmVWYWx1ZUNvbHVtbnMiLCJnd19zZXRTb3J0TW9kZWwiLCJtb2RlbCIsImFzQXJyYXkiLCJwYXJzZWRNb2RlbCIsInNvcnQiLCJzZXRTb3J0TW9kZWwiLCJnd19yZWZyZXNoSGVhZGVyIiwicmVkcmF3Um93cyIsImd3X3NldENvbHVtblZpc2libGUiLCJ2aXNpYmxlIiwic2V0Q29sdW1uc1Zpc2libGUiLCJnd19jb21waWxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJleHByZXNzaW9uQ2FjaGUiLCJmdW5jdGlvbkJvZHkiLCJpbmRleE9mIiwidGhlRnVuY3Rpb24iLCJnd19leGVjdXRlRXhwcmVzc2lvbiIsImphdmFTY3JpcHRGdW5jdGlvbiIsInJlc3VsdCIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJnZXRWYWx1ZSIsImNvbHVtbkdyb3VwIiwiY29uc29sZSIsImxvZyIsImd3X3NldFF1aWNrRmlsdGVyIiwiZmlsdGVyIiwic2V0UXVpY2tGaWx0ZXIiLCJnd19leHBhbmRBbGwiLCJleHBhbmRBbGwiLCJnd19jb2xsYXBzZUFsbCIsImNvbGxhcHNlQWxsIiwiZ3dfZW5zdXJlSW5kZXhWaXNpYmxlIiwiaW5kZXgiLCJwb3NpdGlvbiIsImdldFJvd05vZGUiLCJlbnN1cmVOb2RlVmlzaWJsZSIsImVuc3VyZUluZGV4VmlzaWJsZSIsImd3X25hdmlnYXRlVG9OZXh0Um93IiwicHJldmlvdXNDZWxsIiwicHJldmlvdXNDZWxsUG9zaXRpb24iLCJzdWdnZXN0ZWROZXh0Q2VsbCIsIm5leHRDZWxsUG9zaXRpb24iLCJLRVlfVVAiLCJLRVlfRE9XTiIsIktFWV9MRUZUIiwiS0VZX1JJR0hUIiwicm93IiwiZ2V0RGlzcGxheWVkUm93QXRJbmRleCIsImdldEZpcnN0RGlzcGxheWVkUm93Iiwic2V0U2VsZWN0ZWQiLCJmb3JFYWNoTm9kZSIsImdldExhc3REaXNwbGF5ZWRSb3ciLCJFcnJvciIsImd3X2dldFJvd05vZGVJZCIsImd3X3NldFJvd0RhdGEiLCJqc29uIiwic2V0Um93RGF0YSIsInJvd0RhdGEiLCJnd191cGRhdGVSb3dEYXRhIiwidHJhbnNhY3Rpb24iLCJiYXRjaFVwZGF0ZSIsInJlbW92ZSIsIml0ZW1zIiwiYXBwbHlUcmFuc2FjdGlvbiIsImFwcGx5VHJhbnNhY3Rpb25Bc3luYyIsImd3X3NldFJvd3NIZWlnaHQiLCJoZWlnaHQiLCJzZXRSb3dIZWlnaHQiLCJvblJvd0hlaWdodENoYW5nZWQiLCJnd19zZXRSb3dIZWlnaHQiLCJ3YXJuIiwiZ3dfcmVzZXRSb3dIZWlnaHRzIiwicmVzZXRSb3dIZWlnaHRzIiwiZ3dfc2V0U2VsZWN0ZWRSb3dzIiwicm93cyIsImZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0IiwiU3RyaW5nIiwiZXhwYW5kZWQiLCJvbkdyb3VwRXhwYW5kZWRPckNvbGxhcHNlZCIsImd3X3NlbGVjdEFsbCIsImZpbHRlcmVkIiwic2VsZWN0QWxsRmlsdGVyZWQiLCJzZWxlY3RBbGwiLCJnd19kZXNlbGVjdEFsbCIsImRlc2VsZWN0QWxsRmlsdGVyZWQiLCJkZXNlbGVjdEFsbCIsImd3X2dldFNlbGVjdGVkUm93cyIsIm5vZGVzIiwiZ2V0U2VsZWN0ZWROb2RlcyIsInBhcnNlZCIsImd3X2dldFNlbGVjdGVkUm93IiwiZ3dfZ2V0Um93IiwiZ3dfZ2V0Um93cyIsInBoYXNlIiwiZmlsdGVyRXhwcmVzc2lvbiIsImNhblByb2Nlc3MiLCJncmlkQXBpIiwiZ3dfcmVkcmF3Um93cyIsImd3X3NldFBpbm5lZFRvcFJvd0RhdGEiLCJzZXRQaW5uZWRUb3BSb3dEYXRhIiwiZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YSIsInNldFBpbm5lZEJvdHRvbVJvd0RhdGEiLCJnd19nZXRDaGFydFRvb2xiYXJJdGVtcyIsImNoYXJ0VG9vbGJhckl0ZW1zIiwiZ3dfYWRkQ2hhcnRSYW5nZSIsInJhbmdlIiwicHIiLCJjZWxsUmFuZ2UiLCJyZWYiLCJjcmVhdGVSYW5nZUNoYXJ0IiwidXVpZCIsImNyZWF0ZWRfY2hhcnRzIiwiZ3dfZGVzdHJveUNoYXJ0IiwiZGVzdHJveUNoYXJ0IiwiY2hhcnQiLCJnd19zdGFydEVkaXRpbmdDZWxsIiwiY29sS2V5Iiwia2V5UHJlc3MiLCJjaGFyUHJlc3MiLCJzdGFydEVkaXRpbmdDZWxsIiwiZ3dfc3RvcEVkaXRpbmciLCJjYW5jZWwiLCJzdG9wRWRpdGluZyIsImd3X3RhYlRvTmV4dENlbGwiLCJ0YWJUb05leHRDZWxsIiwiZ3dfdGFiVG9QcmV2aW91c0NlbGwiLCJ0YWJUb1ByZXZpb3VzQ2VsbCIsImd3X3NldEZvY3VzZWRDZWxsIiwiZmxvYXRpbmciLCJnZXRFZGl0aW5nQ2VsbHMiLCJmIiwibGFzdEZvY3VzZWRDZWxsIiwiZ2V0Rm9jdXNlZENlbGwiLCJpc0ludGVnZXIiLCJzZXRGb2N1c2VkQ2VsbCIsImd3X2dldFJhbmdlU2VsZWN0aW9ucyIsInJhbmdlcyIsImdldENlbGxSYW5nZXMiLCJnZXRNb2RlbCIsImFjY3VtdWxhdG9yIiwiY3VycmVudCIsInN0YXJJbmRleCIsIm1pbiIsInN0YXJ0Um93IiwiZW5kUm93IiwiZW5kSW5kZXgiLCJtYXgiLCJnZXRSb3ciLCJwYXJzZWROb2RlIiwiZ3dfcGFyc2VBZGRDZWxsUmFuZ2UiLCJzdGFydCIsImVuZCIsInJvd1N0YXJ0SW5kZXgiLCJhYnMiLCJyb3dFbmRJbmRleCIsImd3X2FkZENlbGxSYW5nZSIsImFkZENlbGxSYW5nZSIsImd3X2NsZWFyUmFuZ2VTZWxlY3Rpb24iLCJjbGVhclJhbmdlU2VsZWN0aW9uIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc1RlbXBsYXRlIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJvYmplY3RQcm90byIsInByb3RvdHlwZSIsInRlbXBsYXRlIiwic3RyaW5nIiwiZ3VhcmQiLCJzZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3MiLCJpbXBvcnRzIiwiXyIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJpbXBvcnRzS2V5cyIsImltcG9ydHNWYWx1ZXMiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW50ZXJwb2xhdGUiLCJzb3VyY2UiLCJyZURlbGltaXRlcnMiLCJSZWdFeHAiLCJlc2NhcGUiLCJyZUludGVycG9sYXRlIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJjYWxsIiwibWF0Y2giLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwib2Zmc2V0Iiwic2xpY2UiLCJlc2NhcGVTdHJpbmdDaGFyIiwidmFyaWFibGUiLCJiYXNlQXNzaWduVmFsdWUiLCJvYmplY3QiLCJhc3luY1RhZyIsImZ1bmNUYWciLCJnZW5UYWciLCJwcm94eVRhZyIsImlzRnVuY3Rpb24iLCJ0YWciLCJnbG9iYWwiLCJiYXNlUmVzdCIsImlkZW50aXR5IiwidGhpc0FyZyIsImlzSXRlcmF0ZWVDYWxsIiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwicmVJc1VpbnQiLCJpc0luZGV4IiwidGVzdCIsImFycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJpc1Byb3RvdHlwZSIsIkN0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvIiwiZG9tRXhjVGFnIiwiZXJyb3JUYWciLCJpc0Vycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiYXJnIiwiYXJyYXlNYXAiLCJhcnJheSIsIml0ZXJhdGVlIiwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJmYWN0b3J5IiwiZGVmaW5lIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJtIiwiZCIsImdldHRlciIsIm8iLCJjb25maWd1cmFibGUiLCJuIiwiX19lc01vZHVsZSIsImdldERlZmF1bHQiLCJnZXRNb2R1bGVFeHBvcnRzIiwicHJvcGVydHkiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwidG9JbnRlZ2VyIiwiZGlydHlOdW1iZXIiLCJOYU4iLCJudW1iZXIiLCJpc05hTiIsImNlaWwiLCJmbG9vciIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fIiwidHpQYXJzZVRpbWV6b25lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fIiwiTUlMTElTRUNPTkRTX0lOX0hPVVIiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIiwicGF0dGVybnMiLCJ0aW1lem9uZSIsInRpbWV6b25lWiIsInRpbWV6b25lSEgiLCJ0aW1lem9uZUhITU0iLCJ0aW1lem9uZUlBTkEiLCJ0aW1lem9uZVN0cmluZyIsImRhdGUiLCJ0b2tlbiIsImFic29sdXRlT2Zmc2V0IiwiZXhlYyIsImhvdXJzIiwicGFyc2VJbnQiLCJ2YWxpZGF0ZVRpbWV6b25lIiwibWludXRlcyIsInRva2VucyIsImFzVVRDIiwiRGF0ZSIsIlVUQyIsInRpbWVzdGFtcFdpdGhNc1plcm9lZCIsImdldFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0cmluZ01hc2tfXyIsIlV0aWxzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18iLCJEYXRlcyIsImdldERheU9mWWVhciIsImdldFdlZWtOdW1iZXIiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSIsIklTX0RBVEVfUkVHRVgiLCJJU19USU1FX1JFR0VYIiwiZml4U2hvcnRJU08iLCJnZXRUaW1lem9uZU9yT2Zmc2V0IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwid3JpdGFibGUiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJtYXNrIiwiX21hc2siLCJncm91cGluZ1NlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmb3JjZVRyYWlsaW5nWmVyb3MiLCJsb29zZSIsIm1hc2tMZW4iLCJzdHIiLCJtYXNrQmVmb3JlRGVjaW1hbCIsIm1hc2tBZnRlckRlY2ltYWwiLCJmb3VuZERlY2ltYWwiLCJjaGFyQXQiLCJudW0iLCJfcm91bmQiLCJieXRlcyIsIl90b0NoYXJBcnJheSIsImluTGVuIiwibnVtQmVmb3JlRGVjaW1hbCIsIm51bUFmdGVyRGVjaW1hbCIsIl9pIiwiX2kyIiwiZmlsbEJ5dGUiLCJmbG9hdEJ5dGUiLCJpblBvcyIsIm91dFBvcyIsImZsb2F0UG9zIiwiZmlsbEluaXQiLCJpc05lZ2F0aXZlIiwiX2dldFNpZ24iLCJlbWl0RGVjaW1hbCIsImZvdW5kWmVybyIsImZvdW5kRGlnaXQiLCJjdXJyZW5jeSIsInJldCIsIm1hc2tQb3MiLCJfbSIsImpvaW4iLCJfc2hpZnQiLCJwcmVjaXNpb24iLCJyZXZlcnNlU2hpZnQiLCJudW1BcnJheSIsInJvdW5kIiwic2lnbnVtIiwiY2hhcnMiLCJjb25jYXQiLCJzdWJzdHJpbmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyIsImxvY2FsZSIsImdldEZ1bGxZZWFyIiwiZGlmZiIsImdldFRpbWV6b25lT2Zmc2V0Iiwib25lRGF5IiwiZGF5IiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJwYWQiLCJ3ZWVrU3RhcnQiLCJnZXRNb250aCIsImdldERhdGUiLCJkYXlOdW0iLCJnZXRVVENEYXkiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF0ZSIsInllYXJTdGFydCIsImdldFVUQ0Z1bGxZZWFyIiwiRGF0ZU1hc2siLCJkYXRlT2JqZWN0IiwidHJhbnNsYXRpb24iLCJfYnVpbGRUcmFuc2xhdGlvbiIsInllYXIiLCJtb250aCIsIm1vbnRoU2hvcnQiLCJmb3JtYXQiLCJtb250aExvbmciLCJkYXlTaG9ydCIsIndlZWtkYXkiLCJkYXlMb25nIiwiZ2V0TWludXRlcyIsInNlY29uZHMiLCJnZXRTZWNvbmRzIiwiaG91cnMyNCIsImdldEhvdXJzIiwiaG91cnMxMiIsImRheU9mWWVhciIsImRheU9mV2VlayIsImdldERheSIsIndlZWtOdW1iZXIiLCJrIiwiZGF0ZURldGFpbHMiLCJZeiIsInN1YnN0ciIsIllzIiwiWWwiLCJZcCIsImZyb21DaGFyQ29kZSIsIllkIiwiWSIsIk16IiwiTXMiLCJNbCIsIk1wIiwiTWQiLCJNIiwiRHoiLCJEcyIsIkRsIiwiRHAiLCJEZCIsIkQiLCJIeiIsIkhzIiwiSGwiLCJIcCIsIkhkIiwiSCIsImh6IiwiaHMiLCJobCIsImhwIiwiaGQiLCJoIiwibXoiLCJtcyIsIm1sIiwibXAiLCJtZCIsInN6Iiwic3MiLCJzbCIsInNwIiwic2QiLCJQUCIsIlAiLCJKeiIsIkpzIiwiSmwiLCJKZCIsIkoiLCJXeiIsIldzIiwiV2wiLCJXcCIsIldkIiwiVyIsInd6Iiwid3MiLCJ3bCIsIndwIiwid2QiLCJ3IiwidXRjVG9ab25lZFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fIiwiZGlydHlEYXRlIiwidXRjRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIm9mZnNldE1pbGxpc2Vjb25kcyIsInR6VG9rZW5pemVEYXRlIiwiZHRmIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwicGFydHNPZmZzZXQiLCJoYWNreU9mZnNldCIsInR5cGVUb1BvcyIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJmb3JtYXR0ZWQiLCJmaWxsZWQiLCJwb3MiLCJkdGZDYWNoZSIsInRlc3REYXRlRm9ybWF0dGVkIiwiaG91cjEyIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwiaG91ckN5Y2xlIiwic3ViTWlsbGlzZWNvbmRzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiZGlydHlBbW91bnQiLCJhbW91bnQiLCJhZGRNaWxsaXNlY29uZHMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fIiwidGltZXN0YW1wIiwidG9EYXRlIiwiYXJndW1lbnQiLCJhcmdTdHIiLCJzdGFjayIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18iLCJERUZBVUxUX0FERElUSU9OQUxfRElHSVRTIiwiZGF0ZVRpbWVEZWxpbWV0ZXIiLCJwbGFpblRpbWUiLCJ0aW1lWm9uZURlbGltZXRlciIsIllZIiwiWVlZIiwiWVlZWSIsIllZWVlZIiwiTU0iLCJEREQiLCJNTUREIiwiV3d3IiwiV3d3RCIsIkhIIiwiSEhNTSIsIkhITU1TUyIsImRpcnR5T3B0aW9ucyIsImFkZGl0aW9uYWxEaWdpdHMiLCJSYW5nZUVycm9yIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlRGF0ZSIsInRpbWUiLCJwYXJzZVRpbWUiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsInBhdHRlcm5ZWVkiLCJwYXR0ZXJuWVlZWVkiLCJ5ZWFyU3RyaW5nIiwiY2VudHVyeVN0cmluZyIsIndlZWsiLCJzZXRVVENGdWxsWWVhciIsInZhbGlkYXRlRGF0ZSIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInZhbGlkYXRlV2Vla0RhdGUiLCJkYXlPZklTT1dlZWtZZWFyIiwicGFyc2VGbG9hdCIsInZhbGlkYXRlVGltZSIsImlzb1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5RGF5IiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiaXNMZWFwWWVhckluZGV4IiwiaXNMZWFwWWVhciIsImdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMiLCJiYXNlVGltZXpvbmVPZmZzZXQiLCJzZXRTZWNvbmRzIiwibWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSQxIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcGlfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfXyIsImdldFdlZWtTdGFydEJ5UmVnaW9uJDEiLCJyZWdpb25Db2RlIiwiZ2V0V2Vla1N0YXJ0QnlSZWdpb24iLCJyZWdpb25EYXlNYXAiLCJjb2RlIiwidG9VcHBlckNhc2UiLCJsYW5nUmVnaW9uTWFwIiwidG9Mb3dlckNhc2UiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJlbiIsInpoIiwiemhfaGFucyIsImhhbnMiLCJ3dXUiLCJoc24iLCJoYWsiLCJuYW4iLCJnYW4iLCJoaSIsInRlIiwibXIiLCJ0YSIsImd1Iiwia24iLCJvciIsInBhX2d1cnUiLCJiaG8iLCJhd2EiLCJhcyIsIm13ciIsIm1haSIsIm1hZyIsImJnYyIsImhuZSIsImRjYyIsImR6IiwidG4iLCJhbSIsIm9tIiwicXVjIiwianYiLCJzdSIsIm1hZCIsIm1zX2FyYWIiLCJnYSIsImhlIiwiamFtIiwiamEiLCJrbSIsImtvIiwibG8iLCJtaCIsIm15IiwibXQiLCJuZSIsImZpbCIsImNlYiIsImlsbyIsInVyIiwicGEiLCJwYV9hcmFiIiwiYXJhYiIsImxhaCIsInBzIiwic2RfYXJhYiIsInNrciIsImduIiwidGgiLCJ0dHMiLCJhZWIiLCJ6aF9oYW50IiwiaGFudCIsInNtIiwienUiLCJzbiIsImFycSIsImFyIiwiYXJ6IiwiZmEiLCJhel9hcmFiIiwiYXJ5IiwiYm4iLCJya3QiLCJkdiIsIkFHIiwiQVRHIiwiQVIiLCJBUkciLCJBUyIsIkFTTSIsIkFVIiwiQVVTIiwiQlIiLCJCUkEiLCJCUyIsIkJIUyIsIkJUIiwiQlROIiwiQlciLCJCV0EiLCJCWiIsIkJMWiIsIkNBIiwiQ0FOIiwiQ04iLCJDSE4iLCJDTyIsIkNPTCIsIkRNIiwiRE1BIiwiRE8iLCJET00iLCJFVCIsIkVUSCIsIkdUIiwiR1RNIiwiR1UiLCJHVU0iLCJISyIsIkhLRyIsIkhOIiwiSE5EIiwiSUQiLCJJRE4iLCJJRSIsIklSTCIsIklMIiwiSVNSIiwiSU4iLCJJTkQiLCJKTSIsIkpBTSIsIkpQIiwiSlBOIiwiS0UiLCJLRU4iLCJLSCIsIktITSIsIktSIiwiS09SIiwiTEEiLCJMQTAiLCJNSCIsIk1ITCIsIk1NUiIsIk1PIiwiTUFDIiwiTVQiLCJNTFQiLCJNWCIsIk1FWCIsIk1aIiwiTU9aIiwiTkkiLCJOSUMiLCJOUCIsIk5QTCIsIk5aIiwiTlpMIiwiUEEiLCJQQU4iLCJQRSIsIlBFUiIsIlBIIiwiUEhMIiwiUEsiLCJQQUsiLCJQUiIsIlBSSSIsIlBZIiwiUFJZIiwiU0EiLCJTQVUiLCJTRyIsIlNHUCIsIlNWIiwiU0xWIiwiVEgiLCJUSEEiLCJUTiIsIlRVTiIsIlRUIiwiVFRPIiwiVFciLCJUV04iLCJVTSIsIlVNSSIsIlVTIiwiVVNBIiwiVkUiLCJWRU4iLCJWSSIsIlZJUiIsIldTIiwiV1NNIiwiWUUiLCJZRU0iLCJaQSIsIlpBRiIsIlpXIiwiWldFIiwiQUUiLCJBUkUiLCJBRiIsIkFGRyIsIkJIIiwiQkhSIiwiREoiLCJESkkiLCJEWiIsIkRaQSIsIkVHIiwiRUdZIiwiSVEiLCJJUlEiLCJJUiIsIklSTiIsIkpPIiwiSk9SIiwiS1ciLCJLV1QiLCJMWSIsIkxCWSIsIk1BIiwiTUFSIiwiT00iLCJPTU4iLCJRQSIsIlFBVCIsIlNEIiwiU0ROIiwiU1kiLCJTWVIiLCJCRCIsIkJHRCIsIk1WIiwiTURWIiwiaXNOdW1iZXJSZWdleCIsImlzV2hpdGVzcGFjZVJlZ2V4IiwicHVuY3R1YXRpb25MaXN0IiwiaXNMb3dlckNhc2UiLCJpc1VwcGVyQ2FzZSIsInBhc3NPclRocm93RXJyb3IiLCJfY2hhciIsInN0ckxlbiIsIm1hc2tCeXRlIiwiX2J5dGUiLCJfYnl0ZTIiLCJfYnl0ZTMiLCJfYnl0ZTQiLCJfYnl0ZTUiLCJfYnl0ZTYiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18iLCJUeXBlcyIsIl9udW1iZXIiLCJfZGF0ZSIsIlRleHRJbnB1dCIsImVsZW1lbnRzIiwiZG9jIiwiY3NzQ2xhc3NFcnJvciIsImNzc0NsYXNzU3VjY2VzcyIsIm9uVXBkYXRlIiwib25JbnZhbGlkIiwiaW5wdXQiLCJwYXJlbnRDbGFzcyIsImlzV3JhcHBlZCIsImlucHV0SWQiLCJpbnB1dE5hbWUiLCJvcmlnaW5hbFBhdHRlcm4iLCJkZWZhdWx0UGF0dGVybiIsImdlbmVyYXRlUGF0dGVybkZyb21NYXNrIiwicGF0dGVybiIsIndyYXAiLCJ1bm1hc2tJbnB1dCIsIm1hc2tJZk5vdE1hc2tlZCIsInVubWFzayIsInRleHRJbnB1dCIsImV2ZW50VHlwZSIsImtleUNvZGUiLCJrZXlDb250ZW50IiwiaW5zZXJ0UG9zaXRpb24iLCJmaW5kQ2FyZXRQb3NpdGlvbiIsIm1hc2tFcnJvciIsInNlbGVjdGlvblN0YXJ0IiwidW5tYXNrZWRWYWx1ZSIsImlzVmFsaWQiLCJ2YWx1ZU1hc2tlZCIsInZhbHVlVW5tYXNrZWQiLCJlcnJvciIsInN0YXRlIiwiU1VQUE9SVEVEX01BU0tTIiwiSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQiLCJldmFsIiwiaXNNYXNrZWRWYWx1ZSIsImNhY2hlS2V5IiwibWFza0FzQXJyeSIsInJlZ2V4IiwibWFza0FzQXJyYXkiLCJtYXNrZWRWYWx1ZUFzQXJyYXkiLCJtYXNrZWRWYWx1ZSIsInVubWFza2VkIiwiZWwiLCJlbEhhc01hc2siLCJOdW1iZXJJbnB1dCIsImNvdW50RGVjaW1hbHMiLCJhY3R1YWxJbnB1dCIsImFjdHVhbElucHV0SWQiLCJhY3R1YWxJbnB1dE5hbWUiLCJhY3R1YWxJbnB1dFN0ZXAiLCJhY3R1YWxJbnB1dE1heCIsImFjdHVhbElucHV0TWluIiwiYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvciIsImFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvciIsImFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zIiwiYWN0dWFsSW5wdXRNYXNrIiwiYWN0dWFsSW5wdXRDbGFzc2VzIiwiYWN0dWFsSW5wdXRSZXF1aXJlZCIsInVubWFza2VkSW5wdXQiLCJkZWNpbWFscyIsInN0ZXAiLCJ3cmFwcGVyIiwicmVzdG9yZSIsImNoYXIiLCJieXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwiX19zcHJlYWRBcnJheXMiLCJpbCIsImEiLCJqIiwiamwiLCJIT09LUyIsImRlZmF1bHRzIiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYWxsb3dJbnB1dCIsImFsbG93SW52YWxpZFByZWxvYWQiLCJhbHRGb3JtYXQiLCJhbHRJbnB1dCIsImFsdElucHV0Q2xhc3MiLCJhbmltYXRlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXJpYURhdGVGb3JtYXQiLCJhdXRvRmlsbERlZmF1bHRUaW1lIiwiY2xpY2tPcGVucyIsImNsb3NlT25TZWxlY3QiLCJjb25qdW5jdGlvbiIsImRhdGVGb3JtYXQiLCJkZWZhdWx0SG91ciIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsImRpc2FibGUiLCJkaXNhYmxlTW9iaWxlIiwiZW5hYmxlIiwiZW5hYmxlU2Vjb25kcyIsImVuYWJsZVRpbWUiLCJlcnJvckhhbmRsZXIiLCJnZXRXZWVrIiwiZ2l2ZW5EYXRlIiwic2V0SG91cnMiLCJzZXREYXRlIiwid2VlazEiLCJob3VySW5jcmVtZW50IiwiaWdub3JlZEZvY3VzRWxlbWVudHMiLCJpbmxpbmUiLCJtaW51dGVJbmNyZW1lbnQiLCJtb250aFNlbGVjdG9yVHlwZSIsIm5leHRBcnJvdyIsIm5vQ2FsZW5kYXIiLCJub3ciLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkRheUNyZWF0ZSIsIm9uRGVzdHJveSIsIm9uS2V5RG93biIsIm9uTW9udGhDaGFuZ2UiLCJvbk9wZW4iLCJvblBhcnNlQ29uZmlnIiwib25SZWFkeSIsIm9uVmFsdWVVcGRhdGUiLCJvblllYXJDaGFuZ2UiLCJvblByZUNhbGVuZGFyUG9zaXRpb24iLCJwbHVnaW5zIiwicG9zaXRpb25FbGVtZW50IiwicHJldkFycm93Iiwic2hvcnRoYW5kQ3VycmVudE1vbnRoIiwic2hvd01vbnRocyIsInN0YXRpYyIsInRpbWVfMjRociIsIndlZWtOdW1iZXJzIiwiZW5nbGlzaCIsIndlZWtkYXlzIiwic2hvcnRoYW5kIiwibG9uZ2hhbmQiLCJtb250aHMiLCJkYXlzSW5Nb250aCIsImZpcnN0RGF5T2ZXZWVrIiwib3JkaW5hbCIsIm50aCIsInJhbmdlU2VwYXJhdG9yIiwid2Vla0FiYnJldmlhdGlvbiIsInNjcm9sbFRpdGxlIiwidG9nZ2xlVGl0bGUiLCJhbVBNIiwieWVhckFyaWFMYWJlbCIsIm1vbnRoQXJpYUxhYmVsIiwiaG91ckFyaWFMYWJlbCIsIm1pbnV0ZUFyaWFMYWJlbCIsImludCIsImJvb2wiLCJkZWJvdW5jZSIsImFycmF5aWZ5IiwidG9nZ2xlQ2xhc3MiLCJlbGVtIiwiY2xhc3NOYW1lIiwiY2xhc3NMaXN0IiwiYWRkIiwiY3JlYXRlRWxlbWVudCIsImNvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImNsZWFyTm9kZSIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImZpbmRQYXJlbnQiLCJjb25kaXRpb24iLCJwYXJlbnROb2RlIiwiY3JlYXRlTnVtYmVySW5wdXQiLCJpbnB1dENsYXNzTmFtZSIsIm9wdHMiLCJudW1JbnB1dCIsImFycm93VXAiLCJhcnJvd0Rvd24iLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImdldEV2ZW50VGFyZ2V0IiwiZXZlbnQiLCJjb21wb3NlZFBhdGgiLCJwYXRoIiwiZG9Ob3RoaW5nIiwibW9udGhUb1N0ciIsIm1vbnRoTnVtYmVyIiwicmV2Rm9ybWF0IiwiRiIsImRhdGVPYmoiLCJtb250aE5hbWUiLCJzZXRNb250aCIsIkciLCJLIiwic2hvcnRNb250aCIsIlMiLCJVIiwidW5peFNlY29uZHMiLCJ3ZWVrTnVtIiwic2V0RnVsbFllYXIiLCJaIiwiSVNPRGF0ZSIsInNldE1pbnV0ZXMiLCJ1IiwidW5peE1pbGxTZWNvbmRzIiwieSIsInRva2VuUmVnZXgiLCJmb3JtYXRzIiwidG9JU09TdHJpbmciLCJjcmVhdGVEYXRlRm9ybWF0dGVyIiwiX2EiLCJfYiIsImNvbmZpZyIsIl9jIiwibDEwbiIsIl9kIiwiaXNNb2JpbGUiLCJmcm10Iiwib3ZlcnJpZGVMb2NhbGUiLCJmb3JtYXREYXRlIiwiYXJyIiwiY3JlYXRlRGF0ZVBhcnNlciIsImdpdmVuRm9ybWF0IiwidGltZWxlc3MiLCJjdXN0b21Mb2NhbGUiLCJwYXJzZWREYXRlIiwiZGF0ZU9yaWciLCJ0b0ZpeGVkIiwiZGF0ZXN0ciIsIm1hdGNoZWQiLCJvcHMiLCJtYXRjaEluZGV4IiwicmVnZXhTdHIiLCJ0b2tlbl8xIiwiaXNCYWNrU2xhc2giLCJlc2NhcGVkIiwiZm4iLCJjb21wYXJlRGF0ZXMiLCJkYXRlMSIsImRhdGUyIiwiaXNCZXR3ZWVuIiwidHMiLCJ0czEiLCJ0czIiLCJkdXJhdGlvbiIsIkRBWSIsIl9sb29wXzEiLCJhcmdzXzEiLCJERUJPVU5DRURfQ0hBTkdFX01TIiwiRmxhdHBpY2tySW5zdGFuY2UiLCJlbGVtZW50IiwiaW5zdGFuY2VDb25maWciLCJmbGF0cGlja3IiLCJkZWZhdWx0Q29uZmlnIiwiX2hhbmRsZXJzIiwicGx1Z2luRWxlbWVudHMiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJiaW5kIiwiX3NldEhvdXJzRnJvbURhdGUiLCJzZXRIb3Vyc0Zyb21EYXRlIiwiX3Bvc2l0aW9uQ2FsZW5kYXIiLCJwb3NpdGlvbkNhbGVuZGFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwiY2xlYXIiLCJjbG9zZSIsIl9jcmVhdGVFbGVtZW50IiwiZGVzdHJveSIsImlzRW5hYmxlZCIsImp1bXBUb0RhdGUiLCJvcGVuIiwicmVkcmF3IiwidG9nZ2xlIiwic2V0dXBIZWxwZXJGdW5jdGlvbnMiLCJ1dGlscyIsImdldERheXNJbk1vbnRoIiwieXIiLCJjdXJyZW50TW9udGgiLCJjdXJyZW50WWVhciIsImluaXQiLCJpc09wZW4iLCJwYXJzZUNvbmZpZyIsInNldHVwTG9jYWxlIiwic2V0dXBJbnB1dHMiLCJzZXR1cERhdGVzIiwiYnVpbGQiLCJiaW5kRXZlbnRzIiwic2VsZWN0ZWREYXRlcyIsImxhdGVzdFNlbGVjdGVkRGF0ZU9iaiIsIm1pbkRhdGUiLCJ1cGRhdGVWYWx1ZSIsInNldENhbGVuZGFyV2lkdGgiLCJpc1NhZmFyaSIsInRyaWdnZXJFdmVudCIsImJpbmRUb0luc3RhbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkaXNwbGF5IiwiZGF5c0NvbnRhaW5lciIsImRheXNXaWR0aCIsImRheXMiLCJvZmZzZXRXaWR0aCIsIndlZWtXcmFwcGVyIiwicmVtb3ZlUHJvcGVydHkiLCJ1cGRhdGVUaW1lIiwiZGVmYXVsdERhdGUiLCJnZXREZWZhdWx0SG91cnMiLCJ0aW1lV3JhcHBlciIsInByZXZWYWx1ZSIsIl9pbnB1dCIsInNldEhvdXJzRnJvbUlucHV0cyIsIl9kZWJvdW5jZWRDaGFuZ2UiLCJhbXBtMm1pbGl0YXJ5IiwibWlsaXRhcnkyYW1wbSIsImhvdXJFbGVtZW50IiwibWludXRlRWxlbWVudCIsInNlY29uZEVsZW1lbnQiLCJsaW1pdE1pbkhvdXJzIiwibWluVGltZSIsIm1pbkRhdGVIYXNUaW1lIiwibGltaXRNYXhIb3VycyIsIm1heFRpbWUiLCJtYXhEYXRlIiwibWF4RGF0ZUhhc1RpbWUiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJvblllYXJJbnB1dCIsImV2ZW50VGFyZ2V0IiwiZGVsdGEiLCJoYW5kbGVyIiwiZXYiLCJhZGRFdmVudExpc3RlbmVyIiwidHJpZ2dlckNoYW5nZSIsImV2dCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9uUmVzaXplIiwib25Nb3VzZU92ZXIiLCJib2R5Iiwib250b3VjaHN0YXJ0IiwiZG9jdW1lbnRDbGljayIsImNhcHR1cmUiLCJtb250aE5hdiIsIm9uTW9udGhOYXZDbGljayIsInNlbGVjdERhdGUiLCJ0aW1lQ29udGFpbmVyIiwic2VsVGV4dCIsInNlbGVjdCIsInRpbWVJbmNyZW1lbnQiLCJvbkJsdXIiLCJqdW1wRGF0ZSIsImp1bXBUbyIsIm9sZFllYXIiLCJvbGRNb250aCIsImJ1aWxkTW9udGhTd2l0Y2giLCJpbmNyZW1lbnROdW1JbnB1dCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwidGFiSW5kZXgiLCJidWlsZE1vbnRoTmF2IiwiaW5uZXJDb250YWluZXIiLCJidWlsZFdlZWtzIiwickNvbnRhaW5lciIsImJ1aWxkV2Vla2RheXMiLCJidWlsZERheXMiLCJidWlsZFRpbWUiLCJjdXN0b21BcHBlbmQiLCJhcHBlbmRUbyIsIm5vZGVUeXBlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJjcmVhdGVEYXkiLCJkYXlOdW1iZXIiLCJkYXRlSXNFbmFibGVkIiwiZGF5RWxlbWVudCIsIiRpIiwidG9kYXlEYXRlRWxlbSIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsImdldEZpcnN0QXZhaWxhYmxlRGF5Iiwic3RhcnRNb250aCIsImVuZE1vbnRoIiwic3RhcnRJbmRleCIsImdldE5leHRBdmFpbGFibGVEYXkiLCJnaXZlbk1vbnRoIiwibG9vcERlbHRhIiwibnVtTW9udGhEYXlzIiwiZm9jdXNPbkRheSIsImRheUZvY3VzZWQiLCJpc0luVmlldyIsImFjdGl2ZUVsZW1lbnQiLCJzdGFydEVsZW0iLCJidWlsZE1vbnRoRGF5cyIsImZpcnN0T2ZNb250aCIsInByZXZNb250aERheXMiLCJpc011bHRpTW9udGgiLCJwcmV2TW9udGhEYXlDbGFzcyIsIm5leHRNb250aERheUNsYXNzIiwiZGF5SW5kZXgiLCJkYXlDb250YWluZXIiLCJmcmFnIiwic2hvdWxkQnVpbGRNb250aCIsIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyIiwiaW5uZXJIVE1MIiwiYnVpbGRNb250aCIsImNvbnRhaW5lciIsIm1vbnRoTmF2RnJhZ21lbnQiLCJtb250aEVsZW1lbnQiLCJzZWxlY3RlZE1vbnRoIiwieWVhcklucHV0IiwidGFiaW5kZXgiLCJ5ZWFyRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZGlzYWJsZWQiLCJidWlsZE1vbnRocyIsInByZXZNb250aE5hdiIsInllYXJFbGVtZW50cyIsIm1vbnRoRWxlbWVudHMiLCJuZXh0TW9udGhOYXYiLCJfX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9faGlkZU5leHRNb250aEFycm93IiwiY3VycmVudFllYXJFbGVtZW50IiwidXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCIsInNlcGFyYXRvciIsImhvdXJJbnB1dCIsIm1pbnV0ZUlucHV0Iiwic2Vjb25kSW5wdXQiLCJnZXRBdHRyaWJ1dGUiLCJ0aXRsZSIsIndlZWtkYXlDb250YWluZXIiLCJ1cGRhdGVXZWVrZGF5cyIsInNwbGljZSIsImlzT2Zmc2V0IiwiX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9oaWRlTmV4dE1vbnRoQXJyb3ciLCJ0cmlnZ2VyQ2hhbmdlRXZlbnQiLCJ0b0luaXRpYWwiLCJtb2JpbGVJbnB1dCIsIl9pbml0aWFsRGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsYXN0Q2hpbGQiLCJfdHlwZSIsInJlbW92ZUF0dHJpYnV0ZSIsImlzQ2FsZW5kYXJFbGVtIiwiZXZlbnRUYXJnZXRfMSIsImlzQ2FsZW5kYXJFbGVtZW50IiwiaXNJbnB1dCIsImxvc3RGb2N1cyIsInJlbGF0ZWRUYXJnZXQiLCJpc0lnbm9yZWQiLCJzb21lIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImZyb20iLCJ0byIsImFsbG93S2V5ZG93biIsImFsbG93SW5saW5lS2V5ZG93biIsImJsdXIiLCJpc1RpbWVPYmoiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzQW5kQ2xvc2UiLCJkZWx0YV8xIiwiY3RybEtleSIsInN0b3BQcm9wYWdhdGlvbiIsImVsZW1zIiwic2hpZnRLZXkiLCJob3ZlckRhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImluaXRpYWxEYXRlIiwicmFuZ2VTdGFydERhdGUiLCJyYW5nZUVuZERhdGUiLCJjb250YWluc0Rpc2FibGVkIiwibWluUmFuZ2UiLCJtYXhSYW5nZSIsImRheUVsZW0iLCJvdXRPZlJhbmdlIiwiX3Bvc2l0aW9uRWxlbWVudCIsImNsaWNrIiwid2FzT3BlbiIsIm1pbk1heERhdGVTZXR0ZXIiLCJpbnZlcnNlRGF0ZU9iaiIsImJvb2xPcHRzIiwidXNlckNvbmZpZyIsImRhdGFzZXQiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsImdldElucHV0RWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJsMTBucyIsImRlZmF1bHQiLCJjdXN0b21Qb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsImFjYyIsImNoaWxkIiwib2Zmc2V0SGVpZ2h0IiwiY2FsZW5kYXJXaWR0aCIsImNvbmZpZ1BvcyIsImNvbmZpZ1Bvc1ZlcnRpY2FsIiwiY29uZmlnUG9zSG9yaXpvbnRhbCIsImlucHV0Qm91bmRzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzaG93T25Ub3AiLCJ0b3AiLCJwYWdlWU9mZnNldCIsImxlZnQiLCJwYWdlWE9mZnNldCIsImlzQ2VudGVyIiwiaXNSaWdodCIsInJpZ2h0IiwicmlnaHRNb3N0IiwiY2VudGVyTW9zdCIsImdldERvY3VtZW50U3R5bGVTaGVldCIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJCZWZvcmUiLCJjZW50ZXJBZnRlciIsImNlbnRlckluZGV4IiwiY3NzUnVsZXMiLCJjZW50ZXJTdHlsZSIsImluc2VydFJ1bGUiLCJlZGl0YWJsZVNoZWV0Iiwic3R5bGVTaGVldHMiLCJzaGVldCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJoZWFkIiwibXNNYXhUb3VjaFBvaW50cyIsImlzU2VsZWN0YWJsZSIsInNlbGVjdGVkRGF0ZSIsInNob3VsZENoYW5nZU1vbnRoIiwic2VsZWN0ZWRJbmRleCIsImIiLCJzaW5nbGUiLCJDQUxMQkFDS1MiLCJvcHRpb24iLCJzZXRTZWxlY3RlZERhdGUiLCJpbnB1dERhdGUiLCJydWxlIiwicHJlbG9hZGVkRGF0ZSIsIm5vZGVOYW1lIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsImlucHV0VHlwZSIsIm1vYmlsZUZvcm1hdFN0ciIsImRlZmF1bHRWYWx1ZSIsImhvb2tzIiwiaW5pdEV2ZW50IiwiZ2V0RGF0ZVN0ciIsImRPYmoiLCJpc1ByZXZNb250aCIsImlzTmV4dE1vbnRoIiwiaXNLZXlEb3duIiwiY3VyVmFsdWUiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJpc01pbnV0ZUVsZW0iLCJfZmxhdHBpY2tyIiwibm9kZUxpc3QiLCJIVE1MRWxlbWVudCIsImluc3RhbmNlcyIsIkhUTUxDb2xsZWN0aW9uIiwiTm9kZUxpc3QiLCJzZWxlY3RvciIsIk5vZGUiLCJsb2NhbGl6ZSIsInNldERlZmF1bHRzIiwialF1ZXJ5IiwiZnBfaW5jciIsIkNvbXBvbmVudCIsImdldFByb3RvdHlwZU9mIiwibWFwU3RvcmUiLCJzdXBlclN0b3JlIiwiZGVzY3MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwia2xhc3MiLCJnZXRPd25LZXlzIiwiZGVzYyIsImF1dG9iaW5kTWV0aG9kIiwiZ2V0Qm91bmRTdXBlciIsImJvdW5kRm4iLCJjcmVhdGVEZWZhdWx0U2V0dGVyIiwiYXV0b2JpbmRDbGFzcyIsImhhbmRsZSIsIkdFTkVSSUNfRlVOQ1RJT05fRVJST1IiLCJGVU5DVElPTl9SRUdFWFAiLCJTeW50YXhFcnJvclJlcG9ydGVyIiwidG9waWMiLCJwYXJlbnRLbGFzcyIsImNoaWxkS2xhc3MiLCJwYXJlbnREZXNjcmlwdG9yIiwiY2hpbGREZXNjcmlwdG9yIiwibXNnIiwicmVwb3J0ZXIiLCJwYXJlbnRWYWx1ZVR5cGUiLCJjaGlsZFZhbHVlVHlwZSIsImlzRnVuY3Rpb25PdmVyVW5kZWZpbmVkIiwiY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMiLCJwYXJlbnRIYXNHZXR0ZXIiLCJjaGlsZEhhc0dldHRlciIsInBhcmVudEhhc1NldHRlciIsImNoaWxkSGFzU2V0dGVyIiwicGFyZW50VHlwZSIsImdldERlc2NyaXB0b3JUeXBlIiwiY2hpbGRUeXBlIiwiY2hlY2tEYXRhRGVzY3JpcHRvcnMiLCJjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMiLCJzdWdnZXN0aW9uVHJhbnNmb3JtcyIsInN1Z2dlc3Rpb24iLCJzdXBlcktsYXNzIiwic3VwZXJEZXNjcmlwdG9yIiwic3VnZ2VzdGVkS2V5IiwiZmluZFBvc3NpYmxlQWx0ZXJuYXRpdmVzIiwiY2hlY2tEZXNjcmlwdG9ycyIsImRlY29yYXRlIiwibGlzdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJpdGVtIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJjc3NNYXBwaW5nIiwidXNlU291cmNlTWFwIiwic291cmNlTWFwcGluZyIsInRvQ29tbWVudCIsInNvdXJjZVVSTHMiLCJiYXNlNjQiLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpc0Rlc2NyaXB0b3IiLCJlbnRyeUFyZ3MiLCJoYW5kbGVEZXNjcmlwdG9yIiwiTWV0YSIsImxhenlJbml0aWFsaXplIiwiTUVUQV9LRVkiLCJzZWVuRGVwcmVjYXRpb25zIiwiQm9vbGVhblN3aXRjaCIsIlRlbXBsYXRlUmVuZGVyZXIiLCJnZXROYXRpdmUiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiaXNBcmd1bWVudHMiLCJpc0J1ZmZlciIsImlzVHlwZWRBcnJheSIsImJhc2VUaW1lcyIsIm9yaWdpbmFsTW9kdWxlIiwiaXNQbGFpbk9iamVjdCIsImJhc2VUb1N0cmluZyIsIkV2ZW50c01peGluIiwiRGF0ZVRpbWVJbnB1dCIsIkJvb2xlYW5FZGl0b3IiLCJrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlIiwic3dpdGNoZXIiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwidmFsdWVBc1N0cmluZyIsIl9ndWkiLCJmYWxsYmFjayIsIkFHcmlkQ29tcG9uZW50c01ldGFDb25maWciLCJ3aW4iLCJpbml0aWFsVmFsdWUiLCJsaXN0ZW5lciIsImJvb2xTd2l0Y2giLCJsYWJlbCIsIm92ZXJyaWRlIiwiYXV0b2JpbmQiLCJpbml0aWFsaXplciIsInVwZGF0ZSIsImxvY2F0aW9uIiwiYmFzZVVybCIsImN1cnJlbnREaXIiLCJmaXhlZENzcyIsInVucXVvdGVkT3JpZ1VybCIsIm5ld1VybCIsIkJvb2xlYW5SZW5kZXJlciIsImlzSW5pdCIsImJvb2xlYW5UcnVlUmVuZGVyVmFsdWUiLCJib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSIsImJvb2xlYW5UcnVlVmFsdWUiLCJib29sZWFuRmFsc2VWYWx1ZSIsIkJvb2xlYW5GaWx0ZXIiLCJ0b1RpdGxlQ2FzZSIsIndvcmQiLCJzdHJpcEhUTUwiLCJ0bXAiLCJfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uIiwidHJhbnNsYXRlIiwiaXNDbGVhckZpbHRlciIsImlzUmVzZXRCdXR0b24iLCJpc0FwcGx5QnV0dG9uIiwicmVzZXQiLCJhcHBseUZpbHRlclBhbmVsIiwiZmlsdGVyVHlwZSIsImZpbHRlclRleHRBc1N0cmluZyIsIk51bWJlckVkaXRvciIsInN0YXJ0VmFsdWUiLCJCYXNpcyIsIl9vbk51bWJlcklucHV0SW52YWxpZCIsImNhc3RlZCIsInJldFZhbHVlIiwiX21hc2tlZCIsImlzTmF2aWdhdGlvbktleSIsIlRleHRFZGl0b3IiLCJfb25UZXh0SW5wdXRJbnZhbGlkIiwiYXNzaWduSW5XaXRoIiwiYmFzZVZhbHVlcyIsImF0dGVtcHQiLCJjcmVhdGVBc3NpZ25lciIsImNvcHlPYmplY3QiLCJrZXlzSW4iLCJpc05ldyIsImN1c3RvbWl6ZXIiLCJhc3NpZ25WYWx1ZSIsIm9ialZhbHVlIiwiYmFzZUlzTmF0aXZlIiwicmVSZWdFeHBDaGFyIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwicmVJc05hdGl2ZSIsImlzTWFza2VkIiwidG9Tb3VyY2UiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwibWFza1NyY0tleSIsInVpZCIsImNvcmVKc0RhdGEiLCJzb3VyY2VzIiwiYXNzaWduZXIiLCJuYXRpdmVNYXgiLCJvdGhlckFyZ3MiLCJzaG9ydE91dCIsImJhc2VTZXRUb1N0cmluZyIsImNvbnN0YW50IiwiSE9UX0NPVU5UIiwiSE9UX1NQQU4iLCJuYXRpdmVOb3ciLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsImJhc2VLZXlzSW4iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImJhc2VJc0FyZ3VtZW50cyIsImFyZ3NUYWciLCJmcmVlRXhwb3J0cyIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiQnVmZmVyIiwibmF0aXZlSXNCdWZmZXIiLCJzdHViRmFsc2UiLCJub2RlSXNUeXBlZEFycmF5Iiwibm9kZVV0aWwiLCJiYXNlVW5hcnkiLCJiYXNlSXNUeXBlZEFycmF5IiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsIm9iamVjdFRhZyIsInJlZ2V4cFRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsIndlYWtNYXBUYWciLCJhcnJheUJ1ZmZlclRhZyIsImRhdGFWaWV3VGFnIiwiZmxvYXQzMlRhZyIsImZsb2F0NjRUYWciLCJpbnQ4VGFnIiwiaW50MTZUYWciLCJpbnQzMlRhZyIsInVpbnQ4VGFnIiwidWludDhDbGFtcGVkVGFnIiwidWludDE2VGFnIiwidWludDMyVGFnIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwibmF0aXZlS2V5c0luIiwiaXNQcm90byIsIm9iamVjdEN0b3JTdHJpbmciLCJnZXRQcm90b3R5cGUiLCJzdHJpbmdFc2NhcGVzIiwiYmFzZUtleXMiLCJuYXRpdmVLZXlzIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlSHRtbENoYXIiLCJodG1sRXNjYXBlcyIsImJhc2VQcm9wZXJ0eU9mIiwiSU5GSU5JVFkiLCJzeW1ib2xQcm90byIsInN5bWJvbFRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUYWciLCJJbWFnZVJlbmRlcmVyIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiaW1hZ2VMaXN0IiwiRGF0ZVRpbWVGaWx0ZXIiLCJUT0tFTlMiLCJUT0tFTl9FUVVBTCIsIlRPS0VOX05PVF9FUVVBTCIsIlRPS0VOX0xFU1MiLCJUT0tFTl9HUkVBVEVSIiwiVE9LRU5fUkFOR0UiLCJUT0tFTl9BTkQiLCJUT0tFTl9PUiIsIkNvbmRpdGlvblBhbmVsIiwid2l0aEV2ZW50c01peGluIiwiX2ZpbHRlclRpbWVJbnB1dCIsIl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQiLCJfZmlsdGVyT3B0aW9ucyIsIl9kZWZhdWx0T3B0aW9uIiwib3B0aW9uc1RyYW5zbGF0aW9ucyIsImd1aSIsImZpbHRlck9wdGlvbnMiLCJzZWxlY3RFbCIsImZpbHRlcklucHV0IiwiZmlsdGVyVG9JbnB1dCIsImZpbHRlckRhdGVUbyIsIk9OX0NPTkRJVElPTl9DSEFOR0VEIiwicmVhZG9ubHkiLCJmaWx0ZXJUbyIsIkpvaW5Db25kaXRpb25QYW5lbCIsIl9maXJzdENvbmRpdGlvblBhbmVsIiwiX3NlY29uZENvbmRpdGlvblBhbmVsIiwiX29wZXJhdG9yUGFuZWwiLCJfcGFyYW1zIiwiaWRPbmUiLCJpZFR3byIsInN1cHByZXNzQW5kT3JDb25kaXRpb24iLCJzZWNvbmRDb25kaXRpb25HdWkiLCJvcGVyYXRvclBhbmVsR3VpIiwiT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCIsImNvbmRpdGlvbjEiLCJjb25kaXRpb24yIiwib3BlcmF0b3IiLCJfSm9pbkNvbmRpdGlvblBhbmVsIiwiX3N0YXRlIiwiX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyIsImluUmFuZ2VJbmNsdXNpdmUiLCJ2YWx1ZUdldHRlciIsImRvZXNQYXNzRmlyc3RDb25kaXRpb24iLCJkb2VzUGFzc1NlY29uZENvbmRpdGlvbiIsImNsb25lIiwiZGF0ZVRpbWVNYXNrIiwiQkJqIiwiZmlyc3RDb25kaXRpb25Bc1N0cmluZyIsInNlY29uZENvbmRpdGlvbkFzU3RyaW5nIiwib3BlcmF0b3JBc1N0cmluZyIsInBhc3NlZCIsImlzQXBwbHlCdXR0b25BY3RpdmUiLCJyZXF1aXJlZEFyZ3MiLCJoYXNOZWdhdGl2ZVVUQ09mZnNldCIsImdldERhdGVNaWxsaXNlY29uZHNQYXJ0IiwiaGFuZGxlcnMiLCJpc0VkaXRvciIsInBpY2tlciIsImRhdGVUaW1lRm9ybWF0dGVyIiwid2Vla0RheXNTaG9ydCIsIndlZWtEYXlzTG9uZyIsIm1vbnRoc1Nob3J0IiwibW9udGhzTG9uZyIsIk9OX0RBVEVfQ0hBTkdFRCIsIkRhdGVUaW1lRWRpdG9yIiwiX3ZhbHVlIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRldGFpbCIsImluaXRDdXN0b21FdmVudCIsIkV2ZW50IiwiZ3dfaW5pdCIsImxpY2Vuc2UiLCJhZ0dyaWQiLCJMaWNlbnNlTWFuYWdlciIsInNldExpY2Vuc2VLZXkiLCJwYXJzZWRPcHRpb25zIiwiZ3dfcGFyc2VPcHRpb25zIiwiR3JpZCIsImRlZXBQYXJzZWRPcHRpb25zIiwiZ2V0RGF0YVBhdGhUZW1wbGF0ZSIsImdldERhdGFQYXRoIiwiZGVib3VuY2VEdXJhdGlvbiIsImZpbmFsT3B0aW9ucyIsImdldERvY3VtZW50Iiwib25DZWxsRWRpdGluZ1N0YXJ0ZWQiLCJvbkNlbGxFZGl0aW5nU3RvcHBlZCIsIm9uQ2VsbFZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0YXJ0ZWQiLCJvblJvd1ZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0b3BwZWQiLCJvbkdyaWRSZWFkeSIsImdldENvbnRleHRNZW51SXRlbXMiLCJnZXRDaGFydFRvb2xiYXJJdGVtcyIsInBvcHVwUGFyZW50Iiwib25Sb3dEb3VibGVDbGlja2VkIiwiZ3dfb25Sb3dEb3VibGVDbGlja2VkIiwib25Sb3dDbGlja2VkIiwiZ3dfb25Sb3dDbGlja2VkIiwib25DZWxsQ2xpY2tlZCIsImd3X29uQ2VsbENsaWNrRXZlbnQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwiZ3dfb25TZWxlY3Rpb25DaGFuZ2VkIiwib25SYW5nZVNlbGVjdGlvbkNoYW5nZWQiLCJnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCIsImNvbXBvbmVudHMiLCJBZ0dyaWRDb21wb25lbnRzIiwiSFRNTFRvb2x0aXAiLCJTdWdnZXN0aW9uRWRpdG9yIiwibmF2aWdhdGVUb05leHRDZWxsIiwidHJlZURhdGEiLCJnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQiLCJnd19nZXRDb250ZXh0TWVudSIsImdyaWRJZCIsImJ1aWxkQ29udGV4dE1lbnVBY3Rpb24iLCJwYXJzZU1lbnUiLCJtZW51IiwiY29udGV4dE1lbnUiLCJDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAiLCJjZWxsQ2xpY2tlZCIsImNlbGxEb3VibGVDbGlja2VkIiwiQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAiLCJjZWxsRWRpdGluZ1N0YXJ0ZWQiLCJjZWxsRWRpdGluZ1N0b3BwZWQiLCJjZWxsVmFsdWVDaGFuZ2VkIiwiUk9XX0VESVRJTkdfRVZFTlRTX01BUCIsInJvd0VkaXRpbmdTdGFydGVkIiwicm93RWRpdGluZ1N0b3BwZWQiLCJyb3dWYWx1ZUNoYW5nZWQiLCJnd19vbkNlbGxFZGl0aW5nRXZlbnQiLCJnd19vblJvd0VkaXRpbmdFdmVudCIsImd3X29uUmVhZHlFdmVudCIsIl9lIiwic3RhdGVEZWJvdW5jZSIsImNoYW5nZUV2ZW50Iiwia2V5ZG93bkV2ZW50Iiwia2MiLCJhayIsImFsdEtleSIsInNrIiwiY2siLCJnd19vblN0YXRlQ2hhbmdlZCIsImd3X29uS2V5ZG93biIsInNyY0luZGV4IiwiSUVfUFJPVE8iLCJwcm9jZXNzIiwiYmluZGluZyIsInNyY1ZhbHVlIiwiY2hyIiwiZUd1aSIsImlzSGVhZGVyIiwiaXNHcm91cGVkSGVhZGVyIiwidGhlbWUiLCJncmlkQ29yZSIsImVHcmlkRGl2IiwiZW5kc1dpdGgiLCJ0b29sdGlwRmllbGQiLCJwYXNzZWRQYXJhbXMiLCJ0ZXh0UGF0dGVybiIsInRleHRSZXF1aXJlZCIsInRleHRUaXRsZSIsImRlYm91bmNlV2FpdE1zIiwiX2ZvY3VzQWZ0ZXJBdHRhY2hlZCIsImNlbGxTdGFydGVkRWRpdCIsIl9oaWdobGlnaHRBbGxPbkZvY3VzIiwiX29uQ2hhbmdlIiwiX3JlbmRlckl0ZW1UZW1wbGF0ZSIsIml0ZW1UZW1wbGF0ZSIsIl9yZW5kZXJHcm91cFRlbXBsYXRlIiwiZ3JvdXBUZW1wbGF0ZSIsIl9hdXRvY29tcGxldGUiLCJwcmV2ZW50U3VibWl0IiwiZmV0Y2giLCJfb25BdXRvY29tcGxldGVGZXRjaCIsIm9uU2VsZWN0IiwiX29uQXV0b2NvbXBsZXRlU2VsZWN0IiwicmVuZGVyR3JvdXAiLCJfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cCIsInJlbmRlciIsIl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0iLCJjdXN0b21pemUiLCJfb25BdXRvY29tcGxldGVDdXN0b21pemUiLCJlbXB0eU1zZyIsImVtcHR5TWVzc2FnZSIsIm1pbkxlbmd0aCIsInNob3dPbkZvY3VzIiwiZm9jdXNJbiIsImFsbG93Q3VzdG9tVmFsdWVzIiwiX3ZhbGlkYXRlSW5wdXQiLCJfbGFzdEZldGNoZWREYXRhIiwiZmlsdGVyZWRJdGVtcyIsInRleHQiLCJzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCIsImVHcmlkQ2VsbCIsImN1cnJlbnRWYWx1ZSIsImdyb3VwTmFtZSIsImlucHV0UmVjdCIsIm1heEhlaWdodCIsImNoZWNrVmFsaWRpdHkiLCJnd19zZXRTdGF0ZSIsInNldENvbHVtblN0YXRlIiwic2V0Q29sdW1uR3JvdXBTdGF0ZSIsImdyb3VwcyIsInNldEZpbHRlck1vZGVsIiwiZmlsdGVycyIsImd3X2dldFN0YXRlIiwiZ2V0Q29sdW1uU3RhdGUiLCJnZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ2V0U29ydE1vZGVsIiwiZ2V0RmlsdGVyTW9kZWwiLCJnd19zZXRTaWRlQmFyVmlzaWJsZSIsInNldFNpZGVCYXJWaXNpYmxlIiwiZ3dfb3BlblRvb2xwYW5lbCIsInRvb2xwYW5lbElkIiwib3BlblRvb2xQYW5lbCIsImd3X2Nsb3NlVG9vbHBhbmVsIiwiY2xvc2VUb29sUGFuZWwiLCJnd19zZXRGdW5jdGlvbnNSZWFkT25seSIsInNldEZ1bmN0aW9uc1JlYWRPbmx5IiwiZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eSIsImdldFN0YXR1c1BhbmVsIiwic2V0VmlzaWJsZSIsImd3X3Nob3dMb2FkaW5nT3ZlcmxheSIsInNob3dMb2FkaW5nT3ZlcmxheSIsImd3X3Nob3dOb1Jvd3NPdmVybGF5Iiwic2hvd05vUm93c092ZXJsYXkiLCJnd19oaWRlT3ZlcmxheSIsImhpZGVPdmVybGF5IiwiZ3dfdXBkYXRlQ29udGV4dCIsImd3X3NldFN0eWxlIiwicnVsZXMiLCJqc3MiLCJmb3JEb2N1bWVudCIsImd3X3JlbW92ZVN0eWxlIiwiYWRqU2VsQXR0clJlZ2V4IiwiZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cyIsImdldFNlbGVjdG9yc0FuZFJ1bGVzIiwicmVzdWx0cyIsInNlbGVjdG9yVGV4dCIsInRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyIsImdldFJ1bGVzIiwic3dhcEFkalNlbEF0dHIiLCJzd2FwUHNldWRvRWxTeW50YXgiLCJhZGRSdWxlIiwicHNldWRvRWxlbWVudFJ1bGUiLCJhZGRQc2V1ZG9FbGVtZW50UnVsZSIsImFkZFJ1bGVUb1NoZWV0IiwiZG91YmxlQ29sb25TZWxlY3RvciIsInNpbmdsZUNvbG9uU2VsZWN0b3IiLCJ0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMiLCJzdWJtYXRjaDEiLCJzdWJtYXRjaDIiLCJzdWJtYXRjaDMiLCJyZW1vdmVSdWxlIiwiZGVsZXRlUnVsZSIsImV4dGVuZCIsImRlc3QiLCJzcmMiLCJhZ2dyZWdhdGVTdHlsZXMiLCJhZ2dyZWdhdGUiLCJkZWNsYXJlZFByb3BlcnRpZXMiLCJkZWNsYXJlZCIsInRvQ2FtZWxDYXNlIiwic3dhcCIsImxhc3RJbmRleCIsInNldFN0eWxlUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpbXBvcnRhbnRJbmRleCIsInNldFByb3BlcnR5Iiwic3VibWF0Y2giLCJ0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyIsIm9sZFByb3BzIiwibmV3UHJvcHMiLCJ1bkNhbWVsQ2FzZSIsIkpzcyIsInNoZWV0cyIsImRlZmF1bHRTaGVldCIsImdldEFsbCIsIl9jcmVhdGVTaGVldCIsIl9yZW1vdmVTaGVldCIsInN0eWxlTm9kZSIsInJlbCIsIm93bmVyTm9kZSIsImNzcyIsInByb3RvY29sIiwiaG9zdCIsInBhdGhuYW1lIiwiZnVsbE1hdGNoIiwib3JpZ1VybCIsIiQxIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFD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QUFtRDs7QUFFeEU7O0FBRUEsR0FBRyxLQUFVLEVBQUUsRTs7Ozs7O0FDckJmLG9EQUFvRCxzQkFBc0IsbUZBQW1GLHVCQUF1QixpREFBaUQsbUJBQW1CLGtCQUFrQixHQUFHLGlLQUFpSyx1REFBdUQsR0FBRyxxSEFBcUgsMERBQTBELEdBQUcsbUJBQW1CLHVEQUF1RCxrQkFBa0IsbUNBQW1DLG1DQUFtQyxtRkFBbUYsa0JBQWtCLHVCQUF1Qiw4QkFBOEIsK0JBQStCLG1CQUFtQix3REFBd0Qsd0RBQXdELEdBQUcsd0JBQXdCLDBEQUEwRCxrRUFBa0UsR0FBRyxxQ0FBcUMscUJBQXFCLHFCQUFxQixzQkFBc0IsR0FBRywwQ0FBMEMsb0RBQW9ELEdBQUcsb0NBQW9DLGtCQUFrQixvQkFBb0IsR0FBRywwQ0FBMEMseUVBQXlFLEdBQUcsNkNBQTZDLHNHQUFzRyxHQUFHLDBCQUEwQixxQkFBcUIsR0FBRywrQkFBK0IsK0NBQStDLCtDQUErQyxHQUFHLGlDQUFpQywrQ0FBK0MsK0NBQStDLEdBQUcsRyIsImZpbGUiOiJiYmotZ3JpZC13aWRnZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDApO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogR2V0IGRvY3VtZW50XG4gKlxuICogR2V0IHRoZSBkb2N1bWVudCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgQkJqIGVudlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRG9jdW1lbnQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldERvY3VtZW50KCkge1xuICByZXR1cm4gdHlwZW9mICRkb2MgIT09ICd1bmRlZmluZWQnID8gJGRvYyA6IGRvY3VtZW50XG59XG5cbi8qKlxuICogR2V0IHdpbmRvd1xuICpcbiAqIEdldCB0aGUgd2luZG93IGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBCQmogZW52XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBXaW5kb3cgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFdpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiAkd25kICE9PSAndW5kZWZpbmVkJyA/ICR3bmQgOiB3aW5kb3dcbn1cblxuLyoqXG4gKiBFc2NhcGUgVmFsdWVcbiAqXG4gKiBDaGFuZ2UgbnVsbCBhbmQgdW5kZWZpbmVkIHRvIGVtcHR5IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVzY2FwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2VzY2FwZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJydcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSB1dWlkXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9jcmVhdGUtZ3VpZC11dWlkLWluLWphdmFzY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3V1aWQoKSB7XG4gIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcbiAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDhcbiAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgR3JpZFxuICpcbiAqIFJldHJpZXZlIHRoZSBncmlkIGluc3RhbmNlIGZyb20gYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gVGhlIGdyaWQncyBpbnN0YW5jZSBvZnIgbnVsbFxuICogQHRocm93cyBUeXBlRXJyb3Igd2hlbiB0aGUgZ3JpZCBpbnN0YW5jZSBpcyBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldEdyaWQoaWQpIHtcbiAgd2luZG93LkJCakdyaWRFeFdpZGdldCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgfHwge31cbiAgY29uc3QgZ3JpZCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdIHx8IG51bGxcblxuICBpZiAoIWdyaWQpIHtcbiAgICBjb25zdCByZWdpc3RlcmVkR3JpZHMgPSBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0KSlcbiAgICAvL2dldEZ1bmNBcmdzKGZ1bmMpLmZvckVhY2goKGtleSwgaSkgPT4gYXJnc09ialtrZXldID0gYXJnc1tpXSk7XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFxcblxcbltHcmlkIE5vdCBGb3VuZF0gVGhlIG1ldGhvZCBhc2tlZCBmb3Igbm9uLWV4aXN0ZW50IGdyaWQgaW5zdGFuY2UuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5SZXF1aXJlZCBHcmlkIElkIDogJHtpZH0gICBcblJlZ2lzdGVyZWQgR3JpZHMgOiAke3JlZ2lzdGVyZWRHcmlkc31cbmBcbiAgICApXG4gIH1cblxuICByZXR1cm4gZ3JpZFxufVxuXG4vKipcbiAqIEFkZCBHcmlkXG4gKlxuICogU3RvcmUgYSBuZXcgZ3JpZCBpbnN0YW5jZSBieSBpbiB0aGUgYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBUaGUgZ3JpZCdzIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IFN0b3JlZCBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRHcmlkKGlkLCBvcHRpb25zKSB7XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgPSB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0IHx8IHt9XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdID0gb3B0aW9uc1xuXG4gIHJldHVybiBnd19nZXRHcmlkKGlkKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19kZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXRcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb250ZXh0ID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHNcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZW5kIGFuIGV2ZW50IHRvIEJCaiBzaWRlXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY29udGV4dCB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCB0aGUgZXZlbnQgcGF5bG9hZFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50SWQgdGhlIGV2ZW50J3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NlbmRFdmVudChjb250ZXh0LCBwYXlsb2FkID0ge30sIGV2ZW50SWQgPSBbXSkge1xuICBjb25zdCByZWdpc3RlcmVkSW50ZXJlc3RzID0gY29udGV4dC5pbnRlcmVzdHMgfHwgW11cblxuICBpZiAocmVnaXN0ZXJlZEludGVyZXN0cy5pbmNsdWRlcyhldmVudElkKSkge1xuICAgIGNvbnN0IGRpdiA9IGd3X2dldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoYCR7Y29udGV4dC5pZH1gKVxuICAgIHdpbmRvdy5iYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQoZGl2LCBwYXlsb2FkKVxuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5kZXhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXJlbnRLZXlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGlsZEluZGV4XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBhIG5vZGUgYXMgQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5vZGUgYWcgZ3JpZCBub2RlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAgYWcgZ3JpZCBjb250ZXh0XG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd3xCb29sZWFufSBvYmplY3QgZm9ybWF0dGVkIGFzIEJCakdyaWRFeFdpZGdldFJvdy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgaWYgdGhlIG5vZGUgaXMgZm9yIGdyb3VwIG5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZShub2RlLCBjb250ZXh0KSB7XG4gIGlmICh0cnVlID09PSBub2RlLmdyb3VwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy8gd2UgZG8gbm90IG1hbmFnZSBncm91cHNcblxuICBjb25zdCBnZXRSb3dOb2RlSWQgPSBub2RlLnJvd1Bpbm5lZCA/ICdfX1JPV19JTkRFWCcgOiBjb250ZXh0LmdldFJvd05vZGVJZFxuXG4gIHJldHVybiB7XG4gICAgaTpcbiAgICAgIGNvbnRleHQuaGFzT3duUHJvcGVydHkoJ2dldFJvd05vZGVJZCcpICYmIG5vZGUuZGF0YVtnZXRSb3dOb2RlSWRdXG4gICAgICAgID8gbm9kZS5kYXRhW2dldFJvd05vZGVJZF1cbiAgICAgICAgOiBub2RlLmlkLCAvLyBpZFxuICAgIHg6IG5vZGUucm93SW5kZXgsIC8vIGluZGV4XG4gICAgcDpcbiAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICA6ICcnLCAvLyBwYXJlbnQga2V5XG4gICAgYzogbm9kZS5yb3dQaW5uZWQgPyAtMSA6IG5vZGUuY2hpbGRJbmRleCwgLy9jaGlsZEluZGV4XG4gICAgczogQm9vbGVhbihub2RlLnNlbGVjdGVkKSwgLy8gc2VsZWN0ZWRcbiAgICAvLyBjbGllbnQgcm93XG4gICAgY3I6XG4gICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KCdpbmNsdWRlQ2xpZW50Um93RGF0YScpICYmXG4gICAgICBjb250ZXh0WydpbmNsdWRlQ2xpZW50Um93RGF0YSddID09PSB0cnVlXG4gICAgICAgID8gbm9kZS5kYXRhXG4gICAgICAgIDogbnVsbCxcbiAgICBwcDogbm9kZS5yb3dQaW5uZWQsIC8vIHBpbiBwb3NpdGlvblxuICB9XG59XG5cbi8qKlxuICogUGFyc2Ugbm9kZSBmcm9tIGV2ZW50XG4gKlxuICogUGFyc2Ugbm9kZSBpbiB0aGUgcGFTc2VkIGV2ZW50IGFzIEJCakdyaWRFeFdpZGdldFJvd1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZUZyb21FdmVudChlKSB7XG4gIHJldHVybiBnd19wYXJzZU5vZGUoZS5ub2RlLCBlLmNvbnRleHQpXG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIFtSZWN1cnNpdmVseSBwYXJzZXMgYSBzdHJpbmdpZmllZCBKU09OXVxuICogQHBhcmFtICB7W3R5cGVdfSBqc29uU3RyaW5nIFtzdHJpbmdpZmllZCBqc29uIHRvIHBhcnNlXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICAgIFtub3JtYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XVxuICovXG5mdW5jdGlvbiBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmcpIHtcbiAgLy8gaWYgbm90IHN0cmluZ2lmaWVkIGpzb24gcmF0aGVyIGEgc2ltcGxlIHN0cmluZyB2YWx1ZSB0aGVuIEpTT04ucGFyc2Ugd2lsbCB0aHJvdyBlcnJvclxuICAvLyBvdGhlcndpc2UgY29udGludWUgcmVjdXJzaW9uXG4gIGlmICh0eXBlb2YganNvblN0cmluZyA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZShqc29uU3RyaW5nKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ganNvblN0cmluZztcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqc29uU3RyaW5nKSkge1xuICAgIC8vIGlmIGFuIGFycmF5IGlzIHJlY2VpdmVkLCBtYXAgb3ZlciB0aGUgYXJyYXkgYW5kIGRlZXBQYXJzZSBlYWNoIHZhbHVlXG4gICAgcmV0dXJuIGpzb25TdHJpbmcubWFwKHZhbCA9PiBkZWVwUGFyc2VKc29uKHZhbCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09PSAnb2JqZWN0JyAmJiBqc29uU3RyaW5nICE9PSBudWxsKSB7XG4gICAgLy8gaWYgYW4gb2JqZWN0IGlzIHJlY2VpdmVkIHRoZW4gZGVlcFBhcnNlIGVhY2ggZWxlbWVudCBpbiB0aGUgb2JqZWN0XG4gICAgLy8gdHlwZW9mIG51bGwgcmV0dXJucyAnb2JqZWN0JyB0b28sIHNvIHdlIGhhdmUgdG8gZWxpbWluYXRlIHRoYXRcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvblN0cmluZykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmdba2V5XSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIHdhcyByZWNlaXZlZFxuICAgIHJldHVybiBqc29uU3RyaW5nO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZWVwUGFyc2VKc29uIH07XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8vIHNlbGVjdGlvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfU0VMRUNUID0gNjlcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfQ0xJQ0sgPSA1MDExXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDSyA9IDUyXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9DTElDSyA9IDUwMDFcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyA9IDUwMDJcblxuLy8gZWRpdGluZyBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCA9IDUwMDNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCA9IDUwMDRcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQgPSA1MDA1XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCA9IDUwMDZcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVEID0gNTAwN1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VEID0gNTAxMlxuXG4vLyBzdGF0ZSBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9HUklEX1NUQVRFX0NIQU5HRSA9IDUwMDhcblxuLy8gcmFuZ2Ugc2VsZWN0aW9uXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQgPSA1MDA5XG5cbi8vIGtleWJvYXJkIGV2ZW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0tFWVBSRVNTID0gNTAxMFxuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG4iLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBwYXNzaW5nIGZ1bmN0aW9uIGluIG9wdGlvbnMsIHRoZW4gdXNlIGl0IGZvciByZXNvbHZlIFwiaGVhZFwiIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVXNlZnVsIGZvciBTaGFkb3cgUm9vdCBzdHlsZSBpLmVcbiAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgLy8gICBpbnNlcnRJbnRvOiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Zvb1wiKS5zaGFkb3dSb290IH1cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHZhciBzdHlsZVRhcmdldCA9IGdldFRhcmdldC5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBTdHJpbmdNYXNrIGZyb20gJy4vU3RyaW5nTWFzaydcblxuZXhwb3J0IGRlZmF1bHQgU3RyaW5nTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJy4vTnVtYmVyTWFzaydcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2V4ZWN1dGVFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbidcbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBFeHRlbmQgdGhlIGNvbHVtbiBkZWZpbml0aW9uc1xuICpcbiAqIEV4dGVuZCB0aGUgY29sdW1uIGRlZmluaXRpb25zIHdpdGggb3B0aW9ucyB3aGljaCBjYW4gbm90IGJlIGhhbmRsZWQgaW4gQkJqXG4gKiAoZXg6IGF0dGFjaGluZyBjYWxsYmFja3MpXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGVmaW5pdGlvbnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICBmb3IgKGxldCBpIGluIGRlZmluaXRpb25zKSB7XG4gICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnNbaV1cblxuICAgIGRlZi5jaGVja2JveFNlbGVjdGlvbiA9IGRlZi5jaGVja2JveFNlbGVjdGlvbiB8fCBnd19pc1Nob3dTZWxlY3Rpb25DaGVja2JveFxuICAgIGRlZi5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9XG4gICAgICBkZWYuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gfHwgZ3dfaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvblxuXG4gICAgY29uc3QgdG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbiA9IGRlZi50b29sdGlwVmFsdWVHZXR0ZXJcbiAgICBpZiAodG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbikge1xuICAgICAgZGVmLnRvb2x0aXBWYWx1ZUdldHRlciA9IHBhcmFtcyA9PlxuICAgICAgICBnd19leGVjdXRlRXhwcmVzc2lvbih0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgZGVmLnRvb2x0aXBDb21wb25lbnQgPSAnSFRNTFRvb2x0aXAnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSAmJiB0eXBlb2YgZGVmLmVkaXRhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZWRpdGFibGUgPSBkZWYuZWRpdGFibGVcbiAgICAgIGRlZi5lZGl0YWJsZSA9IHBhcmFtcyA9PiBnd19leGVjdXRlRXhwcmVzc2lvbihlZGl0YWJsZSwgcGFyYW1zKVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoZGVmLmhhc093blByb3BlcnR5KCdyb3dTcGFuJykgJiYgdHlwZW9mIGRlZi5yb3dTcGFuID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3Qgcm93U3BhbiA9IGRlZi5yb3dTcGFuXG4gICAgICBkZWYucm93U3BhbiA9IHBhcmFtcyA9PiBnd19leGVjdXRlRXhwcmVzc2lvbihyb3dTcGFuLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChkZWYuaGFzT3duUHJvcGVydHkoJ2NvbFNwYW4nKSAmJiB0eXBlb2YgZGVmLmNvbFNwYW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjb2xTcGFuID0gZGVmLmNvbFNwYW5cbiAgICAgIGRlZi5jb2xTcGFuID0gcGFyYW1zID0+IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGNvbFNwYW4sIHBhcmFtcylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSkge1xuICAgICAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVmLmNoaWxkcmVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgY29sdW1uIGRlZmluaXRpb25zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge0FycmF5fSBkZWZpbml0aW9ucyBhcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldENvbHVtbkRlZmluaXRpb25zKGlkLCBkZWZpbml0aW9ucykge1xuICBjb25zdCBncmlkID0gZ3dfZ2V0R3JpZChpZClcbiAgY29uc3QgZGVlcFBhcnNlZERlZmluaXRpb25zID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShkZWZpbml0aW9ucykpXG5cbiAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVlcFBhcnNlZERlZmluaXRpb25zKVxuXG4gIGdyaWQub3B0aW9ucy5hcGkuc2V0Q29sdW1uRGVmcyhkZWVwUGFyc2VkRGVmaW5pdGlvbnMpXG4gIGdyaWQub3B0aW9ucy5jb2x1bW5EZWZzID0gZGVlcFBhcnNlZERlZmluaXRpb25zXG59XG5cbi8qKlxuICogTWFrZSB0aGUgY3VycmVudGx5IHZpc2libGUgY29sdW1ucyBmaXQgdGhlIHNjcmVlblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gdGhlIHdpZHRoIHRvIHVzZSB0byBmaXQgYWxsIGNvbHVtbnMgaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NpemVDb2x1bW5zVG9GaXQoaWQsIHdpZHRoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IGNvbHVtbnNBUEkgPSBvcHRpb25zLmNvbHVtbkFwaVxuICBpZiAod2lkdGgpIHtcbiAgICBjb2x1bW5zQVBJLnNpemVDb2x1bW5zVG9GaXQoTnVtYmVyKHdpZHRoKSlcbiAgfSBlbHNlIHtcbiAgICBhcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpXG4gIH1cbn1cblxuLyoqXG4gKiBXb3JrIG91dCB0aGUgYmVzdCB3aWR0aCB0byBmaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjZWxscyBpbiB0aGUgY29sdW1uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtza2lwSGVhZGVyPWZhbHNlXSB3aGVuIHRydWUgaW5kaWNhdGUgdGhhdCB0aGUgaGVhZGVyIGNvbnRlbnQgKGhlYWRlck5hbWUpIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gW2NvbHVtbnM9bnVsbF0gYW4gYXJyYXkgb2YgY29sdW1ucyBpZHMgdG8gYXV0byBzaXplIG9yIG51bGwgdG8gYXV0byBzaXplIGFsbCBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hdXRvU2l6ZUNvbHVtbnMoaWQsIHNraXBIZWFkZXIgPSBmYWxzZSwgY29sdW1ucyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgY29sdW1uc0FQSSA9IG9wdGlvbnMuY29sdW1uQXBpXG5cbiAgaWYgKCEoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCkpIHtcbiAgICBjb25zdCBhbGxDb2x1bW5JZHMgPSBbXVxuXG4gICAgY29sdW1uc0FQSS5nZXRBbGxDb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmNvbElkKVxuICAgIH0pXG5cbiAgICBjb2x1bW5zQVBJLmF1dG9TaXplQ29sdW1ucyhhbGxDb2x1bW5JZHMsIEJvb2xlYW4oc2tpcEhlYWRlcikpXG4gIH0gZWxzZSB7XG4gICAgY29sdW1uc0FQSS5hdXRvU2l6ZUNvbHVtbnMoY29sdW1ucywgQm9vbGVhbihza2lwSGVhZGVyKSlcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmVzIHRoZSBjb2x1bW4gaXMgdmlzaWJsZSwgc2Nyb2xsaW5nIHRoZSB0YWJsZSBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgIHRoZSBjb2x1bW4gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2Vuc3VyZUNvbHVtblZpc2libGUoaWQsIGNvbHVtbklkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmVuc3VyZUNvbHVtblZpc2libGUoY29sdW1uSWQpXG59XG5cbi8qKlxuICogU2V0IENvbHVtbiBXaWR0aFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gd2lkdGggVGhlIG5ldyBjb2x1bW4gd2lkdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldENvbHVtbldpZHRoKGlkLCBjb2x1bW5JZCwgd2lkdGgpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uV2lkdGgoY29sdW1uSWQsIE51bWJlcih3aWR0aCkpXG59XG5cbi8qKlxuICogUGluIENvbHVtblxuICpcbiAqIFBpbiBhIGNvbHVtbiB0byBhIHNwZWNpZmljIGRpcmVjdGlvblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwaW4gVGhlIHBpbiBkaXJlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BpbkNvbHVtbihpZCwgY29sdW1uSWQsIHBpbikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5QaW5uZWQoY29sdW1uSWQsIHBpbilcbn1cblxuLyoqXG4gKiBNb3ZlIENvbHVtblxuICpcbiAqIE1vdmUgY29sdW1uIHRvIGEgc3BlY2lmaWMgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHRvSW5kZXggVGhlIG5ldyBjb2x1bW4gaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X21vdmVDb2x1bW4oaWQsIGNvbHVtbklkLCB0b0luZGV4KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLm1vdmVDb2x1bW4oY29sdW1uSWQsIHRvSW5kZXgpXG59XG5cbi8qKlxuICogU2hvdyAvIEhpZGUgc2VsZWN0aW9uIGNoZWNrYm94IGJhc2VkIG9uIHRoZSBmaXJzdCBjb2x1bW5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbWFrZSBzdXJlIHRoYXQgdGhlIHNlbGVjdGlvbiBjaGVja2JveCBpcyBhbHdheXMgc2hvd24gb24gdGhlXG4gKiBmaXJzdCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gZmlyc3QgY29sdW1uICwgZmFsc2UgaWYgbm90IHRoZSBmaXJzdCBjb2x1bW4gb3IgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBncmlkJ3MgYENvbnRleHQuc2hvd1NlbGVjdGlvbkNoZWNrYm94YCBpcyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3gocGFyYW0pIHtcbiAgaWYgKCFwYXJhbS5jb250ZXh0LnNob3dTZWxlY3Rpb25DaGVja2JveCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IHBhcmFtLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpXG5cbiAgcmV0dXJuIGNvbHVtbnNbMF0uY29sRGVmLmZpZWxkID09PSBwYXJhbS5jb2xEZWYuZmllbGRcbn1cblxuLyoqXG4gKiBTaG93IC8gSGlkZSBoZWFkZXIgc2VsZWN0aW9uIGNoZWNrYm94IGJhc2VkIG9uIHRoZSBmaXJzdCBjb2x1bW5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbWFrZSBzdXJlIHRoYXQgdGhlIGhlYWRlciBzZWxlY3Rpb24gY2hlY2tib3ggaXMgYWx3YXlzIHNob3duIG9uIHRoZVxuICogZmlyc3QgY29sdW1uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIGZpcnN0IGNvbHVtbiAsIGZhbHNlIGlmIG5vdCB0aGUgZmlyc3QgY29sdW1uIG9yIGlmIHRoZVxuICogICAgICAgICAgICAgICAgICAgZ3JpZCdzIGBDb250ZXh0LnNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveGAgaXMgZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24ocGFyYW0pIHtcbiAgY29uc3QgY29udGV4dCA9IHBhcmFtLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuXG4gIGlmICghY29udGV4dC5zaG93SGVhZGVyU2VsZWN0aW9uQ2hlY2tib3gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvbHVtbnMgPSBwYXJhbS5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVxuXG4gIHJldHVybiBjb2x1bW5zWzBdLmNvbERlZi5maWVsZCA9PT0gcGFyYW0uY29sRGVmLmZpZWxkXG59XG5cbi8qKlxuICogRW5hYmxlIHJvdyBncm91cGluZyBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHNldCAgV2hlbiB0cnVlICwgYHNldFJvd0dyb3VwQ29sdW1uc2Agd2lsbCBiZSB1c2VkICwgYGFkZFJvd0dyb3VwQ29sdW1uc2Agb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRSb3dHcm91cENvbHVtbihpZCwgY29sdW1ucywgc2V0KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpW1xuICAgIHNldCA/ICdzZXRSb3dHcm91cENvbHVtbnMnIDogJ2FkZFJvd0dyb3VwQ29sdW1ucydcbiAgXShjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpKVxufVxuXG4vKipcbiAqIERpc2FibGUgcm93IGdyb3VwaW5nIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVJvd0dyb3VwQ29sdW1uKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVJvd0dyb3VwQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFBpdm90TW9kZShpZCkge1xuICByZXR1cm4gZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuaXNQaXZvdE1vZGUoKVxufVxuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2JhbGUgcGl2b3QgbW9kZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtCb29sZWFufSBtb2RlIHdoZW4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGl2b3RNb2RlKGlkLCBtb2RlKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldFBpdm90TW9kZSghIU51bWJlcihtb2RlKSlcbn1cblxuLyoqXG4gKiBFbmFibGUgcGl2b3QgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICogQHBhcmFtIHtCb29sZWFufSBzZXQgIFdoZW4gdHJ1ZSAsIGBhZGRQaXZvdENvbHVtbnNgIHdpbGwgYmUgdXNlZCAsIGBzZXRQaXZvdENvbHVtbnNgIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkUGl2b3RDb2x1bW5zKGlkLCBjb2x1bW5zLCBzZXQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGlbc2V0ID8gJ3NldFBpdm90Q29sdW1ucycgOiAnYWRkUGl2b3RDb2x1bW5zJ10oXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRGlzYWJsZSBwaXZvdCBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVQaXZvdENvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlUGl2b3RDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIEVuYWJsZSB2YWx1ZSBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRWYWx1ZUNvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuYWRkVmFsdWVDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIERpc2FibGUgdmFsdWUgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlVmFsdWVDb2x1bW5zKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVZhbHVlQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGNvbHVtbiBzb3J0aW5nIG1vZGVsXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gbW9kZWwgbW9kZWwgYXMganNvbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U29ydE1vZGVsKGlkLCBtb2RlbCkge1xuICBjb25zdCBhc0FycmF5ID0gSlNPTi5wYXJzZShtb2RlbClcbiAgY29uc3QgcGFyc2VkTW9kZWwgPSBbXVxuICBhc0FycmF5LmZvckVhY2goaSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaSkge1xuICAgICAgcGFyc2VkTW9kZWwucHVzaCh7XG4gICAgICAgIGNvbElkOiBrZXksXG4gICAgICAgIHNvcnQ6IGlba2V5XSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFNvcnRNb2RlbChwYXJzZWRNb2RlbClcbn1cblxuLyoqXG4gKiBSZWRyYXdzIHRoZSBoZWFkZXIuIFVzZWZ1bCBpZiBhIGNvbHVtbiBuYW1lIGNoYW5nZXMsXG4gKiBvciBzb21ldGhpbmcgZWxzZSB0aGF0IGNoYW5nZXMgaG93IHRoZSBjb2x1bW4gaGVhZGVyIGlzIGRpc3BsYXllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZWZyZXNoSGVhZGVyKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlZHJhd1Jvd3MoKVxufVxuXG4vKipcbiAqIFVwZGF0ZSBjb2x1bW4gdmlhYmlsaXR5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY29sdW1uIGlkc1xuICogQHBhcmFtIHtCb29sZWFufSB2aXNpYmxlIHRydWUgdG8gbWFrZSB0aGUgY29sdW1ucyB2aXNpYmxlICwgZmFsc2UgdG8gaGlkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uVmlzaWJsZShpZCwgY29sdW1ucywgdmlzaWJsZSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5zVmlzaWJsZShcbiAgICBjb2x1bW5zLnNwbGl0KCcsJyksXG4gICAgQm9vbGVhbih2aXNpYmxlKVxuICApXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogQnVpbGQgYSBqcyBmdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBleHByZXNzaW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBleHByZXNzaW9uIGNhY2hlIGhhcyBiZWVuIGluaXRpYWxpemVkXG4gIGlmICh0eXBlb2YgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID09ICd1bmRlZmluZWQnKSB7XG4gICAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID0gW11cbiAgfVxuXG4gIC8vIGNoZWNrIGNhY2hlIGZpcnN0XG4gIGlmIChnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl0pIHtcbiAgICByZXR1cm4gZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dXG4gIH1cblxuICAvLyBpZiBub3QgZm91bmQgaW4gY2FjaGUsIHJldHVybiB0aGUgZnVuY3Rpb25cbiAgbGV0IGZ1bmN0aW9uQm9keSA9IG51bGxcbiAgLy8gaWYgdGhlIGV4cHJlc3Npb24gaGFzIHRoZSAncmV0dXJuJyB3b3JkIGluIGl0LCB0aGVuIHVzZSBhcyBpcyxcbiAgLy8gaWYgbm90LCB0aGVuIHdyYXAgaXQgd2l0aCByZXR1cm4gYW5kICc7JyB0byBtYWtlIGEgZnVuY3Rpb25cbiAgaWYgKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkge1xuICAgIGZ1bmN0aW9uQm9keSA9IGV4cHJlc3Npb25cbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbkJvZHkgPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gIH1cblxuICBjb25zdCB0aGVGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihcbiAgICAneCwgY3R4LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHZhbHVlLCBub2RlLCBkYXRhLCBjb2xEZWYsIHJvd0luZGV4LCBhcGksIGNvbHVtbkFwaSwgZ2V0VmFsdWUsIGNvbHVtbiwgY29sdW1uR3JvdXAnLFxuICAgIGZ1bmN0aW9uQm9keVxuICApXG5cbiAgLy8gc3RvcmUgaW4gY2FjaGVcbiAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dID0gdGhlRnVuY3Rpb25cblxuICByZXR1cm4gdGhlRnVuY3Rpb25cbn1cblxuLyoqXG4gKiBCdWlsZCBhbmQgZXhlY3V0ZWQgYW4gZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIG1peGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXJhbXMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBqYXZhU2NyaXB0RnVuY3Rpb24gPSBnd19jb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKVxuICAgIC8vIHRoZSBwYXJhbXMgZG9uJ3QgaGF2ZSBhbGwgdGhlc2UgdmFsdWVzLCByYXRoZXIgd2UgYWRkIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gdmFsdWUgYSBwYXJhbXMgY2FuIGhhdmUsIHdoaWNoIG1ha2VzIHdoYXRldmVyIGlzIGluIHRoZSBwYXJhbXMgYXZhaWxhYmxlLlxuICAgIGNvbnN0IHJlc3VsdCA9IGphdmFTY3JpcHRGdW5jdGlvbihcbiAgICAgIHBhcmFtcy52YWx1ZSxcbiAgICAgIHBhcmFtcy5jb250ZXh0LFxuICAgICAgcGFyYW1zLm9sZFZhbHVlLFxuICAgICAgcGFyYW1zLm5ld1ZhbHVlLFxuICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgcGFyYW1zLm5vZGUsXG4gICAgICBwYXJhbXMuZGF0YSxcbiAgICAgIHBhcmFtcy5jb2xEZWYsXG4gICAgICBwYXJhbXMucm93SW5kZXgsXG4gICAgICBwYXJhbXMuYXBpLFxuICAgICAgcGFyYW1zLmNvbHVtbkFwaSxcbiAgICAgIHBhcmFtcy5nZXRWYWx1ZSxcbiAgICAgIHBhcmFtcy5jb2x1bW4sXG4gICAgICBwYXJhbXMuY29sdW1uR3JvdXBcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gdGhlIGV4cHJlc3Npb24gZmFpbGVkLCB3aGljaCBjYW4gaGFwcGVuLCBhcyBpdCdzIHRoZSBjbGllbnQgdGhhdFxuICAgIC8vIHByb3ZpZGVzIHRoZSBleHByZXNzaW9uLiBzbyBwcmludCBhIG5pY2UgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzaW5nIG9mIHRoZSBleHByZXNzaW9uIGZhaWxlZCcpXG4gICAgY29uc29sZS5sb2coJ0V4cHJlc3Npb24gPSAnICsgZXhwcmVzc2lvbilcbiAgICBjb25zb2xlLmxvZygnUGFyYW1zID0nLCBwYXJhbXMpXG4gICAgY29uc29sZS5sb2coJ0V4Y2VwdGlvbiA9ICcgKyBlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGUgfSBmcm9tICdldmVudHMvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXhlY3V0ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9uJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UXVpY2tGaWx0ZXIoaWQsIGZpbHRlcikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRRdWlja0ZpbHRlcihmaWx0ZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19leHBhbmRBbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuZXhwYW5kQWxsKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbGxhcHNlQWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmNvbGxhcHNlQWxsKClcbn1cbi8qKlxuICogRW5zdXJlcyB0aGUgcm93IGluZGV4IGlzIHZpc2libGUgYnkgdmVydGljYWxseSBzY3JvbGxpbmcgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwb3NpdGlvbiB7J3RvcCcsICdtaWRkbGUnLCAnYm90dG9tJywgdW5kZWZpbmVkL251bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19lbnN1cmVJbmRleFZpc2libGUoaWQsIGluZGV4LCBwb3NpdGlvbikge1xuICBjb25zdCBhcGkgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaVxuICBjb25zdCBub2RlID0gYXBpLmdldFJvd05vZGUoaW5kZXgpXG5cbiAgaWYgKG5vZGUpIHtcbiAgICBhcGkuZW5zdXJlTm9kZVZpc2libGUobm9kZSwgcG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgYXBpLmVuc3VyZUluZGV4VmlzaWJsZShOdW1iZXIoaW5kZXgpLCBwb3NpdGlvbilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfbmF2aWdhdGVUb05leHRSb3coaWQsIHBhcmFtcykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBsZXQgcHJldmlvdXNDZWxsID0gcGFyYW1zLnByZXZpb3VzQ2VsbFBvc2l0aW9uXG4gIGxldCBzdWdnZXN0ZWROZXh0Q2VsbCA9IHBhcmFtcy5uZXh0Q2VsbFBvc2l0aW9uXG5cbiAgY29uc3QgS0VZX1VQID0gMzhcbiAgY29uc3QgS0VZX0RPV04gPSA0MFxuICBjb25zdCBLRVlfTEVGVCA9IDM3XG4gIGNvbnN0IEtFWV9SSUdIVCA9IDM5XG5cbiAgc3dpdGNoIChwYXJhbXMua2V5KSB7XG4gICAgY2FzZSBLRVlfRE9XTjpcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBjZWxsIG9uIGN1cnJlbnQgY2VsbCArIDFcbiAgICAgIGlmIChzdWdnZXN0ZWROZXh0Q2VsbCAmJiAhc3VnZ2VzdGVkTmV4dENlbGwucm93UGlubmVkKSB7XG4gICAgICAgIGlmIChwcmV2aW91c0NlbGwucm93UGlubmVkKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gb3B0aW9ucy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChcbiAgICAgICAgICAgIG9wdGlvbnMuYXBpLmdldEZpcnN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCArIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1Z2dlc3RlZE5leHRDZWxsXG4gICAgY2FzZSBLRVlfVVA6XG4gICAgICAvLyBzZXQgc2VsZWN0ZWQgY2VsbCBvbiBjdXJyZW50IGNlbGwgLSAxXG4gICAgICBpZiAoc3VnZ2VzdGVkTmV4dENlbGwgJiYgIXN1Z2dlc3RlZE5leHRDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IG9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoXG4gICAgICAgICAgICBvcHRpb25zLmFwaS5nZXRMYXN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCAtIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWdnZXN0ZWROZXh0Q2VsbFxuICAgIGNhc2UgS0VZX0xFRlQ6XG4gICAgY2FzZSBLRVlfUklHSFQ6XG4gICAgICByZXR1cm4gc3VnZ2VzdGVkTmV4dENlbGxcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSBzdXBlciBzdHJhbmdlIGtleWJvYXJkJylcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByb3cgYmFzZWQgb24gYGdldFJvd05vZGVJZGAgY29uZmlnIGRlZmluZWQgaW4gdGhlIGdyaWQgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSAgdGhlIGRhdGEgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3dOb2RlSWQoaWQsIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGFbZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LmdldFJvd05vZGVJZF1cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGdyaWQncyBkYXRhIHNldFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0ganNvbiBqc29uIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgbmV3IGRhdGFzZXQgdG8gdXBkYXRlIHRoZSBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dEYXRhKGlkLCBqc29uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgb3B0aW9ucy5hcGkuc2V0Um93RGF0YShqc29uKVxuICBvcHRpb25zLnJvd0RhdGEgPSBqc29uXG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBncmlkIHdpdGggYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3VwZGF0ZVJvd0RhdGEoaWQsIHRyYW5zYWN0aW9uLCBiYXRjaFVwZGF0ZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICh0cmFuc2FjdGlvbi5yZW1vdmUubGVuZ3RoKSB7XG4gICAgbGV0IGl0ZW1zID0gW11cblxuICAgIHRyYW5zYWN0aW9uLnJlbW92ZS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGl0ZW1zLnB1c2gob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCkuZGF0YSlcbiAgICB9KVxuXG4gICAgdHJhbnNhY3Rpb24ucmVtb3ZlID0gaXRlbXNcbiAgfVxuXG4gIGlmICghYmF0Y2hVcGRhdGUpIHtcbiAgICBvcHRpb25zLmFwaS5hcHBseVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLmFwcGx5VHJhbnNhY3Rpb25Bc3luYyh0cmFuc2FjdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgaGVpZ2h0IG9mIGFsbCByb3dzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gaGVpZ2h0IHRoZSByb3cgaGVpZ2h0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dzSGVpZ2h0KGlkLCBoZWlnaHQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcblxuICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICByb3cuc2V0Um93SGVpZ2h0KGhlaWdodClcbiAgfSlcblxuICBhcGkub25Sb3dIZWlnaHRDaGFuZ2VkKClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGdpdmVuIHJvdyBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgdGhlIG5ldyBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd0hlaWdodChpZCwgaW5kZXgsIGhlaWdodCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuICBjb25zdCByb3cgPSBhcGkuZ2V0Um93Tm9kZShpbmRleCkgfHwgYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoaW5kZXgpXG5cbiAgaWYgKHJvdykge1xuICAgIHJvdy5zZXRSb3dIZWlnaHQoaGVpZ2h0KVxuICAgIG9wdGlvbnMuYXBpLm9uUm93SGVpZ2h0Q2hhbmdlZCgpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gc2V0IGhlaWdodCBmb3Igcm93ICR7aW5kZXh9LiBSb3cgY2Fubm90IGJlIGZvdW5kYClcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSByb3cgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVzZXRSb3dIZWlnaHRzKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlc2V0Um93SGVpZ2h0cygpXG59XG5cbi8qKlxuICogU2VsZWN0IHJvdyBvciBtb3JlIGJhc2VkIG9uIHRoZSByb3cgaWQgb3IgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gcm93cyBhbiBhcnJheSBvZiByb3cga2V5cyBhbmQgaW5kZXhlcyB0byBzZWxlY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNlbGVjdGVkUm93cyhpZCwgcm93cykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuXG4gIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChub2RlID0+IHtcbiAgICBpZiAoXG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUucm93SW5kZXgpKSA+IC0xIHx8XG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUuaWQpKSA+IC0xXG4gICAgKSB7XG4gICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZVxuICAgIH1cbiAgfSlcblxuICBhcGkub25Hcm91cEV4cGFuZGVkT3JDb2xsYXBzZWQoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2VsZWN0QWxsKGlkLCBmaWx0ZXJlZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICgxID09PSBmaWx0ZXJlZCkge1xuICAgIG9wdGlvbnMuYXBpLnNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5zZWxlY3RBbGwoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19kZXNlbGVjdEFsbChpZCwgZmlsdGVyZWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICBpZiAoMSA9PT0gZmlsdGVyZWQpIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbCgpXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcm93c1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgc2VsZWN0ZWQgcm93cyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRTZWxlY3RlZFJvd3MoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3Qgbm9kZXMgPSBvcHRpb25zLmFwaS5nZXRTZWxlY3RlZE5vZGVzKClcbiAgbGV0IHBhcnNlZCA9IFtdXG5cbiAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICBwYXJzZWQucHVzaChnd19wYXJzZU5vZGUobm9kZSwgb3B0aW9ucy5jb250ZXh0KSlcbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldCB0aGUgbGFzdCBzZWxlY3RlZCByb3dcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcm93IGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFNlbGVjdGVkUm93KGlkKSB7XG4gIGNvbnN0IHJvd3MgPSBKU09OLnBhcnNlKGd3X2dldFNlbGVjdGVkUm93cyhpZCkpXG5cbiAgaWYgKHJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJvd3Nbcm93cy5sZW5ndGggLSAxXSlcbiAgfVxuXG4gIHJldHVybiAnJ1xufVxuXG4vKipcbiAqIEdldCB0aGUgcm93IGJ5IGl0cyBpZCBvciBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXhcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJvdyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3coaWQsIGluZGV4KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBnd19wYXJzZU5vZGUob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCksIG9wdGlvbnMuY29udGV4dClcbiAgKVxufVxuXG4vKipcbiAqIEdldCByb3dzIGZyb20gdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHBoYXNlIFRoZSByb3dzIHBoYXNlXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsdGVyRXhwcmVzc2lvbiBBIGZpbHRlciBleHByZXNzaW9uXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBKc29uIHN0cmluZ2lmaWVkIGFycmF5IG9mIHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvd3MoaWQsIHBoYXNlLCBmaWx0ZXJFeHByZXNzaW9uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IHBhcnNlZCA9IFtdXG5cbiAgb3B0aW9ucy5hcGlbcGhhc2VdKG5vZGUgPT4ge1xuICAgIGlmICghbm9kZS5ncm91cCkge1xuICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb24pIHtcbiAgICAgICAgY29uc3QgY2FuUHJvY2VzcyA9IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGZpbHRlckV4cHJlc3Npb24sIHtcbiAgICAgICAgICB2YWx1ZTogbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICBvbGRWYWx1ZTogbnVsbCxcbiAgICAgICAgICBuZXdWYWx1ZTogbnVsbCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YSxcbiAgICAgICAgICBjb2xEZWY6IG51bGwsXG4gICAgICAgICAgcm93SW5kZXg6IG5vZGUucm93SW5kZXgsXG4gICAgICAgICAgYXBpOiBub2RlLmdyaWRBcGksXG4gICAgICAgICAgY29sdW1uQXBpOiBub2RlLmNvbHVtbkFwaSxcbiAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4gbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgICBjb2x1bW5Hcm91cDpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChjYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgcGFyc2VkLnB1c2goZ3dfcGFyc2VOb2RlKG5vZGUsIG9wdGlvbnMuY29udGV4dCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZC5wdXNoKGd3X3BhcnNlTm9kZShub2RlLCBvcHRpb25zLmNvbnRleHQpKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGdyaWQgdG8gcmVtb3ZlIGEgcm93IGZyb20gdGhlIERPTSBhbmQgcmVjcmVhdGUgaXQgYWdhaW4gZnJvbSBzY3JhdGNoLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlZHJhd1Jvd3MoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVkcmF3Um93cygpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgdG9wIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkVG9wUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRUb3BSb3dEYXRhKGRhdGEpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgYm90dG9tIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRCb3R0b21Sb3dEYXRhKGRhdGEpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCwgZ3dfdXVpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZUFkZENlbGxSYW5nZSB9IGZyb20gJ2FwaS9jZWxscydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFRoZSBhcnJheSBjb250YWlucyByZWZlcmVuY2VzIHRvIGNyZWF0ZWQgY2hhcnRzIGZyb20gQkJqLlxuICogRXZlcnkgcmVmZXJlbmNlIGlzIGEgQ2hhcnRSZWYgb2JqZWN0IHdoaWNoIHByb3ZpZGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZVxuICogZGVzdHJveUNoYXJ0KCkgbWV0aG9kIHRoYXQgaXMgcmVxdWlyZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZGlzcG9zZSB0aGUgY2hhcnQuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNoYXJ0IHRvb2xiYXIgaXRlbXMgZGVmaW5lZCBpbiB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5IG9mIHN1cHBvcnRlZCBjaGFydCBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMocGFyYW1zKSB7XG4gIHJldHVybiAoXG4gICAgcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dC5jaGFydFRvb2xiYXJJdGVtcyB8fCBbXVxuICApXG59XG5cbi8qKlxuICogQWRkIG5ldyBjaGFydCByYW5nZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSAgYm91bmRlZCBvciB1bmJvdW5kZWQgcmFuZ2UgbW9kZWxcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgdW5pcXVlIGlkIGZvciB0aGUgZ2VuZXJhdGUgY2hhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZENoYXJ0UmFuZ2UoaWQsIHJhbmdlKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuICBjb25zdCBvcHRpb25zID0gZ3JpZC5vcHRpb25zXG4gIGNvbnN0IHByID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShyYW5nZSkpXG5cbiAgcHIuY2VsbFJhbmdlID0gZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcHIuY2VsbFJhbmdlKVxuXG4gIGNvbnN0IHJlZiA9IG9wdGlvbnMuYXBpLmNyZWF0ZVJhbmdlQ2hhcnQocHIpXG4gIGNvbnN0IHV1aWQgPSBnd191dWlkKClcblxuICBncmlkLmNyZWF0ZWRfY2hhcnRzID0gZ3JpZC5jcmVhdGVkX2NoYXJ0cyB8fCB7fVxuICBncmlkLmNyZWF0ZWRfY2hhcnRzW3V1aWRdID0gcmVmXG5cbiAgcmV0dXJuIHV1aWRcbn1cblxuLyoqXG4gKiBEZXN0cm95IGNyZWF0ZWQgY2hhcnRzXG4gKlxuICogRGVzdHJveSBhbHJlYWR5IGNyZWF0ZWQgY2hhcnQgYnkgaWQgb3IgYWxsIGNyZWF0ZWQgY2hhcnRzXG4gKiB3aGVuIHRoZSBgdXVpZGAgaXMgb21pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdXVpZCBUaGUgY2hhcnQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZGVzdHJveUNoYXJ0KGlkLCB1dWlkKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuXG4gIGlmICh1dWlkKSB7XG4gICAgaWYgKFxuICAgICAgZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSAmJlxuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0cy5oYXNPd25Qcm9wZXJ0eSh1dWlkKVxuICAgICkge1xuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0c1t1dWlkXS5kZXN0cm95Q2hhcnQoKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSkge1xuICAgICAgZm9yIChjb25zdCBpIGluIGdyaWQuY3JlYXRlZF9jaGFydHMpIHtcbiAgICAgICAgaWYgKGdyaWQuY3JlYXRlZF9jaGFydHMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICBjb25zdCBjaGFydCA9IGdyaWQuY3JlYXRlZF9jaGFydHNbaV1cbiAgICAgICAgICBjaGFydC5kZXN0cm95Q2hhcnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBTdGFydCBjZWxsIGVkaXRpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8bnVtYmVyfSByb3cgVGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2xLZXkgVGhlIGNvbHVtbidzIGtleVxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlQcmVzcyAgS2V5IHByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gY2hhclByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gcm93UGlubmVkIFNldCB0byAndG9wJyBvciAnYm90dG9tJyB0byBzdGFydGVkIGVkaXRpbmcgYSBwaW5uZWQgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zdGFydEVkaXRpbmdDZWxsKFxuICBpZCxcbiAgcm93LFxuICBjb2xLZXksXG4gIGtleVByZXNzLFxuICBjaGFyUHJlc3MsXG4gIHJvd1Bpbm5lZFxuKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IG5vZGUgPSBhcGkuZ2V0Um93Tm9kZShyb3cpIHx8IGFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHJvdylcblxuICBvcHRpb25zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcbiAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICBrZXlQcmVzczogTnVtYmVyKGtleVByZXNzKSxcbiAgICBjb2xLZXksXG4gICAgY2hhclByZXNzLFxuICAgIHJvd1Bpbm5lZCxcbiAgfSlcbn1cblxuLyoqXG4gKiBTdG9wIGNlbGwgZWRpdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhbmNlbCB3aGVuIHRydWUgY2FuY2VsIGVkaXRzICwgc2F2ZSBlZGl0cyBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3N0b3BFZGl0aW5nKGlkLCBjYW5jZWwpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc3RvcEVkaXRpbmcoY2FuY2VsKVxufVxuXG4vKipcbiAqIE5hdmlnYXRlcyB0aGUgZ3JpZCBmb2N1cyB0byB0aGUgbmV4dCBjZWxsLCBhcyBpZiB0YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvTmV4dENlbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkudGFiVG9OZXh0Q2VsbCgpXG59XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSBncmlkIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBjZWxsLCBhcyBpZiBzaGlmdC10YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvUHJldmlvdXNDZWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKClcbn1cblxuLyoqXG4gKiBTZXQgRm9jdXMgb24gdGhlIGdpdmVuIHJvdyBhbmQgY29sdW1uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gcm93IFRoZSByb3cncyBpbmRleC9pZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbiBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxvYXRpbmcgbnVsbCwgJ3RvcCcsIG9yICdib3R0b20nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Rm9jdXNlZENlbGwoaWQsIHJvdywgY29sdW1uLCBmbG9hdGluZyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICAvLyBpZ25vcmUgZm9jdXMgY2FsbHMgaWYgZWRpdGluZ1xuICBpZiAob3B0aW9ucy5hcGkuZ2V0RWRpdGluZ0NlbGxzKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IHIsIGMsIGZcbiAgaWYgKHJvdyA9PSAtMSkge1xuICAgIC8vIHRyeSB0byByZXRhaW4gdGhlIGZvY3VzXG4gICAgY29uc3QgbGFzdEZvY3VzZWRDZWxsID0gb3B0aW9ucy5hcGkuZ2V0Rm9jdXNlZENlbGwoKVxuXG4gICAgaWYgKGxhc3RGb2N1c2VkQ2VsbCkge1xuICAgICAgciA9IGxhc3RGb2N1c2VkQ2VsbC5yb3dJbmRleFxuICAgICAgYyA9IGxhc3RGb2N1c2VkQ2VsbC5jb2x1bW4uY29sSWRcbiAgICAgIGYgPSBsYXN0Rm9jdXNlZENlbGwucm93UGlubmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSAwXG4gICAgICBjID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVswXS5jb2xJZFxuICAgICAgZiA9IGZsb2F0aW5nXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHIgPSAhcm93XG4gICAgICA/IDBcbiAgICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcm93KVxuICAgICAgPyArcm93XG4gICAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocm93KS5yb3dJbmRleFxuICAgIGMgPSBjb2x1bW4gPyBjb2x1bW4gOiBvcHRpb25zLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpWzBdLmNvbElkXG4gICAgZiA9IGZsb2F0aW5nXG4gIH1cblxuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGb2N1c2VkQ2VsbChyLCBjLCBmKVxufVxuXG4vKipcbiAqIEdldCBSYW5nZSBTZWxlY3Rpb25zXG4gKlxuICogVGhlIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIHJhbmdlIGpzb24gbW9kZWwgZm9yIGVhY2ggcmFuZ2Ugd2hpY2ggY2FuIGJlIHBhcnNlZCBpbiBCQmogc2lkZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcmFuZ2VzIGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJhbmdlU2VsZWN0aW9ucyhpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0XG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IHJhbmdlcyA9IGFwaS5nZXRDZWxsUmFuZ2VzKClcbiAgY29uc3QgbW9kZWwgPSBhcGkuZ2V0TW9kZWwoKVxuICBsZXQgcmVzdWx0ID0gW11cblxuICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XG4gICAgLy8gY29uc3Qgc3RhcnQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4KSwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAvLyBjb25zdCBlbmQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLmVuZFJvdy5yb3dJbmRleCksIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAvL2lmIChzdGFydCAhPT0gZmFsc2UgJiYgZW5kICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSByYW5nZS5jb2x1bW5zXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoJ2FnLUdyaWQtQXV0b0NvbHVtbicgIT09IGN1cnJlbnQuY29sSWQpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKGN1cnJlbnQuY29sSWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3JcbiAgICAgIH0sIFtdKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuXG4gICAgY29uc3Qgc3RhckluZGV4ID0gTWF0aC5taW4ocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgsIHJhbmdlLmVuZFJvdy5yb3dJbmRleClcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWF4KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4LCByYW5nZS5lbmRSb3cucm93SW5kZXgpXG4gICAgY29uc3Qgcm93cyA9IFtdXG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IHN0YXJJbmRleDsgcm93SW5kZXggPD0gZW5kSW5kZXg7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBtb2RlbC5nZXRSb3cocm93SW5kZXgpXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJzZWROb2RlID0gZ3dfcGFyc2VOb2RlKG5vZGUsIGNvbnRleHQpXG4gICAgICAgIGlmIChwYXJzZWROb2RlKSB7XG4gICAgICAgICAgcm93cy5wdXNoKHBhcnNlZE5vZGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocm93cy5sZW5ndGggJiYgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgcjogcm93cywgYzogY29sdW1ucyB9KVxuICAgIH1cbiAgICAvL31cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KVxufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBjZWxscyByYW5nZSBpbiBhIGZvcm1hdCB0aGUgZ3JpZCBjYW4gdW5kZXJzdGFuZCB3aGVuIGl0IGlzIHBhc3NlZFxuICogdG8gYGFwaS5hZGRDZWxsUmFuZ2VgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGdyaWQncyBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHJhbmdlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCByYW5nZSkge1xuICBjb25zdCBwciA9IGRlZXBQYXJzZUpzb24oSlNPTi5zdHJpbmdpZnkocmFuZ2UpKVxuICBjb25zdCBzdGFydCA9ICEocHIuc3RhcnQgfHwgbnVsbClcbiAgICA/IDBcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLnN0YXJ0KVxuICAgID8gK3ByLnN0YXJ0XG4gICAgOiBvcHRpb25zLmFwaS5nZXRSb3dOb2RlKHByLnN0YXJ0KS5yb3dJbmRleFxuICBjb25zdCBlbmQgPSAhKHByLmVuZCB8fCBudWxsKVxuICAgID8gb3B0aW9ucy5yb3dEYXRhLmxlbmd0aCAtIDFcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLmVuZClcbiAgICA/ICtwci5lbmRcbiAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocHIuZW5kKS5yb3dJbmRleFxuXG4gIHJldHVybiB7XG4gICAgcm93U3RhcnRJbmRleDogTWF0aC5hYnMoc3RhcnQpLFxuICAgIHJvd0VuZEluZGV4OiBNYXRoLmFicyhlbmQpLFxuICAgIGNvbHVtbnM6IHByLmNvbHVtbnMsXG4gIH1cbn1cbi8qKlxuICogQWRkIG5ldyBjZWxsIHJhbmdlXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlICBib3VuZGVkIG9yIHVuYm91bmRlZCByYW5nZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkQ2VsbFJhbmdlKGlkLCByYW5nZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBvcHRpb25zLmFwaS5hZGRDZWxsUmFuZ2UoZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcmFuZ2UpKVxufVxuXG4vKipcbiAqIENsZWFycyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfY2xlYXJSYW5nZVNlbGVjdGlvbihpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5jbGVhclJhbmdlU2VsZWN0aW9uKClcbn1cbiIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcbiIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSXRlcmF0ZWVDYWxsO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJbmRleDtcbiIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcbiIsImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0ICdleHBvc2UtbG9hZGVyP0JCai5NYXNrcyFiYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuSW5wdXRNYXNraW5nIWJhc2lzLWlucHV0LW1hc2tpbmcvZGlzdC9iYXNpcy1pbnB1dC1tYXNraW5nLmpzJ1xuaW1wb3J0ICdleHBvc2UtbG9hZGVyP2ZsYXRwaWNrciFmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuQWdHcmlkQ29tcG9uZW50cyFiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzJ1xuXG5yZXF1aXJlKCdmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzJylcbnJlcXVpcmUoJy4vc3R5bGUvY2xhc3Nlcy5jc3MnKVxucmVxdWlyZSgnLi9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3MnKVxuXG5leHBvcnQgKiBmcm9tICcuL3BvbHlmaWxscy5qcydcbmV4cG9ydCAqIGZyb20gJy4vYXBpJ1xuIiwiaWYoIWdsb2JhbFtcIkJCalwiXSkgZ2xvYmFsW1wiQkJqXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJCalwiXVtcIk1hc2tzXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJiai1tYXNrcy5qc1wiKTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJNYXNrc1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCQmpcIl0gPSByb290W1wiQkJqXCJdIHx8IHt9LCByb290W1wiQkJqXCJdW1wiTWFza3NcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDUpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdG9JbnRlZ2VyO1xuZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZ1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiaFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYlwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZlwiXTsgfSk7XG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJjXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfX1tcImNcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdHpQYXJzZVRpbWV6b25lO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdHpUb2tlbml6ZURhdGVfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RyaW5nTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlV0aWxzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVXRpbHM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fU3RyaW5nTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlR5cGVzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOdW1iZXJNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRhdGVNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiY1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdHJpbmdNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCJdOyB9KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cblxuXG52YXIgVXRpbHMgPSB7XG4gIERhdGVzOiB7XG4gICAgZ2V0RGF5T2ZZZWFyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJlXCIgLyogZ2V0RGF5T2ZZZWFyICovXSxcbiAgICBnZXRXZWVrTnVtYmVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJnXCIgLyogZ2V0V2Vla051bWJlciAqL10sXG4gICAgZ2V0V2Vla1N0YXJ0QnlMb2NhbGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImhcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10sXG4gICAgSVNfREFURV9SRUdFWDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiYVwiIC8qIElTX0RBVEVfUkVHRVggKi9dLFxuICAgIElTX1RJTUVfUkVHRVg6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImJcIiAvKiBJU19USU1FX1JFR0VYICovXSxcbiAgICBmaXhTaG9ydElTTzogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiZFwiIC8qIGZpeFNob3J0SVNPICovXSxcbiAgICBnZXRUaW1lem9uZU9yT2Zmc2V0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJmXCIgLyogZ2V0VGltZXpvbmVPck9mZnNldCAqL11cbiAgfVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG52YXIgTnVtYmVyTWFzayA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE51bWJlck1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlck1hc2spO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE51bWJlck1hc2ssIG51bGwsIFt7XG4gICAga2V5OiBcIm1hc2tcIixcblxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVjaW1hbFNlcGFyYXRvcj0uXSAgLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqIFxuICAgICAqIEB0aHJvd3Mge01hc2tFcnJvcn0gb25seSBpZiBsb29zZSBpcyBkaXNhYmxlZFxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2sobnVtYmVyLCBfbWFzaykge1xuICAgICAgdmFyIGdyb3VwaW5nU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnLCc7XG4gICAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJy4nO1xuICAgICAgdmFyIGZvcmNlVHJhaWxpbmdaZXJvcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcblxuICAgICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gc3RyOyAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlcIlxuICAgICAgICAgIH07XG4gICAgICB9IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBNQVNLXG5cblxuICAgICAgdmFyIG1hc2tCZWZvcmVEZWNpbWFsID0gMDtcbiAgICAgIHZhciBtYXNrQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIHZhciBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrTGVuOyArK2kpIHtcbiAgICAgICAgdmFyIG0gPSBfbWFzay5jaGFyQXQoaSk7XG5cbiAgICAgICAgaWYgKG0gPT0gJzAnIHx8IG0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsO2Vsc2UgKyttYXNrQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bWJlciwgbWFza0FmdGVyRGVjaW1hbCk7XG5cbiAgICAgIHZhciBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBOVU1CRVJcblxuXG4gICAgICB2YXIgaW5MZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICB2YXIgbnVtQmVmb3JlRGVjaW1hbCA9IDA7XG4gICAgICB2YXIgbnVtQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW5MZW47ICsrX2kpIHtcbiAgICAgICAgaWYgKGJ5dGVzW19pXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKytudW1BZnRlckRlY2ltYWw7ZWxzZSArK251bUJlZm9yZURlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrXCJcbiAgICAgICAgICB9O1xuICAgICAgfSAvLyByb3VuZCBpZiBtYXNrIGlzIGZvciBhIGxvd2VyIHByZWNpc2lvbiBudW1iZXJcblxuXG4gICAgICBpZiAobnVtQWZ0ZXJEZWNpbWFsID4gbWFza0FmdGVyRGVjaW1hbCkge1xuICAgICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpO1xuICAgICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7XG4gICAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoOyAvLyBHZXQgbmV3IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuXG4gICAgICAgIG51bUJlZm9yZURlY2ltYWwgPSAwO1xuICAgICAgICBudW1BZnRlckRlY2ltYWwgPSAwO1xuICAgICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBpbkxlbjsgKytfaTIpIHtcbiAgICAgICAgICBpZiAoYnl0ZXNbX2kyXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbDtlbHNlICsrbnVtQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgICBpZiAobnVtQmVmb3JlRGVjaW1hbCA+IG1hc2tCZWZvcmVEZWNpbWFsKSB7XG4gICAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCk7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza1wiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWxsQnl0ZSA9ICcgJyxcbiAgICAgICAgICBmbG9hdEJ5dGUgPSAnICc7XG4gICAgICB2YXIgaW5Qb3MgPSAwLFxuICAgICAgICAgIG91dFBvcyA9IDAsXG4gICAgICAgICAgZmxvYXRQb3MgPSAwO1xuICAgICAgaWYgKF9tYXNrLmNoYXJBdCgwKSA9PSAnKicpIGZpbGxCeXRlID0gJyonO1xuICAgICAgdmFyIGZpbGxJbml0ID0gZmlsbEJ5dGU7XG4gICAgICB2YXIgaXNOZWdhdGl2ZSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtKSA8IDA7XG4gICAgICB2YXIgZW1pdERlY2ltYWwgPSBpbkxlbiA+IDAgfHwgX21hc2suaW5kZXhPZignMCcpID49IDA7XG4gICAgICB2YXIgZm91bmRaZXJvID0gZmFsc2U7XG4gICAgICB2YXIgZm91bmREaWdpdCA9IGZhbHNlO1xuICAgICAgdmFyIGN1cnJlbmN5ID0gZmFsc2U7XG4gICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcbiAgICAgIHZhciByZXQgPSBuZXcgQXJyYXkobWFza0xlbik7XG5cbiAgICAgIGZvciAodmFyIG1hc2tQb3MgPSAwOyBtYXNrUG9zIDwgbWFza0xlbjsgKyttYXNrUG9zKSB7XG4gICAgICAgIHZhciBfbSA9IF9tYXNrLmNoYXJBdChtYXNrUG9zKTtcblxuICAgICAgICBzd2l0Y2ggKF9tKSB7XG4gICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsO1xuXG4gICAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBieXRlc1tpblBvc107XG4gICAgICAgICAgICAgICsraW5Qb3M7XG4gICAgICAgICAgICAgIGZvdW5kRGlnaXQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCc7XG4gICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWw7XG5cbiAgICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXTtcbiAgICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCAmJiBmb3JjZVRyYWlsaW5nWmVyb3MgJiYgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDAgPyAnMCcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1BvcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgICAgaWYgKGZvdW5kWmVybyB8fCBpblBvcyA+IDApIHJldFtvdXRQb3NdID0gZ3JvdXBpbmdTZXBhcmF0b3I7ZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJy0nO1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1BvcztcbiAgICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiBmaWxsQnl0ZTtcblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgZmxvYXRCeXRlID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogJysnO1xuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBmbG9hdEJ5dGUgPSAnJCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnJCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICcmJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG4gICAgICAgICAgLy8gY2FzZSAnQCc6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICdAJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICdAJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSBmbG9hdEJ5dGUgPSAnKCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcpJzpcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmb3VuZERlY2ltYWwgPyAnICcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcgJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnICc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnUic7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKic7XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGVtaXREZWNpbWFsID8gZGVjaW1hbFNlcGFyYXRvciA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgZmlsbEJ5dGUgPSAnICc7XG4gICAgICAgICAgICBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IF9tO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmxvYXRCeXRlICE9ICcgJykge1xuICAgICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvcztcblxuICAgICAgICB3aGlsZSAoZmxvYXRQb3MgPj0gbWFza0xlbikge1xuICAgICAgICAgIC0tZmxvYXRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0W2Zsb2F0UG9zXSA9PSBmaWxsSW5pdCkgcmV0W2Zsb2F0UG9zXSA9IGZsb2F0Qnl0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3NoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgICBpZiAocmV2ZXJzZVNoaWZ0KSBwcmVjaXNpb24gPSAtcHJlY2lzaW9uO1xuICAgICAgdmFyIG51bUFycmF5ID0gKCcnICsgbnVtYmVyKS5zcGxpdCgnZScpO1xuICAgICAgcmV0dXJuICsobnVtQXJyYXlbMF0gKyAnZScgKyAobnVtQXJyYXlbMV0gPyArbnVtQXJyYXlbMV0gKyBwcmVjaXNpb24gOiBwcmVjaXNpb24pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3JvdW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yb3VuZChudW1iZXIsIHByZWNpc2lvbikge1xuICAgICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KE1hdGgucm91bmQoTnVtYmVyTWFzay5fc2hpZnQobnVtYmVyLCBwcmVjaXNpb24sIGZhbHNlKSksIHByZWNpc2lvbiwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl90b0NoYXJBcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9DaGFyQXJyYXkobnVtYmVyKSB7XG4gICAgICB2YXIgc2lnbnVtID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW1iZXIpO1xuXG4gICAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgICAgaWYgKHNpZ251bSAhPT0gMCkge1xuICAgICAgICB2YXIgc3RyaW5nID0gc2lnbnVtIDwgMCA/IFwiXCIuY29uY2F0KC0xICogbnVtYmVyLnRvU3RyaW5nKCkpIDogbnVtYmVyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJykgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKTsgLy8gVGhlIHN0cmluZyBjb250YWlucyBvbmx5IFswLTldIGFuZCAnLidcblxuICAgICAgICBjaGFycyA9IHN0cmluZy5zcGxpdCgnJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHggbnVtYmVyXG4gICAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG5lZ2F0aXZlIG51bWJlciwgcG9zaXRpdmUgemVyb1xuICAgICAqICAgICAgICAgICAgICAgICAgIG9yIG5lZ2F0aXZlIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxLCAtMSwgMCBvciAtMCByZXNwZWN0aXZlbHkuXG4gICAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U2lnblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U2lnbih4KSB7XG4gICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE51bWJlck1hc2s7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoTnVtYmVyTWFzayk7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSVNfVElNRV9SRUdFWDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElTX0RBVEVfUkVHRVg7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeUxvY2FsZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldERheU9mWWVhcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpeFNob3J0SVNPOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0VGltZXpvbmVPck9mZnNldDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtOdW1iZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc190el91dGNUb1pvbmVkVGltZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfd2Vla3N0YXJ0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cblxudmFyIElTX1RJTUVfUkVHRVggPSAvXigyWzAtM118WzAxXVswLTldKTo/KFswLTVdWzAtOV0pOj8oWzAtNV1bMC05XSkoWnxbKy1dKD86MlswLTNdfFswMV1bMC05XSkoPzo6Pyg/OlswLTVdWzAtOV0pKT8pJC87XG52YXIgSVNfREFURV9SRUdFWCA9IC9eKChbMTJdXFxkezN9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdXFxkfDNbMDFdKShafFsrLV0oPzoyWzAtM118WzAxXVswLTldKSg/Ojo/KD86WzAtNV1bMC05XSkpPykpJC87XG4vKipcbiAqIEZpbmQgb3V0IHdoZW4gdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgcGFzc2VkIGxvY2FsZVxuICpcbiAqIEBwYXJhbSB7bG9jYWxlfSBsb2NhbGVcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGEgbnVtYmVyIDAgPSBzdW5kYXkgLCAxID0gbW9uZGF5ICwgLi4uLlxuICovXG5cbnZhciBnZXRXZWVrU3RhcnRCeUxvY2FsZSA9IGZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlKGxvY2FsZSkge1xuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfX1tcImFcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10pKGxvY2FsZSk7XG59O1xuLyoqXG4gKiAgR2V0IGRheSBudW1iZXIgaW4gdGhlIHllYXIgb2YgdGhlIHBhc3NlZCBkYXRlXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBkYXkgbnVtYmVyXG4gKi9cblxudmFyIGdldERheU9mWWVhciA9IGZ1bmN0aW9uIGdldERheU9mWWVhcihkYXRlKSB7XG4gIHZhciBzdGFydCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCk7XG4gIHZhciBkaWZmID0gZGF0ZSAtIHN0YXJ0ICsgKHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpICogNjAgKiAxMDAwO1xuICB2YXIgb25lRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcbiAgdmFyIGRheSA9IE1hdGguZmxvb3IoZGlmZiAvIG9uZURheSk7XG4gIHJldHVybiBkYXk7XG59O1xuLyoqXG4gKiBUYWtlcyBpbmNvbXBsZXRlIGlzbyBzdHJpbmcgYW5kIHJldHVybiBhIGNvbXBsZXRlIG9uZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gY29tcGxldGUgaXNvIHN0cmluZ1xuICovXG5cbnZhciBmaXhTaG9ydElTTyA9IGZ1bmN0aW9uIGZpeFNob3J0SVNPKGRhdGUpIHtcbiAgdmFyIHZhbHVlID0gZGF0ZTtcbiAgdmFyIG9mZnNldCA9ICh2YWx1ZS5tYXRjaCgveiR8WytcXC1dXFxkXFxkOlxcZFxcZCQvaSkgfHwgW10pWzBdO1xuXG4gIGlmICghb2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gJ1onO1xuICAgIHZhbHVlICs9IG9mZnNldDtcbiAgfVxuXG4gIGlmIChJU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIjE5NzAtMDEtMDFUXCIuY29uY2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmIChJU19EQVRFX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZS5zcGxpdChvZmZzZXQpWzBdLCBcIlQwMDowMDowMFwiKS5jb25jYXQob2Zmc2V0KTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIEdldCB0aGUgYnJvd3NlciB0aW1lem9uZSBuYW1lICwgaWYgbm90IHN1cHBvcnRlZCB0aGVuIHRoZSBicm93c2VyXG4gKiB0aW1lem9uZSBvZmZzZXQgZm9ybWF0dGVkXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSB0aW1lem9uZSBvZiBvZmZzZXRcbiAqL1xuXG52YXIgZ2V0VGltZXpvbmVPck9mZnNldCA9IGZ1bmN0aW9uIGdldFRpbWV6b25lT3JPZmZzZXQoKSB7XG4gIHZhciB0aW1lem9uZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcblxuICBpZiAoIXRpbWV6b25lKSB7XG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIHBhZChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgdmFyIHN0ciA9ICcnICsgbnVtYmVyO1xuXG4gICAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICBzdHIgPSAnMCcgKyBzdHI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfTtcblxuICAgIHZhciBvZmZzZXQgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgb2Zmc2V0ID0gKG9mZnNldCA8IDAgPyAnKycgOiAnLScpICsgLy8gTm90ZSB0aGUgcmV2ZXJzZWQgc2lnbiFcbiAgICBwYWQocGFyc2VJbnQoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSwgMikgKyBwYWQoTWF0aC5hYnMob2Zmc2V0ICUgNjApLCAyKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcmV0dXJuIHRpbWV6b25lO1xufTtcbi8qKlxuICogR2V0IHRoZSBXZWVrIE51bWJlciBpbiB0aGUgcGFzc2VkIGRhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBEYXRlIG9iamVjdFxuICogQHBhcmFtIHtOdW1iZXJ9IHdlZWtTdGFydCBBIG51bWJlciB3aGljaCBkZWZpbmVzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgID0gc3VuZGF5ICwgMSA9IG1vbmRheSAsIC4uLilcbiAqXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgd2VlayBudW1iZXJcbiAqL1xuXG52YXIgZ2V0V2Vla051bWJlciA9IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF0ZSwgd2Vla1N0YXJ0KSB7XG4gIHZhciBkID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7XG4gIHZhciBkYXlOdW0gPSBkLmdldFVUQ0RheSgpIC0gKHdlZWtTdGFydCAtIDEpIHx8IDc7XG4gIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSArIDQgLSBkYXlOdW0pO1xuICB2YXIgeWVhclN0YXJ0ID0gbmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSk7XG4gIHJldHVybiBNYXRoLmNlaWwoKChkIC0geWVhclN0YXJ0KSAvIDg2NDAwMDAwICsgMSkgLyA3KTtcbn07XG4vKipcbiAqIERhdGVNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogZGF0ZXMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIERhdGVNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGF0ZU1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVNYXNrKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhEYXRlTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayBkYXRlXG4gICAgICpcbiAgICAgKiBNYXNrIHRoZSBwYXNzZWQgZGF0ZSB3aXRoIHRoZSBwYXNzZWQgbWFza1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIG1hc2sgYXMgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2xvY2FsZT1Ccm93c2VyJ3MgbG9jYWxlXSB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGV4KGVuLVVTKS4gZGVmYXVsdCBpcyB0byB0aGUgc3lzdGVtIGxhbmd1YWdlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFt0aW1lem9uZT1TeXN0ZW0gdGltZXpvbmVdIHRoZSB0aW1lIHpvbmUgZGVzY3JpcHRvciAoZS5nLiBBbWVyaWNhL0xvc19BbmdlbGVzKS4gZGVmYXVsdCB0byB0aGUgc3lzdGVtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGEgZGF0ZSBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFza1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXNrKGRhdGUsIF9tYXNrLCBsb2NhbGUsIHRpbWV6b25lKSB7XG4gICAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICAgIGlmICghX21hc2spIHJldHVybiBkYXRlO1xuICAgICAgdGltZXpvbmUgPSB0aW1lem9uZSB8fCBnZXRUaW1lem9uZU9yT2Zmc2V0KCk7XG4gICAgICBsb2NhbGUgPSBsb2NhbGUgfHwgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnOyAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbXBsZXRlIGlzbyBzdHJpbmdcblxuICAgICAgZGF0ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IGZpeFNob3J0SVNPKGRhdGUpO1xuICAgICAgdmFyIGRhdGVPYmplY3QgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX3R6X3V0Y1RvWm9uZWRUaW1lX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRhdGUsIHRpbWV6b25lKTtcblxuICAgICAgdmFyIHRyYW5zbGF0aW9uID0gRGF0ZU1hc2suX2J1aWxkVHJhbnNsYXRpb24oe1xuICAgICAgICB5ZWFyOiBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCksXG4gICAgICAgIG1vbnRoOiBkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBtb250aFNob3J0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgbW9udGhMb25nOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBkYXk6IGRhdGVPYmplY3QuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXlTaG9ydDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgZGF5TG9uZzogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBtaW51dGVzOiBkYXRlT2JqZWN0LmdldE1pbnV0ZXMoKSxcbiAgICAgICAgc2Vjb25kczogZGF0ZU9iamVjdC5nZXRTZWNvbmRzKCksXG5cbiAgICAgICAgZ2V0IGhvdXJzMjQoKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVPYmplY3QuZ2V0SG91cnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQgaG91cnMxMigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ob3VyczI0ICUgMTIgfHwgMTI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF5T2ZZZWFyOiBnZXREYXlPZlllYXIoZGF0ZU9iamVjdCksXG4gICAgICAgIGRheU9mV2VlazogZGF0ZU9iamVjdC5nZXREYXkoKSArIDEsXG4gICAgICAgIC8vIFN1bmRheSA9IDEgaW4gQkJqIGJ1dCBTdW5kYXkgPSAwIGluIEpTXG4gICAgICAgIHdlZWtOdW1iZXI6IGdldFdlZWtOdW1iZXIoZGF0ZU9iamVjdCwgZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSksXG4gICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICB0aW1lem9uZTogdGltZXpvbmVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gX21hc2s7XG5cbiAgICAgIGZvciAodmFyIGsgaW4gdHJhbnNsYXRpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cCgnKCUnICsgayArICcpJywgJ2cnKSwgdHJhbnNsYXRpb25ba10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBtYXAgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBwb3NzaWJsZSBmb3JtcyBvZiBtYXNrc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGVEZXRhaWxzIGRhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZm9ybXMgbWFza3NcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIl9idWlsZFRyYW5zbGF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9idWlsZFRyYW5zbGF0aW9uKGRhdGVEZXRhaWxzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyB5ZWFyXG4gICAgICAgIFl6OiBkYXRlRGV0YWlscy55ZWFyLnRvU3RyaW5nKCkuc3Vic3RyKC0yKSxcbiAgICAgICAgWXM6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFlsOiBkYXRlRGV0YWlscy55ZWFyLFxuICAgICAgICBZcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy55ZWFyKSxcbiAgICAgICAgWWQ6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFk6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIC8vIG1vbnRoXG4gICAgICAgIE16OiBTdHJpbmcoZGF0ZURldGFpbHMubW9udGgpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubW9udGggOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgTXM6IGRhdGVEZXRhaWxzLm1vbnRoU2hvcnQsXG4gICAgICAgIE1sOiBkYXRlRGV0YWlscy5tb250aExvbmcsXG4gICAgICAgIE1wOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLm1vbnRoKSxcbiAgICAgICAgTWQ6IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICBNOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgLy8gZGF5XG4gICAgICAgIER6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5KS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheSA6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRHM6IGRhdGVEZXRhaWxzLmRheVNob3J0LFxuICAgICAgICBEbDogZGF0ZURldGFpbHMuZGF5TG9uZyxcbiAgICAgICAgRHA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5KSxcbiAgICAgICAgRGQ6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICAvLyBob3VyIDI0XG4gICAgICAgIEh6OiBTdHJpbmcoZGF0ZURldGFpbHMuaG91cnMyNCkubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5ob3VyczI0IDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSHM6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEhsOiBkYXRlRGV0YWlscy5ob3VyczI0LFxuICAgICAgICBIcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5ob3VyczI0KSxcbiAgICAgICAgSGQ6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEg6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIC8vIGhvdXIgMTJcbiAgICAgICAgaHo6IFN0cmluZyhkYXRlRGV0YWlscy5ob3VyczEyKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmhvdXJzMTIgOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBoczogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaGw6IGRhdGVEZXRhaWxzLmhvdXJzMTIsXG4gICAgICAgIGhwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLmhvdXJzMTIpLFxuICAgICAgICBoZDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgLy8gbWludXRlc1xuICAgICAgICBtejogU3RyaW5nKGRhdGVEZXRhaWxzLm1pbnV0ZXMpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubWludXRlcyA6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG1zOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtbDogZGF0ZURldGFpbHMubWludXRlcyxcbiAgICAgICAgbXA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMubWludXRlcyksXG4gICAgICAgIG1kOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgIHN6OiBTdHJpbmcoZGF0ZURldGFpbHMuc2Vjb25kcykubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5zZWNvbmRzIDogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgc3M6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHNsOiBkYXRlRGV0YWlscy5zZWNvbmRzLFxuICAgICAgICBzcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5zZWNvbmRzKSxcbiAgICAgICAgc2Q6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHM6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIC8vIEFNICwgUE1cbiAgICAgICAgUFA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdQTScgOiAnUE0nLFxuICAgICAgICBQOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAnUE0nIDogJ0FNJyxcbiAgICAgICAgcHA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdwbScgOiAnYW0nLFxuICAgICAgICBwOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAncG0nIDogJ2FtJyxcbiAgICAgICAgLy8gRGF5IG9mIFllYXJcbiAgICAgICAgSno6IFN0cmluZyhkYXRlRGV0YWlscy5kYXlPZlllYXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5T2ZZZWFyIDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKczogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKbDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKZDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIC8vIERheSBPZiBXZWVrXG4gICAgICAgIFd6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheU9mV2VlayA6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3M6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV2w6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKSxcbiAgICAgICAgV2Q6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgVzogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICAvLyB3ZWVrIG51bWJlclxuICAgICAgICB3ejogU3RyaW5nKGRhdGVEZXRhaWxzLndlZWtOdW1iZXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMud2Vla051bWJlciA6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHdzOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3bDogZGF0ZURldGFpbHMud2Vla051bWJlcixcbiAgICAgICAgd3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMud2Vla051bWJlciksXG4gICAgICAgIHdkOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3OiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEYXRlTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiY1wiXSA9IChEYXRlTWFzayk7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdXRjVG9ab25lZFRpbWU7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5cblxuXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodGltZVpvbmUsIGRhdGUpXG5cbiAgcmV0dXJuIG9mZnNldE1pbGxpc2Vjb25kc1xuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKHV0Y0RhdGUsIG9mZnNldE1pbGxpc2Vjb25kcylcbiAgICA6IHV0Y0RhdGVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHR6VG9rZW5pemVEYXRlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzXSB0b2tlbnMgb2YgdGhlIHByb3ZpZGVkXG4gKiBgZGF0ZWAgYXMgaXQgd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgYHRpbWVab25lYC5cbiAqL1xuZnVuY3Rpb24gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZVpvbmUpIHtcbiAgdmFyIGR0ZiA9IGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKVxuICByZXR1cm4gZHRmLmZvcm1hdFRvUGFydHMgPyBwYXJ0c09mZnNldChkdGYsIGRhdGUpIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKVxufVxuXG52YXIgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBob3VyOiAzLFxuICBtaW51dGU6IDQsXG4gIHNlY29uZDogNVxufVxuXG5mdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gIHZhciBmaWxsZWQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSB0eXBlVG9Qb3NbZm9ybWF0dGVkW2ldLnR5cGVdXG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQoZm9ybWF0dGVkW2ldLnZhbHVlLCAxMClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZFxufVxuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCAnJylcbiAgdmFyIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpXG4gIC8vIHZhciBbLCBmTW9udGgsIGZEYXksIGZZZWFyLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF0gPSBwYXJzZWRcbiAgLy8gcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF1cbiAgcmV0dXJuIFtwYXJzZWRbM10sIHBhcnNlZFsxXSwgcGFyc2VkWzJdLCBwYXJzZWRbNF0sIHBhcnNlZFs1XSwgcGFyc2VkWzZdXVxufVxuXG4vLyBHZXQgYSBjYWNoZWQgSW50bC5EYXRlVGltZUZvcm1hdCBpbnN0YW5jZSBmb3IgdGhlIElBTkEgYHRpbWVab25lYC4gVGhpcyBjYW4gYmUgdXNlZFxuLy8gdG8gZ2V0IGRldGVybWluaXN0aWMgbG9jYWwgZGF0ZS90aW1lIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGBlbi1VU2AgbG9jYWxlIHdoaWNoXG4vLyBjYW4gYmUgdXNlZCB0byBleHRyYWN0IGxvY2FsIHRpbWUgcGFydHMgYXMgbmVjZXNzYXJ5LlxudmFyIGR0ZkNhY2hlID0ge31cbmZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKSB7XG4gIGlmICghZHRmQ2FjaGVbdGltZVpvbmVdKSB7XG4gICAgLy8gTmV3IGJyb3dzZXJzIHVzZSBgaG91ckN5Y2xlYCwgSUUgYW5kIENocm9tZSA8NzMgZG9lcyBub3Qgc3VwcG9ydCBpdCBhbmQgdXNlcyBgaG91cjEyYFxuICAgIHZhciB0ZXN0RGF0ZUZvcm1hdHRlZCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICB0aW1lWm9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnLFxuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgIH0pLmZvcm1hdChuZXcgRGF0ZSgnMjAxNC0wNi0yNVQwNDowMDowMC4xMjNaJykpXG4gICAgdmFyIGhvdXJDeWNsZVN1cHBvcnRlZCA9XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJzA2LzI1LzIwMTQsIDAwOjAwOjAwJyB8fFxuICAgICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICfigI4wNuKAji/igI4yNeKAji/igI4yMDE04oCOIOKAjjAw4oCOOuKAjjAw4oCOOuKAjjAwJ1xuXG4gICAgZHRmQ2FjaGVbdGltZVpvbmVdID0gaG91ckN5Y2xlU3VwcG9ydGVkXG4gICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXJDeWNsZTogJ2gyMycsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICB9XG4gIHJldHVybiBkdGZDYWNoZVt0aW1lWm9uZV1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBzdWJNaWxsaXNlY29uZHM7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYWRkTWlsbGlzZWNvbmRzX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxuXG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hZGRNaWxsaXNlY29uZHNfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gYWRkTWlsbGlzZWNvbmRzO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cblxuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cblxuZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgdGltZXN0YW1wID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9EYXRlX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0b0RhdGU7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2ZqdWxlXCIpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHRvRGF0ZTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5cblxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG52YXIgREVGQVVMVF9BRERJVElPTkFMX0RJR0lUUyA9IDJcblxudmFyIHBhdHRlcm5zID0ge1xuICBkYXRlVGltZURlbGltZXRlcjogL1tUIF0vLFxuICBwbGFpblRpbWU6IC86LyxcbiAgdGltZVpvbmVEZWxpbWV0ZXI6IC9bWiBdL2ksXG5cbiAgLy8geWVhciB0b2tlbnNcbiAgWVk6IC9eKFxcZHsyfSkkLyxcbiAgWVlZOiBbXG4gICAgL14oWystXVxcZHsyfSkkLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7M30pJC8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7NH0pJC8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuICBZWVlZOiAvXihcXGR7NH0pLyxcbiAgWVlZWVk6IFtcbiAgICAvXihbKy1dXFxkezR9KS8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezV9KS8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7Nn0pLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG5cbiAgLy8gZGF0ZSB0b2tlbnNcbiAgTU06IC9eLShcXGR7Mn0pJC8sXG4gIERERDogL14tPyhcXGR7M30pJC8sXG4gIE1NREQ6IC9eLT8oXFxkezJ9KS0/KFxcZHsyfSkkLyxcbiAgV3d3OiAvXi0/VyhcXGR7Mn0pJC8sXG4gIFd3d0Q6IC9eLT9XKFxcZHsyfSktPyhcXGR7MX0pJC8sXG5cbiAgSEg6IC9eKFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NOiAvXihcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU1TUzogL14oXFxkezJ9KTo/KFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcblxuICAvLyB0aW1lem9uZSB0b2tlbnMgKHRvIGlkZW50aWZ5IHRoZSBwcmVzZW5jZSBvZiBhIHR6KVxuICB0aW1lem9uZTogLyhbWistXS4qfCBVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgYW4gYXJndW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBpdC5cbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvciB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqIEFsbCAqZGF0ZS1mbnMqIGZ1bmN0aW9ucyB3aWxsIHRocm93IGBSYW5nZUVycm9yYCBpZiBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBpcyBub3QgMCwgMSwgMiBvciB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T3B0aW9uc1dpdGhUWn0gW29wdGlvbnNdIC0gdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVpvbmU9JyddIC0gdXNlZCB0byBzcGVjaWZ5IHRoZSBJQU5BIHRpbWUgem9uZSBvZmZzZXQgb2YgYSBkYXRlIFN0cmluZy5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcrMDIwMTQxMDEnLCB7YWRkaXRpb25hbERpZ2l0czogMX0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5mdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGRpcnR5T3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50J1xuICAgIClcbiAgfVxuXG4gIGlmIChhcmd1bWVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fVxuXG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID1cbiAgICBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMgPT0gbnVsbFxuICAgICAgPyBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbGliX3R6UGFyc2VUaW1lem9uZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSlcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKSlcbiAgICAgIG9mZnNldCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgdmFyIGRhdGVTdHJpbmdzID0ge31cbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltZXRlcilcbiAgdmFyIHRpbWVTdHJpbmdcblxuICBpZiAocGF0dGVybnMucGxhaW5UaW1lLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGxcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF1cbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF1cbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV1cbiAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IGFycmF5WzJdXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyKVswXVxuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICBpZiAodGltZVN0cmluZykge1xuICAgIHZhciB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZylcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nLnJlcGxhY2UodG9rZW5bMV0sICcnKVxuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5nc1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcGF0dGVybllZWSA9IHBhdHRlcm5zLllZWVthZGRpdGlvbmFsRGlnaXRzXVxuICB2YXIgcGF0dGVybllZWVlZID0gcGF0dGVybnMuWVlZWVlbYWRkaXRpb25hbERpZ2l0c11cblxuICB2YXIgdG9rZW5cblxuICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWVlZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIHllYXJTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyU3RyaW5nLCAxMCksXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSh5ZWFyU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBZWSBvciDCsVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoY2VudHVyeVN0cmluZywgMTApICogMTAwLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoY2VudHVyeVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHRva2VuXG4gIHZhciBkYXRlXG4gIHZhciBtb250aFxuICB2YXIgd2Vla1xuXG4gIC8vIFlZWVlcbiAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLU1NXG4gIHRva2VuID0gcGF0dGVybnMuTU0uZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aClcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1EREQgb3IgWVlZWURERFxuICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIHZhciBkYXlPZlllYXIgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyB5eXl5LU1NLWRkIG9yIFlZWVlNTUREXG4gIHRva2VuID0gcGF0dGVybnMuTU1ERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5ID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLVd3dyBvciBZWVlZV3d3XG4gIHRva2VuID0gcGF0dGVybnMuV3d3LmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaylcbiAgfVxuXG4gIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3dELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheU9mV2VlayA9IHBhcnNlSW50KHRva2VuWzJdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgZGF0ZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgdG9rZW5cbiAgdmFyIGhvdXJzXG4gIHZhciBtaW51dGVzXG5cbiAgLy8gaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISC5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICB9XG5cbiAgLy8gaGg6bW0gb3IgaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgKVxuICB9XG5cbiAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTVNTLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgK1xuICAgICAgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgK1xuICAgICAgc2Vjb25kcyAqIDEwMDBcbiAgICApXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgd2VlayA9IHdlZWsgfHwgMFxuICBkYXkgPSBkYXkgfHwgMFxuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApXG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpXG4gIHZhciBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDdcbiAgdmFyIGRpZmYgPSB3ZWVrICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXlcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZilcbiAgcmV0dXJuIGRhdGVcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICBpZiAoZGF5T2ZZZWFyIDwgMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgaWYgKGlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY2KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCFpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2NSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgaWYgKHdlZWsgPCAwIHx8IHdlZWsgPiA1Mikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRheSAhPSBudWxsICYmIChkYXkgPCAwIHx8IGRheSA+IDYpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzICE9IG51bGwgJiYgKGhvdXJzIDwgMCB8fCBob3VycyA+PSAyNSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoc2Vjb25kcyAhPSBudWxsICYmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSkge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRpcnR5RGF0ZS5nZXRUaW1lKCkpO1xuICB2YXIgYmFzZVRpbWV6b25lT2Zmc2V0ID0gTWF0aC5jZWlsKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGRhdGUuc2V0U2Vjb25kcygwLCAwKTtcbiAgdmFyIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lKCkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGdldFdlZWtTdGFydEJ5UmVnaW9uICovXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlJDE7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fcmVnaW9uRGF5TWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxuXG5cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlSZWdpb24kMShyZWdpb25Db2RlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYlwiIC8qIGdldFdlZWtTdGFydEJ5UmVnaW9uICovXSkocmVnaW9uQ29kZSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlJDEobG9jYWxlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYVwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSkobG9jYWxlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlOyB9KTtcbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5UmVnaW9uKHJlZ2lvbkNvZGUsIHJlZ2lvbkRheU1hcCkge1xuICAgIHZhciBjb2RlID0gcmVnaW9uRGF5TWFwW3R5cGVvZiByZWdpb25Db2RlID09PSAnc3RyaW5nJyA/IHJlZ2lvbkNvZGUudG9VcHBlckNhc2UoKSA6IHJlZ2lvbkNvZGVdO1xuICAgIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ251bWJlcicgPyBjb2RlIDogMTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlLCBsYW5nUmVnaW9uTWFwLCByZWdpb25EYXlNYXApIHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgIHZhciBkYXRhID0gbG9jYWxlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1stX10vKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gZGF0YVswXTtcbiAgICAgICAgdmFyIGNvdW50cnk7XG4gICAgICAgIGlmIChkYXRhWzFdICYmIGRhdGFbMV0ubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICBsYW5ndWFnZSArPSBcIl9cIiArIChkYXRhWzFdKTtcbiAgICAgICAgICAgIGNvdW50cnkgPSBkYXRhWzJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRyeSA9IGRhdGFbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3VudHJ5KSB7XG4gICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ1JlZ2lvbk1hcFtsYW5ndWFnZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbihjb3VudHJ5Lm1hdGNoKC9eXFxkKyQvKSA/IE51bWJlcihjb3VudHJ5KSA6IGNvdW50cnksIHJlZ2lvbkRheU1hcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDE7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbGFuZ1JlZ2lvbk1hcCA9IHtcbiAgICBlbjogJ1VTJyxcbiAgICB6aDogJ0NOJyxcbiAgICB6aF9oYW5zOiAnQ04nLFxuICAgIGhhbnM6ICdDTicsXG4gICAgd3V1OiAnQ04nLFxuICAgIGhzbjogJ0NOJyxcbiAgICBoYWs6ICdDTicsXG4gICAgbmFuOiAnQ04nLFxuICAgIGdhbjogJ0NOJyxcbiAgICBoaTogJ0lOJyxcbiAgICB0ZTogJ0lOJyxcbiAgICBtcjogJ0lOJyxcbiAgICB0YTogJ0lOJyxcbiAgICBndTogJ0lOJyxcbiAgICBrbjogJ0lOJyxcbiAgICBvcjogJ0lOJyxcbiAgICBtbDogJ0lOJyxcbiAgICBwYV9ndXJ1OiAnSU4nLFxuICAgIGJobzogJ0lOJyxcbiAgICBhd2E6ICdJTicsXG4gICAgYXM6ICdJTicsXG4gICAgbXdyOiAnSU4nLFxuICAgIG1haTogJ0lOJyxcbiAgICBtYWc6ICdJTicsXG4gICAgYmdjOiAnSU4nLFxuICAgIGhuZTogJ0lOJyxcbiAgICBkY2M6ICdJTicsXG4gICAgZHo6ICdCVCcsXG4gICAgdG46ICdCVycsXG4gICAgYW06ICdFVCcsXG4gICAgb206ICdFVCcsXG4gICAgcXVjOiAnR1QnLFxuICAgIGlkOiAnSUQnLFxuICAgIGp2OiAnSUQnLFxuICAgIHN1OiAnSUQnLFxuICAgIG1hZDogJ0lEJyxcbiAgICBtc19hcmFiOiAnSUQnLFxuICAgIGdhOiAnSUUnLFxuICAgIGhlOiAnSUwnLFxuICAgIGphbTogJ0pNJyxcbiAgICBqYTogJ0pQJyxcbiAgICBrbTogJ0tIJyxcbiAgICBrbzogJ0tSJyxcbiAgICBsbzogJ0xBJyxcbiAgICBtaDogJ01IJyxcbiAgICBteTogJ01NJyxcbiAgICBtdDogJ01UJyxcbiAgICBuZTogJ05QJyxcbiAgICBmaWw6ICdQSCcsXG4gICAgY2ViOiAnUEgnLFxuICAgIGlsbzogJ1BIJyxcbiAgICB1cjogJ1BLJyxcbiAgICBwYTogJ1BLJyxcbiAgICBwYV9hcmFiOiAnUEsnLFxuICAgIGFyYWI6ICdQSycsXG4gICAgbGFoOiAnUEsnLFxuICAgIHBzOiAnUEsnLFxuICAgIHNkOiAnUEsnLFxuICAgIHNkX2FyYWI6ICdQSycsXG4gICAgc2tyOiAnUEsnLFxuICAgIGduOiAnUFknLFxuICAgIHRoOiAnVEgnLFxuICAgIHR0czogJ1RIJyxcbiAgICBhZWI6ICdUTicsXG4gICAgemhfaGFudDogJ1RXJyxcbiAgICBoYW50OiAnVFcnLFxuICAgIHNtOiAnV1MnLFxuICAgIHp1OiAnWkEnLFxuICAgIHNuOiAnWlcnLFxuICAgIGFycTogJ0RaJyxcbiAgICBhcjogJ0VHJyxcbiAgICBhcno6ICdFRycsXG4gICAgZmE6ICdJUicsXG4gICAgYXpfYXJhYjogJ0lSJyxcbiAgICBhcnk6ICdNQScsXG4gICAgYm46ICdCRCcsXG4gICAgcmt0OiAnQkQnLFxuICAgIGR2OiAnTVYnXG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGxhbmdSZWdpb25NYXApO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZ1JlZ2lvbk1hcC5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIHJlZ2lvbkRheU1hcCA9IHtcbiAgICBBRzogMCxcbiAgICBBVEc6IDAsXG4gICAgMjg6IDAsXG4gICAgQVI6IDAsXG4gICAgQVJHOiAwLFxuICAgIDMyOiAwLFxuICAgIEFTOiAwLFxuICAgIEFTTTogMCxcbiAgICAxNjogMCxcbiAgICBBVTogMCxcbiAgICBBVVM6IDAsXG4gICAgMzY6IDAsXG4gICAgQlI6IDAsXG4gICAgQlJBOiAwLFxuICAgIDc2OiAwLFxuICAgIEJTOiAwLFxuICAgIEJIUzogMCxcbiAgICA0NDogMCxcbiAgICBCVDogMCxcbiAgICBCVE46IDAsXG4gICAgNjQ6IDAsXG4gICAgQlc6IDAsXG4gICAgQldBOiAwLFxuICAgIDcyOiAwLFxuICAgIEJaOiAwLFxuICAgIEJMWjogMCxcbiAgICA4NDogMCxcbiAgICBDQTogMCxcbiAgICBDQU46IDAsXG4gICAgMTI0OiAwLFxuICAgIENOOiAwLFxuICAgIENITjogMCxcbiAgICAxNTY6IDAsXG4gICAgQ086IDAsXG4gICAgQ09MOiAwLFxuICAgIDE3MDogMCxcbiAgICBETTogMCxcbiAgICBETUE6IDAsXG4gICAgMjEyOiAwLFxuICAgIERPOiAwLFxuICAgIERPTTogMCxcbiAgICAyMTQ6IDAsXG4gICAgRVQ6IDAsXG4gICAgRVRIOiAwLFxuICAgIDIzMTogMCxcbiAgICBHVDogMCxcbiAgICBHVE06IDAsXG4gICAgMzIwOiAwLFxuICAgIEdVOiAwLFxuICAgIEdVTTogMCxcbiAgICAzMTY6IDAsXG4gICAgSEs6IDAsXG4gICAgSEtHOiAwLFxuICAgIDM0NDogMCxcbiAgICBITjogMCxcbiAgICBITkQ6IDAsXG4gICAgMzQwOiAwLFxuICAgIElEOiAwLFxuICAgIElETjogMCxcbiAgICAzNjA6IDAsXG4gICAgSUU6IDAsXG4gICAgSVJMOiAwLFxuICAgIDM3MjogMCxcbiAgICBJTDogMCxcbiAgICBJU1I6IDAsXG4gICAgMzc2OiAwLFxuICAgIElOOiAwLFxuICAgIElORDogMCxcbiAgICAzNTY6IDAsXG4gICAgSk06IDAsXG4gICAgSkFNOiAwLFxuICAgIDM4ODogMCxcbiAgICBKUDogMCxcbiAgICBKUE46IDAsXG4gICAgMzkyOiAwLFxuICAgIEtFOiAwLFxuICAgIEtFTjogMCxcbiAgICA0MDQ6IDAsXG4gICAgS0g6IDAsXG4gICAgS0hNOiAwLFxuICAgIDExNjogMCxcbiAgICBLUjogMCxcbiAgICBLT1I6IDAsXG4gICAgNDEwOiAwLFxuICAgIExBOiAwLFxuICAgIExBMDogMCxcbiAgICA0MTg6IDAsXG4gICAgTUg6IDAsXG4gICAgTUhMOiAwLFxuICAgIDU4NDogMCxcbiAgICBNTTogMCxcbiAgICBNTVI6IDAsXG4gICAgMTA0OiAwLFxuICAgIE1POiAwLFxuICAgIE1BQzogMCxcbiAgICA0NDY6IDAsXG4gICAgTVQ6IDAsXG4gICAgTUxUOiAwLFxuICAgIDQ3MDogMCxcbiAgICBNWDogMCxcbiAgICBNRVg6IDAsXG4gICAgNDg0OiAwLFxuICAgIE1aOiAwLFxuICAgIE1PWjogMCxcbiAgICA1MDg6IDAsXG4gICAgTkk6IDAsXG4gICAgTklDOiAwLFxuICAgIDU1ODogMCxcbiAgICBOUDogMCxcbiAgICBOUEw6IDAsXG4gICAgNTI0OiAwLFxuICAgIE5aOiAwLFxuICAgIE5aTDogMCxcbiAgICA1NTQ6IDAsXG4gICAgUEE6IDAsXG4gICAgUEFOOiAwLFxuICAgIDU5MTogMCxcbiAgICBQRTogMCxcbiAgICBQRVI6IDAsXG4gICAgNjA0OiAwLFxuICAgIFBIOiAwLFxuICAgIFBITDogMCxcbiAgICA2MDg6IDAsXG4gICAgUEs6IDAsXG4gICAgUEFLOiAwLFxuICAgIDU4NjogMCxcbiAgICBQUjogMCxcbiAgICBQUkk6IDAsXG4gICAgNjMwOiAwLFxuICAgIFBZOiAwLFxuICAgIFBSWTogMCxcbiAgICA2MDA6IDAsXG4gICAgU0E6IDAsXG4gICAgU0FVOiAwLFxuICAgIDY4MjogMCxcbiAgICBTRzogMCxcbiAgICBTR1A6IDAsXG4gICAgNzAyOiAwLFxuICAgIFNWOiAwLFxuICAgIFNMVjogMCxcbiAgICAyMjI6IDAsXG4gICAgVEg6IDAsXG4gICAgVEhBOiAwLFxuICAgIDc2NDogMCxcbiAgICBUTjogMCxcbiAgICBUVU46IDAsXG4gICAgNzg4OiAwLFxuICAgIFRUOiAwLFxuICAgIFRUTzogMCxcbiAgICA3ODA6IDAsXG4gICAgVFc6IDAsXG4gICAgVFdOOiAwLFxuICAgIDE1ODogMCxcbiAgICBVTTogMCxcbiAgICBVTUk6IDAsXG4gICAgNTgxOiAwLFxuICAgIFVTOiAwLFxuICAgIFVTQTogMCxcbiAgICA4NDA6IDAsXG4gICAgVkU6IDAsXG4gICAgVkVOOiAwLFxuICAgIDg2MjogMCxcbiAgICBWSTogMCxcbiAgICBWSVI6IDAsXG4gICAgODUwOiAwLFxuICAgIFdTOiAwLFxuICAgIFdTTTogMCxcbiAgICA4ODI6IDAsXG4gICAgWUU6IDAsXG4gICAgWUVNOiAwLFxuICAgIDg4NzogMCxcbiAgICBaQTogMCxcbiAgICBaQUY6IDAsXG4gICAgNzEwOiAwLFxuICAgIFpXOiAwLFxuICAgIFpXRTogMCxcbiAgICA3MTY6IDAsXG4gICAgQUU6IDYsXG4gICAgQVJFOiA2LFxuICAgIDc4NDogNixcbiAgICBBRjogNixcbiAgICBBRkc6IDYsXG4gICAgNDogNixcbiAgICBCSDogNixcbiAgICBCSFI6IDYsXG4gICAgNDg6IDYsXG4gICAgREo6IDYsXG4gICAgREpJOiA2LFxuICAgIDI2MjogNixcbiAgICBEWjogNixcbiAgICBEWkE6IDYsXG4gICAgMTI6IDYsXG4gICAgRUc6IDYsXG4gICAgRUdZOiA2LFxuICAgIDgxODogNixcbiAgICBJUTogNixcbiAgICBJUlE6IDYsXG4gICAgMzY4OiA2LFxuICAgIElSOiA2LFxuICAgIElSTjogNixcbiAgICAzNjQ6IDYsXG4gICAgSk86IDYsXG4gICAgSk9SOiA2LFxuICAgIDQwMDogNixcbiAgICBLVzogNixcbiAgICBLV1Q6IDYsXG4gICAgNDE0OiA2LFxuICAgIExZOiA2LFxuICAgIExCWTogNixcbiAgICA0MzQ6IDYsXG4gICAgTUE6IDYsXG4gICAgTUFSOiA2LFxuICAgIDUwNDogNixcbiAgICBPTTogNixcbiAgICBPTU46IDYsXG4gICAgNTEyOiA2LFxuICAgIFFBOiA2LFxuICAgIFFBVDogNixcbiAgICA2MzQ6IDYsXG4gICAgU0Q6IDYsXG4gICAgU0ROOiA2LFxuICAgIDcyOTogNixcbiAgICBTWTogNixcbiAgICBTWVI6IDYsXG4gICAgNzYwOiA2LFxuICAgIEJEOiA1LFxuICAgIEJHRDogNSxcbiAgICA1MDogNSxcbiAgICBNVjogNSxcbiAgICBNRFY6IDUsXG4gICAgNDYyOiA1XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHJlZ2lvbkRheU1hcCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpb25EYXlNYXAuanMubWFwXG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG52YXIgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvO1xudmFyIGlzV2hpdGVzcGFjZVJlZ2V4ID0gL1xccy87XG52YXIgcHVuY3R1YXRpb25MaXN0ID0gJyFcIiMkJSZcXCcoKSorLC0uLzo7PD0+P0BbXV5fYHt8fX4nO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cblxudmFyIGlzTG93ZXJDYXNlID0gZnVuY3Rpb24gaXNMb3dlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b1VwcGVyQ2FzZSgpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiB1cHBlciBjYXNlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICovXG5cblxudmFyIGlzVXBwZXJDYXNlID0gZnVuY3Rpb24gaXNVcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIHBhc3NPclRocm93RXJyb3IgPSBmdW5jdGlvbiBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cikge1xuICBpZiAoIWxvb3NlKSB7XG4gICAgdmFyIF9jaGFyID0gc3RyLmNoYXJBdChpKTtcblxuICAgIHZhciBwb3MgPSBpICsgMTtcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IFwiU3RyaW5nTWFza0Vycm9yOiBlcnJvciBhcHBseWluZyBtYXNrIGF0IHBvc2l0aW9uIFxcXCJcIi5jb25jYXQocG9zLCBcIlxcXCIgLCBjaGFyIFxcXCJcIikuY29uY2F0KF9jaGFyLCBcIlxcXCJcIiksXG4gICAgICBwb3M6IHBvcyxcbiAgICAgIFwiY2hhclwiOiBfY2hhclxuICAgIH07XG4gIH0gZWxzZSByZXRbaV0gPSAnICc7XG59O1xuLyoqXG4gKiBOdW1iZXJNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogbnVtYmVycyBtYXNraW5nXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG5cbnZhciBTdHJpbmdNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RyaW5nTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaW5nTWFzayk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3RyaW5nTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICogXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2soc3RyLCBfbWFzaykge1xuICAgICAgdmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgICBfbWFzayA9IFN0cmluZyhfbWFzayk7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcbiAgICAgIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RyTGVuID4gbWFza0xlbikge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBzdHI7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgIGVsc2UgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tJc1Rvb1Nob3J0RXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrSXNUb29TaG9ydEVycm9yOiBNYXNrIGlzIHNob3J0ZXIgdGhhbiB0aGUgcGFzc2VkIHN0cmluZ1wiXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJldCA9IG5ldyBBcnJheShtYXNrTGVuKTtcbiAgICAgIHZhciBwb3MgPSAwOyAvLyB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJcblxuICAgICAgdmFyIG1hc2tCeXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICAgIG1hc2tCeXRlID0gX21hc2suY2hhckF0KGkpO1xuXG4gICAgICAgIHN3aXRjaCAobWFza0J5dGUpIHtcbiAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGFueSBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHJldFtpXSA9IHBvcyA8IHN0ckxlbiA/IHN0ci5jaGFyQXQocG9zKSA6ICcgJztcbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlcjsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGUgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlKSkgcmV0W2ldID0gX2J5dGU7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGUpKSByZXRbaV0gPSBfYnl0ZS50b1VwcGVyQ2FzZSgpO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTIgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlMikgfHwgaXNMb3dlckNhc2UoX2J5dGUyKSkgcmV0W2ldID0gX2J5dGUyO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlMyA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlMykpIHJldFtpXSA9IF9ieXRlMztlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU0ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTQpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTQpKSByZXRbaV0gPSBfYnl0ZTQ7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGU0KSkgcmV0W2ldID0gX2J5dGU0LnRvVXBwZXJDYXNlKCk7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneic6XG4gICAgICAgICAgICAvLyBtYXRjaCBsZXR0ZXIgb3IgZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlNSA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGU1KSB8fCBpc0xvd2VyQ2FzZShfYnl0ZTUpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTUpKSByZXRbaV0gPSBfYnl0ZTU7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdVJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciAoZm9yY2UgdXBwZXIgY2FzZSksIGRpZ2l0LCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uLlxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU2ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShfYnl0ZTYpKSByZXRbaV0gPSBfYnl0ZTYudG9VcHBlckNhc2UoKTtlbHNlIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTYpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTYpIHx8IGlzV2hpdGVzcGFjZVJlZ2V4LnRlc3QoX2J5dGU2KSB8fCBwdW5jdHVhdGlvbkxpc3QuaW5kZXhPZihfYnl0ZTYpID4gLTEpIHJldFtpXSA9IF9ieXRlNjtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0W2ldID0gbWFza0J5dGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgIGlmICghbG9vc2UpIHtcbiAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3RyaW5nTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChTdHJpbmdNYXNrKTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVHlwZXNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG5cbi8qKlxuICogVHlwZXNcbiAqXG4gKiBCQmogbWFza3MgZmFjdG9yeVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIFR5cGVzID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHlwZXMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGVzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUeXBlcywgbnVsbCwgW3tcbiAgICBrZXk6IFwibnVtYmVyXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIHRoZSBnaXZlbiBudW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbWFzayBhY2NvcmRpbmcgdG8gQkJqIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlY2ltYWxTZXBhcmF0b3I9Ll0gIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VUcmFpbGluZ1plcm9zPWZhbHNlXSAtIEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG51bWJlcihfbnVtYmVyLCBtYXNrKSB7XG4gICAgICB2YXIgZ3JvdXBpbmdTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLic7XG4gICAgICB2YXIgZm9yY2VUcmFpbGluZ1plcm9zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5tYXNrKF9udW1iZXIsIG1hc2ssIGdyb3VwaW5nU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yLCBmb3JjZVRyYWlsaW5nWmVyb3MsIGxvb3NlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFzayBhIGRhdGUgYWNjb3JkaW5nIHRvIGJiaiBtYXNraW5nIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgbWFzayBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbbG9jYWxlPUJyb3dzZXIncyBsb2NhbGVdIHRoZSBsYW5ndWFnZSB0byB1c2UgZXgoZW4tVVMpLiBkZWZhdWx0IGlzIHRvIHRoZSBzeXN0ZW0gbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3RpbWV6b25lPVN5c3RlbSB0aW1lem9uZV0gdGhlIHRpbWUgem9uZSBkZXNjcmlwdG9yIChlLmcuIEFtZXJpY2EvTG9zX0FuZ2VsZXMpLiBkZWZhdWx0IHRvIHRoZSBzeXN0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gbnVtYmVyIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGUoX2RhdGUsIG1hc2ssIGxvY2FsZSwgdGltZXpvbmUpIHtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJjXCIgLyogZGVmYXVsdCAqL10ubWFzayhfZGF0ZSwgbWFzaywgbG9jYWxlLCB0aW1lem9uZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBtYXNrXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJpbmcoc3RyLCBtYXNrKSB7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10ubWFzayhzdHIsIG1hc2ssIGxvb3NlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVHlwZXM7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoVHlwZXMpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJiai1tYXNrcy5qcy5tYXAiLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiSW5wdXRNYXNraW5nXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJhc2lzLWlucHV0LW1hc2tpbmcuanNcIik7IiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCYXNpc1wiXSA9IHJvb3RbXCJCYXNpc1wiXSB8fCB7fSwgcm9vdFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZmQ3ZjYwNDIxOTJlMTIzMmNmNjUiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImNvbW1vbmpzMlwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJhbWRcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwicm9vdFwiOltcIkJCalwiLFwiTWFza3NcIixcIlN0cmluZ01hc2tcIl19XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tICcuL1RleHRJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5pbXBvcnQge1xyXG4gIG1hc2tJZk5vdE1hc2tlZCxcclxuICB1bm1hc2ssXHJcbiAgZmluZENhcmV0UG9zaXRpb24sXHJcbiAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2ssXHJcbn0gZnJvbSAnLi90b29scy5qcydcclxuXHJcbi8qKlxyXG4gKiBUaGUgYFRleHRJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBzdHJpbmcgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNzdHJpbmctbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBzdHJpbmcgbWFzayBAc2VlIFtCQmogU3RyaW5nIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI3N0cmluZy1tYXNrcykgfFxyXG4gKlxyXG4gKiAgPGJyPlxyXG4gKlxyXG4gKiAqKkV4YW1wbGUgOioqXHJcbiAqIGBgYGh0bWxcclxuICogIDxpbnB1dCBjbGFzcz1cImJiai10ZXh0LW1hc2tlZFwiIG5hbWU9XCJ0ZXN0XCIgaWQ9XCJ0ZXN0XCIgdmFsdWU9XCJlZDIzXCIgZGF0YS1tYXNrPVwiQUEtMDBcIj5cclxuICpcclxuICogIDxzY3JpcHQ+XHJcbiAqICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoZSkge1xyXG4gKiAgICAgIG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuVGV4dElucHV0KHtcclxuICogICAgICAgICBvblVwZGF0ZTogKG1hc2tlZFZhbHVlICwgcmF3VmFsdWUgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH0sXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIFRleHRJbnB1dCB7XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0IG5ldyBUZXh0SW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9ucyAtIFRoZSBpbnB1dCBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5lbGVtZW50cz1cIi5iYmotdGV4dC1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotdGV4dC1tYXNrZWQnLFxyXG4gICAgICAgIGRvYzogZG9jdW1lbnQsXHJcbiAgICAgICAgY3NzQ2xhc3NFcnJvcjogJ2Jiai1tYXNrLWVycm9yJyxcclxuICAgICAgICBjc3NDbGFzc1N1Y2Nlc3M6ICdiYmotbWFzay1zdWNjZXNzJyxcclxuICAgICAgICBvblVwZGF0ZTogbnVsbCxcclxuICAgICAgICBvbkludmFsaWQ6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9XHJcbiAgICB0aGlzLl9vbktleXN0cm9rZSA9IHRoaXMuX29uS2V5c3Ryb2tlLmJpbmQodGhpcylcclxuICAgIHRoaXMuX29uRm9jdXMgPSB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcylcclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQgYW5kIHdyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGZvciBtYXNraW5nIGluIGNhc2VcclxuICAgKiB0aGV5IGFyZSBub3Qgd3JhcHBlZCB5ZXRcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG4gICAgbGV0IGlucHV0LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgcGFyZW50Q2xhc3MgPSBpbnB1dC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgICBpZiAoIWlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQkJqTWFza2luZzogSW5wdXQgaGFzIG5vIElELiBXaXRob3V0IGFuIElEIHRoZSBpbnB1dCBjYW5ub3QgYmUgbWFza2VkYCxcclxuICAgICAgICAgICAgaW5wdXRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBpbnB1dCdzIHdyYXAgdHdpY2VcclxuICAgICAgICBjb25zdCBpc1dyYXBwZWQgPVxyXG4gICAgICAgICAgcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3MuaW5kZXhPZigndGV4dElucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCd0ZXh0SW5wdXRNYXNrX193cmFwJykgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3Vud3JhcChwYXJlbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgdGV4dCBtYXNraW5nIGlucHV0IHdyYXBwZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGlucHV0IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzV3JhcHBlZCB3aGVuIHRydWUgdGhlIGlucHV0IGlzIGFscmVhZHkgd3JhcHBlZCBhbmQgd2UgbmVlZCB0byBhZGQgd2hhdCBpc1xyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0hUTUxTcGFuRWxlbWVudH0gdGhlIHdyYXAgZWxlbWVudFxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF93cmFwKGlucHV0LCBpc1dyYXBwZWQpIHtcclxuICAgIGNvbnN0IGlucHV0SWQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgIGlucHV0TmFtZSA9IGlucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpLFxyXG4gICAgICBtYXNrID0gaW5wdXQuZGF0YXNldC5tYXNrIHx8ICcnLFxyXG4gICAgICBvcmlnaW5hbFBhdHRlcm4gPSBpbnB1dC5wYXR0ZXJuLFxyXG4gICAgICBkZWZhdWx0UGF0dGVybiA9IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICBwYXR0ZXJuID0gb3JpZ2luYWxQYXR0ZXJuIHx8IGRlZmF1bHRQYXR0ZXJuXHJcblxyXG4gICAgbGV0IHdyYXAgPSBudWxsLFxyXG4gICAgICB1bm1hc2tJbnB1dCA9IG51bGxcclxuXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICB3cmFwID0gdGhpcy5vcHRpb25zLmRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgdW5tYXNrSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza0lucHV0ID0gd3JhcC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uZmlndXJlIHRoZSBhY3R1YWwgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpbnB1dC52YWx1ZSA9IG1hc2tJZk5vdE1hc2tlZChpbnB1dC52YWx1ZSwgbWFzaylcclxuICAgIGlucHV0LnBhdHRlcm4gPSBwYXR0ZXJuXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX190ZXh0SW5wdXQnKVxyXG4gICAgaW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xyXG4gICAgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgaWYgKG9yaWdpbmFsUGF0dGVybiAmJiBvcmlnaW5hbFBhdHRlcm4gIT09IGRlZmF1bHRQYXR0ZXJuKSB7XHJcbiAgICAgIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIGlmICghKGlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSB8fCBpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGUnKSkpIHtcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uRm9jdXMpXHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgaW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcclxuICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShpbnB1dC52YWx1ZSwgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxyXG4gICAgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpXHJcbiAgICB1bm1hc2tJbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIHVubWFza0lucHV0LnZhbHVlID0gaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICBpZiAoaW5wdXRJZCkgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2lucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChpbnB1dE5hbWUpIHVubWFza0lucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke2lucHV0TmFtZX0tdW5tYXNrZWRgKVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIC8vIGNvbmZpZ3VyZSB0aGUgd3JhcHBlclxyXG4gICAgICB3cmFwLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGV4dElucHV0TWFza19fd3JhcCcpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQodW5tYXNrSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoaW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB0ZXh0SW5wdXQgdGhlIHdyYXBwZXIgc3BhbiBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF91bndyYXAodGV4dElucHV0KSB7XHJcbiAgICB0ZXh0SW5wdXQucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHRleHRJbnB1dC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB0ZXh0SW5wdXQucXVlcnlTZWxlY3RvcignLnRleHRJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGRlbGV0ZSBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIGlmICghaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm4pIHtcclxuICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdwYXR0ZXJuJylcclxuICAgICAgZGVsZXRlIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuXHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuXHJcbiAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5wdXQsIHRleHRJbnB1dClcclxuICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRJbnB1dClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBldmVyeSBrZXlzdHJva2Ugb24gdGhlIGlucHV0IGFuZCB1cGRhdGUgdGhlIG1hc2tlZCBhbmQgdGhlIHVubWFza2VkIHZhbHVlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX29uS2V5c3Ryb2tlKGUpIHtcclxuICAgIGlmIChlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXkpIHJldHVyblxyXG4gICAgaWYoZS5rZXlDb2RlICE9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQsXHJcbiAgICAgIG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2ssXHJcbiAgICAgIGV2ZW50VHlwZSA9IGUudHlwZVxyXG5cclxuICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWUsXHJcbiAgICAgIGtleUNvZGUgPSBlLmtleUNvZGUsXHJcbiAgICAgIGtleUNvbnRlbnQgPSBlLmtleSB8fCBlLmNvZGUucmVwbGFjZSgvW14wLTldL2csICcnKSxcclxuICAgICAga2V5ID0ga2V5Q29udGVudCA/IChrZXlDb250ZW50Lmxlbmd0aCA+IDEgPyAnJyA6IGtleUNvbnRlbnQpIDogJycsXHJcbiAgICAgIGluc2VydFBvc2l0aW9uID0gZmluZENhcmV0UG9zaXRpb24odmFsdWUsIG1hc2spLFxyXG4gICAgICBuZXdWYWx1ZSxcclxuICAgICAgdW5tYXNrZWRWYWx1ZSxcclxuICAgICAgbWFza0Vycm9yID0gZmFsc2VcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgbmV3VmFsdWUgPSBtYXNrSWZOb3RNYXNrZWQoXHJcbiAgICAgICAgICAoZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9hcmREYXRhKS5nZXREYXRhKCdUZXh0JyksXHJcbiAgICAgICAgICBtYXNrXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2tleXVwJzpcclxuICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAna2V5cHJlc3MnOlxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnRcclxuICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgIT09IGluc2VydFBvc2l0aW9uKSBpbnNlcnRQb3NpdGlvbiA9IHNlbGVjdGlvblN0YXJ0XHJcblxyXG4gICAgICAgIG5ld1ZhbHVlID1cclxuICAgICAgICAgIHZhbHVlLnN1YnN0cigwLCBpbnNlcnRQb3NpdGlvbikgKyBrZXkgKyB2YWx1ZS5zdWJzdHIoaW5zZXJ0UG9zaXRpb24pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFza2VkVmFsdWUgPSB1bm1hc2sobmV3VmFsdWUsIG1hc2spXHJcblxyXG4gICAgaWYgKFszNSwgMzYsIDM3LCAzOCwgMzksIDQwXS5pbmRleE9mKGtleUNvZGUpID09PSAtMSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2ssIGZhbHNlKVxyXG4gICAgICAgIGlmKHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7XHJcbiAgICAgICAgICBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2tlZFZhbHVlXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGAjJHtpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyl9LXVubWFza2VkYFxyXG4gICAgICAgICAgKS52YWx1ZSA9IHVubWFza2VkVmFsdWVcclxuICAgICAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUoaW5wdXQudmFsdWUsIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCwgaW5wdXQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc2tFcnJvciA9IGZhbHNlXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpXHJcbiAgICAgICAgbWFza0Vycm9yID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVDYXJldFBvc2l0aW9uKGlucHV0LCBtYXNrKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbWFza0Vycm9yKSB0aGlzLl92YWxpZGF0ZUlucHV0KGlucHV0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGZvY3VzIGV2ZW50cyBvbiB0aGUgaW5wdXQgYW5kIHVwZGF0ZSB0aGUgY2FyZXQgcG9zaXRpb25cclxuICAgKiB3aGVyZSB0aGUgbmV4dCBjaGFyIHNob3VsZCBiZSBpbnNlcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG1hc2tcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Rm9jdXNFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9vbkZvY3VzKGUpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXRcclxuICAgIGNvbnN0IG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2tcclxuICAgIHRoaXMuX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNhcmV0IHBvc2l0aW9uIG9uIHRoZSBpbnB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gbWFza1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBiYmogc3RyaW5nXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZpbmRDYXJldFBvc2l0aW9uKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShwb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBgY2hlY2tWYWxpZGl0eWAgb24gdGhlIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgdGhpcy5fX2ZpcmVPbkludmFsaWQoaW5wdXQudmFsaWRhdGlvbk1lc3NhZ2UsIGlucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPbkludmFsaWQoZXJyb3IsIGlucHV0KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uSW52YWxpZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25JbnZhbGlkKGVycm9yLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsIHN0YXRlKSB7XHJcbiAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5cclxuY29uc3QgU1VQUE9SVEVEX01BU0tTID0gWydYJywgJ2EnLCAnQScsICcwJywgJ3onLCAnWicsICdVJ11cclxuLyoqXHJcbiAqIFdoZW4gdHJ1ZSAsIHRoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgVW5pY29kZSBQcm9wZXJ0eSBFc2NhcGVzXHJcbiAqIG90aGVyd2lzZSBpdCBpcyBmYWxzZSBcclxuICogXHJcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yZWdleHAtdW5pY29kZS1wcm9wZXJ0eS1lc2NhcGVzfVxyXG4gKi9cclxubGV0IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxudHJ5IHtcclxuICBldmFsKCcvXFxcXHB7TH0vdScpXHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSB0cnVlXHJcbn0gY2F0Y2ggKGVycikge1xyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBvciBub3RcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIG1hc2tlZCBvciB1bm1hc2tlZCB2YWx1ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYSBiYmogbWFza1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHZhbHVlIGlzIG1hc2tlZCB3aXRoIGdpdmVuIG1hc2sgLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmNvbnN0IGlzTWFza2VkVmFsdWUgPSAodmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGlzTWFza2VkVmFsdWUuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHt2YWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCFpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0pIHtcclxuICAgIGNvbnN0IHVubWFza2VkVmFsdWUgPSB1bm1hc2sodmFsdWUsIG1hc2spXHJcbiAgICBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICB2YWx1ZSA9PT0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2spXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXNrIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBtYXNrIGluIGNhc2UgdGhlIHZhbHVlIGlzIG5vdCBhbHJlYWR5IG1hc2tlZCB3aXRoIHRoZVxyXG4gKiBnaXZlbiBtYXNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBtYXNrZWQgb3IgdW5tYXNrZWQgdmFsdWVcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIGEgYmJqIG1hc2tcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSBhIG1hc2tlZCB2YWx1ZVxyXG4gKi9cclxuY29uc3QgbWFza0lmTm90TWFza2VkID0gKHZhbHVlLCBtYXNrKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke3ZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIW1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBpZiAoaXNNYXNrZWRWYWx1ZSh2YWx1ZSwgbWFzaykpIHtcclxuICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IFN0cmluZ01hc2subWFzayhcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgbWFzayxcclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSBTdHJpbmdNYXNrLm1hc2soJycsIG1hc2spXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSByZWdleCBwYXR0ZXIgYmFzZWQgb24gdGhlIGdpdmUgdGFza1xyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYmJqIHN0cmluZyBtYXNrXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gcmVnZXggZm9yIHRoZSBnaXZlIG1hc2tcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrID0gbWFzayA9PiB7XHJcbiAgaWYgKHR5cGVvZiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBtYXNrXHJcblxyXG4gIGlmICghZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyeSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBsZXQgcmVnZXggPSAnJ1xyXG4gICAgbWFza0FzQXJyeS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGMpIHtcclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoW14gLX5dKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnYSc6XHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAvLyBodHRwczovL21vdGhlcmVmZi5pbi9yZWdleHB1I2lucHV0PXZhcityZWdleCslM0QrLyU1Q3AlN0JMJTdEL3UlM0ImdW5pY29kZVByb3BlcnR5RXNjYXBlPTFcclxuICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1MDAzMy9yZWd1bGFyLWV4cHJlc3Npb24tdG8tbWF0Y2gtbm9uLWFzY2lpLWNoYXJhY3RlcnMjYW5zd2VyLTQ4OTAyNzY1XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICdcXFxccHtMfSdcclxuICAgICAgICAgICAgOiAnKCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoWzAtOV0pJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICd6JzpcclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJyhbMC05XXxcXFxccHtMfSknXHJcbiAgICAgICAgICAgIDogJyhbMC05XXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICcoKFswLTldKXwoXFxcXHMpfChbLiwvIyEkJV4mKjs6e309LV9gfigpXSl8KFxcXFxwe0x9KSknXHJcbiAgICAgICAgICAgIDogJygoWzAtOV0pfChcXFxccyl8KFsuLC8jISQlXiYqOzp7fT0tX2B+KCldKXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJlZ2V4ICs9IGMucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldID0gcmVnZXhcclxuICB9XHJcblxyXG4gIHJldHVybiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVbm1hc2sgdGhlIGdpdmVuIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrZWRWYWx1ZSBtYXNrZWQgc3RyaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICB0aGUgdXNlZCBtYXNrIHRvIHByb2R1Y2UgdGhlIG1hc2tlZCBzdHJpbmdcclxuICovXHJcbmNvbnN0IHVubWFzayA9IChtYXNrZWRWYWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgdW5tYXNrLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHVubWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHttYXNrZWRWYWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCF1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgY29uc3QgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWUuc3BsaXQoJycpXHJcblxyXG4gICAgbGV0IHVubWFza2VkID0gJydcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbCA9IG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF1cclxuICAgICAgY29uc3QgbWFzayA9IG1hc2tBc0FycmF5W2luZGV4XVxyXG4gICAgICBjb25zdCBlbEhhc01hc2sgPSBTVVBQT1JURURfTUFTS1MuaW5kZXhPZihtYXNrKSA+IC0xXHJcbiAgICAgIGlmIChlbEhhc01hc2spIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICAgICAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPyAndScgOiAnJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocGF0dGVybi50ZXN0KGVsKSkgdW5tYXNrZWQgKz0gZWxcclxuICAgICAgICBlbHNlIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSA9IHVubWFza2VkLnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICB9XHJcblxyXG4gIHJldHVybiB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gdGhlIG1hc2tlZCBzdHJpbmcgLCBmaW5kIHRoZSBuZXh0IGNhcmV0IHBvc2l0aW9uIGRlcGVuZGluZyBvblxyXG4gKiB3aGF0IGlzIG1pc3NpbmcgdG8gY29tcGxldGUgdGhlIG1hc2tcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2tlZFZhbHVlIG1hc2tlZCBzdHJpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIHRoZSB1c2VkIG1hc2sgdG8gcHJvZHVjZSB0aGUgbWFza2VkIHN0cmluZ1xyXG4gKi9cclxuY29uc3QgZmluZENhcmV0UG9zaXRpb24gPSAobWFza2VkVmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke21hc2tlZFZhbHVlfS0ke21hc2t9YFxyXG4gIGlmICghZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgbGV0IG1hc2tlZFZhbHVlQXNBcnJheSA9IG1hc2tlZFZhbHVlLnNwbGl0KCcnKVxyXG4gICAgaWYgKG1hc2tlZFZhbHVlQXNBcnJheS5sZW5ndGggPCBtYXNrQXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWVBc0FycmF5LmNvbmNhdChcclxuICAgICAgICBuZXcgQXJyYXkobWFza0FzQXJyYXkubGVuZ3RoIC0gbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aCkuam9pbignICcpLnNwbGl0KCcnKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uID0gLTFcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXNrQXNBcnJheS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWwgPSBtYXNrQXNBcnJheVtpbmRleF1cclxuICAgICAgaWYgKGVsICE9PSBtYXNrZWRWYWx1ZUFzQXJyYXlbaW5kZXhdKSB7XHJcbiAgICAgICAgLy8gaWYgKG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF0gPT09ICcgJykgcmV0dXJuIGluZGV4XHJcbiAgICAgICAgaWYgKFNVUFBPUlRFRF9NQVNLUy5pbmRleE9mKGVsKSA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2soZWwpLFxyXG4gICAgICAgICAgICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA/ICd1JyA6ICcnXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QobWFza2VkVmFsdWVBc0FycmF5W2luZGV4XSkpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSBpbmRleFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICBwb3NpdGlvbiA8IDAgPyBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoIDogcG9zaXRpb25cclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbi5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgaXNNYXNrZWRWYWx1ZSxcclxuICBtYXNrSWZOb3RNYXNrZWQsXHJcbiAgdW5tYXNrLFxyXG4gIGZpbmRDYXJldFBvc2l0aW9uLFxyXG4gIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLFxyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVELFxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvdG9vbHMuanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgTnVtYmVySW5wdXQgZnJvbSAnLi9OdW1iZXJJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9pbmRleC5qcyIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWlucHV0LW1hc2tpbmcgbGliLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJ2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzaydcclxuXHJcbmNvbnN0IGNvdW50RGVjaW1hbHMgPSB2YWx1ZSA9PiB7XHJcbiAgaWYgKHZhbHVlICUgMSAhPSAwKSB7XHJcbiAgICBjb25zdCBzcGxpdCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVxyXG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMikgcmV0dXJuIHNwbGl0WzFdLmxlbmd0aFxyXG4gIH1cclxuICByZXR1cm4gMFxyXG59XHJcblxyXG4vKipcclxuICogVGhlIGBOdW1iZXJJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBOdW1iZXIgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNudW1iZXItbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBudW1iZXIgbWFzayBAc2VlIFtCQmogTnVtYmVyIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI251bWJlci1tYXNrcykgfFxyXG4gKiB8IG1pbiB8ICAgICAgICAgfCBUaGUgbWF4aW11bSB2YWx1ZSB0byBhY2NlcHQgZm9yIHRoaXMgaW5wdXR8XHJcbiAqIHwgbWF4IHwgICAgICAgICB8IFRoZSBtaW5pbXVtIHZhbHVlIHRvIGFjY2VwdCBmb3IgdGhpcyBpbnB1dHxcclxuICogfCBzdGVwIHwgICAgICAgICB8IEEgc3RlcHBpbmcgaW50ZXJ2YWwgdG8gdXNlIHdoZW4gdXNpbmcgdXAgYW5kIGRvd24gYXJyb3dzIHRvIGFkanVzdCB0aGUgdmFsdWUsIGFzIHdlbGwgYXMgZm9yIHZhbGlkYXRpb258XHJcbiAqIHxncm91cGluZy1zZXBhcmF0b3IgfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvciB8XHJcbiAqIHxkZWNpbWFsLXNlcGFyYXRvciB8IC4gfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3IgfFxyXG4gKiB8Zm9yY2UtdHJhaWxpbmctemVyb3MgfCBmYWxzZSB8IEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLiBmb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpIHJldHVybnMgLjEwIGluc3RlYWQgb2YgLjF8XHJcbiAqXHJcbiAqICA8YnI+XHJcbiAqXHJcbiAqICoqRXhhbXBsZSA6KipcclxuICogYGBgaHRtbFxyXG4gKiAgPGlucHV0IGNsYXNzPVwiYmJqLW51bWJlci1tYXNrZWRcIiBuYW1lPVwidGVzdFwiIGlkPVwidGVzdFwiIHZhbHVlPVwiMTIzNFwiIGRhdGEtbWFzaz1cIiMjLCMjMFwiPlxyXG4gKlxyXG4gKiAgPHNjcmlwdD5cclxuICogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAqICAgICAgbmV3IEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dCh7XHJcbiAqXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtTdHJpbmd9IHZhbHVlTWFza2VkICBtYXNrZWQgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge051bWJlcn0gdmFsdWVVbm1hc2tlZCAgb3JpZ2luYWwgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICogICAgICAgICBvblVwZGF0ZTogKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCwgaXNBcHBsaWVkLCBpc0luaXRpYWwpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9LFxyXG4gKlxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIE51bWJlcklucHV0IHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3QgbmV3IE51bWJlcklucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnMgLSBUaGUgaW5wdXQgb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fFN0cmluZ30gW29wdGlvbnMuZWxlbWVudHM9XCIuYmJqLW51bWJlci1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotbnVtYmVyLW1hc2tlZCcsXHJcbiAgICAgICAgZG9jOiBkb2N1bWVudCxcclxuICAgICAgICBjc3NDbGFzc0Vycm9yOiAnYmJqLW1hc2stZXJyb3InLFxyXG4gICAgICAgIGNzc0NsYXNzU3VjY2VzczogJ2Jiai1tYXNrLXN1Y2Nlc3MnLFxyXG4gICAgICAgIG9uVXBkYXRlOiBudWxsLFxyXG4gICAgICAgIG9uSW52YWxpZDogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIgPSB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIgPSB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnJlZnJlc2goKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50IGFuZCB3cmFwIHRoZSBpbnB1dCBlbGVtZW50cyBmb3IgbWFza2luZyBpbiBjYXNlXHJcbiAgICogdGhleSBhcmUgbm90IHdyYXBwZWQgeWV0XHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuICAgIGxldCBpbnB1dCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgIHBhcmVudENsYXNzID0gaW5wdXQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgICAgaWYgKCFpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJykpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYEJCak1hc2tpbmc6IElucHV0IGhhcyBubyBJRC4gV2l0aG91dCBhbiBJRCB0aGUgaW5wdXQgY2Fubm90IGJlIG1hc2tlZGAsXHJcbiAgICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gd2UgZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5wdXQncyB3cmFwIHR3aWNlXHJcbiAgICAgICAgY29uc3QgaXNXcmFwcGVkID1cclxuICAgICAgICAgIHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ251bWJlcklucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW53cmFwKHBhcmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBudW1iZXIgbWFza2luZyBpbnB1dCB3cmFwcGVyXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGFjdHVhbElucHV0IHRoZSBpbnB1dCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1dyYXBwZWQgd2hlbiB0cnVlIHRoZSBpbnB1dCBpcyBhbHJlYWR5IHdyYXBwZWQgYW5kIHdlIG5lZWQgdG8gYWRkIHdoYXQgaXNcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9ubHlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtIVE1MU3BhbkVsZW1lbnR9IHdyYXBwZXIgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfd3JhcChhY3R1YWxJbnB1dCwgaXNXcmFwcGVkKSB7XHJcbiAgICBjb25zdCBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpLFxyXG4gICAgICBhY3R1YWxJbnB1dE5hbWUgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSxcclxuICAgICAgYWN0dWFsSW5wdXRTdGVwID0gYWN0dWFsSW5wdXQuZGF0YXNldC5zdGVwIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWF4ID0gYWN0dWFsSW5wdXQuZGF0YXNldC5tYXggfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNaW4gPSBhY3R1YWxJbnB1dC5kYXRhc2V0Lm1pbiB8fCBudWxsLFxyXG4gICAgICBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yID1cclxuICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yIHx8ICcsJyxcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcuJyxcclxuICAgICAgYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MgPVxyXG4gICAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayA9IGFjdHVhbElucHV0LmRhdGFzZXQubWFzayB8fCAnJyxcclxuICAgICAgYWN0dWFsSW5wdXRDbGFzc2VzID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLFxyXG4gICAgICBhY3R1YWxJbnB1dFJlcXVpcmVkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpIHx8IG51bGxcclxuXHJcbiAgICBsZXQgd3JhcCA9IG51bGwsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSBudWxsXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgd3JhcCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBhY3R1YWxJbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy5udW1iZXJJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgYWN0dWFsIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgYWN0dWFsSW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgYWN0dWFsSW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgICAgaWYgKFxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHxcclxuICAgICAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCA9IGFjdHVhbElucHV0LnZhbHVlIHx8IDBcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZ3JvdXBpbmdTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yXHJcbiAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3JcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zID0gYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3NcclxuICAgIGFjdHVhbElucHV0LnZhbHVlID0gTnVtYmVyTWFzay5tYXNrKFxyXG4gICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayxcclxuICAgICAgYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG4gICAgKS50cmltKClcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQoXHJcbiAgICAgICdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3NcclxuICAgIClcclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tlZElucHV0LnZhbHVlID0gYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgYWN0dWFsSW5wdXRDbGFzc2VzKVxyXG4gICAgaWYgKGFjdHVhbElucHV0SWQpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2FjdHVhbElucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChhY3R1YWxJbnB1dE5hbWUpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7YWN0dWFsSW5wdXROYW1lfS11bm1hc2tlZGApXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRSZXF1aXJlZCkgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJ3JlcXVpcmVkJylcclxuXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRTdGVwKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIGFjdHVhbElucHV0U3RlcClcclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBkZWNpbWFscyA9IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgICAgbGV0IHN0ZXAgPSAnMSdcclxuICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xyXG4gICAgICAgIHN0ZXAgPSBgLiR7QXJyYXkoZGVjaW1hbHMpLmpvaW4oJzAnKX0xYFxyXG4gICAgICB9XHJcblxyXG4gICAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIHN0ZXApXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdHVhbElucHV0TWluKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnbWluJywgYWN0dWFsSW5wdXRNaW4pXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRNYXgpIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdtYXgnLCBhY3R1YWxJbnB1dE1heClcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5pbnB1dElkID0gYWN0dWFsSW5wdXRJZFxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lm1hc2sgPSBhY3R1YWxJbnB1dE1hc2tcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3JcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgPSBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LmFkZCgnbnVtYmVySW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgICAgLy8gY29uZmlndXJlIHRoZSB3cmFwcGVyXHJcbiAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdjbGFzcycsICdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKVxyXG4gICAgICB3cmFwLmFwcGVuZENoaWxkKHVubWFza2VkSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYWN0dWFsSW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihOdW1iZXIoYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkKSkpIHtcclxuICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpKSB7XHJcbiAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShcclxuICAgICAgICAgIGFjdHVhbElucHV0LnZhbHVlLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB3cmFwcGVyIHRoZSB3cmFwcGVyIHNwYW4gaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdW53cmFwKHdyYXBwZXIpIHtcclxuICAgIGNvbnN0IGFjdHVhbElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcubnVtYmVySW5wdXRNYXNrX190ZXh0SW5wdXQnKSxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGApXHJcblxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgIHdyYXBwZXIucmVtb3ZlQ2hpbGQodW5tYXNrZWRJbnB1dClcclxuXHJcbiAgICBhY3R1YWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgIGFjdHVhbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgZGVsZXRlIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG5cclxuICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYWN0dWFsSW5wdXQsIHdyYXBwZXIpXHJcbiAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcilcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBjbGljayBhbmQgZm9jdXNpbiBldmVudCBvbiB0aGUgYWN0dWFsIGlucHV0IGFuZCB0b2dnbGUgdGhlIG51bWJlciBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9hY3R1YWxJbnB1dEhhbmRsZXIoZSkge1xyXG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGBcclxuICAgICAgKVxyXG5cclxuICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbnVtYmVyJylcclxuICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5mb2N1cygpXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IFN0cmluZyh1bm1hc2tlZElucHV0LnZhbHVlKS5sZW5ndGhcclxuICAgICAgdW5tYXNrZWRJbnB1dC50eXBlID0gJ3RleHQnXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpXHJcbiAgICAgIHVubWFza2VkSW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIHRoZSB1bm1hc2tlZCBpbnB1dCBrZXlkb3duIGFuZCBmb2N1c291dCBldmVudHMgYW5kIGNoZWNrXHJcbiAgICogaWYgdGhlIGlucHV0IHZhbHVlIGNhbiBiZSBtYXNrZWQgb3Igbm90XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VubWFza2VkSW5wdXRIYW5kbGVyKGUpIHtcclxuICAgIGNvbnN0IHVubWFza2VkSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAga2V5Q29kZSA9IGUua2V5Q29kZSxcclxuICAgICAgbWFzayA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5tYXNrLFxyXG4gICAgICBncm91cGluZ1NlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSB1bm1hc2tlZElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zLFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmlucHV0SWQsXHJcbiAgICAgIGFjdHVhbElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfWApXHJcblxyXG4gICAgbGV0IHJlc3RvcmUgPSBmYWxzZSxcclxuICAgICAgYXBwbHkgPSBmYWxzZSxcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZSxcclxuICAgICAgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBOdW1iZXJNYXNrLm1hc2soXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC52YWx1ZSB8fCAwLFxyXG4gICAgICAgIG1hc2ssXHJcbiAgICAgICAgZ3JvdXBpbmdTZXBhcmF0b3IsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcixcclxuICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKS50cmltKClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZVxyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlLCBhY3R1YWxJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICByZXN0b3JlID0gWzEzLCAyN10uaW5kZXhPZihrZXlDb2RlKSA+IC0xIHx8IGUudHlwZSA9PT0gJ2ZvY3Vzb3V0J1xyXG4gICAgYXBwbHkgPSBtYXNrZWRWYWx1ZSAmJiBpc1ZhbGlkXHJcblxyXG4gICAgaWYgKHJlc3RvcmUpIHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICAgIGFjdHVhbElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpXHJcblxyXG4gICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgICBhY3R1YWxJbnB1dC52YWx1ZSA9IG1hc2tlZFZhbHVlXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrZWRJbnB1dC52YWx1ZVxyXG4gICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUobWFza2VkVmFsdWUsIHVubWFza2VkSW5wdXQudmFsdWUsIGFjdHVhbElucHV0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVubWFza2VkSW5wdXQudmFsdWUgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYGNoZWNrVmFsaWRpdHlgIG9uIHRoZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSB1bm1hc2tlZElucHV0XHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBhY3R1YWxJbnB1dFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUlucHV0KHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0KSB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IHRydWVcclxuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHVubWFza2VkSW5wdXQudmFsdWUpXHJcbiAgICBpZiAodW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbicgJiYgIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBtYXggPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnbWF4JylcclxuICAgICAgY29uc3QgbWluID0gdW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ21pbicpXHJcbiAgICAgIGNvbnN0IHN0ZXAgPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnc3RlcCcpXHJcblxyXG4gICAgICBpZiAobWluKSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA+PSBOdW1iZXIobWluKVxyXG4gICAgICBpZiAobWF4KSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA8PSBOdW1iZXIobWF4KVxyXG5cclxuICAgICAgaWYgKHN0ZXApXHJcbiAgICAgICAgaXNWYWxpZCA9XHJcbiAgICAgICAgICBpc1ZhbGlkICYmIGNvdW50RGVjaW1hbHMoc3RlcCkgPT09IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgIH0gZWxzZSBpc1ZhbGlkID0gdW5tYXNrZWRJbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChcclxuICAgICAgICB1bm1hc2tlZElucHV0LnZhbGlkYXRpb25NZXNzYWdlIHx8ICdWYWxpZGl0eSBjaGVjayBmYWlscycsXHJcbiAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVNYXNrZWQgIG1hc2tlZCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVVubWFza2VkICBvcmlnaW5hbCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGFjdHVhbCBpbnB1dCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPblVwZGF0ZSh2YWx1ZU1hc2tlZCwgdmFsdWVVbm1hc2tlZCwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25VcGRhdGUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vbkludmFsaWQoZXJyb3IsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2FwcGx5Q3NzQ2xhc3NTdGF0ZSh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dCwgc3RhdGUpIHtcclxuICAgIGlmIChcclxuICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8XHJcbiAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgKSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9OdW1iZXJJbnB1dC5qcyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV83X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiTnVtYmVyTWFza1wiXX1cbi8vIG1vZHVsZSBpZCA9IDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuY29uc3QgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvXG5jb25zdCBpc1doaXRlc3BhY2VSZWdleCA9IC9cXHMvXG5jb25zdCBwdW5jdHVhdGlvbkxpc3QgPSAnIVwiIyQlJlxcJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fidcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzTG93ZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvVXBwZXJDYXNlKClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIHVwcGVyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzVXBwZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvTG93ZXJDYXNlKClcbn1cblxuY29uc3QgcGFzc09yVGhyb3dFcnJvciA9IChsb29zZSwgcmV0LCBpLCBzdHIpID0+IHtcbiAgaWYgKCFsb29zZSkge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckF0KGkpXG4gICAgY29uc3QgcG9zID0gaSArIDFcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IGBTdHJpbmdNYXNrRXJyb3I6IGVycm9yIGFwcGx5aW5nIG1hc2sgYXQgcG9zaXRpb24gXCIke3Bvc31cIiAsIGNoYXIgXCIke2NoYXJ9XCJgLFxuICAgICAgcG9zLFxuICAgICAgY2hhclxuICAgIH1cbiAgfSBlbHNlIHJldFtpXSA9ICcgJ1xufVxuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBTdHJpbmdNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAqIFxuICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAqIEB0aHJvd3Mge01hc2tFcnJvcn1cbiAgICogXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgbWFzayhzdHIsIG1hc2ssIGxvb3NlID0gdHJ1ZSkge1xuICAgIHN0ciA9IFN0cmluZyhzdHIpXG4gICAgbWFzayA9IFN0cmluZyhtYXNrKVxuICAgIGNvbnN0IG1hc2tMZW4gPSBtYXNrLmxlbmd0aFxuICAgIGNvbnN0IHN0ckxlbiA9IHN0ci5sZW5ndGhcblxuICAgIGlmIChzdHJMZW4gPiBtYXNrTGVuKSB7XG4gICAgICBpZiAobG9vc2UpIHJldHVybiBzdHJcbiAgICAgIC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBuYW1lOiAnTWFza0lzVG9vU2hvcnRFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tJc1Rvb1Nob3J0RXJyb3I6IE1hc2sgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXNzZWQgc3RyaW5nYFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pXG4gICAgbGV0IHBvcyA9IDAgLy8gdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyXG4gICAgbGV0IG1hc2tCeXRlID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICBtYXNrQnl0ZSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBzd2l0Y2ggKG1hc2tCeXRlKSB7XG4gICAgICAgIGNhc2UgJ1gnOiAvLyBtYXRjaCBhbnkgY2hhcmFjdGVyXG4gICAgICAgICAgcmV0W2ldID0gcG9zIDwgc3RyTGVuID8gc3RyLmNoYXJBdChwb3MpIDogJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0EnOiAvLyBtYXRjaCBsZXR0ZXI7IGZvcmNlIHVwcGVyIGNhc2VcbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdhJzogLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKGJ5dGUpIHx8IGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlXG4gICAgICAgICAgICBlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKVxuICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJzAnOiAvLyBtYXRjaCBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnWic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShieXRlKSB8fCBpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNVcHBlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNMb3dlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZWdleC50ZXN0KGJ5dGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ1UnOiAvLyBtYXRjaCBsZXR0ZXIgKGZvcmNlIHVwcGVyIGNhc2UpLCBkaWdpdCwgd2hpdGVzcGFjZSBvciBwdW5jdHVhdGlvbi5cbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzVXBwZXJDYXNlKGJ5dGUpIHx8XG4gICAgICAgICAgICAgIGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSB8fFxuICAgICAgICAgICAgICBpc1doaXRlc3BhY2VSZWdleC50ZXN0KGJ5dGUpIHx8XG4gICAgICAgICAgICAgIHB1bmN0dWF0aW9uTGlzdC5pbmRleE9mKGJ5dGUpID4gLTFcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldFtpXSA9IG1hc2tCeXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICBpZiAoIWxvb3NlKSB7XG4gICAgICAgIHRocm93IHsgbmFtZTogJ01hc2tFcnJvcicsIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0cmluZ01hc2tcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBOdW1iZXJNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWNpbWFsU2VwYXJhdG9yPS5dICAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgKiBcbiAgICogQHRocm93cyB7TWFza0Vycm9yfSBvbmx5IGlmIGxvb3NlIGlzIGRpc2FibGVkXG4gICAqIFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgbWFza2VkIG51bWJlclxuICAgKi9cbiAgc3RhdGljIG1hc2soXG4gICAgbnVtYmVyLFxuICAgIG1hc2ssXG4gICAgZ3JvdXBpbmdTZXBhcmF0b3IgPSAnLCcsXG4gICAgZGVjaW1hbFNlcGFyYXRvciA9ICcuJyxcbiAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSBmYWxzZSxcbiAgICBsb29zZSA9IHRydWVcbiAgKSB7XG4gICAgY29uc3QgbWFza0xlbiA9IG1hc2subGVuZ3RoXG4gICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0clxuICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTUFTS1xuICAgIGxldCBtYXNrQmVmb3JlRGVjaW1hbCA9IDBcbiAgICBsZXQgbWFza0FmdGVyRGVjaW1hbCA9IDBcbiAgICBsZXQgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tMZW47ICsraSkge1xuICAgICAgY29uc3QgbSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBpZiAobSA9PSAnMCcgfHwgbSA9PSAnIycpIHtcbiAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsXG4gICAgICAgIGVsc2UgKyttYXNrQmVmb3JlRGVjaW1hbFxuICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgIH1cblxuICAgIGxldCBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW1iZXIsIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgbGV0IGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKVxuXG4gICAgLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuICAgIGxldCBpbkxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGxldCBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgIGxldCBudW1BZnRlckRlY2ltYWwgPSAwXG4gICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluTGVuOyArK2kpIHtcbiAgICAgIGlmIChieXRlc1tpXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbFxuICAgICAgICBlbHNlICsrbnVtQmVmb3JlRGVjaW1hbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsd2F5cyBpZ25vcmUgbWFzayBvdmVyZmxvd1xuICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIG51bWJlci50b1N0cmluZygpXG4gICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJvdW5kIGlmIG1hc2sgaXMgZm9yIGEgbG93ZXIgcHJlY2lzaW9uIG51bWJlclxuICAgIGlmIChudW1BZnRlckRlY2ltYWwgPiBtYXNrQWZ0ZXJEZWNpbWFsKSB7XG4gICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSlcbiAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoXG5cbiAgICAgIC8vIEdldCBuZXcgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG4gICAgICBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgICAgbnVtQWZ0ZXJEZWNpbWFsID0gMFxuICAgICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5MZW47ICsraSkge1xuICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsXG4gICAgICAgICAgZWxzZSArK251bUJlZm9yZURlY2ltYWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcbiAgICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKClcbiAgICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbGxCeXRlID0gJyAnLFxuICAgICAgZmxvYXRCeXRlID0gJyAnXG4gICAgbGV0IGluUG9zID0gMCxcbiAgICAgIG91dFBvcyA9IDAsXG4gICAgICBmbG9hdFBvcyA9IDBcbiAgICBpZiAobWFzay5jaGFyQXQoMCkgPT0gJyonKSBmaWxsQnl0ZSA9ICcqJ1xuXG4gICAgY29uc3QgZmlsbEluaXQgPSBmaWxsQnl0ZVxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgPCAwXG4gICAgbGV0IGVtaXREZWNpbWFsID0gaW5MZW4gPiAwIHx8IG1hc2suaW5kZXhPZignMCcpID49IDBcbiAgICBsZXQgZm91bmRaZXJvID0gZmFsc2VcbiAgICBsZXQgZm91bmREaWdpdCA9IGZhbHNlXG4gICAgbGV0IGN1cnJlbmN5ID0gZmFsc2VcbiAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuXG4gICAgbGV0IHJldCA9IG5ldyBBcnJheShtYXNrTGVuKVxuXG4gICAgZm9yIChsZXQgbWFza1BvcyA9IDA7IG1hc2tQb3MgPCBtYXNrTGVuOyArK21hc2tQb3MpIHtcbiAgICAgIGxldCBtID0gbWFzay5jaGFyQXQobWFza1BvcylcbiAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsXG4gICAgICAgICAgaWYgKG1hc2tCZWZvcmVEZWNpbWFsIDwgbnVtQmVmb3JlRGVjaW1hbCAmJiBpblBvcyA8IGluTGVuKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXVxuICAgICAgICAgICAgKytpblBvc1xuICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCdcbiAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWxcbiAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdXG4gICAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9XG4gICAgICAgICAgICAgIGZvdW5kRGVjaW1hbCAmJlxuICAgICAgICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgJiZcbiAgICAgICAgICAgICAgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDBcbiAgICAgICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgICAgIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3NcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgIGlmIChmb3VuZFplcm8gfHwgaW5Qb3MgPiAwKSByZXRbb3V0UG9zXSA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBpZiAoIWZvdW5kRGVjaW1hbCkgZmxvYXRQb3MgPSBtYXNrUG9zXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICctJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogZmlsbEJ5dGVcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgIGZsb2F0Qnl0ZSA9IGlzTmVnYXRpdmUgPyAnLScgOiAnKydcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHJldFtvdXRQb3NdID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJ1xuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgZmxvYXRCeXRlID0gJyQnXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICckJ1xuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgIC8vICAgY3VycmVuY3kgPSB0cnVlXG4gICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSAnJidcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgLy8gICBicmVha1xuXG4gICAgICAgIC8vIGNhc2UgJ0AnOlxuICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgIC8vICAgICBmbG9hdEJ5dGUgPSAnQCdcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJ0AnXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgICsrb3V0UG9zXG4gICAgICAgIC8vICAgYnJlYWtcblxuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICcoJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKCdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcpJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnICdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0QnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyonXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gZW1pdERlY2ltYWwgPyBkZWNpbWFsU2VwYXJhdG9yIDogZmlsbEJ5dGVcbiAgICAgICAgICBmaWxsQnl0ZSA9ICcgJ1xuICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0W291dFBvc10gPSBtXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmbG9hdEJ5dGUgIT0gJyAnKSB7XG4gICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvc1xuICAgICAgd2hpbGUgKGZsb2F0UG9zID49IG1hc2tMZW4pIC0tZmxvYXRQb3NcbiAgICAgIGlmIChyZXRbZmxvYXRQb3NdID09IGZpbGxJbml0KSByZXRbZmxvYXRQb3NdID0gZmxvYXRCeXRlXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG5cbiAgc3RhdGljIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgaWYgKHJldmVyc2VTaGlmdCkgcHJlY2lzaW9uID0gLXByZWNpc2lvblxuICAgIHZhciBudW1BcnJheSA9ICgnJyArIG51bWJlcikuc3BsaXQoJ2UnKVxuICAgIHJldHVybiArKFxuICAgICAgbnVtQXJyYXlbMF0gK1xuICAgICAgJ2UnICtcbiAgICAgIChudW1BcnJheVsxXSA/ICtudW1BcnJheVsxXSArIHByZWNpc2lvbiA6IHByZWNpc2lvbilcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3JvdW5kKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KFxuICAgICAgTWF0aC5yb3VuZChOdW1iZXJNYXNrLl9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgZmFsc2UpKSxcbiAgICAgIHByZWNpc2lvbixcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3RvQ2hhckFycmF5KG51bWJlcikge1xuICAgIGNvbnN0IHNpZ251bSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtYmVyKVxuICAgIGxldCBjaGFycyA9IFtdXG5cbiAgICBpZiAoc2lnbnVtICE9PSAwKSB7XG4gICAgICBsZXQgc3RyaW5nID0gc2lnbnVtIDwgMCA/IGAkey0xICogbnVtYmVyLnRvU3RyaW5nKCl9YCA6IG51bWJlci50b1N0cmluZygpXG5cbiAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJylcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKVxuXG4gICAgICAvLyBUaGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgWzAtOV0gYW5kICcuJ1xuICAgICAgY2hhcnMgPSBzdHJpbmcuc3BsaXQoJycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYXJzXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0geCBudW1iZXJcbiAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICogICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCBuZWdhdGl2ZSBudW1iZXIsIHBvc2l0aXZlIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgb3IgbmVnYXRpdmUgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEsIC0xLCAwIG9yIC0wIHJlc3BlY3RpdmVseS5cbiAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBzdGF0aWMgX2dldFNpZ24oeCkge1xuICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlck1hc2tcbiIsIm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiZmxhdHBpY2tyXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGZsYXRwaWNrci5qc1wiKTsiLCIvKiBmbGF0cGlja3IgdjQuNi42LCBAbGljZW5zZSBNSVQgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuZmxhdHBpY2tyID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcbiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxuICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcbiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuICAgIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuICAgIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG4gICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuICAgIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICAgIHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfVxuXG4gICAgdmFyIEhPT0tTID0gW1xuICAgICAgICBcIm9uQ2hhbmdlXCIsXG4gICAgICAgIFwib25DbG9zZVwiLFxuICAgICAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgICAgIFwib25EZXN0cm95XCIsXG4gICAgICAgIFwib25LZXlEb3duXCIsXG4gICAgICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgICAgICBcIm9uT3BlblwiLFxuICAgICAgICBcIm9uUGFyc2VDb25maWdcIixcbiAgICAgICAgXCJvblJlYWR5XCIsXG4gICAgICAgIFwib25WYWx1ZVVwZGF0ZVwiLFxuICAgICAgICBcIm9uWWVhckNoYW5nZVwiLFxuICAgICAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuICAgIF07XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICBfZGlzYWJsZTogW10sXG4gICAgICAgIF9lbmFibGU6IFtdLFxuICAgICAgICBhbGxvd0lucHV0OiBmYWxzZSxcbiAgICAgICAgYWxsb3dJbnZhbGlkUHJlbG9hZDogZmFsc2UsXG4gICAgICAgIGFsdEZvcm1hdDogXCJGIGosIFlcIixcbiAgICAgICAgYWx0SW5wdXQ6IGZhbHNlLFxuICAgICAgICBhbHRJbnB1dENsYXNzOiBcImZvcm0tY29udHJvbCBpbnB1dFwiLFxuICAgICAgICBhbmltYXRlOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSA9PT0gLTEsXG4gICAgICAgIGFyaWFEYXRlRm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBhdXRvRmlsbERlZmF1bHRUaW1lOiB0cnVlLFxuICAgICAgICBjbGlja09wZW5zOiB0cnVlLFxuICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgICBjb25qdW5jdGlvbjogXCIsIFwiLFxuICAgICAgICBkYXRlRm9ybWF0OiBcIlktbS1kXCIsXG4gICAgICAgIGRlZmF1bHRIb3VyOiAxMixcbiAgICAgICAgZGVmYXVsdE1pbnV0ZTogMCxcbiAgICAgICAgZGVmYXVsdFNlY29uZHM6IDAsXG4gICAgICAgIGRpc2FibGU6IFtdLFxuICAgICAgICBkaXNhYmxlTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlOiBbXSxcbiAgICAgICAgZW5hYmxlU2Vjb25kczogZmFsc2UsXG4gICAgICAgIGVuYWJsZVRpbWU6IGZhbHNlLFxuICAgICAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VlazogZnVuY3Rpb24gKGdpdmVuRGF0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShnaXZlbkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhci5cbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpKTtcbiAgICAgICAgICAgIC8vIEphbnVhcnkgNCBpcyBhbHdheXMgaW4gd2VlayAxLlxuICAgICAgICAgICAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlazEuXG4gICAgICAgICAgICByZXR1cm4gKDEgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtXG4gICAgICAgICAgICAgICAgICAgIDMgK1xuICAgICAgICAgICAgICAgICAgICAoKHdlZWsxLmdldERheSgpICsgNikgJSA3KSkgL1xuICAgICAgICAgICAgICAgICAgICA3KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhvdXJJbmNyZW1lbnQ6IDEsXG4gICAgICAgIGlnbm9yZWRGb2N1c0VsZW1lbnRzOiBbXSxcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgbG9jYWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgbWludXRlSW5jcmVtZW50OiA1LFxuICAgICAgICBtb2RlOiBcInNpbmdsZVwiLFxuICAgICAgICBtb250aFNlbGVjdG9yVHlwZTogXCJkcm9wZG93blwiLFxuICAgICAgICBuZXh0QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J00xMy4yMDcgOC40NzJsLTcuODU0IDcuODU0LTAuNzA3LTAuNzA3IDcuMTQ2LTcuMTQ2LTcuMTQ2LTcuMTQ4IDAuNzA3LTAuNzA3IDcuODU0IDcuODU0eicgLz48L3N2Zz5cIixcbiAgICAgICAgbm9DYWxlbmRhcjogZmFsc2UsXG4gICAgICAgIG5vdzogbmV3IERhdGUoKSxcbiAgICAgICAgb25DaGFuZ2U6IFtdLFxuICAgICAgICBvbkNsb3NlOiBbXSxcbiAgICAgICAgb25EYXlDcmVhdGU6IFtdLFxuICAgICAgICBvbkRlc3Ryb3k6IFtdLFxuICAgICAgICBvbktleURvd246IFtdLFxuICAgICAgICBvbk1vbnRoQ2hhbmdlOiBbXSxcbiAgICAgICAgb25PcGVuOiBbXSxcbiAgICAgICAgb25QYXJzZUNvbmZpZzogW10sXG4gICAgICAgIG9uUmVhZHk6IFtdLFxuICAgICAgICBvblZhbHVlVXBkYXRlOiBbXSxcbiAgICAgICAgb25ZZWFyQ2hhbmdlOiBbXSxcbiAgICAgICAgb25QcmVDYWxlbmRhclBvc2l0aW9uOiBbXSxcbiAgICAgICAgcGx1Z2luczogW10sXG4gICAgICAgIHBvc2l0aW9uOiBcImF1dG9cIixcbiAgICAgICAgcG9zaXRpb25FbGVtZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHByZXZBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTUuMjA3IDguNDcxbDcuMTQ2IDcuMTQ3LTAuNzA3IDAuNzA3LTcuODUzLTcuODU0IDcuODU0LTcuODUzIDAuNzA3IDAuNzA3LTcuMTQ3IDcuMTQ2eicgLz48L3N2Zz5cIixcbiAgICAgICAgc2hvcnRoYW5kQ3VycmVudE1vbnRoOiBmYWxzZSxcbiAgICAgICAgc2hvd01vbnRoczogMSxcbiAgICAgICAgc3RhdGljOiBmYWxzZSxcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICAgICAgd2Vla051bWJlcnM6IGZhbHNlLFxuICAgICAgICB3cmFwOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIGVuZ2xpc2ggPSB7XG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgICAgICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICAgICAgXCJTdW5kYXlcIixcbiAgICAgICAgICAgICAgICBcIk1vbmRheVwiLFxuICAgICAgICAgICAgICAgIFwiVHVlc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJUaHVyc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiRnJpZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJTYXR1cmRheVwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIkphblwiLFxuICAgICAgICAgICAgICAgIFwiRmViXCIsXG4gICAgICAgICAgICAgICAgXCJNYXJcIixcbiAgICAgICAgICAgICAgICBcIkFwclwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5cIixcbiAgICAgICAgICAgICAgICBcIkp1bFwiLFxuICAgICAgICAgICAgICAgIFwiQXVnXCIsXG4gICAgICAgICAgICAgICAgXCJTZXBcIixcbiAgICAgICAgICAgICAgICBcIk9jdFwiLFxuICAgICAgICAgICAgICAgIFwiTm92XCIsXG4gICAgICAgICAgICAgICAgXCJEZWNcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiSmFudWFyeVwiLFxuICAgICAgICAgICAgICAgIFwiRmVicnVhcnlcIixcbiAgICAgICAgICAgICAgICBcIk1hcmNoXCIsXG4gICAgICAgICAgICAgICAgXCJBcHJpbFwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5lXCIsXG4gICAgICAgICAgICAgICAgXCJKdWx5XCIsXG4gICAgICAgICAgICAgICAgXCJBdWd1c3RcIixcbiAgICAgICAgICAgICAgICBcIlNlcHRlbWJlclwiLFxuICAgICAgICAgICAgICAgIFwiT2N0b2JlclwiLFxuICAgICAgICAgICAgICAgIFwiTm92ZW1iZXJcIixcbiAgICAgICAgICAgICAgICBcIkRlY2VtYmVyXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgICAgICBmaXJzdERheU9mV2VlazogMCxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG50aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBudGggJSAxMDA7XG4gICAgICAgICAgICBpZiAocyA+IDMgJiYgcyA8IDIxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICBzd2l0Y2ggKHMgJSAxMCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5kXCI7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZFwiO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlU2VwYXJhdG9yOiBcIiB0byBcIixcbiAgICAgICAgd2Vla0FiYnJldmlhdGlvbjogXCJXa1wiLFxuICAgICAgICBzY3JvbGxUaXRsZTogXCJTY3JvbGwgdG8gaW5jcmVtZW50XCIsXG4gICAgICAgIHRvZ2dsZVRpdGxlOiBcIkNsaWNrIHRvIHRvZ2dsZVwiLFxuICAgICAgICBhbVBNOiBbXCJBTVwiLCBcIlBNXCJdLFxuICAgICAgICB5ZWFyQXJpYUxhYmVsOiBcIlllYXJcIixcbiAgICAgICAgbW9udGhBcmlhTGFiZWw6IFwiTW9udGhcIixcbiAgICAgICAgaG91ckFyaWFMYWJlbDogXCJIb3VyXCIsXG4gICAgICAgIG1pbnV0ZUFyaWFMYWJlbDogXCJNaW51dGVcIixcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMjsgfVxuICAgICAgICByZXR1cm4gKFwiMDAwXCIgKyBudW1iZXIpLnNsaWNlKGxlbmd0aCAqIC0xKTtcbiAgICB9O1xuICAgIHZhciBpbnQgPSBmdW5jdGlvbiAoYm9vbCkgeyByZXR1cm4gKGJvb2wgPT09IHRydWUgPyAxIDogMCk7IH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSA9PT0gdm9pZCAwKSB7IGltbWVkaWF0ZSA9IGZhbHNlOyB9XG4gICAgICAgIHZhciB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgdGltZW91dCAhPT0gbnVsbCAmJiBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKVxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlICYmICF0aW1lb3V0KVxuICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBhcnJheWlmeSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5ID8gb2JqIDogW29ial07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgICAgICBpZiAoYm9vbCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnLCBjbGFzc05hbWUsIGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIGUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyTm9kZShub2RlKSB7XG4gICAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpXG4gICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRQYXJlbnQobm9kZSwgY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24obm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXJlbnQobm9kZS5wYXJlbnROb2RlLCBjb25kaXRpb24pO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3RoaW5nIGZvdW5kXG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU51bWJlcklucHV0KGlucHV0Q2xhc3NOYW1lLCBvcHRzKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcIm51bUlucHV0V3JhcHBlclwiKSwgbnVtSW5wdXQgPSBjcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgXCJudW1JbnB1dCBcIiArIGlucHV0Q2xhc3NOYW1lKSwgYXJyb3dVcCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dVcFwiKSwgYXJyb3dEb3duID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd0Rvd25cIik7XG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFIDkuMFwiKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIG51bUlucHV0LnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbnVtSW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgbnVtSW5wdXQucGF0dGVybiA9IFwiXFxcXGQqXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKVxuICAgICAgICAgICAgICAgIG51bUlucHV0LnNldEF0dHJpYnV0ZShrZXksIG9wdHNba2V5XSk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobnVtSW5wdXQpO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93VXApO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93RG93bik7XG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkb05vdGhpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH07XG4gICAgdmFyIG1vbnRoVG9TdHIgPSBmdW5jdGlvbiAobW9udGhOdW1iZXIsIHNob3J0aGFuZCwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUubW9udGhzW3Nob3J0aGFuZCA/IFwic2hvcnRoYW5kXCIgOiBcImxvbmdoYW5kXCJdW21vbnRoTnVtYmVyXTsgfTtcbiAgICB2YXIgcmV2Rm9ybWF0ID0ge1xuICAgICAgICBEOiBkb05vdGhpbmcsXG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aE5hbWUsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLmxvbmdoYW5kLmluZGV4T2YobW9udGhOYW1lKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEc6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBIOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSjogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIEs6IGZ1bmN0aW9uIChkYXRlT2JqLCBhbVBNLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyKSArXG4gICAgICAgICAgICAgICAgMTIgKiBpbnQobmV3IFJlZ0V4cChsb2NhbGUuYW1QTVsxXSwgXCJpXCIpLnRlc3QoYW1QTSkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgTTogZnVuY3Rpb24gKGRhdGVPYmosIHNob3J0TW9udGgsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLnNob3J0aGFuZC5pbmRleE9mKHNob3J0TW9udGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgUzogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgVTogZnVuY3Rpb24gKF8sIHVuaXhTZWNvbmRzKSB7IHJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KHVuaXhTZWNvbmRzKSAqIDEwMDApOyB9LFxuICAgICAgICBXOiBmdW5jdGlvbiAoZGF0ZU9iaiwgd2Vla051bSwgbG9jYWxlKSB7XG4gICAgICAgICAgICB2YXIgd2Vla051bWJlciA9IHBhcnNlSW50KHdlZWtOdW0pO1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkYXRlT2JqLmdldEZ1bGxZZWFyKCksIDAsIDIgKyAod2Vla051bWJlciAtIDEpICogNywgMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgbG9jYWxlLmZpcnN0RGF5T2ZXZWVrKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9LFxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcihwYXJzZUZsb2F0KHllYXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgWjogZnVuY3Rpb24gKF8sIElTT0RhdGUpIHsgcmV0dXJuIG5ldyBEYXRlKElTT0RhdGUpOyB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlT2JqLCBtaW51dGVzKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1pbnV0ZXMocGFyc2VGbG9hdChtaW51dGVzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBsOiBkb05vdGhpbmcsXG4gICAgICAgIG06IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbW9udGgpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TW9udGgocGFyc2VGbG9hdChtb250aCkgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgczogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdTogZnVuY3Rpb24gKF8sIHVuaXhNaWxsU2Vjb25kcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peE1pbGxTZWNvbmRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHc6IGRvTm90aGluZyxcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGVPYmosIHllYXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIoMjAwMCArIHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgdmFyIHRva2VuUmVnZXggPSB7XG4gICAgICAgIEQ6IFwiKFxcXFx3KylcIixcbiAgICAgICAgRjogXCIoXFxcXHcrKVwiLFxuICAgICAgICBHOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBIOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBKOiBcIihcXFxcZFxcXFxkfFxcXFxkKVxcXFx3K1wiLFxuICAgICAgICBLOiBcIlwiLFxuICAgICAgICBNOiBcIihcXFxcdyspXCIsXG4gICAgICAgIFM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIFU6IFwiKC4rKVwiLFxuICAgICAgICBXOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBZOiBcIihcXFxcZHs0fSlcIixcbiAgICAgICAgWjogXCIoLispXCIsXG4gICAgICAgIGQ6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGk6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGw6IFwiKFxcXFx3KylcIixcbiAgICAgICAgbTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgbjogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgczogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgdTogXCIoLispXCIsXG4gICAgICAgIHc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHk6IFwiKFxcXFxkezJ9KVwiLFxuICAgIH07XG4gICAgdmFyIGZvcm1hdHMgPSB7XG4gICAgICAgIC8vIGdldCB0aGUgZGF0ZSBpbiBVVENcbiAgICAgICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBzaG9ydCwgZS5nLiBUaHVcbiAgICAgICAgRDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5cy5zaG9ydGhhbmRbZm9ybWF0cy53KGRhdGUsIGxvY2FsZSwgb3B0aW9ucyldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdWxsIG1vbnRoIG5hbWUgZS5nLiBKYW51YXJ5XG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGZvcm1hdHMubihkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIC0gMSwgZmFsc2UsIGxvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBob3VyIDEtMTJcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGhvdXJzIHdpdGggbGVhZGluZyB6ZXJvIGUuZy4gMDNcbiAgICAgICAgSDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEhvdXJzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgKDEtMzApIHdpdGggb3JkaW5hbCBzdWZmaXggZS5nLiAxc3QsIDJuZFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZGF0ZS5nZXREYXRlKCkgKyBsb2NhbGUub3JkaW5hbChkYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA6IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBTS9QTVxuICAgICAgICBLOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUuYW1QTVtpbnQoZGF0ZS5nZXRIb3VycygpID4gMTEpXTsgfSxcbiAgICAgICAgLy8gc2hvcnRoYW5kIG1vbnRoIGUuZy4gSmFuLCBTZXAsIE9jdCwgZXRjXG4gICAgICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGRhdGUuZ2V0TW9udGgoKSwgdHJ1ZSwgbG9jYWxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwMC01OVxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTsgfSxcbiAgICAgICAgLy8gdW5peCB0aW1lc3RhbXBcbiAgICAgICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICAgICAgVzogZnVuY3Rpb24gKGRhdGUsIF8sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmdldFdlZWsoZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bGwgeWVhciBlLmcuIDIwMTYsIHBhZGRlZCAoMDAwMS05OTk5KVxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RnVsbFllYXIoKSwgNCk7IH0sXG4gICAgICAgIC8vIGRheSBpbiBtb250aCwgcGFkZGVkICgwMS0zMClcbiAgICAgICAgZDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldERhdGUoKSk7IH0sXG4gICAgICAgIC8vIGhvdXIgZnJvbSAxLTEyIChhbS9wbSlcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIChkYXRlLmdldEhvdXJzKCkgJSAxMiA/IGRhdGUuZ2V0SG91cnMoKSAlIDEyIDogMTIpOyB9LFxuICAgICAgICAvLyBtaW51dGVzLCBwYWRkZWQgd2l0aCBsZWFkaW5nIHplcm8gZS5nLiAwOVxuICAgICAgICBpOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TWludXRlcygpKTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoICgxLTMwKVxuICAgICAgICBqOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXRlKCk7IH0sXG4gICAgICAgIC8vIHdlZWtkYXkgbmFtZSwgZnVsbCwgZS5nLiBUaHVyc2RheVxuICAgICAgICBsOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLmxvbmdoYW5kW2RhdGUuZ2V0RGF5KCldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBwYWRkZWQgbW9udGggbnVtYmVyICgwMS0xMilcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKTsgfSxcbiAgICAgICAgLy8gdGhlIG1vbnRoIG51bWJlciAoMS0xMilcbiAgICAgICAgbjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7IH0sXG4gICAgICAgIC8vIHNlY29uZHMgMC01OVxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7IH0sXG4gICAgICAgIC8vIFVuaXggTWlsbGlzZWNvbmRzXG4gICAgICAgIHU6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFRpbWUoKTsgfSxcbiAgICAgICAgLy8gbnVtYmVyIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgdzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7IH0sXG4gICAgICAgIC8vIGxhc3QgdHdvIGRpZ2l0cyBvZiB5ZWFyIGUuZy4gMTYgZm9yIDIwMTZcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpLnN1YnN0cmluZygyKTsgfSxcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZURhdGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIF9iID0gX2EuY29uZmlnLCBjb25maWcgPSBfYiA9PT0gdm9pZCAwID8gZGVmYXVsdHMgOiBfYiwgX2MgPSBfYS5sMTBuLCBsMTBuID0gX2MgPT09IHZvaWQgMCA/IGVuZ2xpc2ggOiBfYywgX2QgPSBfYS5pc01vYmlsZSwgaXNNb2JpbGUgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlT2JqLCBmcm10LCBvdmVycmlkZUxvY2FsZSkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG92ZXJyaWRlTG9jYWxlIHx8IGwxMG47XG4gICAgICAgICAgICBpZiAoY29uZmlnLmZvcm1hdERhdGUgIT09IHVuZGVmaW5lZCAmJiAhaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmZvcm1hdERhdGUoZGF0ZU9iaiwgZnJtdCwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmcm10XG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHNbY10gJiYgYXJyW2kgLSAxXSAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2NdKGRhdGVPYmosIGxvY2FsZSwgY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGdpdmVuRm9ybWF0LCB0aW1lbGVzcywgY3VzdG9tTG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGN1c3RvbUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgICAgICB2YXIgZGF0ZU9yaWcgPSBkYXRlO1xuICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGRhdGUudG9GaXhlZCAhPT0gdW5kZWZpbmVkIC8vIHRpbWVzdGFtcFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvcHlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdpdmVuRm9ybWF0IHx8IChjb25maWcgfHwgZGVmYXVsdHMpLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlc3RyID09PSBcInRvZGF5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoL1okLy50ZXN0KGRhdGVzdHIpIHx8XG4gICAgICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpIC8vIGRhdGVzdHJpbmdzIHcvIHRpbWV6b25lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJzZURhdGUpXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBjb25maWcucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZyB8fCAhY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHZvaWQgMCwgb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5fMSA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0JhY2tTbGFzaCA9IHRva2VuXzEgPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmb3JtYXRbaSAtIDFdID09PSBcIlxcXFxcIiB8fCBpc0JhY2tTbGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblJlZ2V4W3Rva2VuXzFdICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhTdHIgKz0gdG9rZW5SZWdleFt0b2tlbl8xXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1t0b2tlbl8xICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiByZXZGb3JtYXRbdG9rZW5fMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw6IG1hdGNoWysrbWF0Y2hJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0JhY2tTbGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSBcIi5cIjsgLy8gZG9uJ3QgcmVhbGx5IGNhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IF9hLmZuLCB2YWwgPSBfYS52YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZWREYXRlID0gZm4ocGFyc2VkRGF0ZSwgdmFsLCBsb2NhbGUpIHx8IHBhcnNlZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG1hdGNoZWQgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBpZiAoIShwYXJzZWREYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHByb3ZpZGVkOiBcIiArIGRhdGVPcmlnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGluIGRhdGVzLCBtZWFzdXJlZCBpbiBtc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRlcyhkYXRlMSwgZGF0ZTIsIHRpbWVsZXNzKSB7XG4gICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdm9pZCAwKSB7IHRpbWVsZXNzID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodGltZWxlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLVxuICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUyLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHZhciBpc0JldHdlZW4gPSBmdW5jdGlvbiAodHMsIHRzMSwgdHMyKSB7XG4gICAgICAgIHJldHVybiB0cyA+IE1hdGgubWluKHRzMSwgdHMyKSAmJiB0cyA8IE1hdGgubWF4KHRzMSwgdHMyKTtcbiAgICB9O1xuICAgIHZhciBkdXJhdGlvbiA9IHtcbiAgICAgICAgREFZOiA4NjQwMDAwMCxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIF9hID0gMCwgYXJnc18xID0gYXJnczsgX2EgPCBhcmdzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3NfMVtfYV07XG4gICAgICAgICAgICAgICAgX2xvb3BfMShzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgREVCT1VOQ0VEX0NIQU5HRV9NUyA9IDMwMDtcbiAgICBmdW5jdGlvbiBGbGF0cGlja3JJbnN0YW5jZShlbGVtZW50LCBpbnN0YW5jZUNvbmZpZykge1xuICAgICAgICB2YXIgc2VsZiA9IHtcbiAgICAgICAgICAgIGNvbmZpZzogX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRzKSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLFxuICAgICAgICAgICAgbDEwbjogZW5nbGlzaCxcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICBzZWxmLnBsdWdpbkVsZW1lbnRzID0gW107XG4gICAgICAgIHNlbGYubG9hZGVkUGx1Z2lucyA9IFtdO1xuICAgICAgICBzZWxmLl9iaW5kID0gYmluZDtcbiAgICAgICAgc2VsZi5fc2V0SG91cnNGcm9tRGF0ZSA9IHNldEhvdXJzRnJvbURhdGU7XG4gICAgICAgIHNlbGYuX3Bvc2l0aW9uQ2FsZW5kYXIgPSBwb3NpdGlvbkNhbGVuZGFyO1xuICAgICAgICBzZWxmLmNoYW5nZU1vbnRoID0gY2hhbmdlTW9udGg7XG4gICAgICAgIHNlbGYuY2hhbmdlWWVhciA9IGNoYW5nZVllYXI7XG4gICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcjtcbiAgICAgICAgc2VsZi5jbG9zZSA9IGNsb3NlO1xuICAgICAgICBzZWxmLl9jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudDtcbiAgICAgICAgc2VsZi5kZXN0cm95ID0gZGVzdHJveTtcbiAgICAgICAgc2VsZi5pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gICAgICAgIHNlbGYuanVtcFRvRGF0ZSA9IGp1bXBUb0RhdGU7XG4gICAgICAgIHNlbGYub3BlbiA9IG9wZW47XG4gICAgICAgIHNlbGYucmVkcmF3ID0gcmVkcmF3O1xuICAgICAgICBzZWxmLnNldCA9IHNldDtcbiAgICAgICAgc2VsZi5zZXREYXRlID0gc2V0RGF0ZTtcbiAgICAgICAgc2VsZi50b2dnbGUgPSB0b2dnbGU7XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICAgICAgc2VsZi51dGlscyA9IHtcbiAgICAgICAgICAgICAgICBnZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKG1vbnRoLCB5cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IHZvaWQgMCkgeyBtb250aCA9IHNlbGYuY3VycmVudE1vbnRoOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh5ciA9PT0gdm9pZCAwKSB7IHlyID0gc2VsZi5jdXJyZW50WWVhcjsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IDEgJiYgKCh5ciAlIDQgPT09IDAgJiYgeXIgJSAxMDAgIT09IDApIHx8IHlyICUgNDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubDEwbi5kYXlzSW5Nb250aFttb250aF07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgICAgIHNlbGYuZWxlbWVudCA9IHNlbGYuaW5wdXQgPSBlbGVtZW50O1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHBhcnNlQ29uZmlnKCk7XG4gICAgICAgICAgICBzZXR1cExvY2FsZSgpO1xuICAgICAgICAgICAgc2V0dXBJbnB1dHMoKTtcbiAgICAgICAgICAgIHNldHVwRGF0ZXMoKTtcbiAgICAgICAgICAgIHNldHVwSGVscGVyRnVuY3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgYnVpbGQoKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIHx8IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHwgc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDYWxlbmRhcldpZHRoKCk7XG4gICAgICAgICAgICB2YXIgaXNTYWZhcmkgPSAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICAgICAgLyogVE9ETzogaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyXG4gICAgICAgIFxuICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZXJlIGlzIHdlaXJkIHBvc2l0aW9uaW5nIGJlaGF2aW9yIGluIHNhZmFyaSBjYXVzaW5nIHBhZ2VzXG4gICAgICAgICAgICAgIHRvIHNjcm9sbCB1cC4gaHR0cHM6Ly9naXRodWIuY29tL2NobWxuL2ZsYXRwaWNrci9pc3N1ZXMvNTYzXG4gICAgICAgIFxuICAgICAgICAgICAgICBIb3dldmVyLCBtb3N0IGJyb3dzZXJzIGFyZSBub3QgU2FmYXJpIGFuZCBwb3NpdGlvbmluZyBpcyBleHBlbnNpdmUgd2hlbiB1c2VkXG4gICAgICAgICAgICAgIGluIHNjYWxlLiBodHRwczovL2dpdGh1Yi5jb20vY2htbG4vZmxhdHBpY2tyL2lzc3Vlcy8xMDk2XG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlICYmIGlzU2FmYXJpKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25SZWFkeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBiaW5kVG9JbnN0YW5jZShmbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmJpbmQoc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0Q2FsZW5kYXJXaWR0aCgpIHtcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBzZWxmLmNvbmZpZztcbiAgICAgICAgICAgIGlmIChjb25maWcud2Vla051bWJlcnMgPT09IGZhbHNlICYmIGNvbmZpZy5zaG93TW9udGhzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLm5vQ2FsZW5kYXIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXlzV2lkdGggPSAoc2VsZi5kYXlzLm9mZnNldFdpZHRoICsgMSkgKiBjb25maWcuc2hvd01vbnRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5zdHlsZS53aWR0aCA9IGRheXNXaWR0aCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUud2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheXNXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLndlZWtXcmFwcGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi53ZWVrV3JhcHBlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGhhbmRsZXIgZm9yIGFsbCBldmVudHMgdGFyZ2V0aW5nIHRoZSB0aW1lIGlucHV0c1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGltZShlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZSA9IHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gZ2V0RGVmYXVsdEhvdXJzKCksIGhvdXJzID0gX2EuaG91cnMsIG1pbnV0ZXMgPSBfYS5taW51dGVzLCBzZWNvbmRzID0gX2Euc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcywgMCk7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZmF1bHREYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZSAhPT0gdW5kZWZpbmVkICYmIGUudHlwZSAhPT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aW1lV3JhcHBlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2VmFsdWUgPSBzZWxmLl9pbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dC52YWx1ZSAhPT0gcHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYW1wbTJtaWxpdGFyeShob3VyLCBhbVBNKSB7XG4gICAgICAgICAgICByZXR1cm4gKGhvdXIgJSAxMikgKyAxMiAqIGludChhbVBNID09PSBzZWxmLmwxMG4uYW1QTVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWlsaXRhcnkyYW1wbShob3VyKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGhvdXIgJSAyNCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgJSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGhlIHNlbGVjdGVkIGRhdGUgb2JqZWN0IHRpbWUgd2l0aCB1c2VyJ3MgdGltZSBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tSW5wdXRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBzZWxmLm1pbnV0ZUVsZW1lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG91cnMgPSAocGFyc2VJbnQoc2VsZi5ob3VyRWxlbWVudC52YWx1ZS5zbGljZSgtMiksIDEwKSB8fCAwKSAlIDI0LCBtaW51dGVzID0gKHBhcnNlSW50KHNlbGYubWludXRlRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjAsIHNlY29uZHMgPSBzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gKHBhcnNlSW50KHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjBcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IGFtcG0ybWlsaXRhcnkoaG91cnMsIHNlbGYuYW1QTS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGltaXRNaW5Ib3VycyA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgdmFyIGxpbWl0TWF4SG91cnMgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERhdGVIYXNUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5jb25maWcubWF4RGF0ZSwgdHJ1ZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgICAgIGlmIChsaW1pdE1heEhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heFRpbWUgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhUaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4VGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWludXRlcywgbWF4VGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtYXhUaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWluKHNlY29uZHMsIG1heFRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW1pdE1pbkhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pblRpbWUgPSBzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5UaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWluRGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWF4KGhvdXJzLCBtaW5UaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWluVGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWludXRlcywgbWluVGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtaW5UaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWF4KHNlY29uZHMsIG1pblRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGltZSBpbnB1dCB2YWx1ZXMgd2l0aCBhIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaikge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXRlT2JqIHx8IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqO1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGVmYXVsdEhvdXJzKCkge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gc2VsZi5jb25maWcuZGVmYXVsdEhvdXI7XG4gICAgICAgICAgICB2YXIgbWludXRlcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGU7XG4gICAgICAgICAgICB2YXIgc2Vjb25kcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBtaW5IciA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWluTWludXRlcyA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pbkhyKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhyKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWluTWludXRlcywgbWludXRlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5IciAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heEhyID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICAgIHZhciBtYXhNaW51dGVzID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4SHIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtYXhNaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heEhyICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGhvdXJzOiBob3VycywgbWludXRlczogbWludXRlcywgc2Vjb25kczogc2Vjb25kcyB9O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBob3VycywgbWludXRlcywgYW5kIG9wdGlvbmFsbHkgc2Vjb25kc1xuICAgICAgICAgKiBvZiB0aGUgbGF0ZXN0IHNlbGVjdGVkIGRhdGUgb2JqZWN0IGFuZCB0aGVcbiAgICAgICAgICogY29ycmVzcG9uZGluZyB0aW1lIGlucHV0c1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaG91cnMgdGhlIGhvdXIuIHdoZXRoZXIgaXRzIG1pbGl0YXJ5XG4gICAgICAgICAqICAgICAgICAgICAgICAgICBvciBhbS1wbSBnZXRzIGluZmVycmVkIGZyb20gY29uZmlnXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtaW51dGVzIHRoZSBtaW51dGVzXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzZWNvbmRzIHRoZSBzZWNvbmRzIChvcHRpb25hbClcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLnNldEhvdXJzKGhvdXJzICUgMjQsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuaG91ckVsZW1lbnQgfHwgIXNlbGYubWludXRlRWxlbWVudCB8fCBzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoIXNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgID8gKCgxMiArIGhvdXJzKSAlIDEyKSArIDEyICogaW50KGhvdXJzICUgMTIgPT09IDApXG4gICAgICAgICAgICAgICAgOiBob3Vycyk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQobWludXRlcyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1baW50KGhvdXJzID49IDEyKV07XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIYW5kbGVzIHRoZSB5ZWFyIGlucHV0IGFuZCBpbmNyZW1lbnRpbmcgZXZlbnRzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IHRoZSBrZXl1cCBvciBpbmNyZW1lbnQgZXZlbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG9uWWVhcklucHV0KGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KGV2ZW50VGFyZ2V0LnZhbHVlKSArIChldmVudC5kZWx0YSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh5ZWFyIC8gMTAwMCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIS9bXlxcZF0vLnRlc3QoeWVhci50b1N0cmluZygpKSkpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHllYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFc3NlbnRpYWxseSBhZGRFdmVudExpc3RlbmVyICsgdHJhY2tpbmdcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGFkZEV2ZW50TGlzdGVuZXIgdG9cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IHRoZSBldmVudCBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGJpbmQoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChldikgeyByZXR1cm4gYmluZChlbGVtZW50LCBldiwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gYmluZChlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9KTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgYWxsIHRoZSBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgICAgICBbXCJvcGVuXCIsIFwiY2xvc2VcIiwgXCJ0b2dnbGVcIiwgXCJjbGVhclwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzZWxmLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLVwiICsgZXZ0ICsgXCJdXCIpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBzZXR1cE1vYmlsZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZShvblJlc2l6ZSwgNTApO1xuICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICYmICEvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcihnZXRFdmVudFRhcmdldChlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudC5ib2R5LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuaW5saW5lICYmICFzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcInRvdWNoc3RhcnRcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwiY2xpY2tcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJmb2N1c1wiLCBkb2N1bWVudENsaWNrLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xpY2tPcGVucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiZm9jdXNcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImNsaWNrXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFwiY2xpY2tcIiwgb25Nb250aE5hdkNsaWNrKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFtcImtleXVwXCIsIFwiaW5jcmVtZW50XCJdLCBvblllYXJJbnB1dCk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwiY2xpY2tcIiwgc2VsZWN0RGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi50aW1lQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWxUZXh0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEV2ZW50VGFyZ2V0KGUpLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFtcImluY3JlbWVudFwiXSwgdXBkYXRlVGltZSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiYmx1clwiLCB1cGRhdGVUaW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiY2xpY2tcIiwgdGltZUluY3JlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZChbc2VsZi5ob3VyRWxlbWVudCwgc2VsZi5taW51dGVFbGVtZW50XSwgW1wiZm9jdXNcIiwgXCJjbGlja1wiXSwgc2VsVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuc2Vjb25kRWxlbWVudCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLnNlY29uZEVsZW1lbnQgJiYgc2VsZi5zZWNvbmRFbGVtZW50LnNlbGVjdCgpOyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZChzZWxmLmFtUE0sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0KVxuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiYmx1clwiLCBvbkJsdXIpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhlIGNhbGVuZGFyIHZpZXcgdG8gYSBwYXJ0aWN1bGFyIGRhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7RGF0ZX0ganVtcERhdGUgdGhlIGRhdGUgdG8gc2V0IHRoZSB2aWV3IHRvXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJpZ2dlckNoYW5nZSBpZiBjaGFuZ2UgZXZlbnRzIHNob3VsZCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGp1bXBUb0RhdGUoanVtcERhdGUsIHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBqdW1wVG8gPSBqdW1wRGF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBzZWxmLnBhcnNlRGF0ZShqdW1wRGF0ZSlcbiAgICAgICAgICAgICAgICA6IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIHx8XG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmIHNlbGYuY29uZmlnLm1pbkRhdGUgPiBzZWxmLm5vd1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiYgc2VsZi5jb25maWcubWF4RGF0ZSA8IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdyk7XG4gICAgICAgICAgICB2YXIgb2xkWWVhciA9IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICB2YXIgb2xkTW9udGggPSBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGp1bXBUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBqdW1wVG8uZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBqdW1wVG8uZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsganVtcFRvO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmIHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciAhPT0gb2xkWWVhciB8fCBzZWxmLmN1cnJlbnRNb250aCAhPT0gb2xkTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB1cC9kb3duIGFycm93IGhhbmRsZXIgZm9yIHRpbWUgaW5wdXRzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGUgdGhlIGNsaWNrIGV2ZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB0aW1lSW5jcmVtZW50KGUpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgaWYgKH5ldmVudFRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImFycm93XCIpKVxuICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KGUsIGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikgPyAxIDogLTEpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmNyZW1lbnRzL2RlY3JlbWVudHMgdGhlIHZhbHVlIG9mIGlucHV0IGFzc29jaS1cbiAgICAgICAgICogYXRlZCB3aXRoIHRoZSB1cC9kb3duIGFycm93IGJ5IGRpc3BhdGNoaW5nIGFuXG4gICAgICAgICAqIFwiaW5jcmVtZW50XCIgZXZlbnQgb24gdGhlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBjbGljayBldmVudFxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGEgdGhlIGRpZmYgKHVzdWFsbHkgMSBvciAtMSlcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBpbnB1dEVsZW0gdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGluY3JlbWVudE51bUlucHV0KGUsIGRlbHRhLCBpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlICYmIGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRFbGVtIHx8XG4gICAgICAgICAgICAgICAgKHRhcmdldCAmJiB0YXJnZXQucGFyZW50Tm9kZSAmJiB0YXJnZXQucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUV2ZW50KFwiaW5jcmVtZW50XCIpO1xuICAgICAgICAgICAgZXZlbnQuZGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgIGlucHV0ICYmIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRNb250aE5hdigpKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1pbm5lckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcud2Vla051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hID0gYnVpbGRXZWVrcygpLCB3ZWVrV3JhcHBlciA9IF9hLndlZWtXcmFwcGVyLCB3ZWVrTnVtYmVycyA9IF9hLndlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHdlZWtXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycyA9IHdlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtXcmFwcGVyID0gd2Vla1dyYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoYnVpbGRXZWVrZGF5cygpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWRheXNcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc2VsZi5pbm5lckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGJ1aWxkVGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmFuZ2VNb2RlXCIsIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFuaW1hdGVcIiwgc2VsZi5jb25maWcuYW5pbWF0ZSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcIm11bHRpTW9udGhcIiwgc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgICAgICB2YXIgY3VzdG9tQXBwZW5kID0gc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lIHx8IHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5pbmxpbmUgPyBcImlubGluZVwiIDogXCJzdGF0aWNcIik7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUFwcGVuZCAmJiBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBzZWxmLl9pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5hcHBlbmRUby5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd3JhcHBlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hcHBlbmRUb1xuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy5kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVEYXkoY2xhc3NOYW1lLCBkYXRlLCBkYXlOdW1iZXIsIGkpIHtcbiAgICAgICAgICAgIHZhciBkYXRlSXNFbmFibGVkID0gaXNFbmFibGVkKGRhdGUsIHRydWUpLCBkYXlFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItZGF5IFwiICsgY2xhc3NOYW1lLCBkYXRlLmdldERhdGUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuZGF0ZU9iaiA9IGRhdGU7XG4gICAgICAgICAgICBkYXlFbGVtZW50LiRpID0gaTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmZvcm1hdERhdGUoZGF0ZSwgc2VsZi5jb25maWcuYXJpYURhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5ub3cpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50b2RheURhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0b2RheVwiKTtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtY3VycmVudFwiLCBcImRhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IGRheUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwic3RhcnRSYW5nZVwiLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhkYXlFbGVtZW50LCBcImVuZFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09IFwibmV4dE1vbnRoRGF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1kaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZShkYXRlKSAmJiAhaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgIT09IFwicHJldk1vbnRoRGF5XCIgJiZcbiAgICAgICAgICAgICAgICBkYXlOdW1iZXIgJSA3ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgXCI8c3BhbiBjbGFzcz0nZmxhdHBpY2tyLWRheSc+XCIgKyBzZWxmLmNvbmZpZy5nZXRXZWVrKGRhdGUpICsgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EYXlDcmVhdGVcIiwgZGF5RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gZGF5RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb2N1c09uRGF5RWxlbSh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICB0YXJnZXROb2RlLmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKHRhcmdldE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEZpcnN0QXZhaWxhYmxlRGF5KGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRNb250aCA9IGRlbHRhID4gMCA/IDAgOiBzZWxmLmNvbmZpZy5zaG93TW9udGhzIC0gMTtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBzdGFydE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZGVsdGEgPiAwID8gMCA6IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gZGVsdGEgPiAwID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIDogLTE7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgIT0gZW5kSW5kZXg7IGkgKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBtb250aC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmIGlzRW5hYmxlZChjLmRhdGVPYmopKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlRGF5KGN1cnJlbnQsIGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgZ2l2ZW5Nb250aCA9IGN1cnJlbnQuY2xhc3NOYW1lLmluZGV4T2YoXCJNb250aFwiKSA9PT0gLTFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQuZGF0ZU9iai5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIHZhciBsb29wRGVsdGEgPSBkZWx0YSA+IDAgPyAxIDogLTE7XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGdpdmVuTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCA9PT0gbVxuICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQuJGkgKyBkZWx0YVxuICAgICAgICAgICAgICAgICAgICA6IGRlbHRhIDwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgdmFyIG51bU1vbnRoRGF5cyA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA+PSAwICYmIGkgPCBudW1Nb250aERheXMgJiYgaSAhPSAoZGVsdGEgPiAwID8gbnVtTW9udGhEYXlzIDogLTEpOyBpICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5hYmxlZChjLmRhdGVPYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhjdXJyZW50LiRpIC0gaSkgPj0gTWF0aC5hYnMoZGVsdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzT25EYXlFbGVtKGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgobG9vcERlbHRhKTtcbiAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkobG9vcERlbHRhKSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXkoY3VycmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICB2YXIgZGF5Rm9jdXNlZCA9IGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgICB2YXIgc3RhcnRFbGVtID0gY3VycmVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICAgICAgOiBkYXlGb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYuc2VsZWN0ZWREYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYudG9kYXlEYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYudG9kYXlEYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYudG9kYXlEYXRlRWxlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Rmlyc3RBdmFpbGFibGVEYXkob2Zmc2V0ID4gMCA/IDEgOiAtMSk7XG4gICAgICAgICAgICBpZiAoc3RhcnRFbGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWRheUZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbShzdGFydEVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0TmV4dEF2YWlsYWJsZURheShzdGFydEVsZW0sIG9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aERheXMoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdE9mTW9udGggPSAobmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpIC0gc2VsZi5sMTBuLmZpcnN0RGF5T2ZXZWVrICsgNykgJSA3O1xuICAgICAgICAgICAgdmFyIHByZXZNb250aERheXMgPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKChtb250aCAtIDEgKyAxMikgJSAxMiwgeWVhcik7XG4gICAgICAgICAgICB2YXIgZGF5c0luTW9udGggPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKG1vbnRoLCB5ZWFyKSwgZGF5cyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGlzTXVsdGlNb250aCA9IHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxLCBwcmV2TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwicHJldk1vbnRoRGF5IGhpZGRlblwiIDogXCJwcmV2TW9udGhEYXlcIiwgbmV4dE1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcIm5leHRNb250aERheSBoaWRkZW5cIiA6IFwibmV4dE1vbnRoRGF5XCI7XG4gICAgICAgICAgICB2YXIgZGF5TnVtYmVyID0gcHJldk1vbnRoRGF5cyArIDEgLSBmaXJzdE9mTW9udGgsIGRheUluZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIHByZXBlbmQgZGF5cyBmcm9tIHRoZSBlbmRpbmcgb2YgcHJldmlvdXMgbW9udGhcbiAgICAgICAgICAgIGZvciAoOyBkYXlOdW1iZXIgPD0gcHJldk1vbnRoRGF5czsgZGF5TnVtYmVyKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShwcmV2TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCBhdCAxIHNpbmNlIHRoZXJlIGlzIG5vIDB0aCBkYXlcbiAgICAgICAgICAgIGZvciAoZGF5TnVtYmVyID0gMTsgZGF5TnVtYmVyIDw9IGRheXNJbk1vbnRoOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KFwiXCIsIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgZGF5cyBmcm9tIHRoZSBuZXh0IG1vbnRoXG4gICAgICAgICAgICBmb3IgKHZhciBkYXlOdW0gPSBkYXlzSW5Nb250aCArIDE7IGRheU51bSA8PSA0MiAtIGZpcnN0T2ZNb250aCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxIHx8IGRheUluZGV4ICUgNyAhPT0gMCk7IGRheU51bSsrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkobmV4dE1vbnRoRGF5Q2xhc3MsIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgZGF5TnVtICUgZGF5c0luTW9udGgpLCBkYXlOdW0sIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3VwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIHZhciBkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZGF5Q29udGFpbmVyXCIpO1xuICAgICAgICAgICAgZGF5Q29udGFpbmVyLmFwcGVuZENoaWxkKGRheXMpO1xuICAgICAgICAgICAgcmV0dXJuIGRheUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZERheXMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGVhck5vZGUoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIC8vIFRPRE86IHdlZWsgbnVtYmVycyBmb3IgZWFjaCBtb250aFxuICAgICAgICAgICAgaWYgKHNlbGYud2Vla051bWJlcnMpXG4gICAgICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYud2Vla051bWJlcnMpO1xuICAgICAgICAgICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGJ1aWxkTW9udGhEYXlzKGQuZ2V0RnVsbFllYXIoKSwgZC5nZXRNb250aCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZyk7XG4gICAgICAgICAgICBzZWxmLmRheXMgPSBzZWxmLmRheXNDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aFN3aXRjaCgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlICE9PSBcImRyb3Bkb3duXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHNob3VsZEJ1aWxkTW9udGggPSBmdW5jdGlvbiAobW9udGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgICAgICAgICBtb250aCA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhKHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQnVpbGRNb250aChpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCBcImZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIG1vbnRoLnZhbHVlID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgaSkuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG1vbnRoLnRleHRDb250ZW50ID0gbW9udGhUb1N0cihpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbik7XG4gICAgICAgICAgICAgICAgbW9udGgudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50TW9udGggPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhcIik7XG4gICAgICAgICAgICB2YXIgbW9udGhOYXZGcmFnbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICB2YXIgbW9udGhFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImN1ci1tb250aFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ubW9udGhBcmlhTGFiZWwpO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lciwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRNb250aCA9IHBhcnNlSW50KHRhcmdldC52YWx1ZSwgMTApO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZU1vbnRoKHNlbGVjdGVkTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgeWVhcklucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJjdXIteWVhclwiLCB7IHRhYmluZGV4OiBcIi0xXCIgfSk7XG4gICAgICAgICAgICB2YXIgeWVhckVsZW1lbnQgPSB5ZWFySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgc2VsZi5sMTBuLnllYXJBcmlhTGFiZWwpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJyZW50TW9udGggPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWN1cnJlbnQtbW9udGhcIik7XG4gICAgICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQobW9udGhFbGVtZW50KTtcbiAgICAgICAgICAgIGN1cnJlbnRNb250aC5hcHBlbmRDaGlsZCh5ZWFySW5wdXQpO1xuICAgICAgICAgICAgbW9udGhOYXZGcmFnbWVudC5hcHBlbmRDaGlsZChjdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoTmF2RnJhZ21lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudDogeWVhckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50OiBtb250aEVsZW1lbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhzKCkge1xuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYubW9udGhOYXYpO1xuICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocykge1xuICAgICAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgbS0tOykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5wdXNoKG1vbnRoLnllYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMucHVzaChtb250aC5tb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5uZXh0TW9udGhOYXYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhOYXYoKSB7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aHNcIik7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXByZXYtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLW5leHQtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5uZXh0QXJyb3c7XG4gICAgICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZVByZXZNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYucHJldk1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZU5leHRNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYubmV4dE1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQgPSBzZWxmLnllYXJFbGVtZW50c1swXTtcbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLm1vbnRoTmF2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkVGltZSgpIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1RpbWVcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhcilcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJub0NhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci10aW1lXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpO1xuICAgICAgICAgICAgdmFyIGhvdXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLWhvdXJcIiwge1xuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxmLmwxMG4uaG91ckFyaWFMYWJlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZUlucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItbWludXRlXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLm1pbnV0ZUFyaWFMYWJlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ID0gbWludXRlSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudGFiSW5kZXggPSBzZWxmLm1pbnV0ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldEhvdXJzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyXG4gICAgICAgICAgICAgICAgICAgIDogbWlsaXRhcnkyYW1wbShzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRNaW51dGVzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGUpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLmhvdXJJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5taW51dGVJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjBcIiA6IFwiMVwiKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMjNcIiA6IFwiMTJcIik7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChob3VySW5wdXQpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlcGFyYXRvcik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQobWludXRlSW5wdXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnRpbWVfMjRocilcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInRpbWUyNGhyXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1NlY29uZHNcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlY29uZElucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3Itc2Vjb25kXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCA9IHNlY29uZElucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0U2Vjb25kcygpXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdFNlY29uZHMpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYubWludXRlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIFwiNTlcIik7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKSk7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlY29uZElucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcudGltZV8yNGhyKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHNlbGYuYW1QTSBpZiBhcHByb3ByaWF0ZVxuICAgICAgICAgICAgICAgIHNlbGYuYW1QTSA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLWFtLXBtXCIsIHNlbGYubDEwbi5hbVBNW2ludCgoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmhvdXJFbGVtZW50LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdEhvdXIpID4gMTEpXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRpdGxlID0gc2VsZi5sMTBuLnRvZ2dsZVRpdGxlO1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmFtUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYudGltZUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpXG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5c1wiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrZGF5Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVdlZWtkYXlzKCk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi53ZWVrZGF5Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWs7XG4gICAgICAgICAgICB2YXIgd2Vla2RheXMgPSBfX3NwcmVhZEFycmF5cyhzZWxmLmwxMG4ud2Vla2RheXMuc2hvcnRoYW5kKTtcbiAgICAgICAgICAgIGlmIChmaXJzdERheU9mV2VlayA+IDAgJiYgZmlyc3REYXlPZldlZWsgPCB3ZWVrZGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5cyA9IF9fc3ByZWFkQXJyYXlzKHdlZWtkYXlzLnNwbGljZShmaXJzdERheU9mV2Vlaywgd2Vla2RheXMubGVuZ3RoKSwgd2Vla2RheXMuc3BsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5jaGlsZHJlbltpXS5pbm5lckhUTUwgPSBcIlxcbiAgICAgIDxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XFxuICAgICAgICBcIiArIHdlZWtkYXlzLmpvaW4oXCI8L3NwYW4+PHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cIikgKyBcIlxcbiAgICAgIDwvc3Bhbj5cXG4gICAgICBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtzKCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzV2Vla3NcIik7XG4gICAgICAgICAgICB2YXIgd2Vla1dyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWt3cmFwcGVyXCIpO1xuICAgICAgICAgICAgd2Vla1dyYXBwZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3Itd2Vla2RheVwiLCBzZWxmLmwxMG4ud2Vla0FiYnJldmlhdGlvbikpO1xuICAgICAgICAgICAgdmFyIHdlZWtOdW1iZXJzID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrc1wiKTtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKHdlZWtOdW1iZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2Vla1dyYXBwZXI6IHdlZWtXcmFwcGVyLFxuICAgICAgICAgICAgICAgIHdlZWtOdW1iZXJzOiB3ZWVrTnVtYmVycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoaXNPZmZzZXQgPT09IHZvaWQgMCkgeyBpc09mZnNldCA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGlzT2Zmc2V0ID8gdmFsdWUgOiB2YWx1ZSAtIHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIChkZWx0YSA+IDAgJiYgc2VsZi5faGlkZU5leHRNb250aEFycm93ID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA8IDAgfHwgc2VsZi5jdXJyZW50TW9udGggPiAxMSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgKz0gc2VsZi5jdXJyZW50TW9udGggPiAxMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYXIodHJpZ2dlckNoYW5nZUV2ZW50LCB0b0luaXRpYWwpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB2b2lkIDApIHsgdG9Jbml0aWFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBnZXREZWZhdWx0SG91cnMoKSwgaG91cnMgPSBfYS5ob3VycywgbWludXRlcyA9IF9hLm1pbnV0ZXMsIHNlY29uZHMgPSBfYS5zZWNvbmRzO1xuICAgICAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJDaGFuZ2VFdmVudCBpcyB0cnVlIChkZWZhdWx0KSBvciBhbiBFdmVudFxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNsb3NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRlc3Ryb3lcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5faGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGggPSBzZWxmLl9oYW5kbGVyc1tpXTtcbiAgICAgICAgICAgICAgICBoLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLmV2ZW50LCBoLmhhbmRsZXIsIGgub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5tb2JpbGVJbnB1dCk7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIubGFzdENoaWxkICYmIHdyYXBwZXIucmVtb3ZlQ2hpbGQod3JhcHBlci5sYXN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod3JhcHBlci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlci5maXJzdENoaWxkLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmFsdElucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBzZWxmLmlucHV0Ll90eXBlO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnJlbW92ZUF0dHJpYnV0ZShcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiX3Nob3dUaW1lSW5wdXRcIixcbiAgICAgICAgICAgICAgICBcImxhdGVzdFNlbGVjdGVkRGF0ZU9ialwiLFxuICAgICAgICAgICAgICAgIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX19oaWRlTmV4dE1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcIl9faGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJpc01vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwiaXNPcGVuXCIsXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJtaW5EYXRlSGFzVGltZVwiLFxuICAgICAgICAgICAgICAgIFwibWF4RGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgICAgICBcImRheXNcIixcbiAgICAgICAgICAgICAgICBcImRheXNDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIl9pbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwiX3Bvc2l0aW9uRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwiaW5uZXJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcInJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJ0b2RheURhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJjYWxlbmRhckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheUNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwicHJldk1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0TW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50TW9udGhFbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50WWVhckVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcIm5hdmlnYXRpb25DdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ1wiLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJFbGVtKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hcHBlbmRUbyAmJiBzZWxmLmNvbmZpZy5hcHBlbmRUby5jb250YWlucyhlbGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRvY3VtZW50Q2xpY2soZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXRfMSA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIHZhciBpc0NhbGVuZGFyRWxlbWVudCA9IGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0XzEpO1xuICAgICAgICAgICAgICAgIHZhciBpc0lucHV0ID0gZXZlbnRUYXJnZXRfMSA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldF8xID09PSBzZWxmLmFsdElucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5jb250YWlucyhldmVudFRhcmdldF8xKSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZWIgY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyBlLnBhdGggaXMgbm90IHByZXNlbnQgaW4gYWxsIGJyb3dzZXJzLiBjaXJjdW12ZW50aW5nIHR5cGVjaGVja3NcbiAgICAgICAgICAgICAgICAgICAgKGUucGF0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXRoLmluZGV4T2YgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh+ZS5wYXRoLmluZGV4T2Yoc2VsZi5pbnB1dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+ZS5wYXRoLmluZGV4T2Yoc2VsZi5hbHRJbnB1dCkpKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9zdEZvY3VzID0gZS50eXBlID09PSBcImJsdXJcIlxuICAgICAgICAgICAgICAgICAgICA/IGlzSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmVsYXRlZFRhcmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgOiAhaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB2YXIgaXNJZ25vcmVkID0gIXNlbGYuY29uZmlnLmlnbm9yZWRGb2N1c0VsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uY29udGFpbnMoZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvc3RGb2N1cyAmJiBpc0lnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSBcIlwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlWWVhcihuZXdZZWFyKSB7XG4gICAgICAgICAgICBpZiAoIW5ld1llYXIgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBuZXdZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmIG5ld1llYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBuZXdZZWFyTnVtID0gbmV3WWVhciwgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gbmV3WWVhck51bTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBuZXdZZWFyTnVtIHx8IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5taW4oc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1heChzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05ld1llYXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNFbmFibGVkKGRhdGUsIHRpbWVsZXNzKSB7XG4gICAgICAgICAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkYXRlVG9DaGVjayA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHVuZGVmaW5lZCwgdGltZWxlc3MpOyAvLyB0aW1lbGVzc1xuICAgICAgICAgICAgaWYgKChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1pbkRhdGVIYXNUaW1lKSA8IDApIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5tYXhEYXRlSGFzVGltZSkgPiAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA9PT0gMCAmJiBzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkYXRlVG9DaGVjayA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBib29sID0gc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA+IDAsIGFycmF5ID0gYm9vbCA/IHNlbGYuY29uZmlnLmVuYWJsZSA6IHNlbGYuY29uZmlnLmRpc2FibGU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZCA9IHZvaWQgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZCA9IGFycmF5W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIGQoZGF0ZVRvQ2hlY2spIC8vIGRpc2FibGVkIGJ5IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIgJiYgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBkYXRlIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZURhdGUoZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCAmJiBwYXJzZWQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYm9vbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAhYm9vbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgcmFuZ2VcbiAgICAgICAgICAgICAgICB0eXBlb2YgZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBkLnRvICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA+PSBkLmZyb20uZ2V0VGltZSgpICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA8PSBkLnRvLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIWJvb2w7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNJblZpZXcoZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImZsYXRwaWNrci1kaXNhYmxlZFwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBlLnRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgICAgICBpZiAoaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICEoZS5yZWxhdGVkVGFyZ2V0ICYmIGlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBlLnRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICAgICAgICAvLyBlLmtleSAgICAgICAgICAgICAgICAgICAgICBlLmtleUNvZGVcbiAgICAgICAgICAgIC8vIFwiQmFja3NwYWNlXCIgICAgICAgICAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICAvLyBcIlRhYlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgLy8gXCJFbnRlclwiICAgICAgICAgICAgICAgICAgICAgICAgICAgMTNcbiAgICAgICAgICAgIC8vIFwiRXNjYXBlXCIgICAgIChJRSBcIkVzY1wiKSAgICAgICAgICAgMjdcbiAgICAgICAgICAgIC8vIFwiQXJyb3dMZWZ0XCIgIChJRSBcIkxlZnRcIikgICAgICAgICAgMzdcbiAgICAgICAgICAgIC8vIFwiQXJyb3dVcFwiICAgIChJRSBcIlVwXCIpICAgICAgICAgICAgMzhcbiAgICAgICAgICAgIC8vIFwiQXJyb3dSaWdodFwiIChJRSBcIlJpZ2h0XCIpICAgICAgICAgMzlcbiAgICAgICAgICAgIC8vIFwiQXJyb3dEb3duXCIgIChJRSBcIkRvd25cIikgICAgICAgICAgNDBcbiAgICAgICAgICAgIC8vIFwiRGVsZXRlXCIgICAgIChJRSBcIkRlbFwiKSAgICAgICAgICAgNDZcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KVxuICAgICAgICAgICAgICAgIDogZXZlbnRUYXJnZXQgPT09IHNlbGYuX2lucHV0O1xuICAgICAgICAgICAgdmFyIGFsbG93SW5wdXQgPSBzZWxmLmNvbmZpZy5hbGxvd0lucHV0O1xuICAgICAgICAgICAgdmFyIGFsbG93S2V5ZG93biA9IHNlbGYuaXNPcGVuICYmICghYWxsb3dJbnB1dCB8fCAhaXNJbnB1dCk7XG4gICAgICAgICAgICB2YXIgYWxsb3dJbmxpbmVLZXlkb3duID0gc2VsZi5jb25maWcuaW5saW5lICYmIGlzSW5wdXQgJiYgIWFsbG93SW5wdXQ7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiBpc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBldmVudFRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldCkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd0tleWRvd24gfHxcbiAgICAgICAgICAgICAgICBhbGxvd0lubGluZUtleWRvd24pIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNUaW1lT2JqID0gISFzZWxmLnRpbWVDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGltZU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5wdXQgJiYgIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiAhaXNJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG93SW5wdXQgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBpc0luVmlldyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YV8xID0gZS5rZXlDb2RlID09PSAzOSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoKGRlbHRhXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheSgxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gZS5rZXlDb2RlID09PSA0MCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuJGkgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNUaW1lT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGEgKiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0ID09PSBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiBzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLnBsdWdpbkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVsZW1zLmluZGV4T2YoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZWxlbXNbaSArIChlLnNoaWZ0S2V5ID8gLTEgOiAxKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCB8fCBzZWxmLl9pbnB1dCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZXZlbnRUYXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMF0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVsxXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25LZXlEb3duXCIsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VPdmVyKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSAxIHx8XG4gICAgICAgICAgICAgICAgKGVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFlbGVtLmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kYXlcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvdmVyRGF0ZSA9IGVsZW1cbiAgICAgICAgICAgICAgICA/IGVsZW0uZGF0ZU9iai5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuZGF5cy5maXJzdEVsZW1lbnRDaGlsZC5kYXRlT2JqLmdldFRpbWUoKSwgaW5pdGlhbERhdGUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHVuZGVmaW5lZCwgdHJ1ZSkuZ2V0VGltZSgpLCByYW5nZVN0YXJ0RGF0ZSA9IE1hdGgubWluKGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSksIHJhbmdlRW5kRGF0ZSA9IE1hdGgubWF4KGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB2YXIgY29udGFpbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIG1pblJhbmdlID0gMCwgbWF4UmFuZ2UgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgdCA9IHJhbmdlU3RhcnREYXRlOyB0IDwgcmFuZ2VFbmREYXRlOyB0ICs9IGR1cmF0aW9uLkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNFbmFibGVkKG5ldyBEYXRlKHQpLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgfHwgKHQgPiByYW5nZVN0YXJ0RGF0ZSAmJiB0IDwgcmFuZ2VFbmREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCBpbml0aWFsRGF0ZSAmJiAoIW1pblJhbmdlIHx8IHQgPiBtaW5SYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPiBpbml0aWFsRGF0ZSAmJiAoIW1heFJhbmdlIHx8IHQgPCBtYXhSYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBtKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSwgbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF5RWxlbSA9IG1vbnRoLmNoaWxkcmVuW2ldLCBkYXRlID0gZGF5RWxlbS5kYXRlT2JqO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvdXRPZlJhbmdlID0gKG1pblJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPCBtaW5SYW5nZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA+IDAgJiYgdGltZXN0YW1wID4gbWF4UmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcImluUmFuZ2VcIiwgXCJzdGFydFJhbmdlXCIsIFwiZW5kUmFuZ2VcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250YWluc0Rpc2FibGVkICYmICFvdXRPZlJhbmdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgW1wic3RhcnRSYW5nZVwiLCBcImluUmFuZ2VcIiwgXCJlbmRSYW5nZVwiLCBcIm5vdEFsbG93ZWRcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGhvdmVyRGF0ZSA8PSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInN0YXJ0UmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsRGF0ZSA8IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcInN0YXJ0UmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcImVuZFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA+PSBtaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA9PT0gMCB8fCB0aW1lc3RhbXAgPD0gbWF4UmFuZ2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNCZXR3ZWVuKHRpbWVzdGFtcCwgaW5pdGlhbERhdGUsIGhvdmVyRGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBtb250aC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3BfMShpLCBsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLnN0YXRpYyAmJiAhc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvcGVuKGUsIHBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uRWxlbWVudCA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uRWxlbWVudCA9IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDsgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCAmJiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uT3BlblwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQuZGlzYWJsZWQgfHwgc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB3YXNPcGVuID0gc2VsZi5pc09wZW47XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXdhc09wZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIocG9zaXRpb25FbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgKGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuaG91ckVsZW1lbnQuc2VsZWN0KCk7IH0sIDUwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWluTWF4RGF0ZVNldHRlcih0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZU9iaiA9IChzZWxmLmNvbmZpZ1tcIl9cIiArIHR5cGUgKyBcIkRhdGVcIl0gPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgdmFyIGludmVyc2VEYXRlT2JqID0gc2VsZi5jb25maWdbXCJfXCIgKyAodHlwZSA9PT0gXCJtaW5cIiA/IFwibWF4XCIgOiBcIm1pblwiKSArIFwiRGF0ZVwiXTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGZbdHlwZSA9PT0gXCJtaW5cIiA/IFwibWluRGF0ZUhhc1RpbWVcIiA6IFwibWF4RGF0ZUhhc1RpbWVcIl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0U2Vjb25kcygpID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBzZWxmLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBpc0VuYWJsZWQoZCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggJiYgdHlwZSA9PT0gXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaik7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlT2JqICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudFt0eXBlXSA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICEhaW52ZXJzZURhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlRGF0ZU9iai5nZXRGdWxsWWVhcigpID09PSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZUNvbmZpZygpIHtcbiAgICAgICAgICAgIHZhciBib29sT3B0cyA9IFtcbiAgICAgICAgICAgICAgICBcIndyYXBcIixcbiAgICAgICAgICAgICAgICBcIndlZWtOdW1iZXJzXCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0ludmFsaWRQcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgXCJjbGlja09wZW5zXCIsXG4gICAgICAgICAgICAgICAgXCJ0aW1lXzI0aHJcIixcbiAgICAgICAgICAgICAgICBcImVuYWJsZVRpbWVcIixcbiAgICAgICAgICAgICAgICBcIm5vQ2FsZW5kYXJcIixcbiAgICAgICAgICAgICAgICBcImFsdElucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJzaG9ydGhhbmRDdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcImlubGluZVwiLFxuICAgICAgICAgICAgICAgIFwic3RhdGljXCIsXG4gICAgICAgICAgICAgICAgXCJlbmFibGVTZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlTW9iaWxlXCIsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LmRhdGFzZXQgfHwge30pKSksIGluc3RhbmNlQ29uZmlnKTtcbiAgICAgICAgICAgIHZhciBmb3JtYXRzID0ge307XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5wYXJzZURhdGUgPSB1c2VyQ29uZmlnLnBhcnNlRGF0ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmZvcm1hdERhdGUgPSB1c2VyQ29uZmlnLmZvcm1hdERhdGU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZW5hYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9lbmFibGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuX2VuYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZGlzYWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZGlzYWJsZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZGlzYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgdGltZU1vZGUgPSB1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiO1xuICAgICAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmRhdGVGb3JtYXQgJiYgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdERhdGVGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0IHx8IGRlZmF1bHRzLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5kYXRlRm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERhdGVGb3JtYXQgKyBcIiBIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLmFsdElucHV0ICYmXG4gICAgICAgICAgICAgICAgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkgJiZcbiAgICAgICAgICAgICAgICAhdXNlckNvbmZpZy5hbHRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdEFsdEZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmFsdEZvcm1hdCB8fCBkZWZhdWx0cy5hbHRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5hbHRGb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTIEtcIiA6IFwiIEtcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdEFsdEZvcm1hdCArIChcIiBoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKSArIFwiIEtcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluRGF0ZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heERhdGVTZXR0ZXIoXCJtaW5cIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9tYXhEYXRlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG1pbk1heFRpbWVTZXR0ZXIgPSBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW3R5cGUgPT09IFwibWluXCIgPyBcIl9taW5UaW1lXCIgOiBcIl9tYXhUaW1lXCJdID0gc2VsZi5wYXJzZURhdGUodmFsLCBcIkg6aTpTXCIpO1xuICAgICAgICAgICAgfTsgfTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtaW5UaW1lXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5UaW1lOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1pblwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heFRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWF4XCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodXNlckNvbmZpZy5tb2RlID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLmNvbmZpZywgZm9ybWF0cywgdXNlckNvbmZpZyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xPcHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzE2NjNcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICBIT09LUy5maWx0ZXIoZnVuY3Rpb24gKGhvb2spIHsgcmV0dXJuIHNlbGYuY29uZmlnW2hvb2tdICE9PSB1bmRlZmluZWQ7IH0pLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tob29rXSA9IGFycmF5aWZ5KHNlbGYuY29uZmlnW2hvb2tdIHx8IFtdKS5tYXAoYmluZFRvSW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmlzTW9iaWxlID1cbiAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZU1vYmlsZSAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuaW5saW5lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgICAgICAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZmlnLnBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcGx1Z2luQ29uZiA9IHNlbGYuY29uZmlnLnBsdWdpbnNbaV0oc2VsZikgfHwge307XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBsdWdpbkNvbmYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEhPT0tTLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gYXJyYXlpZnkocGx1Z2luQ29uZltrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYmluZFRvSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLmNvbmZpZ1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdXNlckNvbmZpZ1trZXldID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdba2V5XSA9IHBsdWdpbkNvbmZba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXVzZXJDb25maWcuYWx0SW5wdXRDbGFzcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJbnB1dEVsZW0oKS5jbGFzc05hbWUgKyBcIiBcIiArIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblBhcnNlQ29uZmlnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldElucHV0RWxlbSgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1pbnB1dF1cIilcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBMb2NhbGUoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlbGYuY29uZmlnLmxvY2FsZSAhPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiZmxhdHBpY2tyOiBpbnZhbGlkIGxvY2FsZSBcIiArIHNlbGYuY29uZmlnLmxvY2FsZSkpO1xuICAgICAgICAgICAgc2VsZi5sMTBuID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0KSwgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubG9jYWxlICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICA/IGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcpLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLnRpbWVfMjRociA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPSBzZWxmLmwxMG4udGltZV8yNGhyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcihzZWxmKTtcbiAgICAgICAgICAgIHNlbGYucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7IGNvbmZpZzogc2VsZi5jb25maWcsIGwxMG46IHNlbGYubDEwbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwb3NpdGlvbkNhbGVuZGFyKGN1c3RvbVBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblByZUNhbGVuZGFyUG9zaXRpb25cIik7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25FbGVtZW50ID0gY3VzdG9tUG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDtcbiAgICAgICAgICAgIHZhciBjYWxlbmRhckhlaWdodCA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNoaWxkcmVuLCAoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHsgcmV0dXJuIGFjYyArIGNoaWxkLm9mZnNldEhlaWdodDsgfSksIDApLCBjYWxlbmRhcldpZHRoID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5vZmZzZXRXaWR0aCwgY29uZmlnUG9zID0gc2VsZi5jb25maWcucG9zaXRpb24uc3BsaXQoXCIgXCIpLCBjb25maWdQb3NWZXJ0aWNhbCA9IGNvbmZpZ1Bvc1swXSwgY29uZmlnUG9zSG9yaXpvbnRhbCA9IGNvbmZpZ1Bvcy5sZW5ndGggPiAxID8gY29uZmlnUG9zWzFdIDogbnVsbCwgaW5wdXRCb3VuZHMgPSBwb3NpdGlvbkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRpc3RhbmNlRnJvbUJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGlucHV0Qm91bmRzLmJvdHRvbSwgc2hvd09uVG9wID0gY29uZmlnUG9zVmVydGljYWwgPT09IFwiYWJvdmVcIiB8fFxuICAgICAgICAgICAgICAgIChjb25maWdQb3NWZXJ0aWNhbCAhPT0gXCJiZWxvd1wiICYmXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlRnJvbUJvdHRvbSA8IGNhbGVuZGFySGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCA+IGNhbGVuZGFySGVpZ2h0KTtcbiAgICAgICAgICAgIHZhciB0b3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgK1xuICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCArXG4gICAgICAgICAgICAgICAgKCFzaG93T25Ub3AgPyBwb3NpdGlvbkVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgMiA6IC1jYWxlbmRhckhlaWdodCAtIDIpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1RvcFwiLCAhc2hvd09uVG9wKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dCb3R0b21cIiwgc2hvd09uVG9wKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5sZWZ0O1xuICAgICAgICAgICAgdmFyIGlzQ2VudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaXNSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgICAgICBsZWZ0IC09IChjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgICAgICAgICAgICBpc0NlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWdQb3NIb3Jpem9udGFsID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgICAgICBsZWZ0IC09IGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dMZWZ0XCIsICFpc0NlbnRlciAmJiAhaXNSaWdodCk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93Q2VudGVyXCIsIGlzQ2VudGVyKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dSaWdodFwiLCBpc1JpZ2h0KTtcbiAgICAgICAgICAgIHZhciByaWdodCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoIC1cbiAgICAgICAgICAgICAgICAod2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMucmlnaHQpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0TW9zdCA9IGxlZnQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTW9zdCA9IHJpZ2h0ICsgY2FsZW5kYXJXaWR0aCA+IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICBpZiAoIXJpZ2h0TW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNlbnRlck1vc3QpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZ2V0RG9jdW1lbnRTdHlsZVNoZWV0KCk7XG4gICAgICAgICAgICAgICAgLy8gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGNzcyBzdXBwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGRvYyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIGJvZHlXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJMZWZ0ID0gTWF0aC5tYXgoMCwgYm9keVdpZHRoIC8gMiAtIGNhbGVuZGFyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckFmdGVyID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YWZ0ZXJcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVySW5kZXggPSBkb2MuY3NzUnVsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJjZW50ZXJNb3N0XCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGNlbnRlckxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldERvY3VtZW50U3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgIHZhciBlZGl0YWJsZVNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWRpdGFibGVTaGVldCA9IHNoZWV0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVkaXRhYmxlU2hlZXQgIT0gbnVsbCA/IGVkaXRhYmxlU2hlZXQgOiBjcmVhdGVTdHlsZVNoZWV0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlLnNoZWV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNBbmRDbG9zZSgpIHtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGhhY2sgLSBidWdzIGluIHRoZSB3YXkgSUUgaGFuZGxlcyBmb2N1cyBrZWVwcyB0aGUgY2FsZW5kYXIgb3BlblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5jbG9zZSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0RGF0ZShlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyIGlzU2VsZWN0YWJsZSA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kaXNhYmxlZFwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHQgPSBmaW5kUGFyZW50KGdldEV2ZW50VGFyZ2V0KGUpLCBpc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdDtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDaGFuZ2VNb250aCA9IChzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA8IHNlbGYuY3VycmVudE1vbnRoIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgPlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc3BsaWNlKHBhcnNlSW50KHNlbGVjdGVkSW5kZXgpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHNlbGVjdGluZyBzYW1lIGRhdGUgdHdpY2UsIHNvcnQgYXNjZW5kaW5nbHlcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZURhdGVzKHNlbGVjdGVkRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIC8vIG1haW50YWluIGZvY3VzXG4gICAgICAgICAgICBpZiAoIXNob3VsZENoYW5nZU1vbnRoICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbSh0YXJnZXQpO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gJiYgc2VsZi5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBzaW5nbGUgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGUgfHwgcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQ0FMTEJBQ0tTID0ge1xuICAgICAgICAgICAgbG9jYWxlOiBbc2V0dXBMb2NhbGUsIHVwZGF0ZVdlZWtkYXlzXSxcbiAgICAgICAgICAgIHNob3dNb250aHM6IFtidWlsZE1vbnRocywgc2V0Q2FsZW5kYXJXaWR0aCwgYnVpbGRXZWVrZGF5c10sXG4gICAgICAgICAgICBtaW5EYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgICAgICBtYXhEYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHNldChvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENBTExCQUNLU1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW29wdGlvbl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChIT09LUy5pbmRleE9mKG9wdGlvbikgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IGFycmF5aWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRTZWxlY3RlZERhdGUoaW5wdXREYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIHZhciBkYXRlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZCwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBpbnB1dERhdGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dERhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGYuY29uZmlnLm1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYW5nZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoaW5wdXREYXRlKSkpO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gKHNlbGYuY29uZmlnLmFsbG93SW52YWxpZFByZWxvYWRcbiAgICAgICAgICAgICAgICA/IGRhdGVzXG4gICAgICAgICAgICAgICAgOiBkYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzRW5hYmxlZChkLCBmYWxzZSk7IH0pKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQ7IH1cbiAgICAgICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xlYXIodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXNbc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIGp1bXBUb0RhdGUodW5kZWZpbmVkLCB0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlRGF0ZVJ1bGVzKGFycikge1xuICAgICAgICAgICAgcmV0dXJuIGFyclxuICAgICAgICAgICAgICAgIC5zbGljZSgpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgICAgICAgICBydWxlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZURhdGUocnVsZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocnVsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBydWxlLmZyb20gJiZcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50bylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHNlbGYucGFyc2VEYXRlKHJ1bGUuZnJvbSwgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBzZWxmLnBhcnNlRGF0ZShydWxlLnRvLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTsgLy8gcmVtb3ZlIGZhbHN5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwRGF0ZXMoKSB7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYubm93ID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubm93KSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBJRTExIHNldHRpbmcgcGxhY2Vob2xkZXIgYXMgdGhlIGlucHV0J3MgdmFsdWVcbiAgICAgICAgICAgIHZhciBwcmVsb2FkZWREYXRlID0gc2VsZi5jb25maWcuZGVmYXVsdERhdGUgfHxcbiAgICAgICAgICAgICAgICAoKHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiSU5QVVRcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0Lm5vZGVOYW1lID09PSBcIlRFWFRBUkVBXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9PT0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcmVsb2FkZWREYXRlKVxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGF0ZShwcmVsb2FkZWREYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuc2VsZWN0ZWREYXRlc1swXVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpID4gc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0VGltZSgpIDwgc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdztcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZi5zZWxlY3RlZERhdGVzWzBdO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWluVGltZSwgXCJIOmlcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heFRpbWUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5tYXhUaW1lLCBcIkg6aVwiKTtcbiAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZS5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICAgICAgc2VsZi5tYXhEYXRlSGFzVGltZSA9XG4gICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBJbnB1dHMoKSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0ID0gZ2V0SW5wdXRFbGVtKCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgZWxlbWVudCBzcGVjaWZpZWRcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhY2s6IHN0b3JlIHByZXZpb3VzIHR5cGUgdG8gcmVzdG9yZSBpdCBhZnRlciBkZXN0cm95KClcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuX3R5cGUgPSBzZWxmLmlucHV0LnR5cGU7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbHRJbnB1dCkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxpY2F0ZSBzZWxmLmVsZW1lbnRcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0ID0gY3JlYXRlRWxlbWVudChzZWxmLmlucHV0Lm5vZGVOYW1lLCBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5yZXF1aXJlZCA9IHNlbGYuaW5wdXQucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50YWJJbmRleCA9IHNlbGYuaW5wdXQudGFiSW5kZXg7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmFsdElucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuYWxsb3dJbnB1dClcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgc2VsZi5fcG9zaXRpb25FbGVtZW50ID0gc2VsZi5jb25maWcucG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX2lucHV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwTW9iaWxlKCkge1xuICAgICAgICAgICAgdmFyIGlucHV0VHlwZSA9IHNlbGYuY29uZmlnLmVuYWJsZVRpbWVcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgIDogXCJkYXRlXCI7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgZmxhdHBpY2tyLW1vYmlsZVwiKTtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudGFiSW5kZXggPSAxO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50eXBlID0gaW5wdXRUeXBlO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFxcXFxUSDppOlNcIlxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiSDppOlNcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGVmYXVsdFZhbHVlID0gc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWluID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnN0ZXAgPSBTdHJpbmcoc2VsZi5pbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5tb2JpbGVJbnB1dCwgc2VsZi5pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHsgfVxuICAgICAgICAgICAgYmluZChzZWxmLm1vYmlsZUlucHV0LCBcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShnZXRFdmVudFRhcmdldChlKS52YWx1ZSwgZmFsc2UsIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNsb3NlXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzT3BlbiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZSgpO1xuICAgICAgICAgICAgc2VsZi5vcGVuKGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChldmVudCwgZGF0YSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZCBhbHJlYWR5LCBhbGwgaG9va3MgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob29rcyA9IHNlbGYuY29uZmlnW2V2ZW50XTtcbiAgICAgICAgICAgIGlmIChob29rcyAhPT0gdW5kZWZpbmVkICYmIGhvb2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaG9va3NbaV0gJiYgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBob29rc1tpXShzZWxmLnNlbGVjdGVkRGF0ZXMsIHNlbGYuaW5wdXQudmFsdWUsIHNlbGYsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcIm9uQ2hhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJjaGFuZ2VcIikpO1xuICAgICAgICAgICAgICAgIC8vIG1hbnkgZnJvbnQtZW5kIGZyYW1ld29ya3MgYmluZCB0byB0aGUgaW5wdXQgZXZlbnRcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJpbnB1dFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuICAgICAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgICAgICAgICAgZS5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0RhdGVTZWxlY3RlZChkYXRlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlRGF0ZXMoc2VsZi5zZWxlY3RlZERhdGVzW2ldLCBkYXRlKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0ZUluUmFuZ2UoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fCBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gKGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0pID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzFdKSA8PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSB8fCAhc2VsZi5tb250aE5hdilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh5ZWFyRWxlbWVudCwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzW2ldLnRleHRDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoVG9TdHIoZC5nZXRNb250aCgpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbikgKyBcIiBcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudmFsdWUgPSBkLmdldE1vbnRoKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQudmFsdWUgPSBkLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5faGlkZVByZXZNb250aEFycm93ID1cbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCA8PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jdXJyZW50WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY3VycmVudE1vbnRoICsgMSA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXREYXRlU3RyKGZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VsZWN0ZWREYXRlc1xuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRPYmopIHsgcmV0dXJuIHNlbGYuZm9ybWF0RGF0ZShkT2JqLCBmb3JtYXQpOyB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQsIGksIGFycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZW5hYmxlVGltZSB8fFxuICAgICAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZihkKSA9PT0gaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5jb25qdW5jdGlvblxuICAgICAgICAgICAgICAgIDogc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgdmFsdWVzIG9mIGlucHV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGVuZGFyXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkICYmIHNlbGYubW9iaWxlRm9ybWF0U3RyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5mb3JtYXREYXRlKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLm1vYmlsZUZvcm1hdFN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmFsdEZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25WYWx1ZVVwZGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbk1vbnRoTmF2Q2xpY2soZSkge1xuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2YXIgaXNQcmV2TW9udGggPSBzZWxmLnByZXZNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoaXNQcmV2TW9udGggfHwgaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VNb250aChpc1ByZXZNb250aCA/IC0xIDogMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLnllYXJFbGVtZW50cy5pbmRleE9mKGV2ZW50VGFyZ2V0KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldmVudFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93RG93blwiKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdGltZVdyYXBwZXIoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGlzS2V5RG93biA9IGUudHlwZSA9PT0gXCJrZXlkb3duXCIsIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSksIGlucHV0ID0gZXZlbnRUYXJnZXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZXZlbnRUYXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgICAgIChpc0tleURvd24gPyAoZS53aGljaCA9PT0gMzggPyAxIDogLTEpIDogMCk7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXJWYWx1ZSArIHN0ZXAgKiBkZWx0YTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzSG91ckVsZW0gPSBpbnB1dCA9PT0gc2VsZi5ob3VyRWxlbWVudCwgaXNNaW51dGVFbGVtID0gaW5wdXQgPT09IHNlbGYubWludXRlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludChpc0hvdXJFbGVtKSAmJiBpbnQoIXNlbGYuYW1QTSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld1ZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50ID8gbmV3VmFsdWUgLSBtYXggLSBpbnQoIXNlbGYuYW1QTSkgOiBtaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKHN0ZXAgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUgKyBjdXJWYWx1ZSA9PT0gMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBwYWQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluaXQoKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgICAgIC8vIHN0YXRpYyBsaXN0XG4gICAgICAgIHZhciBub2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAgICAgLmNhbGwobm9kZUxpc3QpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgICAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZnAtb21pdFwiKSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuX2ZsYXRwaWNrciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gRmxhdHBpY2tySW5zdGFuY2Uobm9kZSwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIEhUTUxDb2xsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBicm93c2VyIGVudlxuICAgICAgICBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuZmxhdHBpY2tyID0gTm9kZUxpc3QucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihbdGhpc10sIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdmFyIGZsYXRwaWNrciA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGZsYXRwaWNrci5sMTBucyA9IHtcbiAgICAgICAgZW46IF9fYXNzaWduKHt9LCBlbmdsaXNoKSxcbiAgICAgICAgZGVmYXVsdDogX19hc3NpZ24oe30sIGVuZ2xpc2gpLFxuICAgIH07XG4gICAgZmxhdHBpY2tyLmxvY2FsaXplID0gZnVuY3Rpb24gKGwxMG4pIHtcbiAgICAgICAgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQpLCBsMTBuKTtcbiAgICB9O1xuICAgIGZsYXRwaWNrci5zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLCBjb25maWcpO1xuICAgIH07XG4gICAgZmxhdHBpY2tyLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoe30pO1xuICAgIGZsYXRwaWNrci5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcih7fSk7XG4gICAgZmxhdHBpY2tyLmNvbXBhcmVEYXRlcyA9IGNvbXBhcmVEYXRlcztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBqUXVlcnkuZm4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgalF1ZXJ5LmZuLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY2FtZWxjYXNlXG4gICAgRGF0ZS5wcm90b3R5cGUuZnBfaW5jciA9IGZ1bmN0aW9uIChkYXlzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksIHRoaXMuZ2V0TW9udGgoKSwgdGhpcy5nZXREYXRlKCkgKyAodHlwZW9mIGRheXMgPT09IFwic3RyaW5nXCIgPyBwYXJzZUludChkYXlzLCAxMCkgOiBkYXlzKSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB3aW5kb3cuZmxhdHBpY2tyID0gZmxhdHBpY2tyO1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0cGlja3I7XG5cbn0pKSk7XG4iLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IHJlcXVpcmUoXCItIUQ6XFxcXEdpdGh1YlxcXFxCQmpHcmlkRXhXaWRnZXRcXFxcY2xpZW50XFxcXG5vZGVfbW9kdWxlc1xcXFxiYWJlbC1sb2FkZXJcXFxcbGliXFxcXGluZGV4LmpzPz9yZWYtLTQhLlxcXFxiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy5qc1wiKTsiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0Mik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMGJhZTA1OWUyYjVmZTI2YzViMTAiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4vQ29tcG9uZW50J1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Db21wb25lbnQvaW5kZXguanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlcixcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycywgZ2V0T3duS2V5cywgYmluZCB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRQcm90b3R5cGVPZiB9ID0gT2JqZWN0O1xuXG5sZXQgbWFwU3RvcmU7XG5cbmZ1bmN0aW9uIGdldEJvdW5kU3VwZXIob2JqLCBmbikge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVzaW5nIEBhdXRvYmluZCBvbiAke2ZuLm5hbWV9KCkgcmVxdWlyZXMgV2Vha01hcCBzdXBwb3J0IGR1ZSB0byBpdHMgdXNlIG9mIHN1cGVyLiR7Zm4ubmFtZX0oKVxuICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXlwaGVscHMvY29yZS1kZWNvcmF0b3JzLmpzL2lzc3Vlcy8yMGBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFtYXBTdG9yZSkge1xuICAgICBtYXBTdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIH1cblxuICBpZiAobWFwU3RvcmUuaGFzKG9iaikgPT09IGZhbHNlKSB7XG4gICAgbWFwU3RvcmUuc2V0KG9iaiwgbmV3IFdlYWtNYXAoKSk7XG4gIH1cblxuICBjb25zdCBzdXBlclN0b3JlID0gbWFwU3RvcmUuZ2V0KG9iaik7XG5cbiAgaWYgKHN1cGVyU3RvcmUuaGFzKGZuKSA9PT0gZmFsc2UpIHtcbiAgICBzdXBlclN0b3JlLnNldChmbiwgYmluZChmbiwgb2JqKSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJTdG9yZS5nZXQoZm4pO1xufVxuXG5mdW5jdGlvbiBhdXRvYmluZENsYXNzKGtsYXNzKSB7XG4gIGNvbnN0IGRlc2NzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhrbGFzcy5wcm90b3R5cGUpO1xuICBjb25zdCBrZXlzID0gZ2V0T3duS2V5cyhkZXNjcyk7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgIT09ICdmdW5jdGlvbicgfHwga2V5ID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBkZWZpbmVQcm9wZXJ0eShrbGFzcy5wcm90b3R5cGUsIGtleSwgYXV0b2JpbmRNZXRob2Qoa2xhc3MucHJvdG90eXBlLCBrZXksIGRlc2MpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRvYmluZE1ldGhvZCh0YXJnZXQsIGtleSwgeyB2YWx1ZTogZm4sIGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSB9KSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEBhdXRvYmluZCBjYW4gb25seSBiZSB1c2VkIG9uIGZ1bmN0aW9ucywgbm90OiAke2ZufWApO1xuICB9XG5cbiAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGFyZ2V0O1xuXG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGUsXG5cbiAgICBnZXQoKSB7XG4gICAgICAvLyBDbGFzcy5wcm90b3R5cGUua2V5IGxvb2t1cFxuICAgICAgLy8gU29tZW9uZSBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZSBvbiB3aGljaCBpdCBpc1xuICAgICAgLy8gYWN0dWFsbHkgZGVmaW5lZCBvbiwgaS5lLiBDbGFzcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYXNzLnByb3RvdHlwZS5rZXkgbG9va3VwXG4gICAgICAvLyBTb21lb25lIGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBkaXJlY3RseSBvbiBhIHByb3RvdHlwZSBidXQgaXQgd2FzIGZvdW5kXG4gICAgICAvLyB1cCB0aGUgY2hhaW4sIG5vdCBkZWZpbmVkIGRpcmVjdGx5IG9uIGl0XG4gICAgICAvLyBpLmUuIENsYXNzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShrZXkpID09IGZhbHNlICYmIGtleSBpbiBDbGFzcy5wcm90b3R5cGVcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvciA9PT0gY29uc3RydWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvYm91bmQgbWV0aG9kIGNhbGxpbmcgc3VwZXIuc2FtZU1ldGhvZCgpIHdoaWNoIGlzIGFsc28gYXV0b2JvdW5kIGFuZCBzbyBvbi5cbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBrZXkgaW4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIGdldEJvdW5kU3VwZXIodGhpcywgZm4pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZEZuID0gYmluZChmbiwgdGhpcyk7XG5cbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAvLyBOT1QgZW51bWVyYWJsZSB3aGVuIGl0J3MgYSBib3VuZCBtZXRob2RcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBib3VuZEZuXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJvdW5kRm47XG4gICAgfSxcbiAgICBzZXQ6IGNyZWF0ZURlZmF1bHRTZXR0ZXIoa2V5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYXV0b2JpbmRDbGFzcyguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXV0b2JpbmRNZXRob2QoLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2JpbmQoLi4uYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZShhcmd1bWVudHMpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGhhbmRsZShhcmdzKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvYXV0b2JpbmQuanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5cbmNvbnN0IEdFTkVSSUNfRlVOQ1RJT05fRVJST1IgPSAne2NoaWxkfSBkb2VzIG5vdCBwcm9wZXJseSBvdmVycmlkZSB7cGFyZW50fSc7XG5jb25zdCBGVU5DVElPTl9SRUdFWFAgPSAvXmZ1bmN0aW9uIChbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVtfJGEtekEtWjAtOVxceEEwLVxcdUZGRkZdKik/KFxcKFteXFwpXSpcXCkpW1xcc1xcU10rJC87XG5cbmNsYXNzIFN5bnRheEVycm9yUmVwb3J0ZXIge1xuICBwYXJlbnRLbGFzcztcbiAgY2hpbGRLbGFzcztcbiAgcGFyZW50RGVzY3JpcHRvcjtcbiAgY2hpbGREZXNjcmlwdG9yO1xuICBcbiAgZ2V0IGtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZERlc2NyaXB0b3Iua2V5OyAgXG4gIH1cbiAgXG4gIGdldCBwYXJlbnROb3RhdGlvbigpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYXJlbnRLbGFzcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMucGFyZW50UHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuXG4gIGdldCBjaGlsZE5vdGF0aW9uKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmNoaWxkS2xhc3MuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLmNoaWxkUHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuICBcbiAgZ2V0IHBhcmVudFRvcGljKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUb3BpYyh0aGlzLnBhcmVudERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBnZXQgY2hpbGRUb3BpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VG9waWModGhpcy5jaGlsZERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBfZ2V0VG9waWMoZGVzY3JpcHRvcikge1xuICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsOyAgXG4gICAgfVxuICAgIFxuICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ2dldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ3NldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iuc2V0O1xuICAgIH1cbiAgfVxuICBcbiAgZ2V0IHBhcmVudFByb3BlcnR5U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYWN0VG9waWNTaWduYXR1cmUodGhpcy5wYXJlbnRUb3BpYyk7IFxuICB9XG4gIFxuICBnZXQgY2hpbGRQcm9wZXJ0eVNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRoaXMuY2hpbGRUb3BpYyk7IFxuICB9XG4gIFxuICBfZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRvcGljKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdG9waWMpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RGdW5jdGlvblNpZ25hdHVyZSh0b3BpYyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XG4gICAgfVxuICB9XG4gIFxuICBfZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlKGZuKSB7XG4gICAgcmV0dXJuIGZuXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgIEZVTkNUSU9OX1JFR0VYUCxcbiAgICAgICAgKG1hdGNoLCBuYW1lID0gdGhpcy5rZXksIHBhcmFtcykgPT4gbmFtZSArIHBhcmFtc1xuICAgICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHBhcmVudEtsYXNzLCBjaGlsZEtsYXNzLCBwYXJlbnREZXNjcmlwdG9yLCBjaGlsZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLnBhcmVudEtsYXNzID0gcGFyZW50S2xhc3M7XG4gICAgdGhpcy5jaGlsZEtsYXNzID0gY2hpbGRLbGFzcztcbiAgICB0aGlzLnBhcmVudERlc2NyaXB0b3IgPSBwYXJlbnREZXNjcmlwdG9yO1xuICAgIHRoaXMuY2hpbGREZXNjcmlwdG9yID0gY2hpbGREZXNjcmlwdG9yO1xuICB9XG4gIFxuICBhc3NlcnQoY29uZGl0aW9uLCBtc2cgPSAnJykge1xuICAgIGlmIChjb25kaXRpb24gIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZXJyb3IoR0VORVJJQ19GVU5DVElPTl9FUlJPUiArIG1zZyk7XG4gICAgfVxuICB9XG4gIFxuICBlcnJvcihtc2cpIHtcbiAgICBtc2cgPSBtc2dcbiAgICAgIC8vIFJlcGxhY2UgbGF6aWx5LCBiZWNhdXNlIHRoZXkgYWN0dWFsbHkgbWlnaHQgbm90XG4gICAgICAvLyBiZSBhdmFpbGFibGUgaW4gYWxsIGNhc2VzXG4gICAgICAucmVwbGFjZSgne3BhcmVudH0nLCBtID0+IHRoaXMucGFyZW50Tm90YXRpb24pXG4gICAgICAucmVwbGFjZSgne2NoaWxkfScsIG0gPT4gdGhpcy5jaGlsZE5vdGF0aW9uKTtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IobXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yVHlwZShkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgcmV0dXJuICdkYXRhJztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdnZXQnKSB8fCBkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdzZXQnKSkge1xuICAgIHJldHVybiAnYWNjZXNzb3InO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGVtIGV4aXN0LCBicm93c2VycyB0cmVhdCBpdCBhc1xuICAvLyBhIGRhdGEgZGVzY3JpcHRvciB3aXRoIGEgdmFsdWUgb2YgYHVuZGVmaW5lZGBcbiAgcmV0dXJuICdkYXRhJztcbn1cblxuZnVuY3Rpb24gY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgcmVwb3J0ZXIuYXNzZXJ0KHBhcmVudC5sZW5ndGggPT09IGNoaWxkLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFZhbHVlVHlwZSA9IHR5cGVvZiBwYXJlbnQudmFsdWU7XG4gIGNvbnN0IGNoaWxkVmFsdWVUeXBlID0gdHlwZW9mIGNoaWxkLnZhbHVlO1xuICBcbiAgaWYgKHBhcmVudFZhbHVlVHlwZSA9PT0gJ3VuZGVmaW5lZCcgJiYgY2hpbGRWYWx1ZVR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gY2xhc3MgcHJvcGVydGllcyBjYW4gYmUgYW55IGV4cHJlc3Npb24sIHdoaWNoIGlzbid0IHJhbiB1bnRpbCB0aGVcbiAgICAvLyB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZCwgc28gd2UgY2FuJ3QgcmVsaWFibHkgZ2V0IHR5cGUgaW5mb3JtYXRpb25cbiAgICAvLyBmb3IgdGhlbSB5ZXQgKHBlciBzcGVjKS4gUGVyaGFwcyB3aGVuIEJhYmVsIGluY2x1ZGVzIGZsb3ctdHlwZSBpbmZvXG4gICAgLy8gaW4gcnVudGltZT8gVHJpZWQgcmVnZXggc29sdXRpb25zLCBidXQgc3VwZXIgaGFja3kgYW5kIG9ubHkgZmVhc2libGVcbiAgICAvLyBvbiBwcmltaXRpdmVzLCB3aGljaCBpcyBjb25mdXNpbmcgZm9yIHVzYWdlLi4uXG4gICAgcmVwb3J0ZXIuZXJyb3IoYGRlc2NyaXB0b3IgdmFsdWVzIGFyZSBib3RoIHVuZGVmaW5lZC4gKGNsYXNzIHByb3BlcnRpZXMgYXJlIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCknYCk7XG4gIH1cbiAgXG4gIGlmIChwYXJlbnRWYWx1ZVR5cGUgIT09IGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY29uc3QgaXNGdW5jdGlvbk92ZXJVbmRlZmluZWQgPSAoY2hpbGRWYWx1ZVR5cGUgPT09ICdmdW5jdGlvbicgJiYgcGFyZW50VmFsdWVUeXBlID09PSB1bmRlZmluZWQpO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgY2xhc3MgcHJvcGVydGllcywgdGhpc1xuICAgIC8vIHdpbGwgc3RpbGwgaGFuZGxlIG1vcmUgdGhhbiBqdXN0IGZ1bmN0aW9ucywganVzdCBpbiBjYXNlLlxuICAgIC8vIFNoYWRvd2luZyBhbiB1bmRlZmluZWQgdmFsdWUgaXMgYW4gZXJyb3IgaWYgdGhlIGluaGVyaXRlZFxuICAgIC8vIHZhbHVlIHdhcyB1bmRlZmluZWQgKHVzdWFsbHkgYSBjbGFzcyBwcm9wZXJ0eSwgbm90IGEgbWV0aG9kKVxuICAgIGlmIChpc0Z1bmN0aW9uT3ZlclVuZGVmaW5lZCB8fCBwYXJlbnRWYWx1ZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHZhbHVlIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFZhbHVlVHlwZX1cIiwge2NoaWxkfSBpcyBcIiR7Y2hpbGRWYWx1ZVR5cGV9XCJgKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFN3aXRjaCwgaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcgbW9yZSB0eXBlc1xuICBzd2l0Y2ggKGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LnZhbHVlLCBjaGlsZC52YWx1ZSwgcmVwb3J0ZXIpO1xuICAgICAgYnJlYWs7XG4gICAgICBcbiAgICBkZWZhdWx0OlxuICAgICAgcmVwb3J0ZXIuZXJyb3IoYFVuZXhwZWN0ZWQgZXJyb3IuIFBsZWFzZSBmaWxlIGEgYnVnIHdpdGg6IHtwYXJlbnR9IGlzIFwiJHtwYXJlbnRWYWx1ZVR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVmFsdWVUeXBlfVwiYCk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgY29uc3QgcGFyZW50SGFzR2V0dGVyID0gdHlwZW9mIHBhcmVudC5nZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzR2V0dGVyID0gdHlwZW9mIGNoaWxkLmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgcGFyZW50SGFzU2V0dGVyID0gdHlwZW9mIHBhcmVudC5zZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzU2V0dGVyID0gdHlwZW9mIGNoaWxkLnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgXG4gIGlmIChwYXJlbnRIYXNHZXR0ZXIgfHwgY2hpbGRIYXNHZXR0ZXIpIHtcbiAgICBpZiAoIXBhcmVudEhhc0dldHRlciAmJiBwYXJlbnRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBzZXR0ZXIgYnV0IHtjaGlsZH0gaXMgZ2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghY2hpbGRIYXNHZXR0ZXIgJiYgY2hpbGRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBnZXR0ZXIgYnV0IHtjaGlsZH0gaXMgc2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudC5nZXQsIGNoaWxkLmdldCwgcmVwb3J0ZXIpO1xuICB9XG4gIFxuICBpZiAocGFyZW50SGFzU2V0dGVyIHx8IGNoaWxkSGFzU2V0dGVyKSB7XG4gICAgaWYgKCFwYXJlbnRIYXNTZXR0ZXIgJiYgcGFyZW50SGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgZ2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIHNldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWNoaWxkSGFzU2V0dGVyICYmIGNoaWxkSGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgc2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIGdldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQuc2V0LCBjaGlsZC5zZXQsIHJlcG9ydGVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0Rlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShwYXJlbnQpO1xuICBjb25zdCBjaGlsZFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShjaGlsZCk7XG5cbiAgaWYgKHBhcmVudFR5cGUgIT09IGNoaWxkVHlwZSkge1xuICAgIHJlcG9ydGVyLmVycm9yKGBkZXNjcmlwdG9yIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVHlwZX1cImApO1xuICB9XG5cbiAgc3dpdGNoIChjaGlsZFR5cGUpIHtcbiAgICBjYXNlICdkYXRhJzpcbiAgICAgIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYWNjZXNzb3InOlxuICAgICAgY2hlY2tBY2Nlc3NvckRlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmNvbnN0IHN1Z2dlc3Rpb25UcmFuc2Zvcm1zID0gW1xuICBrZXkgPT4ga2V5LnRvTG93ZXJDYXNlKCksXG4gIGtleSA9PiBrZXkudG9VcHBlckNhc2UoKSxcbiAga2V5ID0+IGtleSArICdzJyxcbiAga2V5ID0+IGtleS5zbGljZSgwLCAtMSksXG4gIGtleSA9PiBrZXkuc2xpY2UoMSwga2V5Lmxlbmd0aCksXG5dO1xuXG5mdW5jdGlvbiBmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMoc3VwZXJLbGFzcywga2V5KSB7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gc3VnZ2VzdGlvblRyYW5zZm9ybXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgZm4gPSBzdWdnZXN0aW9uVHJhbnNmb3Jtc1tpXTtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gZm4oa2V5KTtcblxuICAgIGlmIChzdWdnZXN0aW9uIGluIHN1cGVyS2xhc3MpIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci5rZXkgPSBrZXk7XG4gIGNvbnN0IHN1cGVyS2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgY29uc3Qgc3VwZXJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdXBlcktsYXNzLCBrZXkpO1xuICBjb25zdCByZXBvcnRlciA9IG5ldyBTeW50YXhFcnJvclJlcG9ydGVyKHN1cGVyS2xhc3MsIHRhcmdldCwgc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yKTtcbiAgXG4gIGlmIChzdXBlckRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHN1Z2dlc3RlZEtleSA9IGZpbmRQb3NzaWJsZUFsdGVybmF0aXZlcyhzdXBlcktsYXNzLCBrZXkpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBzdWdnZXN0ZWRLZXkgPyBgXFxuXFxuICBEaWQgeW91IG1lYW4gXCIke3N1Z2dlc3RlZEtleX1cIj9gIDogJyc7XG4gICAgcmVwb3J0ZXIuZXJyb3IoYE5vIGRlc2NyaXB0b3IgbWF0Y2hpbmcge2NoaWxkfSB3YXMgZm91bmQgb24gdGhlIHByb3RvdHlwZSBjaGFpbi4ke3N1Z2dlc3Rpb259YCk7XG4gIH1cbiAgXG4gIGNoZWNrRGVzY3JpcHRvcnMoc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yLCByZXBvcnRlcik7XG4gIFxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3ZlcnJpZGUoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9vdmVycmlkZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG59O1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8gKyBcIiBcIiArIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGUsIHVwZGF0ZSwgcmVtb3ZlLCByZXN1bHQ7XG5cblx0Ly8gSWYgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gd2FzIGRlZmluZWQsIHJ1biBpdCBvbiB0aGUgY3NzXG5cdGlmIChvcHRpb25zLnRyYW5zZm9ybSAmJiBvYmouY3NzKSB7XG5cdCAgICByZXN1bHQgPSBvcHRpb25zLnRyYW5zZm9ybShvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIsImltcG9ydCBsYXp5SW5pdGlhbGl6ZSBmcm9tICcuLi9sYXp5LWluaXRpYWxpemUnO1xuXG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgIGdldE93blByb3BlcnR5TmFtZXMsIGdldE93blByb3BlcnR5U3ltYm9scyB9ID0gT2JqZWN0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjcmlwdG9yKGRlc2MpIHtcbiAgaWYgKCFkZXNjIHx8ICFkZXNjLmhhc093blByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IFsndmFsdWUnLCAnaW5pdGlhbGl6ZXInLCAnZ2V0JywgJ3NldCddO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZGVzYy5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgZW50cnlBcmdzKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZW50cnlBcmdzW2VudHJ5QXJncy5sZW5ndGggLSAxXSkpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVzY3JpcHRvciguLi5lbnRyeUFyZ3MsIFtdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZURlc2NyaXB0b3IoLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgZW50cnlBcmdzKTtcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIE1ldGEge1xuICBAbGF6eUluaXRpYWxpemVcbiAgZGVib3VuY2VUaW1lb3V0SWRzID0ge307XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHRocm90dGxlVGltZW91dElkcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVByZXZpb3VzVGltZXN0YW1wcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVRyYWlsaW5nQXJncyA9IG51bGw7XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHByb2ZpbGVMYXN0UmFuID0gbnVsbDtcbn1cblxuY29uc3QgTUVUQV9LRVkgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBTeW1ib2woJ19fY29yZV9kZWNvcmF0b3JzX18nKVxuICA6ICdfX2NvcmVfZGVjb3JhdG9yc19fJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFGb3Iob2JqKSB7XG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkoTUVUQV9LRVkpID09PSBmYWxzZSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iaiwgTUVUQV9LRVksIHtcbiAgICAgIC8vIERlZmF1bHRzOiBOT1QgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCBvciB3cml0YWJsZVxuICAgICAgdmFsdWU6IG5ldyBNZXRhKClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmpbTUVUQV9LRVldO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T3duS2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9sc1xuICAgID8gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpXG4gICAgICAgICAgLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSk7XG4gICAgICB9XG4gICAgOiBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaikge1xuICBjb25zdCBkZXNjcyA9IHt9O1xuXG4gIGdldE93bktleXMob2JqKS5mb3JFYWNoKFxuICAgIGtleSA9PiAoZGVzY3Nba2V5XSA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gICk7XG5cbiAgcmV0dXJuIGRlc2NzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChuZXdWYWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgLy8gSVMgZW51bWVyYWJsZSB3aGVuIHJlYXNzaWduZWQgYnkgdGhlIG91dHNpZGUgd29yZFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZChmbiwgY29udGV4dCkge1xuICBpZiAoZm4uYmluZCkge1xuICAgIHJldHVybiBmbi5iaW5kKGNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBfX2F1dG9iaW5kX18oKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3YXJuID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAnb2JqZWN0JyB8fCAhY29uc29sZSB8fCB0eXBlb2YgY29uc29sZS53YXJuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiaW5kKGNvbnNvbGUud2FybiwgY29uc29sZSk7XG4gIH1cbn0pKCk7XG5cbmNvbnN0IHNlZW5EZXByZWNhdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbERlcHJlY2F0aW9uKG1zZykge1xuICBpZiAoc2VlbkRlcHJlY2F0aW9uc1ttc2ddICE9PSB0cnVlKSB7XG4gICAgc2VlbkRlcHJlY2F0aW9uc1ttc2ddID0gdHJ1ZTtcbiAgICB3YXJuKCdERVBSRUNBVElPTjogJyArIG1zZyk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL3ByaXZhdGUvdXRpbHMuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuU3dpdGNoIGZyb20gJy4vQm9vbGVhblN3aXRjaCdcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuL1RlbXBsYXRlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZW1wbGF0ZVJlbmRlcmVyL2luZGV4LmpzIiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnblZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuZXhwb3J0IGRlZmF1bHQgZnJlZUdsb2JhbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNMZW5ndGg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XHJcblx0aWYoIW9yaWdpbmFsTW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xyXG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiZXhwb3J0c1wiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHR9KTtcclxuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9kdWxlO1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFcnJvci5qcyIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TWFwO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlSW50ZXJwb2xhdGUuanMiLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwiaW1wb3J0IHsgZGVjb3JhdGUgfSBmcm9tICcuL3ByaXZhdGUvdXRpbHMnO1xuXG5mdW5jdGlvbiBoYW5kbGVEZXNjcmlwdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlYWRvbmx5KC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcmVhZG9ubHkuanMiLCJpbXBvcnQgdHpQYXJzZVRpbWV6b25lIGZyb20gJy4uL19saWIvdHpQYXJzZVRpbWV6b25lJ1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzJ1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUnXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IHR6UGFyc2VUaW1lem9uZSh0aW1lWm9uZSwgdXRjRGF0ZSlcblxuICByZXR1cm4gb2Zmc2V0TWlsbGlzZWNvbmRzXG4gICAgPyBzdWJNaWxsaXNlY29uZHModXRjRGF0ZSwgb2Zmc2V0TWlsbGlzZWNvbmRzKVxuICAgIDogdXRjRGF0ZVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS91dGNUb1pvbmVkVGltZS9pbmRleC5qcyIsImltcG9ydCB0elRva2VuaXplRGF0ZSBmcm9tICcuLi90elRva2VuaXplRGF0ZS9pbmRleC5qcydcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elBhcnNlVGltZXpvbmUvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi9FdmVudHNNaXhpbidcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRzTWl4aW5cbmV4cG9ydCB7IHdpdGhFdmVudHNNaXhpbiB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRXZlbnRzTWl4aW4vaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuL0RhdGVUaW1lSW5wdXQnXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lSW5wdXRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUlucHV0L2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5FZGl0b3IgZnJvbSAnLi9Cb29sZWFuRWRpdG9yJ1xuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcbmltcG9ydCBCb29sZWFuRmlsdGVyIGZyb20gJy4vQm9vbGVhbkZpbHRlcidcbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL1RleHRFZGl0b3InXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuL1RlbXBsYXRlUmVuZGVyZXInXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5pbXBvcnQgRGF0ZVRpbWVGaWx0ZXIgZnJvbSAnLi9EYXRlVGltZUZpbHRlcidcbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQge1xuICBCb29sZWFuRWRpdG9yLFxuICBCb29sZWFuUmVuZGVyZXIsXG4gIEJvb2xlYW5GaWx0ZXIsXG4gIE51bWJlckVkaXRvcixcbiAgVGV4dEVkaXRvcixcbiAgVGVtcGxhdGVSZW5kZXJlcixcbiAgSW1hZ2VSZW5kZXJlcixcbiAgRGF0ZVRpbWVGaWx0ZXIsXG4gIERhdGVUaW1lRWRpdG9yLFxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5FZGl0b3IgZnJvbSAnLi9Cb29sZWFuRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IEJvb2xlYW5Td2l0Y2ggZnJvbSAnLi4vQm9vbGVhblN3aXRjaCdcblxuLyoqXG4gKiBCb29sZWFucyBFZGl0b3JcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmJvb2xlYW5Vc2VkVHJ1ZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0aGUgZWRpdG9yIGNoYW5nZXMgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZSB0byB0cnVlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0aGUgZWRpdG9yIGNoYW5nZXMgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZSB0byBmYWxzZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQm9vbGVhbkVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBCb29sZWFuKHBhcmFtcy5rZXlQcmVzcylcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gQm9vbGVhbihwYXJhbXMuY2hhclByZXNzKVxuICAgIH1cblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdLmNvbmNhdChcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pXG4gICAgKVxuXG4gICAgdGhpcy5fZmFsc2VWYWx1ZSA9IFtdLmNvbmNhdChcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSlcbiAgICApXG5cbiAgICB0aGlzLl9yZXR1cm5UcnVlVmFsdWUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdib29sZWFuVXNlZFRydWVWYWx1ZScsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl90cnVlVmFsdWVbMF1cbiAgICApXG4gICAgdGhpcy5fcmV0dXJuRmFsc2VWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2Jvb2xlYW5Vc2VkRmFsc2VWYWx1ZScsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl9mYWxzZVZhbHVlWzBdXG4gICAgKVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gdGhpcy5fdHJ1ZVZhbHVlLm1hcCh4ID0+IFN0cmluZyh4KSlcbiAgICB0aGlzLl9mYWxzZVZhbHVlID0gdGhpcy5fZmFsc2VWYWx1ZS5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICB0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCA9IHBhcmFtcy5jZWxsU3RhcnRlZEVkaXRcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZShcbiAgICAgIHRoaXMuX3ZhbHVlLFxuICAgICAgdGhpcy5fdHJ1ZVZhbHVlLFxuICAgICAgdGhpcy5fZmFsc2VWYWx1ZVxuICAgIClcblxuICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2godGhpcy5fdmFsdWUsIHN3aXRjaGVyID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKFxuICAgICAgICBzd2l0Y2hlci5pc0NoZWNrZWQoKSxcbiAgICAgICAgdGhpcy5fdHJ1ZVZhbHVlLFxuICAgICAgICB0aGlzLl9mYWxzZVZhbHVlXG4gICAgICApXG4gICAgfSlcbiAgICB0aGlzLl9zd2l0Y2hlci5pbml0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3dpdGNoZXIuZ2V0R3VpKClcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKiBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCBhbmQgbGlzdGVuaW5nIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgdGhpcy5mb2N1c0luKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaW5hbCB2YWx1ZSB0byB0aGUgZ3JpZCwgdGhlIHJlc3VsdCBvZiB0aGUgZWRpdGluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8gdGhpcy5fcmV0dXJuVHJ1ZVZhbHVlIDogdGhpcy5fcmV0dXJuRmFsc2VWYWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgaW5pdGlhbGl6ZWQgYW5kIHJldHVybnMgZmFsc2Ugc28gdGhlIGVkaXRvciBhcHBlYXJzIGluIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGFsd2F5cyBmYWxzZVxuICAgKiovXG4gIGlzUG9wdXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgaW50byB0aGUgY2VsbC5cbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGZvY3VzSW4oKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQoZmFsc2UpXG4gICAgdGhpcy5fc3dpdGNoZXIuZm9jdXMoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgb3V0IG9mIHRoZSBjZWxsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZm9jdXNPdXQoKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWUgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHRydWVWYWx1ZSB0cnVlIHZhbHVlIGFsaWFzXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gZmFsc2VWYWx1ZSBmYWxzZSB2YWx1ZSBhbGlhc1xuICAgKi9cbiAgX2NvbnZlcnRWYWx1ZSh2YWx1ZSwgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWVBc1N0cmluZyA9IFN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiB0cnVlVmFsdWUuaW5kZXhPZih2YWx1ZUFzU3RyaW5nKSA+IC0xXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlQXNTdHJpbmcpID4gLTFcbiAgICAgID8gZmFsc2VcbiAgICAgIDogdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkVkaXRvci9Cb29sZWFuRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogVGhlIGJhc2UgY29tcG9uZW50IGNsYXNzXG4gKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3Mgd2hpY2ggYWxsIGNvbXBvbmVudHMgc2hvdWxkIHVzZVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGh0bWwgZWxlbWVudFxuICAgKlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBfZ3VpID0gbnVsbFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbaW5pdF0gbWV0aG9kYFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIERPTSBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQsIHRoaXMgaXMgd2hhdCB0aGUgZ3JpZCBwdXRzIGludG8gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuIElmIHlvdXIgY3VzdG9tIGNvbXBvbmVudCBuZWVkcyB0byBkb1xuICAgKiBhbnkgcmVzb3VyY2UgY2xlYW5pbmcgdXAsIGRvIGl0IGhlcmUuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIC8vIHBhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSByZXF1aXJlZCBvcHRpb24gdmFsdWVcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBmaW5kIHRoZSBwYXNzZWQgb3B0aW9uJ3MgdmFsdWUgaW4gdGhlIGZvbGxvd2luZyBvcmRlclxuICAgKlxuICAgKiAgMS4gcGFyYW1zXG4gICAqICAyLiBTZWFyY2ggYHBhcmFtcy5jb2xEZWZgXG4gICAqICAzLiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0LkFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbQ09MVU1OX0lEXWAgb3IgYHBhcmFtcy5jb250ZXh0Lm1ldGFbQ09MVU1OX0lEXWBcbiAgICogIDQuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHQuQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ2Agb3IgYHBhcmFtcy5jb250ZXh0Lm1ldGFgXG4gICAqICA1LiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0YFxuICAgKiAgNi4gSWYgbm9uZSBmb3VuZCByZXR1cm4gdGhlIGZhbGxiYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBvcHRpb25cbiAgICogQHBhcmFtIHtwYXJhbXN9IHBhcmFtcyBhbiBvYmplY3QgdXNlZCB0byBzZWFyY2ggZm9yIHRoZSBvcHRpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IGZhbGxiYWNrIGEgdmFsdWUgdG8gcmV0dXJuIGluIGNhc2UgdGhlIG9wdGlvbiBjYW4gbm90IGJlIGZvdW5kXG4gICAqL1xuICBnZXRPcHRpb24obmFtZSwgcGFyYW1zLCBmYWxsYmFjayA9IG51bGwpIHtcbiAgICBsZXQgb3B0aW9uXG5cbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBwYXJhbXNbbmFtZV0gIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbiA9IHBhcmFtc1tuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0cnkgdG8gZmV0Y2ggZnJvbSB0aGUgY29sdW1uIGRlZiBmaXJzdFxuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2NvbERlZicpICYmXG4gICAgICAgIHBhcmFtcy5jb2xEZWYuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgcGFyYW1zLmNvbERlZltuYW1lXSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbiA9IHBhcmFtcy5jb2xEZWZbbmFtZV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWd8bWV0YSBpbiB0aGUgY29udGV4dFxuICAgICAgICBsZXQgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyA9IG51bGxcbiAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnY29udGV4dCcpKSB7XG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyA9XG4gICAgICAgICAgICBwYXJhbXMuY29udGV4dC5BR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnIHx8IHBhcmFtcy5jb250ZXh0Lm1ldGFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwYXJhbXMuY29sdW1uLmNvbElkKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF0uaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW3BhcmFtcy5jb2x1bW4uY29sSWRdW25hbWVdICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbiA9IEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF1bbmFtZV1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbbmFtZV0gIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9uID0gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tuYW1lXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdCBpdHNlbGZcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFyYW1zLmNvbnRleHRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb250ZXh0ICYmXG4gICAgICAgICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgICBjb250ZXh0W25hbWVdICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvcHRpb24gPSBjb250ZXh0W25hbWVdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRyeSB0byBjaGVjayBwYXJhbXMgaXRzZWxmIG9yIGZhbGxiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgICAgIG9wdGlvbiA9IGZhbGxiYWNrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb24gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uIDogZmFsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2luZG93IEluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgd2luZG93IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge1dpbmRvd31cbiAgICovXG4gIGdldFdpbihwYXJhbXMpIHtcbiAgICBjb25zdCB3aW4gPSB0aGlzLmdldE9wdGlvbignd2luZG93JywgcGFyYW1zKSB8fCB3aW5kb3cgfHwgbnVsbFxuXG4gICAgaWYgKCF3aW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdpbmRvdycpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkb2N1bWVudCBJbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge3BhcmFtc30gcGFyYW1zIGFuIG9iamVjdCB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIGRvY3VtZW50IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxEb2N1bWVudH1cbiAgICovXG4gIGdldERvYyhwYXJhbXMpIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLmdldE9wdGlvbignZG9jdW1lbnQnLCBwYXJhbXMpIHx8IGRvY3VtZW50IHx8IG51bGxcblxuICAgIGlmICghZG9jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkb2N1bWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0NvbXBvbmVudC9Db21wb25lbnQuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIEJvb2xlYW4gUmVuZGVyZXJcbiAqXG4gKiBTaW1wbGUgdG9nZ2xlIHN3aXRjaCB0byBoYW5kbGUgYm9vbGVhbiB2YWx1ZXNcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuU3dpdGNoIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhblN3aXRjaCBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbaW5pdGlhbFZhbHVlID0gZmFsc2VdIHRoZSBkZWZhdWx0IHN0YXRlICwgY2hlY2tlZCBvciB1bmNoZWNrZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyID0gbnVsbF0gYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZFxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlID0gZmFsc2UsIGxpc3RlbmVyID0gbnVsbCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldENoZWNrZWQoaW5pdGlhbFZhbHVlKVxuICAgIHRoaXMuc2V0TGlzdGVuZXIobGlzdGVuZXIpXG4gICAgdGhpcy5zZXREaXNhYmxlZChmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX29uQ2xpY2sgPSB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcylcbiAgICB0aGlzLl9vbktleWRvd24gPSB0aGlzLl9vbktleWRvd24uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5fZ3VpID0gdGhpcy5nZXREb2MocGFyYW1zKS5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAtMVxuXG4gICAgdGhpcy5yZW5kZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc3dpdGNoIHNsaWRlciBhbmQgaGlkZGVuIGlucHV0LlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2V0RG9jKHRoaXMuX3BhcmFtcylcblxuICAgIGNvbnN0IGJvb2xTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvb2xTd2l0Y2guY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2gnXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5pZCA9IGBlbC0ke01hdGgucmFuZG9tKCl9YFxuICAgIHRoaXMuX2lucHV0Lm5hbWUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2NoZWNrYm94J1xuICAgIHRoaXMuX2lucHV0LnR5cGUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkKClcbiAgICB0aGlzLl9pbnB1dC5kaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAnMCdcblxuICAgIC8vIGxhYmVsXG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpXG4gICAgbGFiZWwuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2xhYmVsJ1xuICAgIGxhYmVsLmZvciA9IHRoaXMuX2lucHV0LmlkXG4gICAgbGFiZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c3BhbiBjbGFzcz1cImJvb2xTd2l0Y2hfX2lubmVyXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJib29sU3dpdGNoX19zd2l0Y2hcIj48L3NwYW4+XG4gICAgYFxuXG4gICAgLy8gYXR0YWNoZSBpbnB1dCBhbmQgc2xpZGVyIHRvIGNvbXBvbmVudFxuICAgIGJvb2xTd2l0Y2guYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG4gICAgYm9vbFN3aXRjaC5hcHBlbmRDaGlsZChsYWJlbClcblxuICAgIGJvb2xTd2l0Y2guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKVxuICAgIHRoaXMuX2d1aS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlkb3duKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvb2xTd2l0Y2gpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBib29sU3dpdGNoID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sU3dpdGNoJylcbiAgICBib29sU3dpdGNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljaylcbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5ZG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgY29tcG9uZW50XG4gICAqL1xuICBmb2N1cygpIHtcbiAgICB0aGlzLl9ndWkuZm9jdXMoKVxuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3dpdGNoIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAgICovXG4gIHNldExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdGVuZXIgaW5zdGFuY2UgLCBpZlxuICAgKlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbnxudWxsfVxuICAgKi9cbiAgZ2V0TGlzdGVuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3RlbmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0IGNoZWNrZWRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSB0cnVlIHRvIGNoZWNrICwgZmFsc2UgdG8gdW5jaGVja1xuICAgKi9cbiAgc2V0Q2hlY2tlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2NoZWNrZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBpZiBzd2l0Y2ggaXMgY2hlY2tlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSAgdHJ1ZSB3aGVuIGNoZWNrZWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGlzQ2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZFxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgY29tcG9uZW50IHN0YXRlXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5zZXRDaGVja2VkKCF0aGlzLmlzQ2hlY2tlZCgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkaXNhYmxlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRydWUgdG8gZGlzYWJsZWQgLCBmYWxzZSB0byBlbmFibGVcbiAgICovXG4gIHNldERpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuZGlzYWJsZWQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgc3dpdGNoIGlzIGRpc2FibGVkXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBkaXNhYmxlZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjbGljayBsaXN0ZW5lciBvZiB0aGUgc3dpdGNoLiBJdCB3aWxsIHRvZ2dsZSB0aGUgc3RhdGUgYW5kIGZpcmUgYW55IHJlZ2lzdGVyZWQgbGlzdGVuZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZSB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdGhpcy50b2dnbGUoKVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBrZXkgbGlzdGVuZXIgb2YgdGhlIHN3aXRjaC4gSXQgd2lsbCB0b2dnbGUgdGhlIHN0YXRlIHVzaW5nIGtleWJvYXJkIGtleXMgKGxlZnQgLCByaWdodCAsIHNwYWNlKVxuICAgKiBhbmQgZmlyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlICB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25LZXlkb3duKGUpIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGUud2hpY2ggfHwgZS5rZXlDb2RlXG5cbiAgICAvLyBzcGFjZVxuICAgIGlmIChrZXkgPT0gMzIpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICAvLyByaWdodFxuICAgIGVsc2UgaWYgKGtleSA9PSAzOSkge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKHRydWUpXG4gICAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXIodGhpcylcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gICAgLy8gbGVmdFxuICAgIGVsc2UgaWYgKGtleSA9PSAzNykge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKGZhbHNlKVxuICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2hcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlciB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5IH0gPSBPYmplY3Q7XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgY29uc3QgeyBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIGluaXRpYWxpemVyLCB2YWx1ZSB9ID0gZGVzY3JpcHRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGUsXG4gICAgZW51bWVyYWJsZSxcblxuICAgIGdldCgpIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiBzb21lb25lIGFjY2Vzc2VzIHRoZVxuICAgICAgLy8gcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIuY2FsbCh0aGlzKSA6IHZhbHVlO1xuXG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlLFxuICAgICAgICBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHJldFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHNldDogY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhenlJbml0aWFsaXplKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvbGF6eS1pbml0aWFsaXplLmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmFnLWNlbGwtaW5saW5lLWVkaXRpbmcgLmJvb2xTd2l0Y2hfX3dyYXBwZXJ7bWFyZ2luOmF1dG8gMTFweH0uYm9vbFN3aXRjaF9fd3JhcHBlcntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7b3V0bGluZTpub25lO3BhZGRpbmctbGVmdDo2cHg7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmJvb2xTd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NTVweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5ib29sU3dpdGNoX19jaGVja2JveHtkaXNwbGF5Om5vbmV9LmJvb2xTd2l0Y2hfX2xhYmVse2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyO2JvcmRlcjoycHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjIwcHh9LmJvb2xTd2l0Y2hfX2lubmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjAwJTttYXJnaW4tbGVmdDotMTAwJTt0cmFuc2l0aW9uOm1hcmdpbiAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2lubmVyOmJlZm9yZSwuYm9vbFN3aXRjaF9faW5uZXI6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjUwJTtoZWlnaHQ6MTVweDtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6MTVweDtmb250LXNpemU6MTRweDtjb2xvcjp3aGl0ZTtmb250LWZhbWlseTonU2Vnb2UgVUkgU3ltYm9sJywgVHJlYnVjaGV0LCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXdlaWdodDpib2xkO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYm9vbFN3aXRjaF9faW5uZXI6YmVmb3Jle2NvbnRlbnQ6J1xcXFwyNzE0JztwYWRkaW5nLWxlZnQ6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLWFnLWFscGluZS1hY3RpdmUtY29sb3IsICMyMTk2ZjMpKTtjb2xvcjojZmZmZmZmfS5ib29sU3dpdGNoX19pbm5lcjphZnRlcntjb250ZW50OidcXFxcMjcxOCc7cGFkZGluZy1yaWdodDoxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTt0ZXh0LWFsaWduOnJpZ2h0fS5ib29sU3dpdGNoX19zd2l0Y2h7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O21hcmdpbjoxcHg7YmFja2dyb3VuZDojZmZmZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjM1cHg7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6MjBweDt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2NoZWNrYm94OmNoZWNrZWQrLmJvb2xTd2l0Y2hfX2xhYmVsIC5ib29sU3dpdGNoX19pbm5lcnttYXJnaW4tbGVmdDowfS5ib29sU3dpdGNoX19jaGVja2JveDpjaGVja2VkKy5ib29sU3dpdGNoX19sYWJlbCAuYm9vbFN3aXRjaF9fc3dpdGNoe3JpZ2h0OjBweH1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuLi9Cb29sZWFuU3dpdGNoJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBCb29sZWFucyBSZW5kZXJlclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBSZW5kZXJpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVHJ1ZVJlbmRlclZhbHVlKiogIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGB0cnVlYCB2YWx1ZXMuIDxicj4gKipzd2l0Y2gqKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byByZW5kZXIgdHJ1ZSB2YWx1ZXMgYXMgYSBzd2l0Y2ggY29tcG9uZW50ICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSoqIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGBmYWxzZWAgdmFsdWVzLiA8YnI+ICoqc3dpdGNoKiogaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gcmVuZGVyIHRydWUgdmFsdWVzIGFzIGEgc3dpdGNoIGNvbXBvbmVudCBcdHxcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5SZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5SZW5kZXJlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gd2lsbCB0aGlzIGFmZmVjdCBCQmogYnVpID9cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2Jvb2xSZW5kZXJlcidcbiAgICB0aGlzLl9ndWkuc3R5bGUuZm9udEZhbWlseSA9XG4gICAgICAnXCJTZWdvZSBVSSBTeW1ib2xcIixUcmVidWNoZXQsIEFyaWFsLCBzYW5zLXNlcmlmJ1xuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICB0aGlzLnJlZnJlc2gocGFyYW1zLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3N3aXRjaGVyKSB7XG4gICAgICB0aGlzLl9zd2l0Y2hlci5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY2VsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJlZnJlc2gocGFyYW1zLCBpc0luaXQpIHtcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgPyBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgOiBwYXJhbXMudmFsdWVcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgICBjb25zdCBib29sZWFuVHJ1ZVJlbmRlclZhbHVlID0gU3RyaW5nKFxuICAgICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblRydWVSZW5kZXJWYWx1ZScsIHBhcmFtcywgJ3N3aXRjaCcpXG4gICAgICApXG4gICAgICBjb25zdCBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSA9IFN0cmluZyhcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVJlbmRlclZhbHVlJywgcGFyYW1zLCAnc3dpdGNoJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGJvb2xlYW5UcnVlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuICAgICAgY29uc3QgYm9vbGVhbkZhbHNlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSkpXG4gICAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICAgIC8vIGhhbmRsZSB0cnVlIHZhbHVlc1xuICAgICAgaWYgKGJvb2xlYW5UcnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJvb2xlYW5UcnVlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhblRydWVSZW5kZXJWYWx1ZSA9PT0gJ3N3aXRjaCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZXIgPSB0aGlzLl9nZXRTd2l0Y2hlcihwYXJhbXMpXG4gICAgICAgICAgc3dpdGNoZXIuc2V0Q2hlY2tlZCh0cnVlKVxuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAnJ1xuICAgICAgICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChzd2l0Y2hlci5nZXRHdWkoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gYm9vbGVhblRydWVSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgZmFsc2UgdmFsdWVzXG4gICAgICBlbHNlIGlmIChib29sZWFuRmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUgPT09ICdzd2l0Y2gnXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHN3aXRjaGVyID0gdGhpcy5fZ2V0U3dpdGNoZXIocGFyYW1zKVxuICAgICAgICAgIHN3aXRjaGVyLnNldENoZWNrZWQoZmFsc2UpXG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHN3aXRjaGVyLmdldEd1aSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzd2l0Y2ggaW5zdGFuY2UgaWYgYXZhaWxhYmxlICwgb3IgY3JlYXRlIGl0IG90aGVyd2lzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW5Td2l0Y2h9IHN3aXRjaCBpbnN0YW5jZVxuICAgKi9cbiAgX2dldFN3aXRjaGVyKHBhcmFtcykge1xuICAgIGlmICghdGhpcy5fc3dpdGNoZXIpIHtcbiAgICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2goKVxuICAgICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICAgIHRoaXMuX3N3aXRjaGVyLmluaXQocGFyYW1zKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hlclxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5SZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5SZW5kZXJlci9Cb29sZWFuUmVuZGVyZXIuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkZpbHRlciBmcm9tICcuL0Jvb2xlYW5GaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgdG9UaXRsZUNhc2UgPSBwaHJhc2UgPT4ge1xuICByZXR1cm4gcGhyYXNlXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHN0cmlwSFRNTCA9IGh0bWwgPT4ge1xuICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKVxuICB0bXAuaW5uZXJIVE1MID0gaHRtbFxuICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJydcbn1cblxuLyoqXG4gKiBCb29sZWFucyBGaWx0ZXJcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRmlsdGVyaW5nXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqYm9vbGVhblVzZWRUcnVlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIHRoZSBmaWx0ZXIgZGlzcGxheXMgdGhlIHRydWUgc3RhdGUgLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byB1c2Ugd2hlbiB0aGUgZmlsdGVyIGRpc3BsYXlzIHRoZSBmYWxzZSBzdGF0ZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKiB8ICoqY2xlYXJCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIENsZWFyIGJ1dHRvbi4gVGhlIENsZWFyIGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSAoZm9ybSkgZGV0YWlscyBvZiB0aGUgZmlsdGVyIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoZSBjb2x1bW4uXG4gKiB8ICoqYXBwbHlCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhbiBBcHBseSBidXR0b24uIElmIHRoZSBBcHBseSBidXR0b24gaXMgcHJlc2VudCwgdGhlbiB0aGUgZmlsdGVyIGlzIG9ubHkgYXBwbGllZCBhZnRlciB0aGUgdXNlciBoaXRzIHRoZSBBcHBseSBidXR0b24uXG4gKiB8ICoqcmVzZXRCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIFJlc2V0IGJ1dHRvbi4gVGhlIFJlc2V0IGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgYW5kIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGF0IGNvbHVtbi5cbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRydWUgLCBmYWxzZSB0cmFuc2xhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbiA9IHt9XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5GaWx0ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdib29sZWFuRmlsdGVyIGFnLWZpbHRlci1ib2R5LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdldExvY2FsZVRleHRGdW5jKClcbiAgICBjb25zdCBpc0NsZWFyRmlsdGVyID0gdGhpcy5nZXRPcHRpb24oJ2NsZWFyQnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc1Jlc2V0QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ3Jlc2V0QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc0FwcGx5QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ2FwcGx5QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSBbXVxuICAgICAgLmNvbmNhdCh0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlVmFsdWUnLCBwYXJhbXMsIFtmYWxzZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX3VzZWRUcnVlVmFsdWUgPSBTdHJpbmcoXG4gICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblVzZWRUcnVlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX3RydWVWYWx1ZVswXSlcbiAgICApXG5cbiAgICB0aGlzLl91c2VkRmFsc2VWYWx1ZSA9IFN0cmluZyhcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVXNlZEZhbHNlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX2ZhbHNlVmFsdWVbMF0pXG4gICAgKVxuXG4gICAgdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHtcbiAgICAgICAgdHJ1ZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuVHJ1ZScsXG4gICAgICAgICAgdG9UaXRsZUNhc2UoU3RyaW5nKHRoaXMuX3VzZWRUcnVlVmFsdWUpKVxuICAgICAgICApLFxuICAgICAgICBmYWxzZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuRmFsc2UnLFxuICAgICAgICAgIHRvVGl0bGVDYXNlKFN0cmluZyh0aGlzLl91c2VkRmFsc2VWYWx1ZSkpXG4gICAgICAgICksXG4gICAgICAgIHJlc2V0OiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5SZXNldCcsXG4gICAgICAgICAgdHJhbnNsYXRlKCdyZXNldEZpbHRlcicsICdSZXNldCBGaWx0ZXInKVxuICAgICAgICApLFxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX2ZpbHRlclRleHQgPSBudWxsXG5cbiAgICB0aGlzLl9vblJhZGlvQ2hhbmdlID0gdGhpcy5fb25SYWRpb0NoYW5nZS5iaW5kKHRoaXMsIGlzQXBwbHlCdXR0b24pXG5cbiAgICAvLyBjcmVhdGUgYm9keVxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvZHkuY2xhc3NOYW1lID0gJ2Jvb2xlYW5GaWx0ZXJfX2JvZHkgYWctZmlsdGVyLWJvZHknXG4gICAgYm9keS5zdHlsZS5wYWRkaW5nID0gJzVweCAxNXB4J1xuICAgIGJvZHkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzXCI+XG5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCI+ICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItdHJ1ZSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidHJ1ZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwidHJ1ZVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlfTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cblxuXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiPiAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyLWZhbHNlIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmYWxzZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiZmFsc2VcIi8+ICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24uZmFsc2V9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIFxuICAgICAgICAgICR7XG4gICAgICAgICAgICAhaXNSZXNldEJ1dHRvblxuICAgICAgICAgICAgICA/IC8qIGh0bWwgKi8gYFxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIj4gICAgICAgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1yZXNldCBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXIgYWctY2hlY2tlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJyZXNldC1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiXCIgY2hlY2tlZC8+ICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24ucmVzZXR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgfSAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgYFxuXG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvZHkpXG5cbiAgICAvLyBjcmVhdGUgYXBwbHkgZmlsdGVyIHBhbmVsXG4gICAgY29uc3QgYXBwbHlGaWx0ZXJQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5jbGFzc05hbWUgPSBgYm9vbGVhbkZpbHRlcl9fYm9keV9fYXBwbHlQYW5lbCBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzJylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2FwcGx5UGFuZWwnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgc2VsZWN0ZWQgZmlsdGVyIG1hdGNoZXMgdGhlIHBhc3NlZCBjZWxsIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gcGFzcywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBkb2VzRmlsdGVyUGFzcyhwYXJhbXMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXIocGFyYW1zKVxuICAgICAgICA6IHRoaXMuX3BhcmFtcy52YWx1ZUdldHRlcihwYXJhbXMpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclRleHQgPT09ICd0cnVlJ1xuICAgICAgPyB0aGlzLl90cnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMVxuICAgICAgOiB0aGlzLl9mYWxzZVZhbHVlLmluZGV4T2YodmFsdWUpID4gLTFcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYXBwbHlpbmcgYW55IGZpbHRlciBvbiB0aGUgY29sdW1uXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqKi9cbiAgaXNGaWx0ZXJBY3RpdmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gJydcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlsdGVyIHN0YXRlLiBJZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZSwgdGhlbiBzaG91bGQgcmV0dXJuIG51bGwvdW5kZWZpbmVkLlxuICAgKiBUaGUgZ3JpZCBjYWxscyBnZXRNb2RlbCgpIG9uIGFsbCBhY3RpdmUgZmlsdGVycyB3aGVuIGdyaWRBcGkuZ2V0RmlsdGVyTW9kZWwoKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gT2JqZWN0IHwgbnVsbCB0aGUgZmlsdGVyIHN0YXRlXG4gICAqL1xuICBnZXRNb2RlbCgpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWx0ZXJBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbCA9IHsgdmFsdWU6IHRoaXMuX2ZpbHRlclRleHQsIGZpbHRlclR5cGU6ICdib29sZWFuJyB9XG4gICAgcmV0dXJuIG1vZGVsXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4gICAgdGhpcy5fZmlsdGVyVGV4dCA9IG1vZGVsICYmIG1vZGVsLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gbW9kZWwudmFsdWUgOiAnJ1xuXG4gICAgY29uc3QgZmlsdGVyVGV4dEFzU3RyaW5nID0gU3RyaW5nKHRoaXMuX2ZpbHRlclRleHQpXG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keScpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkudmFsdWUgPT0gZmlsdGVyVGV4dEFzU3RyaW5nKSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbHRlciBtb2RlbCBhcyBwbGFpbiBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmxvYXRpbmcgZmlsdGVyIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIGdldE1vZGVsQXNTdHJpbmcobW9kZWwpIHtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaXBIVE1MKFxuICAgICAgbW9kZWwudmFsdWUgPT09ICd0cnVlJ1xuICAgICAgICA/IHRoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlXG4gICAgICAgIDogdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLmZhbHNlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHknKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykuZm9yRWFjaChpID0+IHtcbiAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgfSlcblxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICB0cnkge1xuICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIHBhc3MgKi9cbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBzZWxlY3Rpb24gY2hhbmdlcyBpbiB0aGUgZmlsdGVyIHJhZGlvIGJ1dHRvbnMgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBmaWx0ZXIgdGV4dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBfb25SYWRpb0NoYW5nZShpc0FwcGx5QnV0dG9uLCBlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5JylcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1ZS1pbnB1dCcpKSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhbHNlLWlucHV0JykpIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QuYWRkKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhbHNlID09PSBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHRoZSBidXR0b24gY2xpY2tzIGluIHRoZSBidXR0b25zIHBhbmVsIGFuZCBhcHBseSB0aGUgY2hvc2VuIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGljayhlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcblxuICAgIGlmICh0YXJnZXQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncmVzZXQnKSkge1xuICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NsZWFyJykpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL0Jvb2xlYW5GaWx0ZXIuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo2cHh9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4IDB9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbCBzcGFue3BhZGRpbmctbGVmdDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKm51bWJlck1pblZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IG1pbiBhbGxvd2VkIHZhbHVlXG4gKiB8ICoqbnVtYmVyTWF4VmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbWF4IGFsbG93ZWQgdmFsdWVcbiAqIHwgKipudW1iZXJTdGVwVmFsdWUqKiAgICAgICB8IHVuZGVmaW5lZCAgXHR8IG51bWJlciBvZiBzdGVwIGJ5IGluY3JlbWVudCBvciBkZWNyZW1lbnRcbiAqIHwgKipudW1iZXJNYXNrKiogICAgICAgfCB1bmRlZmluZWQgIFx0fCBhIGJiaiBudW1iZXIgbWFzayB0byB2YWxpZGF0ZSB0aGUgbnVtYmVyIGFnYWluc3RcbiAqIHwqKm51bWJlckdyb3VwaW5nU2VwYXJhdG9yKiogfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvci4gVGhlIG9wdGlvbnMgaXMgdXNlZCBvbmx5IHdoZW4gKipudW1iZXJNYXNrKiogaXMgZGVmaW5lZCB8XG4gKiB8KipudW1iZXJEZWNpbWFsU2VwYXJhdG9yKiogfCAuIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yLiBUaGUgb3B0aW9ucyBpcyB1c2VkIG9ubHkgd2hlbiAqKm51bWJlck1hc2sqKiBpcyBkZWZpbmVkICB8XG4gKiB8KipudW1iZXJGb3JjZVRyYWlsaW5nWmVyb3MqKiB8IGZhbHNlIHwgQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIikgcmV0dXJucyAuMTAgaW5zdGVhZCBvZiAuMSAuIFRoZSBvcHRpb25zIGlzIHVzZWQgb25seSB3aGVuICoqbnVtYmVyTWFzayoqIGlzIGRlZmluZWR8XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgTnVtYmVyRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1pblZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKCdudW1iZXJNYXhWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBzdGVwID0gdGhpcy5nZXRPcHRpb24oJ251bWJlclN0ZXBWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1hc2snLCBwYXJhbXMpXG5cbiAgICBsZXQgc3RhcnRWYWx1ZVxuXG4gICAgdGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPSAxMTMpIHtcbiAgICAgICAgICAvL0YyXG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgLy8gbWFrZSBwYXJhbXMgaXQgYWNjZXNzaWJsZSBmcm9tIHRhbGwgbWV0aG9kc1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgLy8gY3JlYXRlIHRoZSBpbnB1dCB3cmFwcGVyXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnbnVtYmVyRWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBjcmVhdGUgdGhlIGlucHV0XG4gICAgdGhpcy5faW5wdXRHZW5lcmF0ZWRJZCA9IE1hdGgucmFuZG9tKClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zbGljZSgyLCAxMCkgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ251bWJlckVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0J1xuICAgIHRoaXMuX2lucHV0LmlkID0gYGVsLSR7dGhpcy5faW5wdXRHZW5lcmF0ZWRJZH1gXG4gICAgdGhpcy5faW5wdXQudHlwZSA9IG1hc2sgPyAndGV4dCcgOiAnbnVtYmVyJ1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgLy8gcGxhY2UgdGhlIGlucHV0IGluc2lkZSB0aGUgd3JhcHBlclxuICAgIHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctaW5wdXQtd3JhcHBlcicpLmFwcGVuZENoaWxkKHRoaXMuX2lucHV0KVxuXG4gICAgaWYgKG1pbiAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0Lm1pbiA9IG1pbikgOiAodGhpcy5faW5wdXQubWluID0gbWluKVxuICAgIH1cblxuICAgIGlmIChtYXggIT09IG51bGwpIHtcbiAgICAgIG1hc2sgPyAodGhpcy5faW5wdXQuZGF0YXNldC5tYXggPSBtYXgpIDogKHRoaXMuX2lucHV0Lm1heCA9IG1heClcbiAgICB9XG5cbiAgICBpZiAoc3RlcCAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0LnN0ZXAgPSBzdGVwKSA6ICh0aGlzLl9pbnB1dC5zdGVwID0gc3RlcClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIG1hc2sgdGhlbiB3ZSB1c2UgdGhlIGBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXRgXG4gICAgaWYgKG1hc2spIHtcbiAgICAgIGNvbnN0IGdyb3VwaW5nU2VwYXJhdG9yID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAgICdudW1iZXJHcm91cGluZ1NlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckdyb3VwU2VwJywgcGFyYW1zKVxuICAgICAgKVxuICAgICAgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgICAnbnVtYmVyRGVjaW1hbFNlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckRlY2ltYWxTZXAnLCBwYXJhbXMpXG4gICAgICApXG4gICAgICBjb25zdCBmb3JjZVRyYWlsaW5nWmVyb3MgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICAgJ251bWJlckZvcmNlVHJhaWxpbmdaZXJvcycsXG4gICAgICAgIHBhcmFtc1xuICAgICAgKVxuXG4gICAgICBpZiAoZ3JvdXBpbmdTZXBhcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQuZGVjaW1hbFNlcGFyYXRvciA9IGRlY2ltYWxTZXBhcmF0b3JcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmNlVHJhaWxpbmdaZXJvcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0LmZvcmNlVHJhaWxpbmdaZXJvcyA9IGZvcmNlVHJhaWxpbmdaZXJvc1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXG4gICAgICB0aGlzLl9udW1iZXJJbnB1dCA9IG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgLy8gZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25OdW1iZXJJbnB1dFVwZGF0ZSxcbiAgICAgICAgb25JbnZhbGlkOiB0aGlzLl9vbk51bWJlcklucHV0SW52YWxpZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbnVtYmVySW5wdXQuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKlxuICAgKiBNYWtlIHN1cmUgY29udGFpbmVyIGlzIGFsd2F5cyBmb2N1c2VkIHRvIGxpc3RlbiB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZUlucHV0KHRoaXMuX2lucHV0KVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IGNhc3RlZCA9IE51bWJlcih0aGlzLl9jdXJyZW50VmFsdWUpXG4gICAgY29uc3QgcmV0VmFsdWUgPSBpc05hTihjYXN0ZWQpID8gdGhpcy5fY3VycmVudFZhbHVlIDogY2FzdGVkXG4gICAgcmV0dXJuIHRoaXMuX19pc01hc2tlZF9fID8gcmV0VmFsdWUgOiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZShyZXRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgaXMgY2hhbmdlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IHZhbHVlIHdoZW4gdGhlIE51bWJlcklucHV0IGNvbXBvbmVudHMgZmlyZSB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk51bWJlcklucHV0VXBkYXRlKF9tYXNrZWQsIHVubWFza2VkKSB7XG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gdW5tYXNrZWRcbiAgICB0aGlzLmZvY3VzSW4oKVxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuICAvKipcbiAgICogT24gaW52YWxpZCBpbnB1dHMgLCB1cGRhdGUgdGhlIGlucHV0IHdpdGggYSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGVycm9yIHRoZSBlcnJvciBtZXNzYWdlIHJlcG9ydGVkIGJ5IE51bWJlcklucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25OdW1iZXJJbnB1dEludmFsaWQoZXJyb3IsIGlucHV0KSB7XG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgY2VsbFxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhbGwga2V5Ym9hcmQgZXZlbnRzIHRvIGFsbG93IHZhbHVlIHByb2Nlc3NpbmcgYnkgdGhlIE51bWJlcklucHV0IGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Db21wb25lbnRLZXlEb3duKGUpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPVxuICAgICAga2V5ID09PSAzNyB8fCAvLyBsZWZ0XG4gICAgICBrZXkgPT09IDM4IHx8IC8vIHVwXG4gICAgICBrZXkgPT09IDM5IHx8IC8vIHJpZ2h0XG4gICAgICBrZXkgPT09IDQwIHx8IC8vIGRvd25cbiAgICAgIGtleSA9PT0gMzMgfHwgLy8gcGFnZSB1cFxuICAgICAga2V5ID09PSAzNCB8fCAvLyBwYWdlIGRvd25cbiAgICAgIGtleSA9PT0gMzUgfHwgLy8gcGFnZSBob21lXG4gICAgICBrZXkgPT09IDM2IHx8IC8vIHBhZ2UgZW5kXG4gICAgICBrZXkgPT09IDEzIC8vIGVudGVyXG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjYXB0dXJlIGtleSBzbyBOdW1iZXJJbnB1dCBjYW4gcGFzcyBpdCBhZ2FpbiB0byB0aGUgZ3JpZC5cbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8ga2V5IGNoYW5nZXMgYW5kIHZhbGlkYXRlIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbklucHV0S2V5RG93blVwKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBpZiAoa2V5ID09IDM4IHx8IGtleSA9PSA0MCkge1xuICAgICAgLy8gdG9wIHwgZG93blxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChrZXkgPT0gMTMgfHwga2V5ID09PSA5KSB7XG4gICAgICAvLyBlbnRlclxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG5cbiAgICAvLyB3ZSBwYXNzIHRoZSBsYXN0IGNhcHR1cmVkIGV2ZW50IGJhY2sgdG8gdGhlIGdyaWQgdG8gaGFuZGxlIGl0IGludGVybmFsbHlcbiAgICBpZiAodGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5vbktleURvd24odGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdiYmotbWFzay1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdiYmotbWFzay1zdWNjZXNzJylcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5udW1iZXJFZGl0b3J7b3ZlcmZsb3c6aGlkZGVufS5udW1iZXJFZGl0b3IgLm51bWJlcklucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Lm51bWJlckVkaXRvciAuYmJqLW1hc2stZXJyb3J7Ym94LXNoYWRvdzowIC0ycHggMCAjZTkxZTYzIGluc2V0fS5udW1iZXJFZGl0b3IgLmJiai1tYXNrLXN1Y2Nlc3N7Ym94LXNoYWRvdzowIC0ycHggMCAjNGNhZjUwIGluc2V0fS5udW1iZXJFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLm51bWJlckVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5udW1iZXJFZGl0b3JfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9OdW1iZXJFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSAnLi9UZXh0RWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dEVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBUZXh0IEVkaXRvclxuICpcbiAqIEhhbmRsZSB0ZXh0IHZhbHVlcyBFZGl0aW5nXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKip0ZXh0UGF0dGVybioqICAgfCB1bmRlZmluZWQgICAgfCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSBpbnB1dCdzIHZhbHVlIG11c3QgbWF0Y2ggaW4gb3JkZXIgZm9yIHRoZSB2YWx1ZSB0byBwYXNzIGNvbnN0cmFpbnQgdmFsaWRhdGlvblxuICogfCAqKnRleHRSZXF1aXJlZCoqICAgfCB1bmRlZmluZWQgICAgfCBCb29sZWFuLiBBIHZhbHVlIGlzIHJlcXVpcmVkIHRvIGNvbnNpZGVyIHRoZSBpbnB1dCB2YWxpZFxuICogfCAqKnRleHRNYXNrKiogICB8IHVuZGVmaW5lZCAgICB8IEEgYmJqIHN0cmluZyBtYXNrIHRvIHZhbGlkYXRlIHRoZSB2YWx1ZVxuICogfCAqKnRleHRUaXRsZSoqICAgfCBudWxsICAgIHwgVGhlIGlucHV0IHRpdGxlICwgd2hlbiBudWxsIGFuZCB0aGUgKip0ZXh0TWFzayoqIG9wdGlvbnMgaXMgZGVmaW5lZCAsIHRoZW4gd2UgdXNlIHRoZSBtYXNrIGFzIHRpdGxlICwgd2hlbiBzZXQgdG8gYGRlZmF1bHRgIHdlIHRoZSBicm93c2VyJ3MgZGVmYXVsdCB0aXRsZSAsIG90aGVyd2lzZSB0aGUgdmFsdWUgZGVmaW5lZCBpbiB0aGlzIG9wdGlvblxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5nZXRPcHRpb24oJ3RleHRQYXR0ZXJuJywgcGFyYW1zKVxuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5nZXRPcHRpb24oJ3RleHRSZXF1aXJlZCcsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ3RleHRNYXNrJywgcGFyYW1zKVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRPcHRpb24oJ3RleHRUaXRsZScsIHBhcmFtcylcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICBzdGFydFZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcykge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICd0ZXh0RWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmNsYXNzTmFtZSA9XG4gICAgICAndGV4dEVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQuaWQgPSBgZWwtJHtNYXRoLnJhbmRvbSgpXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc2xpY2UoMiwgMTApfWAgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRpdGxlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSB0aXRsZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSBtYXNrXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBtYXNrIHRoZW4gd2UgdXNlIHRoZSBgQmFzaXMuSW5wdXRNYXNraW5nLlRleHRJbnB1dGBcbiAgICBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xuICAgICAgdGhpcy5fdGV4dElucHV0ID0gbmV3IEJhc2lzLklucHV0TWFza2luZy5UZXh0SW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25UZXh0SW5wdXRVcGRhdGUsXG4gICAgICAgIG9uSW52YWxpZDogdGhpcy5fb25UZXh0SW5wdXRJbnZhbGlkLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RleHRJbnB1dC5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodGhpcy5faW5wdXQpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHRoaXMuX2N1cnJlbnRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgdmFsdWUgd2hlbiB0aGUgVGV4dElucHV0IGNvbXBvbmVudCBmaXJlcyB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblRleHRJbnB1dFVwZGF0ZShfbWFza2VkLCB1bm1hc2tlZCwgaW5wdXQpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB1bm1hc2tlZFxuICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPbiBpbnZhbGlkIGlucHV0cyAsIHVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgdGhlIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgVGV4dElucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25UZXh0SW5wdXRJbnZhbGlkKGVycm9yLCBpbnB1dCkge1xuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGNlbGxcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9wYXJhbXMudmFsdWVcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYWxsIGtleWJvYXJkIGV2ZW50cyB0byBhbGxvdyB2YWx1ZSBwcm9jZXNzaW5nIGJ5IHRoZSBOdW1iZXJJbnB1dCBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ29tcG9uZW50S2V5RG93bihlKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID1cbiAgICAgIGtleSA9PT0gMzcgfHwgLy8gbGVmdFxuICAgICAga2V5ID09PSAzOCB8fCAvLyB1cFxuICAgICAga2V5ID09PSAzOSB8fCAvLyByaWdodFxuICAgICAga2V5ID09PSA0MCB8fCAvLyBkb3duXG4gICAgICBrZXkgPT09IDMzIHx8IC8vIHBhZ2UgdXBcbiAgICAgIGtleSA9PT0gMzQgfHwgLy8gcGFnZSBkb3duXG4gICAgICBrZXkgPT09IDM1IHx8IC8vIHBhZ2UgaG9tZVxuICAgICAga2V5ID09PSAzNiB8fCAvLyBwYWdlIGVuZFxuICAgICAga2V5ID09PSAxMyAvLyBlbnRlclxuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIC8vIHNhdmUgdGhlIGxhc3QgY2FwdHVyZSBrZXkgc28gTnVtYmVySW5wdXQgY2FuIHBhc3MgaXQgYWdhaW4gdG8gdGhlIGdyaWQuXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGtleSBjaGFuZ2VzIGFuZCB2YWxpZGF0ZSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25JbnB1dEtleURvd25VcChldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgaWYgKGtleSA9PSAxMyB8fCBrZXkgPT09IDkpIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cblxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgb24gdGhlIGlucHV0IHZhbHVlIGlzIGNoYW5nZWQgYW5kIGl0IGlzIHZhbGlkXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi50ZXh0RWRpdG9ye292ZXJmbG93OmhpZGRlbn0udGV4dEVkaXRvciAudGV4dElucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnRleHRFZGl0b3IgLmJiai1tYXNrLWVycm9ye2JveC1zaGFkb3c6MCAtMnB4IDAgI2U5MWU2MyBpbnNldH0udGV4dEVkaXRvciAuYmJqLW1hc2stc3VjY2Vzc3tib3gtc2hhZG93OjAgLTJweCAwICM0Y2FmNTAgaW5zZXR9LnRleHRFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0gLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0tZGFyayAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqcmVuZGVyVGVtcGxhdGUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbG9kYXNoIHRlbXBsYXRlXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgVGVtcGxhdGVSZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IFRlbXBsYXRlUmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIC8vIHdpbGwgdGhpcyBhZmZlY3QgQkJqIGJ1aSA/XG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ3RlbXBsYXRlUmVuZGVyZXIgYWctY2VsbC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcbiAgICB0aGlzLl9ndWkuc3R5bGUubGluZUhlaWdodCA9ICdub3JtYWwnXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMucmVmcmVzaChwYXJhbXMsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGNlbGwgbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgcmVmcmVzaChwYXJhbXMsIGlzSW5pdCkge1xuICAgIGlmIChpc0luaXQpIHtcbiAgICAgIHRoaXMuX2NvbXBpbGVkVGVtcGxhdGUgPSB0ZW1wbGF0ZShcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ3JlbmRlclRlbXBsYXRlJywgcGFyYW1zLCAnJylcbiAgICAgIClcbiAgICB9XG5cbiAgICBsZXQgY29udGVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jb21waWxlZFRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY29tcGlsZWRUZW1wbGF0ZSh7IHBhcmFtcyB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gcGFyYW1zLnZhbHVlRm9ybWF0dGVkID8gcGFyYW1zLnZhbHVlRm9ybWF0dGVkIDogcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IGNvbnRlbnRcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RlbXBsYXRlUmVuZGVyZXIvVGVtcGxhdGVSZW5kZXJlci5qcyIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGUuanMiLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gKiB9XG4gKlxuICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluV2l0aDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsImltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uc3RhbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2NvbnN0YW50LmpzIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcmd1bWVudHM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNFcnJvciBmcm9tICcuL2lzRXJyb3IuanMnO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICogfSwgJz5fPicpO1xuICpcbiAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gKiAgIGVsZW1lbnRzID0gW107XG4gKiB9XG4gKi9cbnZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXR0ZW1wdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXR0ZW1wdC5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduSW5gIHVzZSB0byBhc3NpZ24gcHJvcGVydGllc1xuICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgcmV0dXJuIHNyY1ZhbHVlO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJpbXBvcnQgZXNjYXBlSHRtbENoYXIgZnJvbSAnLi9fZXNjYXBlSHRtbENoYXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gKiBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VzY2FwZS5qcyIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZUh0bWxDaGFyLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlPZjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUVzY2FwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRlbXBsYXRlUmVuZGVyZXIgZnJvbSAnLi4vVGVtcGxhdGVSZW5kZXJlcidcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmltYWdlUmVuZGVyZXJXaWR0aCoqICAgfCAyOHB4ICAgIHwgaW1hZ2Ugd2lkdGhcbiAqIHwgKippbWFnZVJlbmRlcmVySGVpZ2h0KiogICB8IDI4cHggICAgfCBpbWFnZSBoZWlnaHRcbiAqIHwgKippbWFnZVJlbmRlcmVyTGlzdCoqICAgICAgIHwge30gIFx0fCBhIGxpc3Qgb2Ygd2hpY2ggbWFwcyBpbWFnZXMgd2l0aCBjZWxsIHZhbHVlcyBhcyBKU09OIG9yIHBsYWluIEpTIG9iamVjdFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKlxuICogQHNlZSBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjE1I3RlbXBsYXRlXG4gKi9cbmNsYXNzIEltYWdlUmVuZGVyZXIgZXh0ZW5kcyBUZW1wbGF0ZVJlbmRlcmVyIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICByZWZyZXNoKHBhcmFtcywgaXNJbml0KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJXaWR0aCcsIHBhcmFtcywgJzI4cHgnKVxuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJIZWlnaHQnLCBwYXJhbXMsICcyOHB4JylcbiAgICBsZXQgaW1hZ2VMaXN0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJMaXN0JywgcGFyYW1zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGltYWdlTGlzdCA9IEpTT04ucGFyc2UoaW1hZ2VMaXN0KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGltYWdlTGlzdCA9IGltYWdlTGlzdCB8fCB7fVxuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuICAgIGlmIChpbWFnZUxpc3QgJiYgaW1hZ2VMaXN0Lmhhc093blByb3BlcnR5KHZhbHVlKSkge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gLypodG1sKi8gYFxuICAgICAgICA8aW1nIFxuICAgICAgICAgIHNyYz1cIiR7aW1hZ2VMaXN0W3BhcmFtcy52YWx1ZV19XCIgXG4gICAgICAgICAgd2lkdGg9XCIke2ltYWdlV2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2ltYWdlSGVpZ2h0fVwiICBcbiAgICAgICAgLz5cbiAgICAgIGBcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucmVmcmVzaChwYXJhbXMsIGlzSW5pdClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvSW1hZ2VSZW5kZXJlci9JbWFnZVJlbmRlcmVyLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lRmlsdGVyIGZyb20gJy4vRGF0ZVRpbWVGaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUsIHJlYWRvbmx5IH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IHsgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi4vRXZlbnRzTWl4aW4nXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuLi9EYXRlVGltZUlucHV0J1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgVE9LRU5TID0ge1xuICBUT0tFTl9FUVVBTDogJ2VxdWFscycsXG4gIFRPS0VOX05PVF9FUVVBTDogJ25vdEVxdWFsJyxcbiAgVE9LRU5fTEVTUzogJ2xlc3NUaGFuJyxcbiAgVE9LRU5fR1JFQVRFUjogJ2dyZWF0ZXJUaGFuJyxcbiAgVE9LRU5fUkFOR0U6ICdpblJhbmdlJyxcbiAgVE9LRU5fQU5EOiAnQU5EJyxcbiAgVE9LRU5fT1I6ICdPUicsXG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIENvbmRpdGlvblBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgb3B0aW9uXG4gICAqIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0aWMgT05fQ09ORElUSU9OX0NIQU5HRUQgPSAnQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIHN0YXRlXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGUgPSB7XG4gICAgdHlwZTogVE9LRU5TLlRPS0VOX0VRVUFMLFxuICAgIGZpbHRlcjogbnVsbCxcbiAgICBmaWx0ZXJUbzogbnVsbCxcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7RGF0ZVRpbWVJbnB1dH1cbiAgICovXG4gIF9maWx0ZXJUaW1lSW5wdXQgPSBuZXcgRGF0ZVRpbWVJbnB1dCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dCA9IG5ldyBEYXRlVGltZUlucHV0KClcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZW5hYmxlZCBmaWx0ZXIgdHlwZXNcbiAgICpcbiAgICogQHR5cGUge0FycmF5fVxuICAgKi9cbiAgX2ZpbHRlck9wdGlvbnMgPSBbXVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBlbmFibGVkIGZpbHRlciB0eXBlXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBfZGVmYXVsdE9wdGlvbiA9IC0xXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuXG4gICAgdGhpcy5fZmlsdGVyT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKCdmaWx0ZXJPcHRpb25zJywgcGFyYW1zLCBbXG4gICAgICBUT0tFTlMuVE9LRU5fRVFVQUwsXG4gICAgICBUT0tFTlMuVE9LRU5fTk9UX0VRVUFMLFxuICAgICAgVE9LRU5TLlRPS0VOX0xFU1MsXG4gICAgICBUT0tFTlMuVE9LRU5fR1JFQVRFUixcbiAgICAgIFRPS0VOUy5UT0tFTl9SQU5HRSxcbiAgICBdKVxuXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RlZmF1bHRPcHRpb24nLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5pbmRleE9mKFRPS0VOUy5UT0tFTl9FUVVBTCkgPiAtMVxuICAgICAgICA/IFRPS0VOUy5UT0tFTl9FUVVBTFxuICAgICAgICA6IHRoaXMuX2ZpbHRlck9wdGlvbnNbMF1cbiAgICApXG5cbiAgICB0aGlzLnN0YXRlLnR5cGUgPSB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBvcHRpb25zVHJhbnNsYXRpb25zID0ge1xuICAgICAgW1RPS0VOUy5UT0tFTl9FUVVBTF06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fRVFVQUwsICdFcXVhbHMnKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fTk9UX0VRVUFMXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9FUVVBTCwgJ05vdCBlcXVhbCcpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9MRVNTXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9MRVNTLCAnTGVzcyB0aGFuJyksXG4gICAgICBbVE9LRU5TLlRPS0VOX0dSRUFURVJdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0dSRUFURVIsICdHcmVhdGVyIHRoYW4nKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fUkFOR0VdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX1JBTkdFLCAnSW4gcmFuZ2UnKSxcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnZGF0ZVRpbWVGaWx0ZXIgYWctZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiYWctZmlsdGVyLXNlbGVjdCBkYXRlVGltZUZpbHRlcl9fc2VsZWN0XCIgICR7XG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAxID8gJ2Rpc2FibGVkJyA6ICcnXG4gICAgICB9PlxuICAgICAgICAke3RoaXMuX2ZpbHRlck9wdGlvbnMubWFwKFxuICAgICAgICAgIG9wdGlvbiA9PiAvKiBodG1sICovIGBcbiAgICAgICAgICA8b3B0aW9uIFxuICAgICAgICAgICAgdmFsdWU9XCIke29wdGlvbn1cIiBcbiAgICAgICAgICAgICR7b3B0aW9uID09PSB0aGlzLl9kZWZhdWx0T3B0aW9uID8gJ3NlbGVjdGVkJyA6ICcnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtvcHRpb25zVHJhbnNsYXRpb25zW29wdGlvbl19XG4gICAgICAgICAgPC9vcHRpb24+YFxuICAgICAgICApfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1kYXRlLWZyb21cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItZGF0ZS10byBhZy1oaWRkZW5cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVGltZUlucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzZWxlY3RlZERhdGVcbiAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgIH0pXG5cbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0Lm9uKFxuICAgICAgRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsXG4gICAgICBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gc2VsZWN0ZWREYXRlXG4gICAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItZGF0ZS1mcm9tJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZ2V0R3VpKCkpXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG5cbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuX3N0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm9mZihDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRClcbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZGVzdHJveSgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LmRlc3Ryb3koKVxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlLmZpbHRlciA9IG51bGxcbiAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gbnVsbFxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5yZXNldCgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LnJlc2V0KClcblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKi9cbiAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICBzdGF0ZSA9IHN0YXRlIHx8IHt9XG4gICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzdGF0ZS5maWx0ZXIgfHwgbnVsbFxuICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBzdGF0ZS5maWx0ZXJUbyB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS50eXBlID0gc3RhdGUudHlwZSB8fCB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBndWkgPSB0aGlzLl9ndWlcbiAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gdGhpcy5fZmlsdGVyT3B0aW9uc1xuICAgIGNvbnN0IHNlbGVjdEVsID0gZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuX2ZpbHRlclRpbWVJbnB1dFxuICAgIGNvbnN0IGZpbHRlclRvSW5wdXQgPSB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXRcblxuICAgIHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggPSBmaWx0ZXJPcHRpb25zLmluZGV4T2YodGhpcy5zdGF0ZS50eXBlKVxuICAgIGZpbHRlcklucHV0LnNldERhdGUodGhpcy5zdGF0ZS5maWx0ZXIpXG4gICAgZmlsdGVyVG9JbnB1dC5zZXREYXRlKHRoaXMuc3RhdGUuZmlsdGVyVG8pXG5cbiAgICAvLyB3ZSBmaXJlIG9uIGNoYW5nZSBldmVudCBpbiBjYXNlIHRoZSBmaWx0ZXIgb3B0aW9ucyBjb250YWluXG4gICAgLy8gb25lIG9wdGlvbiB3aGljaCBpcyBpbiBSYW5nZSBcImluUmFuZ2VcIlxuICAgIGlmICgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSB7XG4gICAgICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpXG4gICAgICBldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCBmYWxzZSwgdHJ1ZSlcbiAgICAgIHNlbGVjdEVsLmRpc3BhdGNoRXZlbnQoZXZ0KVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RFbC5maXJlRXZlbnQoJ29uY2hhbmdlJylcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHN0YXRlIHdpdGggdGhlIHNlbGVjdGVkIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblR5cGVDaGFuZ2UoZSkge1xuICAgIGNvbnN0IGVsID0gZS50YXJnZXRcbiAgICBjb25zdCBmaWx0ZXJEYXRlVG8gPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcblxuICAgIHRoaXMuc3RhdGUudHlwZSA9IGVsLm9wdGlvbnNbZWwuc2VsZWN0ZWRJbmRleF0udmFsdWVcblxuICAgIGlmICh0aGlzLnN0YXRlLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgZmlsdGVyRGF0ZVRvLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlckRhdGVUby5jbGFzc0xpc3QuYWRkKCdhZy1oaWRkZW4nKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIEpvaW5Db25kaXRpb25QYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdGFudCB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IG5hbWUgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gdGhlIGpvaW5cbiAgICogc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRpYyBPTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEID1cbiAgICAnSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgam9pbiBzdGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRlID0ge1xuICAgIGNvbmRpdGlvbjE6IHt9LFxuICAgIGNvbmRpdGlvbjI6IHt9LFxuICAgIG9wZXJhdG9yOiBUT0tFTlMuVE9LRU5fT1IsXG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9maXJzdENvbmRpdGlvblBhbmVsID0gbmV3IENvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9zZWNvbmRDb25kaXRpb25QYW5lbCA9IG5ldyBDb25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vcGVyYXRvclBhbmVsID0gbnVsbFxuXG4gIC8qKlxuICAgKiBQYXJhbXMgcmVjZWl2ZWQgYWZ0ZXIgaW5pdFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IG51bGxcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25GaXJzdENvbmRpdGlvbkNoYW5nZWRcbiAgICApXG5cbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25TZWNvbmRDb25kaXRpb25DaGFuZ2VkXG4gICAgKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYWctZmlsdGVyLWJvZHktd3JhcHBlciBhZy1zaW1wbGUtZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQodGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcblxuICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgaWRPbmUgPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXG4gICAgICAgICAgaWRUd28gPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSlcblxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuY2xhc3NOYW1lID0gJ2FnLWZpbHRlci1jb25kaXRpb24gYWctaGlkZGVuJ1xuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1jb25kaXRpb24tb3BlcmF0b3IgYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvci1hbmQgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1yaWdodCBhZy1yYWRpby1idXR0b24gYWctaW5wdXQtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCIgZm9yPVwiJHtpZE9uZX1cIj4gICAgICAgXG4gICAgICAgICAgJHt0cmFuc2xhdGUoJ2FuZENvbmRpdGlvbicsICdBTkQnKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItYW5kIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlciBhZy1jaGVja2VkXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZE9uZX1cIiBjbGFzcz1cIkFORCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwib3JBbmRSYWRpb1wiIHZhbHVlPVwiJHtcbiAgICAgIFRPS0VOUy5UT0tFTl9BTkRcbiAgICB9XCIvPiAgICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PiBcbiAgICA8L2Rpdj4gICBcbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvciBhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yLWFuZCBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLXJpZ2h0IGFnLXJhZGlvLWJ1dHRvbiBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIiBmb3I9XCIke2lkVHdvfVwiPiAgICAgICBcbiAgICAgICAgICAke3RyYW5zbGF0ZSgnb3JDb25kaXRpb24nLCAnT1InKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItb3IgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZFR3b31cIiBjbGFzcz1cIk9SIGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvckFuZFJhZGlvXCIgdmFsdWU9XCIke1xuICAgICAgVE9LRU5TLlRPS0VOX09SXG4gICAgfVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICA8L2Rpdj4gICAgICAgICBcbiAgICA8L2Rpdj4gICBcbiAgICBgXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX29wZXJhdG9yUGFuZWwpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbk9wZXJhdG9yQ2hhbmdlZClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uT3BlcmF0b3JDaGFuZ2VkKVxuICAgIHRoaXMub2ZmKEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEKVxuICAgIHRoaXMucmVzZXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwucmVzZXQoKVxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIGpvaW4gc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHN0YXRlID0gc3RhdGUgfHwge31cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gc3RhdGUub3BlcmF0b3IgfHwgVE9LRU5TLlRPS0VOX09SXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24xID0gc3RhdGUuY29uZGl0aW9uMSB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24yID0gc3RhdGUuY29uZGl0aW9uMiB8fCBudWxsXG5cbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLnNldFN0YXRlKHRoaXMuc3RhdGUuY29uZGl0aW9uMSlcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5zZXRTdGF0ZSh0aGlzLnN0YXRlLmNvbmRpdGlvbjIpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYgKGlucHV0LmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnN0YXRlLm9wZXJhdG9yKSkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgc2VsZWN0ZWQgY29uZGl0aW9uIHRvIHRoZSBjb21wb25lbnQgc3RhdGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25PcGVyYXRvckNoYW5nZWQoZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0XG5cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnT1InKSkge1xuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItb3InKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1hbmQnKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZXJhdG9yUGFuZWxcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLW9yJylcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItYW5kJylcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSAgdGhlIG9wdGlvbiBzdGF0ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkZpcnN0Q29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMSA9IHN0YXRlXG5cbiAgICBjb25zdCBzdXBwcmVzc0FuZE9yQ29uZGl0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnc3VwcHJlc3NBbmRPckNvbmRpdGlvbicsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBmYWxzZVxuICAgIClcblxuICAgIGlmICghc3VwcHJlc3NBbmRPckNvbmRpdGlvbikge1xuICAgICAgY29uc3QgeyBmaWx0ZXIsIGZpbHRlclRvLCB0eXBlIH0gPSB0aGlzLnN0YXRlLmNvbmRpdGlvbjFcbiAgICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkd1aSA9IHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpXG4gICAgICBjb25zdCBvcGVyYXRvclBhbmVsR3VpID0gdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgdHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFID8gIWZpbHRlciB8fCAhZmlsdGVyVG8gOiAhZmlsdGVyXG5cbiAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgc2Vjb25kQ29uZGl0aW9uR3VpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG4gICAgICAgIG9wZXJhdG9yUGFuZWxHdWkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZENvbmRpdGlvbkd1aS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1oaWRkZW4nKVxuICAgICAgICBvcGVyYXRvclBhbmVsR3VpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlICB0aGUgb3B0aW9uIHN0YXRlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uU2Vjb25kQ29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMiA9IHN0YXRlXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRlVGltZSBGaWx0ZXJcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipkYXRlVGltZUVuYWJsZVRpbWUqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWVcbiAqIHwgKipkYXRlVGltZUVuYWJsZTI0SFIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWUgMjQgZm9ybWF0XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVTZWNvbmRzKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBzZWNvbmRzIG1hbmFnZW1lbnRcbiAqIHwgKipkYXRlVGltZUVuYWJsZUNhbGVuZGFyKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBDYWxlbmRhci5cbiAqIHwgKipkYXRlVGltZU1hc2sqKiAgIHwgZmFsc2UgICAgfCBUaGUgbWFzayB1c2VkIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWF4KiogICB8IHVuZGVmaW5lZCAgICB8ICBNYXggYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNaW4qKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1pbiBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZUZvcm1hdHRlcioqICAgfCB1bmRlZmluZWQgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICogfCAqKmZpbHRlck9wdGlvbnMqKiAgIHwgRXF1YWxzLCBHcmVhdGVyIFRoYW4sIExlc3MgVGhhbiwgTm90IEVxdWFscywgSW4gUmFuZ2UuICAgIHwgIFdoYXQgRmlsdGVyIE9wdGlvbnMgdG8gcHJlc2VudCB0byB0aGUgdXNlci5cbiAqIHwgKipkZWZhdWx0T3B0aW9uKiogICB8IEVxdWFscyAgICB8ICBUaGUgZGVmYXVsdCBGaWx0ZXIgT3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAqIHwgKipzdXBwcmVzc0FuZE9yQ29uZGl0aW9uKiogICB8IGZhbHNlICAgIHwgIElmIHRydWUsIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9mZmVyIENvbmRpdGlvbiAxLlxuICogfCAqKmluUmFuZ2VJbmNsdXNpdmUqKiAgIHwgZmFsc2UgICAgfCAgSWYgdHJ1ZSB0aGVuIGRvaW5nICdpblJhbmdlJyBmaWx0ZXIgb3B0aW9uIHdpbGwgaW5jbHVkZSB2YWx1ZXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJhbmdlLlxuICogfCAqKmNsZWFyQnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBDbGVhciBidXR0b24uIFRoZSBDbGVhciBidXR0b24gd2lsbCBjbGVhciB0aGUgKGZvcm0pIGRldGFpbHMgb2YgdGhlIGZpbHRlciB3aXRob3V0IHJlbW92aW5nIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGUgY29sdW1uLlxuICogfCAqKmFwcGx5QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYW4gQXBwbHkgYnV0dG9uLiBJZiB0aGUgQXBwbHkgYnV0dG9uIGlzIHByZXNlbnQsIHRoZW4gdGhlIGZpbHRlciBpcyBvbmx5IGFwcGxpZWQgYWZ0ZXIgdGhlIHVzZXIgaGl0cyB0aGUgQXBwbHkgYnV0dG9uLlxuICogfCAqKnJlc2V0QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBSZXNldCBidXR0b24uIFRoZSBSZXNldCBidXR0b24gd2lsbCBjbGVhciB0aGUgZGV0YWlscyBvZiB0aGUgZmlsdGVyIGFuZCBhbnkgYWN0aXZlIGZpbHRlcnMgb24gdGhhdCBjb2x1bW4uXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQHR5cGUge0pvaW59XG4gICAqL1xuICBfSm9pbkNvbmRpdGlvblBhbmVsID0gbmV3IEpvaW5Db25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEpvaW4gcGFuZWwgc3RhdGVcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9zdGF0ZSA9IHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwYXJhbXNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgb2YgYWxsIHRoZSByZXF1aXJlZCBvcHRpb25zIGNhY2hlZCBmb3IgZG9lc0ZpbHRlclBhc3MgbWV0aG9kXG4gICAqL1xuICBfZG9lc0ZpbHRlclBhc3NPcHRpb25zID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuICAgIGNvbnN0IGlzQ2xlYXJGaWx0ZXIgPSB0aGlzLmdldE9wdGlvbignY2xlYXJCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzUmVzZXRCdXR0b24gPSB0aGlzLmdldE9wdGlvbigncmVzZXRCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzQXBwbHlCdXR0b24gPSB0aGlzLmdldE9wdGlvbignYXBwbHlCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcblxuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwub24oXG4gICAgICBKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCxcbiAgICAgIHN0YXRlID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLl9vbkpvaW5Db25kaXRpb25QYW5lbFN0YXRlQ2hhbmdlZChzdGF0ZSwgaXNBcHBseUJ1dHRvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBhcHBseUZpbHRlclBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTmFtZSA9IGBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuXG4gICAgdGhpcy5fc3RhdGUgPSB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuc3RhdGVcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZVRpbWU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCB0aGlzLl9wYXJhbXMsIHRydWUpLFxuICAgICAgaW5SYW5nZUluY2x1c2l2ZTogdGhpcy5nZXRPcHRpb24oJ2luUmFuZ2VJbmNsdXNpdmUnLCB0aGlzLl9wYXJhbXMsIGZhbHNlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhbHVlR2V0dGVyOiB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXJcbiAgICAgICAgOiB0aGlzLl9wYXJhbXMudmFsdWVHZXR0ZXIsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzZWxlY3RlZCBmaWx0ZXIgbWF0Y2hlcyB0aGUgcGFzc2VkIGNlbGwgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBwYXNzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRvZXNGaWx0ZXJQYXNzKHBhcmFtcykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZG9lc0ZpbHRlclBhc3NPcHRpb25zLnZhbHVlR2V0dGVyKHBhcmFtcylcbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSB0aGlzLl9zdGF0ZVxuICAgIGNvbnN0IGRvZXNQYXNzRmlyc3RDb25kaXRpb24gPSB0aGlzLl9kb2VzUGFzc0NvbmRpdGlvbihjb25kaXRpb24xLCB2YWx1ZSlcbiAgICBjb25zdCBkb2VzUGFzc1NlY29uZENvbmRpdGlvbiA9IHRoaXMuX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbjIsIHZhbHVlKVxuXG4gICAgcmV0dXJuIG9wZXJhdG9yID09PSBUT0tFTlMuVE9LRU5fT1JcbiAgICAgID8gZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiB8fCBkb2VzUGFzc1NlY29uZENvbmRpdGlvblxuICAgICAgOiBkb2VzUGFzc0ZpcnN0Q29uZGl0aW9uICYmIGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFwcGx5aW5nIGFueSBmaWx0ZXIgb24gdGhlIGNvbHVtblxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKiovXG4gIGlzRmlsdGVyQWN0aXZlKCkge1xuICAgIGNvbnN0IHsgY29uZGl0aW9uMSB9ID0gdGhpcy5fc3RhdGVcblxuICAgIGlmIChjb25kaXRpb24xICYmIGNvbmRpdGlvbjEuZmlsdGVyKSB7XG4gICAgICBpZiAoY29uZGl0aW9uMS5maWx0ZXJUbyAmJiBjb25kaXRpb24xLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGwgJiYgY29uZGl0aW9uMS5maWx0ZXJUbyAhPT0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaWx0ZXIgc3RhdGUuIElmIGZpbHRlciBpcyBub3QgYWN0aXZlLCB0aGVuIHNob3VsZCByZXR1cm4gbnVsbC91bmRlZmluZWQuXG4gICAqIFRoZSBncmlkIGNhbGxzIGdldE1vZGVsKCkgb24gYWxsIGFjdGl2ZSBmaWx0ZXJzIHdoZW4gZ3JpZEFwaS5nZXRGaWx0ZXJNb2RlbCgpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiBPYmplY3QgfCBudWxsIHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIGdldE1vZGVsKCkge1xuICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9zdGF0ZSkpXG4gICAgO1tjbG9uZS5jb25kaXRpb24xLCBjbG9uZS5jb25kaXRpb24yXS5mb3JFYWNoKChjb25kaXRpb24sIGkpID0+IHtcbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXIgPSB0aGlzLl9zdGF0ZVtgY29uZGl0aW9uJHtpICsgMX1gXS5maWx0ZXIudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSB0aGlzLl9zdGF0ZVtcbiAgICAgICAgICBgY29uZGl0aW9uJHtpICsgMX1gXG4gICAgICAgIF0uZmlsdGVyVG8udG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjbG9uZS5maWx0ZXJUeXBlID0gJ2RhdGV0aW1lJ1xuICAgIGNsb25lLmNvbmRpdGlvbjEuZmlsdGVyVHlwZSA9ICdkYXRldGltZSdcbiAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclR5cGUgPSAnZGF0ZXRpbWUnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgcmV0dXJuIGNsb25lLmhhc093blByb3BlcnR5KCdjb25kaXRpb24yJykgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGNsb25lLmNvbmRpdGlvbjIuaGFzT3duUHJvcGVydHkoJ2ZpbHRlcicpICYmXG4gICAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclxuICAgICAgPyBjbG9uZVxuICAgICAgOiBjbG9uZS5jb25kaXRpb24xXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgaWYgKFxuICAgICAgbW9kZWwgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICFtb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZGl0aW9uMScpICYmXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAhbW9kZWwuaGFzT3duUHJvcGVydHkoJ2NvbmRpdGlvbjInKVxuICAgICkge1xuICAgICAgbW9kZWwgPSB7XG4gICAgICAgIGNvbmRpdGlvbjE6IG1vZGVsLFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSB0cnVlXG4gICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnNldFN0YXRlKG1vZGVsKVxuICAgIHRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IGZhbHNlXG5cbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5zdGF0ZVxuICAgIDtbdGhpcy5fc3RhdGUuY29uZGl0aW9uMSwgdGhpcy5fc3RhdGUuY29uZGl0aW9uMl0uZm9yRWFjaChjb25kaXRpb24gPT4ge1xuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlciA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXIpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXJUbylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsdGVyIG1vZGVsIGFzIHBsYWluIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBmbG9hdGluZyBmaWx0ZXIgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgZ2V0TW9kZWxBc1N0cmluZyhtb2RlbCkge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVUaW1lTWFzayA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RhdGVUaW1lTWFzaycsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICAvLyBAdG9kbyBGaW5kIGEgYmV0dGVyIHdheSBmb3IgdGhpc1xuICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLl9maXJzdENvbmRpdGlvblBhbmVsLl9maWx0ZXJUaW1lSW5wdXQucGlja2VyXG4gICAgICAgIC5jb25maWdbJ2RhdGVGb3JtYXQnXVxuICAgIClcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdkYXRlVGltZUxvY2FsZScsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcbiAgICApXG5cbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkobW9kZWwpXG4gICAgKVxuXG4gICAgO1tjb25kaXRpb24xLCBjb25kaXRpb24yXS5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlcikge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyID0gQkJqLk1hc2tzLkRhdGVNYXNrLm1hc2soXG4gICAgICAgICAgY29uZGl0aW9uLmZpbHRlcixcbiAgICAgICAgICBkYXRlVGltZU1hc2ssXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSBCQmouTWFza3MuRGF0ZU1hc2subWFzayhcbiAgICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8sXG4gICAgICAgICAgZGF0ZVRpbWVNYXNrLFxuICAgICAgICAgIGxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGZpcnN0Q29uZGl0aW9uQXNTdHJpbmcgPSBgJHtjb25kaXRpb24xLmZpbHRlciB8fCAnJ30gJHtcbiAgICAgIGNvbmRpdGlvbjEuZmlsdGVyVG8gPyAn4oaSICcgKyBjb25kaXRpb24xLmZpbHRlclRvIDogJydcbiAgICB9YFxuICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgfHwgJyd9ICR7XG4gICAgICBjb25kaXRpb24yLmZpbHRlclRvID8gJ+KGkiAnICsgY29uZGl0aW9uMi5maWx0ZXJUbyA6ICcnXG4gICAgfWBcbiAgICBjb25zdCBvcGVyYXRvckFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgJiYgb3BlcmF0b3IgPyBvcGVyYXRvciA6ICcnfWBcblxuICAgIHJldHVybiBgJHtmaXJzdENvbmRpdGlvbkFzU3RyaW5nfSAke29wZXJhdG9yQXNTdHJpbmd9ICR7c2Vjb25kQ29uZGl0aW9uQXNTdHJpbmd9YC50cmltKClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFsdWUgcGFzc2VzIHRoZSBmaWx0ZXIgZGVmaW5lZCBpbiB0aGUgcGFzc2VkIENvbmRpdGlvblBhbmVsJ3Mgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmRpdGlvbiBjb25kaXRpb24gcGFuZWwgc3RhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIGNlbGwgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHBhc3MsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbiwgdmFsdWUpIHtcbiAgICBpZiAoIWNvbmRpdGlvbi5maWx0ZXIgfHwgIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyVG8sIHR5cGUgfSA9IGNvbmRpdGlvblxuICAgIGNvbnN0IHRpbWV6b25lID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmdldFRpbWV6b25lT3JPZmZzZXQoKVxuICAgIGNvbnN0IGluUmFuZ2VJbmNsdXNpdmUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuaW5SYW5nZUluY2x1c2l2ZVxuICAgIGNvbnN0IGVuYWJsZVRpbWUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuZW5hYmxlVGltZVxuICAgIGxldCBwYXNzZWQgPSBmYWxzZVxuXG4gICAgaWYgKEJCai5NYXNrcy5VdGlscy5EYXRlcy5JU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgICAgO1tmaWx0ZXIsIGZpbHRlclRvXS5mb3JFYWNoKGRhdGUgPT4ge1xuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKDE5NzApXG4gICAgICAgICAgZGF0ZS5zZXRNb250aCgwKVxuICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQkJqLk1hc2tzLlV0aWxzLkRhdGVzLklTX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgdGhlIGRhdGV0aW1lIGZyb20gdXRjIHRvIGxvY2FsZVxuICAgIHZhbHVlID0gdXRjVG9ab25lZFRpbWUodmFsdWUsIHRpbWV6b25lKVxuICAgIC8vIGZpcnN0RGF0ZSA9IGZpcnN0RGF0ZSA/IHpvbmVkVGltZVRvVXRjKGZpcnN0RGF0ZSAsIHRpbWV6b25lKSA6IGZpcnN0RGF0ZVxuICAgIC8vIHNlY29uZERhdGUgPSBzZWNvbmREYXRlID8gem9uZWRUaW1lVG9VdGMoc2Vjb25kRGF0ZSAsIHRpbWV6b25lKSA6IHNlY29uZERhdGVcblxuICAgIGlmICghZW5hYmxlVGltZSkge1xuICAgICAgLy8gcmVtb3ZlIHRoZSB0aW1lIHBvcnRpb24gZnJvbSB0aGUgZGF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgIDtbdmFsdWUsIGZpbHRlciwgZmlsdGVyVG9dLmZvckVhY2goZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGUuc2V0SG91cnMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoMClcbiAgICAgICAgICBkYXRlLnNldFNlY29uZHMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcygwKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fRVFVQUwpIHtcbiAgICAgIHBhc3NlZCA9IGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX05PVF9FUVVBTCkge1xuICAgICAgcGFzc2VkID0gIShmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fR1JFQVRFUikge1xuICAgICAgcGFzc2VkID0gZmlsdGVyIDwgdmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9MRVNTKSB7XG4gICAgICBwYXNzZWQgPSBmaWx0ZXIgPiB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFICYmIGZpbHRlclRvKSB7XG4gICAgICBpZiAoaW5SYW5nZUluY2x1c2l2ZSkge1xuICAgICAgICBwYXNzZWQgPVxuICAgICAgICAgICgoZmlsdGVyIDwgdmFsdWUgfHxcbiAgICAgICAgICAgIChmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpKSAmJlxuICAgICAgICAgICAgZmlsdGVyVG8gPiB2YWx1ZSkgfHxcbiAgICAgICAgICAoZmlsdGVyVG8gPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyVG8gPCB2YWx1ZSA9PSBmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3NlZCA9IGZpbHRlciA8IHZhbHVlICYmIGZpbHRlclRvID4gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFzc2VkXG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byBjbGljayBidXR0b24gZXZlbnQgb24gdGhlIGZpbHRlciBwYW5lbCBhbmQgZXhlY3V0ZSB0aGVcbiAgICogcmlnaHQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNldCcpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICAgIHRoaXMuX3BhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbGVhcicpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZmlsdGVyIHN0YXRlIGFuZCBBcHBseSB0aGUgZmlsdGVyIGRlcGVuZGluZyBvblxuICAgKiB3aGV0aGVyIHRoZSBgaXNBcHBseUJ1dHRvbkFjdGl2ZWAgaXMgdHJ1ZSBvciBmYWxzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0FwcGx5QnV0dG9uQWN0aXZlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uSm9pbkNvbmRpdGlvblBhbmVsU3RhdGVDaGFuZ2VkKHN0YXRlLCBpc0FwcGx5QnV0dG9uQWN0aXZlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZVxuICAgIGlmIChmYWxzZSA9PT0gaXNBcHBseUJ1dHRvbkFjdGl2ZSkge1xuICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvRGF0ZVRpbWVGaWx0ZXIuanMiLCIvKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lWm9uZSkge1xuICB2YXIgZHRmID0gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpXG4gIHJldHVybiBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpXG59XG5cbnZhciB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGhvdXI6IDMsXG4gIG1pbnV0ZTogNCxcbiAgc2Vjb25kOiA1XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSlcbiAgdmFyIGZpbGxlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBvcyA9IHR5cGVUb1Bvc1tmb3JtYXR0ZWRbaV0udHlwZV1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludChmb3JtYXR0ZWRbaV0udmFsdWUsIDEwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkXG59XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csICcnKVxuICB2YXIgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZClcbiAgLy8gdmFyIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZFxuICAvLyByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXVxuICByZXR1cm4gW3BhcnNlZFszXSwgcGFyc2VkWzFdLCBwYXJzZWRbMl0sIHBhcnNlZFs0XSwgcGFyc2VkWzVdLCBwYXJzZWRbNl1dXG59XG5cbi8vIEdldCBhIGNhY2hlZCBJbnRsLkRhdGVUaW1lRm9ybWF0IGluc3RhbmNlIGZvciB0aGUgSUFOQSBgdGltZVpvbmVgLiBUaGlzIGNhbiBiZSB1c2VkXG4vLyB0byBnZXQgZGV0ZXJtaW5pc3RpYyBsb2NhbCBkYXRlL3RpbWUgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgYGVuLVVTYCBsb2NhbGUgd2hpY2hcbi8vIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgbG9jYWwgdGltZSBwYXJ0cyBhcyBuZWNlc3NhcnkuXG52YXIgZHRmQ2FjaGUgPSB7fVxuZnVuY3Rpb24gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAvLyBOZXcgYnJvd3NlcnMgdXNlIGBob3VyQ3ljbGVgLCBJRSBhbmQgQ2hyb21lIDw3MyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB1c2VzIGBob3VyMTJgXG4gICAgdmFyIHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSkuZm9ybWF0KG5ldyBEYXRlKCcyMDE0LTA2LTI1VDA0OjAwOjAwLjEyM1onKSlcbiAgICB2YXIgaG91ckN5Y2xlU3VwcG9ydGVkID1cbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJ+KAjjA24oCOL+KAjjI14oCOL+KAjjIwMTTigI4g4oCOMDDigI464oCOMDDigI464oCOMDAnXG5cbiAgICBkdGZDYWNoZVt0aW1lWm9uZV0gPSBob3VyQ3ljbGVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3RpbWVab25lXVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qcyc7XG5pbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gJy4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyc7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanMnO1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUvaW5kZXguanMnO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdC5pby9manVsZVwiKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vdG9EYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICdkYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMnXG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzJ1xuaW1wb3J0IHR6UGFyc2VUaW1lem9uZSBmcm9tICcuLi9fbGliL3R6UGFyc2VUaW1lem9uZSdcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxudmFyIERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgPSAyXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWV0ZXI6IC9bVCBdLyxcbiAgcGxhaW5UaW1lOiAvOi8sXG4gIHRpbWVab25lRGVsaW1ldGVyOiAvW1ogXS9pLFxuXG4gIC8vIHllYXIgdG9rZW5zXG4gIFlZOiAvXihcXGR7Mn0pJC8sXG4gIFlZWTogW1xuICAgIC9eKFsrLV1cXGR7Mn0pJC8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezN9KSQvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezR9KSQvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcbiAgWVlZWTogL14oXFxkezR9KS8sXG4gIFlZWVlZOiBbXG4gICAgL14oWystXVxcZHs0fSkvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHs1fSkvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezZ9KS8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuXG4gIC8vIGRhdGUgdG9rZW5zXG4gIE1NOiAvXi0oXFxkezJ9KSQvLFxuICBEREQ6IC9eLT8oXFxkezN9KSQvLFxuICBNTUREOiAvXi0/KFxcZHsyfSktPyhcXGR7Mn0pJC8sXG4gIFd3dzogL14tP1coXFxkezJ9KSQvLFxuICBXd3dEOiAvXi0/VyhcXGR7Mn0pLT8oXFxkezF9KSQvLFxuXG4gIEhIOiAvXihcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTTogL14oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NU1M6IC9eKFxcZHsyfSk6PyhcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG5cbiAgLy8gdGltZXpvbmUgdG9rZW5zICh0byBpZGVudGlmeSB0aGUgcHJlc2VuY2Ugb2YgYSB0eilcbiAgdGltZXpvbmU6IC8oW1orLV0uKnwgVVRDfCg/OlthLXpBLVpdK1xcL1thLXpBLVpfXSsoPzpcXC9bYS16QS1aX10rKT8pKSQvXG59XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIGFuIGFyZ3VtZW50IGlzIGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gcGFyc2UgaXQuXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKiBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3IgdGhlIHZhbHVlcyBhcmUgaW52YWxpZCwgaXQgcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKiBBbGwgKmRhdGUtZm5zKiBmdW5jdGlvbnMgd2lsbCB0aHJvdyBgUmFuZ2VFcnJvcmAgaWYgYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgaXMgbm90IDAsIDEsIDIgb3IgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRpbWVab25lPScnXSAtIHVzZWQgdG8gc3BlY2lmeSB0aGUgSUFOQSB0aW1lIHpvbmUgb2Zmc2V0IG9mIGEgZGF0ZSBTdHJpbmcuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnKzAyMDE0MTAxJywge2FkZGl0aW9uYWxEaWdpdHM6IDF9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBkaXJ0eU9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgcHJlc2VudCdcbiAgICApXG4gIH1cblxuICBpZiAoYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge31cblxuICB2YXIgYWRkaXRpb25hbERpZ2l0cyA9XG4gICAgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzID09IG51bGxcbiAgICAgID8gREVGQVVMVF9BRERJVElPTkFMX0RJR0lUU1xuICAgICAgOiB0b0ludGVnZXIob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gdHpQYXJzZVRpbWV6b25lKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICAgIG9mZnNldCA9IHR6UGFyc2VUaW1lem9uZShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKVxuICAgICAgb2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9XG4gIHZhciBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWV0ZXIpXG4gIHZhciB0aW1lU3RyaW5nXG5cbiAgaWYgKHBhdHRlcm5zLnBsYWluVGltZS50ZXN0KGFycmF5WzBdKSkge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBudWxsXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdXG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdXG4gICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSBhcnJheVsyXVxuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlcilbMF1cbiAgICAgIHRpbWVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cihkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCwgZGF0ZVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJylcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3Ncbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgdmFyIHBhdHRlcm5ZWVkgPSBwYXR0ZXJucy5ZWVlbYWRkaXRpb25hbERpZ2l0c11cbiAgdmFyIHBhdHRlcm5ZWVlZWSA9IHBhdHRlcm5zLllZWVlZW2FkZGl0aW9uYWxEaWdpdHNdXG5cbiAgdmFyIHRva2VuXG5cbiAgLy8gWVlZWSBvciDCsVlZWVlZXG4gIHRva2VuID0gcGF0dGVybnMuWVlZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVlZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciB5ZWFyU3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoeWVhclN0cmluZywgMTApLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoeWVhclN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gWVkgb3IgwrFZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVkuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB2YXIgY2VudHVyeVN0cmluZyA9IHRva2VuWzFdXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXI6IHBhcnNlSW50KGNlbnR1cnlTdHJpbmcsIDEwKSAqIDEwMCxcbiAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKGNlbnR1cnlTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIHJldHVybiB7XG4gICAgeWVhcjogbnVsbFxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhciB0b2tlblxuICB2YXIgZGF0ZVxuICB2YXIgbW9udGhcbiAgdmFyIHdlZWtcblxuICAvLyBZWVlZXG4gIGlmIChkYXRlU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1NTVxuICB0b2tlbiA9IHBhdHRlcm5zLk1NLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktREREIG9yIFlZWVlERERcbiAgdG9rZW4gPSBwYXR0ZXJucy5EREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICB2YXIgZGF5T2ZZZWFyID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGRheU9mWWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8geXl5eS1NTS1kZCBvciBZWVlZTU1ERFxuICB0b2tlbiA9IHBhdHRlcm5zLk1NREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheSA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXkpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIGRheSlcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1Xd3cgb3IgWVlZWVd3d1xuICB0b2tlbiA9IHBhdHRlcm5zLld3dy5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWspXG4gIH1cblxuICAvLyBZWVlZLVd3dy1EIG9yIFlZWVlXd3dEXG4gIHRva2VuID0gcGF0dGVybnMuV3d3RC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuICAgIHZhciBkYXlPZldlZWsgPSBwYXJzZUludCh0b2tlblsyXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheU9mV2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIGRhdGVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWVTdHJpbmcpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBob3Vyc1xuICB2YXIgbWludXRlc1xuXG4gIC8vIGhoXG4gIHRva2VuID0gcGF0dGVybnMuSEguZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlRmxvYXQodG9rZW5bMV0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgfVxuXG4gIC8vIGhoOm1tIG9yIGhobW1cbiAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlRmxvYXQodG9rZW5bMl0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIClcbiAgfVxuXG4gIC8vIGhoOm1tOnNzIG9yIGhobW1zc1xuICB0b2tlbiA9IHBhdHRlcm5zLkhITU1TUy5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuICAgIG1pbnV0ZXMgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG4gICAgdmFyIHNlY29uZHMgPSBwYXJzZUZsb2F0KHRva2VuWzNdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICtcbiAgICAgIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICtcbiAgICAgIHNlY29uZHMgKiAxMDAwXG4gICAgKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHdlZWsgPSB3ZWVrIHx8IDBcbiAgZGF5ID0gZGF5IHx8IDBcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KVxuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3XG4gIHZhciBkaWZmID0gd2VlayAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpXG4gIHJldHVybiBkYXRlXG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbnZhciBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG52YXIgREFZU19JTl9NT05USF9MRUFQX1lFQVIgPSBbMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkge1xuICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gICAgaWYgKGlzTGVhcFllYXIgJiYgZGF0ZSA+IERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmICghaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USFttb250aF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgaWYgKGRheU9mWWVhciA8IDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gIGlmIChpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2Nikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5KSB7XG4gIGlmICh3ZWVrIDwgMCB8fCB3ZWVrID4gNTIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXkgIT0gbnVsbCAmJiAoZGF5IDwgMCB8fCBkYXkgPiA2KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyAhPSBudWxsICYmIChob3VycyA8IDAgfHwgaG91cnMgPj0gMjUpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHNlY29uZHMgIT0gbnVsbCAmJiAoc2Vjb25kcyA8IDAgfHwgc2Vjb25kcyA+PSA2MCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3RvRGF0ZS9pbmRleC5qcyIsInZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDA7XG5cbmZ1bmN0aW9uIGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURTtcbn1cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgaGFzTmVnYXRpdmVVVENPZmZzZXQgPSBiYXNlVGltZXpvbmVPZmZzZXQgPiAwO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBoYXNOZWdhdGl2ZVVUQ09mZnNldCA/IChNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURSA6IGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogRXZlbnRzIE1peGluXG4gKlxuICogQWxsb3cgY2xhc3NlcyB0byBoYXZlIHRoZWlyIG93biBldmVudHMgbWFuYWdlclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jb25zdCBFdmVudHNNaXhpbiA9IHN1cGVyQ2xhc3MgPT5cbiAgY2xhc3MgZXh0ZW5kcyBzdXBlckNsYXNzIHtcbiAgICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcmVnaXN0ZXJzIGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIF9faGFuZGxlcnMgPSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgaGFuZGxlciBmdW5jdGlvblxuICAgICAqL1xuICAgIG9uKG5hbWUsIGhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX19oYW5kbGVyc1tuYW1lXSA9IHRoaXMuX19oYW5kbGVyc1tuYW1lXSB8fCBbXVxuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogKipOb3RlIDoqKiBpZiBoYW5kbGVyIGlzIG5vdCBwcm92aWRlZCB0aGVuIGFsbCByZWdpc3RlcmVkIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBldmVudCB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIGhhbmRsZXIgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBvZmYobmFtZSwgaGFuZGxlcikge1xuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdID0gdGhpcy5fX2hhbmRsZXJzW25hbWVdIHx8IFtdXG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX19oYW5kbGVyc1tuYW1lXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCByZWdpc3RlcmVkSGFuZGxlciBpbiB0aGlzLl9faGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnMuaGFzT3duUHJvcGVydHkocmVnaXN0ZXJlZEhhbmRsZXIpICYmXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnNbcmVnaXN0ZXJlZEhhbmRsZXJdID09PSBoYW5kbGVyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fX2hhbmRsZXJzW25hbWVdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZ5IGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBldmVudCBuYW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHBheWxvYWRcbiAgICAgKi9cbiAgICBub3RpZnkobmFtZSwgcGF5bG9hZCkge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNbbmFtZV0gfHwgW11cbiAgICAgIGhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgIGhhbmRsZXIocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbi8qKlxuICogQW4gZXZlbnRzIG1peGluIGRlY29yYXRvclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAc2VlIHtFdmVudHNNaXhpbn1cbiAqL1xuZnVuY3Rpb24gd2l0aEV2ZW50c01peGluKHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIEV2ZW50c01peGluKHN1cGVyQ2xhc3MpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50c01peGluXG5leHBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FdmVudHNNaXhpbi9FdmVudHNNaXhpbi5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSwgcmVhZG9ubHkgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuLi9FdmVudHNNaXhpbidcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0ICcuL3N0eWxlLnNjc3MnXG5cbi8qKlxuICogRGF0ZVRpbWVJbnB1dFxuICpcbiAqIFNpbXBsZSBEYXRlVGltZUlucHV0IGNvbXBvbmVudCB3aGljaCBpbnRlZ3JhdGVzIHRoZSBmbGF0cGlja3JcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5Ad2l0aEV2ZW50c01peGluXG5jbGFzcyBEYXRlVGltZUlucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBhIGRhdGVcbiAgICogaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGRhdGUgcGlja2VyXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGljIE9OX0RBVEVfQ0hBTkdFRCA9ICdEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRCdcblxuICAvKipcbiAgICogVGhlIGRhdGUgcGlja2VyIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlIHtGbGF0cGlja3JGbn1cbiAgICovXG4gIHBpY2tlciA9IG51bGxcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZXxudWxsfVxuICAgKi9cbiAgc2VsZWN0ZWREYXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHJlY2VpdmVkIHBhcmFtcyB3aGVuIGluaXQgaXMgY2FsbGVkXG4gICAqc1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IHt9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgRGF0ZVRpbWVJbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzRWRpdG9yIHdoZW4gdHJ1ZSAsIHRoZSBpbnB1dCB3aWxsIHN0eWxlZCB0byBmaXQgYXMgYSBjZWxsIGVkaXRvclxuICAgKi9cbiAgY29uc3RydWN0b3IoaXNFZGl0b3IgPSBmYWxzZSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0ICR7XG4gICAgICAgIGlzRWRpdG9yID8gJ2RhdGV0aW1lX19pbnB1dC0tZWRpdG9yICcgOiAnJ1xuICAgICAgfSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0X19pbnB1dCAke1xuICAgICAgICAgICAgaXNFZGl0b3IgPyAnYWctY2VsbC1lZGl0LWlucHV0ICcgOiAnJ1xuICAgICAgICAgIH0gYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1pbnB1dD5cbiAgICAgICAgICA8YSBjbGFzcz1cImRhdGV0aW1lX19pbnB1dF9fY2xlYXJcIiBkYXRhLWNsZWFyPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJkYXRldGltZV9faW5wdXRfX2NsZWFyX19pY29uIGFnLWljb24gYWctaWNvbi1jcm9zc1wiPjwvaT5cbiAgICAgICAgICA8L2E+ICAgIFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgY29uc3QgZW5hYmxlVGltZSA9IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCBwYXJhbXMsIHRydWUpXG4gICAgY29uc3QgdGltZV8yNGhyID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlMjRIUicsIHBhcmFtcywgdHJ1ZSlcbiAgICBjb25zdCBlbmFibGVTZWNvbmRzID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlU2Vjb25kcycsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3Qgbm9DYWxlbmRhciA9ICF0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVDYWxlbmRhcicsIHBhcmFtcywgdHJ1ZSlcblxuICAgIGxldCBkYXRlRm9ybWF0ID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWFzaycsIHBhcmFtcylcblxuICAgIC8vIHRyeSB0byBnZW5lcmF0ZSBhIGRlZmF1bHQgZGF0ZSBmb3JtYXQgYmFzZWQgb24gdGhlIG9wdGlvbnNcbiAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgIGRhdGVGb3JtYXQgPSBub0NhbGVuZGFyID8gJycgOiAnJVkvJU16LyVEeidcbiAgICAgIGlmIChlbmFibGVUaW1lKSB7XG4gICAgICAgIGRhdGVGb3JtYXQgKz0gdGltZV8yNGhyID8gJyAlSHo6JW16JyA6ICcgJWh6OiVteidcblxuICAgICAgICBpZiAoZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgIGRhdGVGb3JtYXQgKz0gJzolc3onXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50cmltKClcblxuICAgIC8vIGluaXQgdGhlIGRhdGUgcGlja2VyXG4gICAgdGhpcy5waWNrZXIgPSBmbGF0cGlja3IodGhpcy5fZ3VpLCB7XG4gICAgICB3cmFwOiB0cnVlLFxuICAgICAgLy8gYWxsb3cgZW50ZXJpbmcgdGhlIGRhdGUgbWFudWFsbHkgcmVxdWlyZXMgZGF0ZSBwYXJzaW5nIGZyb20gc3RyaW5nXG4gICAgICAvLyB0aGlzIGlzIGEgdG91Z2ggdGhpbmcgYW5kIHJlcXVpcmVzIGxpYnMgbGlrZSBtb21lbnRcbiAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMuX29uRGF0ZUNoYW5nZWQsXG4gICAgICBmb3JtYXREYXRlOiB0aGlzLmZvcm1hdERhdGUsXG4gICAgICBtYXhEYXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNYXgnLCBwYXJhbXMsIG51bGwpLFxuICAgICAgbWluRGF0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWluJywgcGFyYW1zLCBudWxsKSxcbiAgICAgIGRlZmF1bHRIb3VyOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEZWZhdWx0SG91cicsIHBhcmFtcywgMTIpLFxuICAgICAgZGVmYXVsdE1pbnV0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRGVmYXVsdE1pbnV0ZScsIHBhcmFtcywgMCksXG4gICAgICBkaXNhYmxlTW9iaWxlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEaXNhYmxlTW9iaWxlJywgcGFyYW1zLCBmYWxzZSksXG4gICAgICB3ZWVrTnVtYmVyczogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlV2Vla051bWJlcicsIHBhcmFtcywgZmFsc2UpLFxuICAgICAgbG9jYWxlOiB0aGlzLl9nZXRQaWNrZXJMb2NhbGUoKSxcbiAgICAgIG5vQ2FsZW5kYXIsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgZW5hYmxlVGltZSxcbiAgICAgIGVuYWJsZVNlY29uZHMsXG4gICAgICB0aW1lXzI0aHIsXG4gICAgfSlcblxuICAgIC8vIGZvcmNlIGRpYWxvZyBvdmVyZmxvd1xuICAgIHRoaXMucGlja2VyLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2FnLWN1c3RvbS1jb21wb25lbnQtcG9wdXAnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnBpY2tlci5kZXN0cm95KClcbiAgICB0aGlzLm9mZihEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBpY2tlciBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd9IHZhbHVlIHRoZSBkYXRlIHZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0RGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMucGlja2VyLnNldERhdGUodmFsdWUsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBQaWNrZXJcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5waWNrZXIub3BlbigpXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHBpY2tlclxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5waWNrZXIuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBwaWNrZXJcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIC8qKiB0aGlzIGNoZWNrIGJlY2F1c2UgdGhlIHRlc3RzIGZhaWwgaGVyZSBmb3Igc29tZSByZWFzb25zICAqL1xuICAgIGlmICh0aGlzLnBpY2tlci5jb25maWcpIHtcbiAgICAgIHRoaXMucGlja2VyLmNsZWFyKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBkYXRlIHVzaW5nIGBCQmouTWFza3MuVHlwZXMuZGF0ZWBcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IEJCaiBkYXRlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGZvcm1hdHRlZCBkYXRlIGFzIHN0cmluZ1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIGZvcm1hdERhdGUoZGF0ZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVGb3JtYXR0ZXInLCB0aGlzLl9wYXJhbXMpXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGF0ZVRpbWVMb2NhbGUnLFxuICAgICAgdGhpcy5fcGFyYW1zLFxuICAgICAgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG4gICAgKVxuXG4gICAgaWYgKGRhdGVUaW1lRm9ybWF0dGVyKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGVUaW1lRm9ybWF0dGVyXG4gICAgICBsZXQgZXhwcmVzc2lvbiA9IGRhdGVUaW1lRm9ybWF0dGVyXG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGlmICghKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcbiAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICdmb3JtYXQnLFxuICAgICAgICAgICAgJ2xvY2FsZScsXG4gICAgICAgICAgICAnRGF0ZU1hc2snLFxuICAgICAgICAgICAgZXhwcmVzc2lvblxuICAgICAgICAgICkoZGF0ZSwgZm9ybWF0LCBsb2NhbGUsIEJCai5NYXNrcy5EYXRlTWFzaylcblxuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0dGVyKGRhdGUsIGZvcm1hdCwgbG9jYWxlLCBCQmouTWFza3MuRGF0ZU1hc2spXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgZGF0ZVRpbWVGb3JtYXR0ZXIgZGVmaW5lZCBmb3IgY29sdW1uIFwiJHt0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkfVwiLiBUaGUgZm9ybWF0dGVyIHNob3VsZCBiZSBhbiBleHByZXNzaW9uIG9yIHBsYWluIGZ1bmN0aW9uYFxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtYXQgfHwgKGZvcm1hdCAmJiBmb3JtYXQuaW5kZXhPZignJScpIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCQmouTWFza3MuRGF0ZU1hc2subWFzayhkYXRlLCBmb3JtYXQsIGxvY2FsZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGRhdGUgcGlja2VyIGNoYW5nZXMgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZERhdGVzICBhcnJheSBvZiBzZWxlY3RlZCBkYXRlc1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkRhdGVDaGFuZ2VkKHNlbGVjdGVkRGF0ZXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHNlbGVjdGVkRGF0ZXNbMF0gfHwgbnVsbFxuICAgIHRoaXMubm90aWZ5KERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGlja2VyIGdsb2JhbCBsb2NhbGl6YXRpb24gd2hpY2ggd2lsbCB3b3JrIHdpdGggYW55IGxvY2FsZVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0cGlja3IvZmxhdHBpY2tyL2Jsb2IvbWFzdGVyL3NyYy9sMTBuL2RlZmF1bHQudHNcbiAgICovXG4gIF9nZXRQaWNrZXJMb2NhbGUoKSB7XG4gICAgY29uc3QgbG9jYWxlID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG5cbiAgICBjb25zdCB3ZWVrRGF5c1Nob3J0ID0gW11cbiAgICBjb25zdCB3ZWVrRGF5c0xvbmcgPSBbXVxuXG4gICAgZm9yIChsZXQgZGF5ID0gNDsgZGF5IDwgMTE7IGRheSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMTk3MCwgMSAtIDEsIGRheSlcblxuICAgICAgd2Vla0RheXNTaG9ydC5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ3Nob3J0JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zcGxpdCgnLCcpWzBdIC8vIHRoZSBkYXRlLXRpbWUtZm9ybWF0LXRpbWV6b25lIHBvbHlmaWxsIGF0dGFjaCB0aGUgZGF0ZSBhbHNvXG4gICAgICApXG5cbiAgICAgIHdlZWtEYXlzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNwbGl0KCcsJylbMF0gLy8gdGhlIGRhdGUtdGltZS1mb3JtYXQtdGltZXpvbmUgcG9seWZpbGwgYXR0YWNoIHRoZSBkYXRlIGFsc29cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtb250aHNTaG9ydCA9IFtdXG4gICAgY29uc3QgbW9udGhzTG9uZyA9IFtdXG5cbiAgICBmb3IgKGxldCBtb250aCA9IDA7IG1vbnRoIDwgMTI7IG1vbnRoKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCBtb250aCwgNClcblxuICAgICAgbW9udGhzU2hvcnQucHVzaChcbiAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgbW9udGhzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIHNob3J0aGFuZDogd2Vla0RheXNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IHdlZWtEYXlzTG9uZyxcbiAgICAgIH0sXG4gICAgICBtb250aHM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiBtb250aHNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IG1vbnRoc0xvbmcsXG4gICAgICB9LFxuICAgICAgZGF5c0luTW9udGg6IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgb3JkaW5hbDogbnVtYmVyID0+ICcnLFxuICAgICAgcmFuZ2VTZXBhcmF0b3I6ICcgICcsXG4gICAgICB3ZWVrQWJicmV2aWF0aW9uOiAnJyxcbiAgICAgIHNjcm9sbFRpdGxlOiAnJyxcbiAgICAgIHRvZ2dsZVRpdGxlOiAnJyxcbiAgICAgIGFtUE06IFsnQU0nLCAnUE0nXSxcbiAgICAgIHllYXJBcmlhTGFiZWw6ICcnLFxuICAgICAgaG91ckFyaWFMYWJlbDogJycsXG4gICAgICBtaW51dGVBcmlhTGFiZWw6ICcnLFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUlucHV0XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGV0aW1lX19pbnB1dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjNweH0uZGF0ZXRpbWVfX2lucHV0OmZvY3VzLC5kYXRldGltZV9faW5wdXQ6YWN0aXZlLC5kYXRldGltZV9faW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFnLWlucHV0LWZvY3VzLWJvcmRlci1jb2xvciwgcmdiYSgzMywxNTAsMjQzLDAuNCkpfS5kYXRldGltZV9faW5wdXRfX2lucHV0e2ZsZXg6MTtwYWRkaW5nOjZweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5kYXRldGltZV9faW5wdXRfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9LmRhdGV0aW1lX19pbnB1dF9fY2xlYXJ7bWFyZ2luLWxlZnQ6MXB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6NnB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0fS5kYXRldGltZV9faW5wdXQtLWVkaXRvcntib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGV0aW1lX19pbnB1dC0tZWRpdG9yIC5kYXRldGltZV9faW5wdXRfX2lucHV0e3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5kYXRlVGltZUZpbHRlciBzZWxlY3R7bWFyZ2luLWJvdHRvbTo5cHg7cGFkZGluZzo2cHg7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2NvbG9yOmluaGVyaXR9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdDpmb2N1cywuZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdCBvcHRpb257dGV4dC1pbmRlbnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gMTI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IERhdGVUaW1lSW5wdXQgZnJvbSAnLi4vRGF0ZVRpbWVJbnB1dCdcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuXG4vKipcbiAqIERhdGVUaW1lSW5wdXRcbiAqXG4gKiBTaW1wbGUgRGF0ZVRpbWVJbnB1dCBjb21wb25lbnQgd2hpY2ggaW50ZWdyYXRlcyB0aGUgZmxhdHBpY2tyXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVUaW1lKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lXG4gKiB8ICoqZGF0ZVRpbWVFbmFibGUyNEhSKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lIDI0IGZvcm1hdFxuICogfCAqKmRhdGVUaW1lRW5hYmxlU2Vjb25kcyoqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgc2Vjb25kcyBtYW5hZ2VtZW50XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVDYWxlbmRhcioqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgQ2FsZW5kYXIuXG4gKiB8ICoqZGF0ZVRpbWVNYXNrKiogICB8IGZhbHNlICAgIHwgVGhlIG1hc2sgdXNlZCB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGVcbiAqIHwgKipkYXRlVGltZU1heCoqICAgfCB1bmRlZmluZWQgICAgfCAgTWF4IGFsbG93ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWluKiogICB8IHVuZGVmaW5lZCAgICB8ICBNaW4gYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVGb3JtYXR0ZXIqKiAgIHwgZmFsc2UgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIERhdGVUaW1lRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2lucHV0ID0gbmV3IERhdGVUaW1lSW5wdXQodHJ1ZSlcblxuICAvKipcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIF92YWx1ZSA9IG51bGxcblxuICAvKipcbiAgICogUGFyYW1zIHJlY2VpdmVkIGluIGluaXRcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSBudWxsXG5cbiAgLyoqXG4gICAqIFRha2VzIGluY29tcGxldGUgaXNvIHN0cmluZyBhbmQgcmV0dXJuIGEgY29tcGxldGUgb25lXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGNvbXBsZXRlIGlzbyBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBmaXhTaG9ydElTTyh2YWx1ZSkge1xuICAgIHJldHVybiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IERhdGVUaW1lRWRpdG9yLmZpeFNob3J0SVNPKHRoaXMuX3ZhbHVlKVxuICAgIHRoaXMuX2lucHV0LmluaXQocGFyYW1zKVxuICAgIHRoaXMuX2lucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLl9vbkRhdGVDaGFuZ2UpXG5cbiAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldERhdGUoXG4gICAgICAgIHV0Y1RvWm9uZWRUaW1lKHRoaXMuX3ZhbHVlLCBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0VGltZXpvbmVPck9mZnNldCgpKVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuX2d1aSA9IHRoaXMuX2lucHV0LmdldEd1aSgpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2lucHV0LmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICogTWFrZSBzdXJlIHRoZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgYW5kIGxpc3RlbmluZyB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgdmFsdWUgdG8gdGhlIGdyaWQsIHRoZSByZXN1bHQgb2YgdGhlIGVkaXRpbmdcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZSh0aGlzLl92YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0Lm9wZW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIG91dCBvZiB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzT3V0KCkge1xuICAgIHRoaXMuX2lucHV0LmNsb3NlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGVkaXRvciB2YWx1ZSB3aXRoIHNlbGVjdGVkIGRhdGUgZnJvbSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25EYXRlQ2hhbmdlKGRhdGUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogJydcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL0RhdGVUaW1lRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L0N1c3RvbUV2ZW50ICAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbjsoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy9JZiBub3QgSUVcblxuICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHsgYnViYmxlczogZmFsc2UsIGNhbmNlbGFibGU6IGZhbHNlLCBkZXRhaWw6IHVuZGVmaW5lZCB9XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKVxuICAgIHJldHVybiBldnRcbiAgfVxuXG4gIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGVcblxuICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudFxufSkoKVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5pdC5qcydcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1ucy5qcydcbmV4cG9ydCAqIGZyb20gJy4vcm93cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vY2VsbHMuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi90b29scGFuZWwuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXR1c2Jhci5qcydcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheXMuanMnXG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQuanMnXG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vanNzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMuanMnXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMgfSBmcm9tICcuL2NvbHVtbnMnXG5pbXBvcnQgeyBnd19uYXZpZ2F0ZVRvTmV4dFJvdywgZ3dfZ2V0Um93Tm9kZUlkIH0gZnJvbSAnLi9yb3dzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q29udGV4dE1lbnUgfSBmcm9tICcuL21lbnVzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMgfSBmcm9tICcuL2NoYXJ0cydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50LCBnd19nZXRXaW5kb3csIGd3X2FkZEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIGd3X29uUm93Q2xpY2tlZCxcbiAgZ3dfb25Sb3dEb3VibGVDbGlja2VkLFxuICBnd19vblNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vbkNlbGxFZGl0aW5nRXZlbnQsXG4gIGd3X29uUm93RWRpdGluZ0V2ZW50LFxuICBnd19vblJlYWR5RXZlbnQsXG4gIGd3X2RlYm91bmNlLFxufSBmcm9tICdldmVudHMnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuaW1wb3J0IEhUTUxUb29sdGlwIGZyb20gJy4uL2NvbXBvbmVudHMvSFRNTFRvb2x0aXAuanMnXG5pbXBvcnQgU3VnZ2VzdGlvbkVkaXRvciBmcm9tICcuLi9jb21wb25lbnRzL1N1Z2dlc3Rpb25FZGl0b3IuanMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2luaXQob3B0aW9ucywgbGljZW5zZSwgZGF0YSkge1xuICBpZiAoYWdHcmlkLkxpY2Vuc2VNYW5hZ2VyICYmIGxpY2Vuc2UpIHtcbiAgICBhZ0dyaWQuTGljZW5zZU1hbmFnZXIuc2V0TGljZW5zZUtleShsaWNlbnNlKVxuICB9XG5cbiAgY29uc3QgaWQgPSBvcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgY29udGFpbmVyID0gZ3dfZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChpZClcbiAgLy8gd2UgbWFrZSB0aGUgZ3JpZCBvcHRpb25zIGF2YWlsYWJsZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gIGNvbnN0IGdyaWQgPSBnd19hZGRHcmlkKGlkLCB7XG4gICAgY29udGFpbmVyLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gVE9ETzogdXNlIGFnIGdyaWQgZGVzdHJveVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJydcblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpXG4gIHBhcnNlZE9wdGlvbnMucm93RGF0YSA9IGRhdGFcblxuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBhZ0dyaWQuR3JpZChjb250YWluZXIsIHBhcnNlZE9wdGlvbnMpXG4gIGdyaWQuaW5zdGFuY2UgPSBpbnN0YW5jZVxuICBncmlkLm9wdGlvbnMgPSBwYXJzZWRPcHRpb25zXG5cbiAgY29uc29sZS5sb2coXG4gICAgYCVjIEdyaWQgWyR7aWR9XSBzZXR0aW5ncyA6IGAsXG4gICAgJ2JhY2tncm91bmQ6ICMyMjI7IGNvbG9yOiAjYmFkYTU1JyxcbiAgICBwYXJzZWRPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBQYXJzZSBPcHRpb25zXG4gKlxuICogUGFyc2UgdGhlIGdyaWQgb3B0aW9ucyBhbmQgcmV0dXJuXG4gKiBhbiBvYmplY3Qgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEdyaWQgb3B0aW9ucyBhcyBKc29uIE9iamVjdFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gb3B0aW9ucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgZGVlcFBhcnNlZE9wdGlvbnMgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxuICBjb25zdCBpZCA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgZ2V0RGF0YVBhdGhUZW1wbGF0ZSA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuZ2V0RGF0YVBhdGggfHwgJydcbiAgLy8gVE9ETzogZG8gd2UgbmVlZCB0byBjb250cm9sIHRoaXMgc2V0dGluZyBmcm9tIEJCaiA/XG4gIGNvbnN0IGRlYm91bmNlRHVyYXRpb24gPSAyNTBcbiAgY29uc3QgZmluYWxPcHRpb25zID0ge1xuICAgIC4uLmRlZXBQYXJzZWRPcHRpb25zLFxuICAgIC4uLntcbiAgICAgIGdldERvY3VtZW50OiAoKSA9PiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgb25DZWxsRWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsVmFsdWVDaGFuZ2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvblJvd1ZhbHVlQ2hhbmdlZDogZSA9PiB7XG4gICAgICAgIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkdyaWRSZWFkeTogZSA9PiB7XG4gICAgICAgIGd3X29uUmVhZHlFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBnZXRSb3dOb2RlSWQ6IGRhdGEgPT4gZ3dfZ2V0Um93Tm9kZUlkKGlkLCBkYXRhKSxcbiAgICAgIGdldENvbnRleHRNZW51SXRlbXM6IHBhcmFtcyA9PiBnd19nZXRDb250ZXh0TWVudShpZCwgcGFyYW1zKSxcbiAgICAgIGdldENoYXJ0VG9vbGJhckl0ZW1zOiBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyxcbiAgICAgIHBvcHVwUGFyZW50OiBnd19nZXREb2N1bWVudCgpLmJvZHksXG4gICAgICBvblJvd0RvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93RG91YmxlQ2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblJvd0NsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93Q2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvbkNlbGxDbGlja2VkOiBnd19kZWJvdW5jZShnd19vbkNlbGxDbGlja0V2ZW50LCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uQ2VsbERvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uQ2VsbENsaWNrRXZlbnQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2VkOiBnd19kZWJvdW5jZShnd19vblNlbGVjdGlvbkNoYW5nZWQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQ6IGd3X2RlYm91bmNlKFxuICAgICAgICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbiAgICAgICAgZGVib3VuY2VEdXJhdGlvblxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQm9vbGVhbkZpbHRlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5Cb29sZWFuRmlsdGVyLFxuICAgICAgICBCb29sZWFuUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuQm9vbGVhblJlbmRlcmVyLFxuICAgICAgICBCb29sZWFuRWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkJvb2xlYW5FZGl0b3IsXG4gICAgICAgIE51bWJlckVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5OdW1iZXJFZGl0b3IsXG4gICAgICAgIFRleHRFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuVGV4dEVkaXRvcixcbiAgICAgICAgRGF0ZVRpbWVFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuRGF0ZVRpbWVFZGl0b3IsXG4gICAgICAgIERhdGVUaW1lRmlsdGVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkRhdGVUaW1lRmlsdGVyLFxuICAgICAgICBJbWFnZVJlbmRlcmVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkltYWdlUmVuZGVyZXIsXG4gICAgICAgIFRlbXBsYXRlUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuVGVtcGxhdGVSZW5kZXJlcixcbiAgICAgICAgSFRNTFRvb2x0aXA6IEhUTUxUb29sdGlwLFxuICAgICAgICBTdWdnZXN0aW9uRWRpdG9yOiBTdWdnZXN0aW9uRWRpdG9yLFxuICAgICAgfSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgLi4uZGVlcFBhcnNlZE9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGRvY3VtZW50OiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgICAgIHdpbmRvdzogZ3dfZ2V0V2luZG93KCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH1cblxuICBpZiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGZpbmFsT3B0aW9ucy5jb250ZXh0Lmhhc093blByb3BlcnR5KCduYXZpZ2F0ZVRvTmV4dENlbGwnKSAmJlxuICAgIGZpbmFsT3B0aW9ucy5jb250ZXh0Lm5hdmlnYXRlVG9OZXh0Q2VsbFxuICApIHtcbiAgICBmaW5hbE9wdGlvbnMubmF2aWdhdGVUb05leHRDZWxsID0gcGFyYW1zID0+IHtcbiAgICAgIHJldHVybiBnd19uYXZpZ2F0ZVRvTmV4dFJvdyhpZCwgcGFyYW1zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChnZXREYXRhUGF0aFRlbXBsYXRlICYmIGZpbmFsT3B0aW9ucy50cmVlRGF0YSkge1xuICAgIGNvbnN0IGdldERhdGFQYXRoVGVtcGxhdGVDb21wbGllZCA9IHRlbXBsYXRlKGdldERhdGFQYXRoVGVtcGxhdGUpXG4gICAgZmluYWxPcHRpb25zLmdldERhdGFQYXRoID0gZGF0YSA9PlxuICAgICAgZ2V0RGF0YVBhdGhUZW1wbGF0ZUNvbXBsaWVkKHsgZGF0YTogZGF0YSB9KVxuICB9XG5cbiAgLy8gZXh0ZW5kIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZmluYWxPcHRpb25zLmNvbHVtbkRlZnMpXG5cbiAgcmV0dXJuIGZpbmFsT3B0aW9uc1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGVGcm9tRXZlbnQsIGd3X3NlbmRFdmVudCB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRDb250ZXh0TWVudShncmlkSWQsIHBhcmFtcykge1xuICBjb25zdCBidWlsZENvbnRleHRNZW51QWN0aW9uID0gKHBhcmFtcywgaWQpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChwYXJhbXMpXG4gICAgICBjb25zdCBjb2xJZCA9IHBhcmFtcy5jb2x1bW4uY29sSWRcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zLnZhbHVlXG5cbiAgICAgIGd3X3NlbmRFdmVudChcbiAgICAgICAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdndy5jb250ZXh0bWVudScsXG4gICAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7IHI6IG5vZGUsIGM6IGNvbElkLCB2OiB2YWx1ZSwgaTogaWQgfSksXG4gICAgICAgIH0sXG4gICAgICAgIGlkXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VNZW51ID0gbWVudSA9PiB7XG4gICAgbWVudS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaXRlbVsnYWN0aW9uJ10gPSBidWlsZENvbnRleHRNZW51QWN0aW9uKHBhcmFtcywgaXRlbS5pZClcblxuICAgICAgaWYgKGl0ZW1bJ2Nzc0NsYXNzZXMnXSAmJiAhQXJyYXkuaXNBcnJheShpdGVtWydjc3NDbGFzc2VzJ10pKSB7XG4gICAgICAgIGl0ZW1bJ2Nzc0NsYXNzZXMnXSA9IGl0ZW1bJ2Nzc0NsYXNzZXMnXS5zcGxpdCgnICcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWydzdWJNZW51J10pIHtcbiAgICAgICAgaXRlbVsnc3ViTWVudSddID0gcGFyc2VNZW51KGl0ZW1bJ3N1Yk1lbnUnXSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG1lbnVcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1lbnUoZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuY29udGV4dC5jb250ZXh0TWVudSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25DZWxsQ2xpY2tFdmVudCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG59IGZyb20gJy4vc2VsZWN0aW9ucydcblxuaW1wb3J0IHsgZ3dfb25DZWxsRWRpdGluZ0V2ZW50LCBnd19vblJvd0VkaXRpbmdFdmVudCB9IGZyb20gJy4vZWRpdGluZydcblxuaW1wb3J0IHsgZ3dfb25SZWFkeUV2ZW50IH0gZnJvbSAnLi9yZWFkeSdcblxuaW1wb3J0IHsgZ3dfZGVib3VuY2UgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uQ2VsbENsaWNrRXZlbnQsXG4gIGd3X29uQ2VsbEVkaXRpbmdFdmVudCxcbiAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQsXG4gIGd3X29uUmVhZHlFdmVudCxcbiAgZ3dfZGVib3VuY2UsXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCwgZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19lc2NhcGUsIGd3X2dldEdyaWQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgR1dfRVZFTlRfUk9XX0NMSUNLLFxuICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLLFxuICBHV19FVkVOVF9ST1dfU0VMRUNULFxuICBHV19FVkVOVF9DRUxMX0NMSUNLLFxuICBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyxcbiAgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAgPSB7XG4gIGNlbGxDbGlja2VkOiBHV19FVkVOVF9DRUxMX0NMSUNLLFxuICBjZWxsRG91YmxlQ2xpY2tlZDogR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0ssXG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJvd0RvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgc2VuZCBhIGJiaiBldmVudCB3aXRoIGBHV19OT0RFYCBhcyBwYXlsb2FkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGUgVGhlIGV2ZW50J3MgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dEb3VibGVDbGlja2VkXG4gKiBAZmlyZXMgZ3cucm93RG91YmxlQ2xpY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUm93RG91YmxlQ2xpY2tlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuXG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yb3dEb3VibGVDbGljaycsXG4gICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgazogZ3dfZ2V0R3JpZChjb250ZXh0LmlkKS5rZXlzLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLXG4gIClcbn1cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93Q2xpY2tlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93Q2xpY2tlZFxuICogQGZpcmVzIGd3LnJvd0NsaWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0NsaWNrZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcblxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucm93Q2xpY2snLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGs6IGd3X2dldEdyaWQoY29udGV4dC5pZCkua2V5cyxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX0NMSUNLXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBzZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zZWxlY3Rpb25DaGFuZ2VkXG4gKiBAZmlyZXMgZ3cucm93U2VsZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblNlbGVjdGlvbkNoYW5nZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd1NlbGVjdCcsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX1NFTEVDVFxuICApXG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcmFuZ2VTZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJhbmdlU2VsZWN0aW9uQ2hhbmdlZFxuICogQGZpcmVzIGd3LnJhbmdlU2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucmFuZ2VTZWxlY3Rpb24nLFxuICAgICAgZGV0YWlsOiAnJyxcbiAgICB9LFxuICAgIEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VEXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBjZWxsQ2xpY2tFdmVudGAgJiBgY2VsbERvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsQ2xpY2tFdmVudFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxEb3VibGVDbGlja2VkXG4gKlxuICogQGZpcmVzIGd3LmNlbGxDbGlja2VkXG4gKiBAZmlyZXMgZ3cuY2VsbERvdWJsZUNsaWNrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uQ2VsbENsaWNrRXZlbnQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgY29uc3QgaWQgPSBjb250ZXh0LmlkXG4gIGNvbnN0IHBhcnNlZCA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChlKVxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBjb25zdCB0eXBlID0gZS50eXBlXG4gICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7ZS50eXBlfWAsXG4gICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHI6IHBhcnNlZCwgLy8gcm93XG4gICAgICAgICAgdjogZ3dfZXNjYXBlKGUudmFsdWUpLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBnd19lc2NhcGUoZS52YWx1ZSksIC8vIG9kbCB2YWx1ZVxuICAgICAgICAgIGM6IGUuY29sdW1uLmNvbElkLCAvLyBjb2x1bW5zXG4gICAgICAgICAgazogZ3dfZ2V0R3JpZChpZCkua2V5cyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgQ0VMTF9DTElDS0lOR19FVkVOVFNfTUFQW3R5cGVdXG4gICAgKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50LCBnd19wYXJzZU5vZGVGcm9tRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2VzY2FwZSwgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCxcbiAgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUT1BQRUQsXG4gIEdXX0VWRU5UX0NFTExfVkFMVUVfQ0hBTkdFRCxcbiAgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCxcbiAgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RPUFBFRCxcbiAgR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBDRUxMX0VESVRJTkdfRVZFTlRTX01BUCA9IHtcbiAgY2VsbEVkaXRpbmdTdGFydGVkOiBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCxcbiAgY2VsbEVkaXRpbmdTdG9wcGVkOiBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCxcbiAgY2VsbFZhbHVlQ2hhbmdlZDogR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VELFxufVxuXG5jb25zdCBST1dfRURJVElOR19FVkVOVFNfTUFQID0ge1xuICByb3dFZGl0aW5nU3RhcnRlZDogR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCxcbiAgcm93RWRpdGluZ1N0b3BwZWQ6IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQsXG4gIHJvd1ZhbHVlQ2hhbmdlZDogR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQsXG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYGNlbGxFZGl0aW5nU3RhcnRlZGAgLCBgY2VsbEVkaXRpbmdTdG9wcGVkYCBhbmRcbiAqIGBjZWxsVmFsdWVDaGFuZ2VkYCBldmVudHNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxFZGl0aW5nU3RhcnRlZFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxFZGl0aW5nU3RvcHBlZFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxWYWx1ZUNoYW5nZWRcbiAqXG4gKiBAZmlyZXMgZ3cuY2VsbEVkaXRpbmdTdGFydGVkXG4gKiBAZmlyZXMgZ3cuY2VsbEVkaXRpbmdTdG9wcGVkXG4gKiBAZmlyZXMgZ3cuY2VsbFZhbHVlQ2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKSB7XG4gIGNvbnN0IHZhbHVlID0gZS5oYXNPd25Qcm9wZXJ0eSgnbmV3VmFsdWUnKVxuICAgID8gZ3dfZXNjYXBlKGUubmV3VmFsdWUpXG4gICAgOiBnd19lc2NhcGUoZS52YWx1ZSlcbiAgY29uc3Qgb2xkVmFsdWUgPSBlLmhhc093blByb3BlcnR5KCdvbGRWYWx1ZScpXG4gICAgPyBnd19lc2NhcGUoZS5vbGRWYWx1ZSlcbiAgICA6IGUuaGFzT3duUHJvcGVydHkoJ25ld1ZhbHVlJylcbiAgICA/IGd3X2VzY2FwZShlLm5ld1ZhbHVlKVxuICAgIDogZ3dfZXNjYXBlKGUudmFsdWUpXG5cbiAgaWYgKHZhbHVlID09IG9sZFZhbHVlICYmIGUudHlwZSA9PT0gJ2NlbGxWYWx1ZUNoYW5nZWQnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSlcbiAgY29uc3QgdHlwZSA9IGUudHlwZVxuICBjb25zdCBjb2xJZCA9IGUuY29sdW1uLmNvbElkXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGd3X3NlbmRFdmVudChcbiAgICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7dHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICByOiB7IC4uLnBhcnNlZCwgLi4ueyBjcjogZS5kYXRhIH0gfSwgLy8gcm93ICh3ZSBhbHdheXMgaW5jbHVkZSB0aGUgY2xpZW50IHJvdyBkYXRhKVxuICAgICAgICAgIHY6IHZhbHVlLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBvbGRWYWx1ZSwgLy8gb2xkIHZhbHVlXG4gICAgICAgICAgYzogY29sSWQsIC8vIGNvbHVtblxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBDRUxMX0VESVRJTkdfRVZFTlRTX01BUFt0eXBlXVxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGByb3dFZGl0aW5nU3RhcnRlZGAgLCBgcm93RWRpdGluZ1N0b3BwZWRgIGFuZCBgcm93VmFsdWVDaGFuZ2VkYCBldmVudHNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0VkaXRpbmdTdGFydGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RWRpdGluZ1N0b3BwZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dWYWx1ZUNoYW5nZWRcbiAqXG4gKiBAZmlyZXMgZ3cucm93RWRpdGluZ1N0YXJ0ZWRcbiAqIEBmaXJlcyBndy5yb3dFZGl0aW5nU3RvcHBlZFxuICogQGZpcmVzIGd3LnJvd1ZhbHVlQ2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25Sb3dFZGl0aW5nRXZlbnQoaWQsIGUpIHtcbiAgY29uc3QgcGFyc2VkID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IHR5cGUgPSBlLnR5cGVcbiAgICBnd19zZW5kRXZlbnQoXG4gICAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke2UudHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHsgLi4ucGFyc2VkLCAuLi57IGNyOiBlLmRhdGEgfSB9KSwgLy8gcm93ICh3ZSBhbHdheXMgaW5jbHVkZSB0aGUgY2xpZW50IHJvdyBkYXRhKVxuICAgICAgfSxcbiAgICAgIFJPV19FRElUSU5HX0VWRU5UU19NQVBbdHlwZV1cbiAgICApXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZGVib3VuY2UgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X29uU3RhdGVDaGFuZ2VkIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IGd3X29uS2V5ZG93biB9IGZyb20gJy4va2V5Ym9hcmQnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBPbiBSZWFkeSBFdmVudFxuICpcbiAqIFRoZSBtZXRob2Qgd2lsbCBpZ25vcmUgZmlyc3QgcmVhZHkgZXZlbnQgYW5kIHRoZW4gcmVnaXN0ZXIgYSBkZWJvdW5jZWQgc3RhdGVcbiAqIGNhbGxiYWNrIHRvIHNlbmQgc3RhdGUgZXZlbnRzIHRvIEJCalxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25SZWFkeUV2ZW50KGlkLCBfZSkge1xuICBjb25zdCBncmlkID0gZ3dfZ2V0R3JpZChpZClcblxuICAvLyByZWdpc3RlciBzdGF0ZSBkZWJvdW5jZSBtb25pdG9yXG4gIGNvbnN0IHN0YXRlRGVib3VuY2UgPSBnd19kZWJvdW5jZShjaGFuZ2VFdmVudCA9PiB7XG4gICAgZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIGNoYW5nZUV2ZW50KVxuICB9LCA1MDApXG5cbiAgO1tcbiAgICAnc29ydENoYW5nZWQnLFxuICAgICdmaWx0ZXJDaGFuZ2VkJyxcbiAgICAnY29sdW1uVmlzaWJsZScsXG4gICAgJ2NvbHVtblBpbm5lZCcsXG4gICAgJ2NvbHVtblJlc2l6ZWQnLFxuICAgICdjb2x1bW5Nb3ZlZCcsXG4gICAgJ25ld0NvbHVtbnNMb2FkZWQnLFxuICAgICdncmlkQ29sdW1uc0NoYW5nZWQnLFxuICAgICdkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ3ZpcnR1YWxDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ2NvbHVtbkV2ZXJ5dGhpbmdDaGFuZ2VkJyxcbiAgICAvLydncmlkU2l6ZUNoYW5nZWQnLFxuICAgICdleHBhbmRPckNvbGxhcHNlQWxsJyxcbiAgICAvLyd0b29sUGFuZWxWaXNpYmxlQ2hhbmdlZCdcbiAgXS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICBncmlkLm9wdGlvbnMuYXBpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHN0YXRlRGVib3VuY2UpXG4gIH0pXG5cbiAgLy8gY29sbGVjdCBrZXkgZG93bnMgaW5mb3JtYXRpb24gdG8gYmUgcmVwb3J0ZWQgd2l0aCBvdGhlciBldmVudHNcbiAgZ3JpZC5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25FdmVudCA9PiB7XG4gICAgZ3JpZC5rZXlzID0ge1xuICAgICAgYzoga2V5ZG93bkV2ZW50LmtleSxcbiAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgIGFrOiBrZXlkb3duRXZlbnQuYWx0S2V5LFxuICAgICAgc2s6IGtleWRvd25FdmVudC5zaGlmdEtleSxcbiAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICB9XG4gIH0pXG5cbiAgLy8gY2xlYXIgY29sbGVjdCBrZXlkb3duIGluZm9ybWF0aW9uXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2tleXVwJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBnd19kZWJvdW5jZShfZSA9PiB7XG4gICAgICBncmlkLmtleXMgPSBudWxsXG4gICAgfSwgMjUwKVxuICApXG5cbiAgLy8gcmVnaXN0ZXIga2V5Ym9hcmQgZGVib3VuY2UgbW9uaXRvclxuXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2tleWRvd24nLFxuICAgIGd3X2RlYm91bmNlKGtleWRvd25FdmVudCA9PiB7XG4gICAgICBnd19vbktleWRvd24oaWQsIGtleWRvd25FdmVudClcbiAgICB9LCA1MDApXG4gIClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHN0YXRlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zdGF0ZUNoYW5nZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RvcHBlZFxuICpcbiAqIEBmaXJlcyBndy5zdGF0ZUNoYW5nZWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIF9lKSB7XG4gIGd3X3NlbmRFdmVudChcbiAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnN0YXRlQ2hhbmdlZCcsXG4gICAgICBkZXRhaWw6IFtdLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0VcbiAgKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0tFWVBSRVNTIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBDb21wb3NlIGEgbW9kZWwgb2YgdGhlIGtleWRvd24gZXZlbnQgYW5kIHNlbmQgaXQgdG8gQkJqXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0V2ZW50fSBrZXlkb3duRXZlbnQga2V5ZG93biBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25LZXlkb3duKGlkLCBrZXlkb3duRXZlbnQpIHtcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiBgZ3cua2V5cHJlc3NgLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGM6IGtleWRvd25FdmVudC5rZXksXG4gICAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgICAgYWs6IGtleWRvd25FdmVudC5hbHRLZXksXG4gICAgICAgIHNrOiBrZXlkb3duRXZlbnQuc2hpZnRLZXksXG4gICAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfS0VZUFJFU1NcbiAgKVxufVxuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGV4dGVuZFdpdGhcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAqXG4gKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25JbldpdGg7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weU9iamVjdDtcbiIsImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduVmFsdWU7XG4iLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VmFsdWU7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsImltcG9ydCBiYXNlU2V0VG9TdHJpbmcgZnJvbSAnLi9fYmFzZVNldFRvU3RyaW5nLmpzJztcbmltcG9ydCBzaG9ydE91dCBmcm9tICcuL19zaG9ydE91dC5qcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvU3RyaW5nO1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hvcnRPdXQ7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAqIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzXG4gKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIChlcShvYmpWYWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbURlZmF1bHRzQXNzaWduSW47XG4iLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsImltcG9ydCBlc2NhcGUgZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHJlRXNjYXBlIGZyb20gJy4vX3JlRXNjYXBlLmpzJztcbmltcG9ydCByZUV2YWx1YXRlIGZyb20gJy4vX3JlRXZhbHVhdGUuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVtcGxhdGVTZXR0aW5ncztcbiIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcbiIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5T2Y7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFc2NhcGU7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUV2YWx1YXRlO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIEFuIGltcHJvdmVkIHRvb2x0aXAgY29tcG9uZW50IHdoaWNoIHN1cHBvcnRzIEhUTUwgYW5kIGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aCBHVUkgYW5kIEJVSVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlclxuICovXG5jbGFzcyBIVE1MVG9vbHRpcCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIHRoZSB0b29sdGlwIGNvbXBvbmVudCBwYXJhbXNcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgZUd1aSA9ICh0aGlzLmVHdWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICBjb25zdCB0b29sdGlwVmFsdWVHZXR0ZXIgPSBwYXJhbXMuY29sRGVmLnRvb2x0aXBWYWx1ZUdldHRlclxuICAgIGNvbnN0IGlzSGVhZGVyID0gcGFyYW1zLnJvd0luZGV4ID09PSB1bmRlZmluZWRcbiAgICBjb25zdCBpc0dyb3VwZWRIZWFkZXIgPSBpc0hlYWRlciAmJiAhIXBhcmFtcy5jb2xEZWYuY2hpbGRyZW5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAhaXNIZWFkZXIgJiYgIWlzR3JvdXBlZEhlYWRlclxuICAgICAgICA/IHBhcmFtcy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChwYXJhbXMucm93SW5kZXgpLmRhdGFcbiAgICAgICAgOiBudWxsXG4gICAgY29uc3QgdGhlbWUgPSBwYXJhbXMuYXBpLmdyaWRDb3JlLmVHcmlkRGl2LmNsYXNzTmFtZS5lbmRzV2l0aCgnZGFyaycpXG4gICAgICA/ICdndy10b29sdGlwLWRhcmsnXG4gICAgICA6ICdndy10b29sdGlwLWxpZ2h0J1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZCA9IHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkXG4gICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkKVxuICAgICAgICA/IGRhdGFbcGFyYW1zLmNvbERlZi50b29sdGlwRmllbGRdXG4gICAgICAgIDogbnVsbFxuICAgICAgOiBudWxsXG5cbiAgICBjb25zdCBwYXNzZWRQYXJhbXMgPSB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi57IGRhdGEgfSxcbiAgICAgIC4uLnsgaXNIZWFkZXIsIGlzR3JvdXBlZEhlYWRlciwgdG9vbHRpcEZpZWxkIH0sXG4gICAgfVxuXG4gICAgZUd1aS5jbGFzc0xpc3QuYWRkKCdndy10b29sdGlwJywgdGhlbWUpXG4gICAgZUd1aS5pbm5lckhUTUwgPVxuICAgICAgaXNIZWFkZXIgfHwgaXNHcm91cGVkSGVhZGVyXG4gICAgICAgID8gcGFyYW1zLnZhbHVlXG4gICAgICAgIDogdG9vbHRpcEZpZWxkXG4gICAgICAgID8gdG9vbHRpcEZpZWxkXG4gICAgICAgIDogdG9vbHRpcFZhbHVlR2V0dGVyXG4gICAgICAgID8gdG9vbHRpcFZhbHVlR2V0dGVyKHBhc3NlZFBhcmFtcylcbiAgICAgICAgOiBwYXJhbXMudmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGd1aSBJbnN0YW5jZVxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5lR3VpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSFRNTFRvb2x0aXBcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IGF1dG9jb21wbGV0ZSBmcm9tICdhdXRvY29tcGxldGVyJ1xuaW1wb3J0IHRlbXBsYXRlIGZyb20gJ2xvZGFzaC1lcy90ZW1wbGF0ZSdcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG4vKipcbiAqIEFuIGF1dG9jb21wbGV0ZSBjZWxsIGVkaXRvciB3cml0dGVuIHNwZWNpZmljYWxseSB0byBCQmpHcmlkRXhXaWRnZXRcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXJcbiAqL1xuY2xhc3MgU3VnZ2VzdGlvbkVkaXRvciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IHBhcmFtcy50ZXh0UGF0dGVybiB8fCBudWxsXG4gICAgY29uc3QgcmVxdWlyZWQgPSBwYXJhbXMudGV4dFJlcXVpcmVkIHx8IGZhbHNlXG4gICAgY29uc3QgdGl0bGUgPSBwYXJhbXMudGV4dFRpdGxlIHx8IG51bGxcbiAgICBjb25zdCBkZWJvdW5jZVdhaXRNcyA9IHBhcmFtcy5kZWJvdW5jZVdhaXRNcyB8fCAyNTBcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgY29uc3Qga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2F1dG9jb21wbGV0ZUlucHV0V3JhcHBlciBhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAnMCdcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXRleHQtZmllbGQtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuXG4gICAgLy8gaW5wdXRcbiAgICB0aGlzLl9pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPVxuICAgICAgJ2F1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCAmJiB0aXRsZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IHRpdGxlXG4gICAgfVxuXG4gICAgdGhpcy5fb25DaGFuZ2UgPSB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuXG4gICAgLy8gc2V0dXAgdGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnRcbiAgICB0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUgPSB0aGlzLl9wYXJhbXMuaXRlbVRlbXBsYXRlXG4gICAgICA/IHRlbXBsYXRlKHRoaXMuX3BhcmFtcy5pdGVtVGVtcGxhdGUpXG4gICAgICA6ICcnXG4gICAgdGhpcy5fcmVuZGVyR3JvdXBUZW1wbGF0ZSA9IHRoaXMuX3BhcmFtcy5ncm91cFRlbXBsYXRlXG4gICAgICA/IHRlbXBsYXRlKHRoaXMuX3BhcmFtcy5ncm91cFRlbXBsYXRlKVxuICAgICAgOiAnJ1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IGF1dG9jb21wbGV0ZSh7XG4gICAgICBpbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICBkZWJvdW5jZVdhaXRNczogZGVib3VuY2VXYWl0TXMsXG4gICAgICAvLyB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQgLCB0aGUgbGlzdCB3b250IGJlIGNsb3NlZCBpbiBHVUlcbiAgICAgIHByZXZlbnRTdWJtaXQ6IHRydWUsXG4gICAgICBmZXRjaDogdGhpcy5fb25BdXRvY29tcGxldGVGZXRjaC5iaW5kKHRoaXMpLFxuICAgICAgb25TZWxlY3Q6IHRoaXMuX29uQXV0b2NvbXBsZXRlU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICByZW5kZXJHcm91cDogdGhpcy5fb25BdXRvY29tcGxldGVSZW5kZXJHcm91cC5iaW5kKHRoaXMpLFxuICAgICAgcmVuZGVyOiB0aGlzLl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0uYmluZCh0aGlzKSxcbiAgICAgIGN1c3RvbWl6ZTogdGhpcy5fb25BdXRvY29tcGxldGVDdXN0b21pemUuYmluZCh0aGlzKSxcbiAgICAgIGVtcHR5TXNnOiB0aGlzLl9wYXJhbXMuZW1wdHlNZXNzYWdlIHx8IG51bGwsXG4gICAgICBtaW5MZW5ndGg6IHRoaXMuX3BhcmFtcy5taW5MZW5ndGggfHwgMixcbiAgICAgIHNob3dPbkZvY3VzOiB0aGlzLl9wYXJhbXMuc2hvd09uRm9jdXMgfHwgZmFsc2UsXG4gICAgICBjbGFzc05hbWU6IHBhcmFtcy5hcGkuZ3JpZENvcmUuZUdyaWREaXYuY2xhc3NOYW1lLmVuZHNXaXRoKCdkYXJrJylcbiAgICAgICAgPyAnZGFyaydcbiAgICAgICAgOiAnbGlnaHQnLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBET00gZWxlbWVudCBvZiB0aGUgY29tcG9uZW50LCB0aGlzIGlzIHdoYXQgdGhlIGdyaWQgcHV0cyBpbnRvIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dC52YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIHdoZW4gZWRpdGluZyBpcyBmaW5pc2hlZCAoZWcgaWYgZW50ZXIgaXMgcHJlc3NlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHJlc3VsdCBvZiB0aGUgZWRpdCB3aWxsIGJlIGlnbm9yZWQuIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNDYW5jZWxBZnRlckVuZCgpIHtcbiAgICBjb25zdCBhbGxvd0N1c3RvbVZhbHVlcyA9IHRoaXMuX3BhcmFtcy5hbGxvd0N1c3RvbVZhbHVlcyB8fCBmYWxzZVxuICAgIGxldCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChpc1ZhbGlkICYmIGFsbG93Q3VzdG9tVmFsdWVzID09PSBmYWxzZSAmJiB0aGlzLl9sYXN0RmV0Y2hlZERhdGEpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLl9sYXN0RmV0Y2hlZERhdGEuZmlsdGVyKFxuICAgICAgICB4ID0+IHgudmFsdWUgPT09IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgICApXG4gICAgICBpc1ZhbGlkID0gZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDFcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzVmFsaWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKlxuICAgKiBDbGVhciB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMgYW5kIGRlc3Ryb3kgdGhlIGF1dG9jb21wbGV0ZVxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZS5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB0byBwcmVwYXJlIHN1Z2dlc3Rpb25zIGFuZCB0aGVuIHBhc3MgdGhlbSB0byBhdXRvY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IGluIHRoZSBpbnB1dCBmaWVsZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHN1Z2dlc3Rpb25zIGFyZSBwcmVwYXJlZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gZmFsc2Ugd2hlbiB0aGUgcmVxdWVzdCBpcyBpZ25vcmVkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfb25BdXRvY29tcGxldGVGZXRjaCh0ZXh0LCB1cGRhdGUpIHtcbiAgICBjb25zdCBzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCA9XG4gICAgICB0aGlzLl9wYXJhbXMuc3VwcHJlc3NTdWdnZXN0aW9uT25JbnZhbGlkSW5wdXQgfHwgZmFsc2VcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCAmJiAhaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9wYXJhbXMuZXZlbnRJZFxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihpZCwgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fbGFzdEZldGNoZWREYXRhID0gZXZlbnQuZGV0YWlsXG4gICAgICB1cGRhdGUoZXZlbnQuZGV0YWlsKVxuICAgIH0pXG5cbiAgICB3aW5kb3cuYmFzaXNEaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMuX3BhcmFtcy5lR3JpZENlbGwsIHtcbiAgICAgIHR5cGU6ICdndy5zdWdnZXN0aW9uJyxcbiAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgY29sdW1uOiB0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkLFxuICAgICAgICByb3c6IGd3X3BhcnNlTm9kZShcbiAgICAgICAgICB0aGlzLl9wYXJhbXMubm9kZSxcbiAgICAgICAgICB0aGlzLl9wYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHVzZXIgY2hvb3NlIGFuIGl0ZW0gaW4gYXV0b2NvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBUaGUgc2VsZWN0ZWQgaXRlbVxuICAgKi9cbiAgX29uQXV0b2NvbXBsZXRlU2VsZWN0KGl0ZW0pIHtcbiAgICB0aGlzLl9pbnB1dC52YWx1ZSA9IGl0ZW0udmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIG9mIGF1dG9jb21wbGV0ZSBpdGVtcy5cbiAgICpcbiAgICogSXQgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggc3VnZ2VzdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBzdWdnZXN0aW9uIG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IGlucHV0IGZpZWxkIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0oaXRlbSwgY3VycmVudFZhbHVlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBkaXYuY2xhc3NOYW1lID0gJ3N1Z2dlc3Rpb24taXRlbSdcblxuICAgIGlmICh0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUpIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUoe1xuICAgICAgICBpdGVtLFxuICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaXRlbS5sYWJlbFxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIG9mIGF1dG9jb21wbGV0ZSBncm91cHMuXG4gICAqXG4gICAqIEl0IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBncm91cE5hbWUgVGhlIGdyb3VwIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IGN1cnJlbnRWYWx1ZSBUaGUgY3VycmVudCBpbnB1dCBmaWVsZCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cChncm91cE5hbWUsIGN1cnJlbnRWYWx1ZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgZGl2LmNsYXNzTmFtZSA9ICdzdWdnZXN0aW9uLWdyb3VwJ1xuXG4gICAgaWYgKHRoaXMuX3JlbmRlckdyb3VwVGVtcGxhdGUpIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLl9yZW5kZXJHcm91cFRlbXBsYXRlKHsgZ3JvdXBOYW1lLCBjdXJyZW50VmFsdWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZGl2LmlubmVySFRNTCA9IGdyb3VwTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rIG9uIHRoZSBhdXRvY29tcGxldGUgY29udGFpbmVyIHJlbmRlciBhbmQgY2hhbmdlIHRoZSB3aWR0aCBhbmQgdGhlXG4gICAqIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRSZWN0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWF4SGVpZ2h0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQXV0b2NvbXBsZXRlQ3VzdG9taXplKGlucHV0LCBpbnB1dFJlY3QsIGNvbnRhaW5lciwgbWF4SGVpZ2h0KSB7XG4gICAgaWYgKHRoaXMuX3BhcmFtcy53aWR0aCkge1xuICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7dGhpcy5fcGFyYW1zLndpZHRofXB4YFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXJhbXMuaGVpZ2h0KSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5fcGFyYW1zLmhlaWdodH1weGBcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byB0aGUgaW5wdXQgY2hhbmdlcyBhbmQgdmFsaWRhdGUgaXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gVGhlIGV2ZW50IG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogRG8gdmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2F1dG9jb21wbGV0ZS1pbnB1dC1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdhdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2F1dG9jb21wbGV0ZS1pbnB1dC1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdhdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdWdnZXN0aW9uRWRpdG9yXG4iLCIgLypcclxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmFhZGVuL2F1dG9jb21wbGV0ZVxyXG4gICogQ29weXJpZ2h0IChjKSAyMDE2IERlbnlzIEtyYXNub3NoY2hva1xyXG4gICogTUlUIExpY2Vuc2VcclxuICAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gRXZlbnRUcmlnZ2VyIHtcclxuICAgIEtleWJvYXJkID0gMCxcclxuICAgIEZvY3VzID0gMVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZUl0ZW0ge1xyXG4gICAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTZXR0aW5nczxUIGV4dGVuZHMgQXV0b2NvbXBsZXRlSXRlbT4ge1xyXG4gICAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICByZW5kZXI/OiAoaXRlbTogVCwgY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgcmVuZGVyR3JvdXA/OiAobmFtZTogc3RyaW5nLCBjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgICBlbXB0eU1zZz86IHN0cmluZztcclxuICAgIG9uU2VsZWN0OiAoaXRlbTogVCwgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpID0+IHZvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYXV0b2NvbXBsZXRlIG9uIGZvY3VzIGV2ZW50LiBGb2N1cyBldmVudCB3aWxsIGlnbm9yZSB0aGUgYG1pbkxlbmd0aGAgcHJvcGVydHkgYW5kIHdpbGwgYWx3YXlzIGNhbGwgYGZldGNoYC5cclxuICAgICAqL1xyXG4gICAgc2hvd09uRm9jdXM/OiBib29sZWFuO1xyXG4gICAgZmV0Y2g6ICh0ZXh0OiBzdHJpbmcsIHVwZGF0ZTogKGl0ZW1zOiBUW10gfCBmYWxzZSkgPT4gdm9pZCwgdHJpZ2dlcjogRXZlbnRUcmlnZ2VyKSA9PiB2b2lkO1xyXG4gICAgZGVib3VuY2VXYWl0TXM/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZvciBhZGRpdGlvbmFsIGF1dG9jb21wbGV0ZSBjdXN0b21pemF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IC0gaW5wdXQgYm94IGFzc29jaWF0ZWQgd2l0aCBhdXRvY29tcGxldGVcclxuICAgICAqIEBwYXJhbSB7Q2xpZW50UmVjdCB8IERPTVJlY3R9IGlucHV0UmVjdCAtIHNpemUgb2YgdGhlIGlucHV0IGJveCBhbmQgaXRzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydFxyXG4gICAgICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudH0gY29udGFpbmVyIC0gY29udGFpbmVyIHdpdGggc3VnZ2VzdGlvbnNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhIZWlnaHQgLSBtYXggaGVpZ2h0IHRoYXQgY2FuIGJlIHVzZWQgYnkgYXV0b2NvbXBsZXRlXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbWl6ZT86IChpbnB1dDogSFRNTElucHV0RWxlbWVudCwgaW5wdXRSZWN0OiBDbGllbnRSZWN0IHwgRE9NUmVjdCwgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCwgbWF4SGVpZ2h0OiBudW1iZXIpID0+IHZvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIFByZXZlbnRzIGF1dG9tYXRpYyBmb3JtIHN1Ym1pdCB3aGVuIEVOVEVSIGlzIHByZXNzZWRcclxuICAgICAqL1xyXG4gICAgcHJldmVudFN1Ym1pdD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlUmVzdWx0IHtcclxuICAgIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmNvbnN0IGVudW0gS2V5cyB7XHJcbiAgICBFbnRlciA9IDEzLFxyXG4gICAgRXNjID0gMjcsXHJcbiAgICBVcCA9IDM4LFxyXG4gICAgRG93biA9IDQwLFxyXG4gICAgTGVmdCA9IDM3LFxyXG4gICAgUmlnaHQgPSAzOSxcclxuICAgIFNoaWZ0ID0gMTYsXHJcbiAgICBDdHJsID0gMTcsXHJcbiAgICBBbHQgPSAxOCxcclxuICAgIENhcHNMb2NrID0gMjAsXHJcbiAgICBXaW5kb3dzS2V5ID0gOTEsXHJcbiAgICBUYWIgPSA5LFxyXG4gICAgRjEgPSAxMTIsXHJcbiAgICBGMTIgPSAxMjNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2NvbXBsZXRlPFQgZXh0ZW5kcyBBdXRvY29tcGxldGVJdGVtPihzZXR0aW5nczogQXV0b2NvbXBsZXRlU2V0dGluZ3M8VD4pOiBBdXRvY29tcGxldGVSZXN1bHQge1xyXG5cclxuICAgIC8vIGp1c3QgYW4gYWxpYXMgdG8gbWluaW1pemUgSlMgZmlsZSBzaXplXHJcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudDtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IGNvbnRhaW5lci5zdHlsZTtcclxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICBjb25zdCBtb2JpbGVGaXJlZm94ID0gdXNlckFnZW50LmluZGV4T2YoXCJGaXJlZm94XCIpICE9PSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZihcIk1vYmlsZVwiKSAhPT0gLTE7XHJcbiAgICBjb25zdCBkZWJvdW5jZVdhaXRNcyA9IHNldHRpbmdzLmRlYm91bmNlV2FpdE1zIHx8IDA7XHJcbiAgICBjb25zdCBwcmV2ZW50U3VibWl0ID0gc2V0dGluZ3MucHJldmVudFN1Ym1pdCB8fCBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gJ2tleXVwJyBldmVudCB3aWxsIG5vdCBiZSBmaXJlZCBvbiBNb2JpbGUgRmlyZWZveCwgc28gd2UgaGF2ZSB0byB1c2UgJ2lucHV0JyBldmVudCBpbnN0ZWFkXHJcbiAgICBjb25zdCBrZXlVcEV2ZW50TmFtZSA9IG1vYmlsZUZpcmVmb3ggPyBcImlucHV0XCIgOiBcImtleXVwXCI7XHJcbiAgICBcclxuICAgIGxldCBpdGVtczogVFtdID0gW107XHJcbiAgICBsZXQgaW5wdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICBsZXQgbWluTGVuID0gMjtcclxuICAgIGNvbnN0IHNob3dPbkZvY3VzID0gc2V0dGluZ3Muc2hvd09uRm9jdXM7XHJcbiAgICBsZXQgc2VsZWN0ZWQ6IFQgfCB1bmRlZmluZWQ7XHJcbiAgICBsZXQga2V5cHJlc3NDb3VudGVyID0gMDtcclxuICAgIGxldCBkZWJvdW5jZVRpbWVyIDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChzZXR0aW5ncy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIG1pbkxlbiA9IHNldHRpbmdzLm1pbkxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNldHRpbmdzLmlucHV0KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXQgdW5kZWZpbmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gc2V0dGluZ3MuaW5wdXQ7XHJcblxyXG4gICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiYXV0b2NvbXBsZXRlIFwiICsgKHNldHRpbmdzLmNsYXNzTmFtZSB8fCBcIlwiKTtcclxuXHJcbiAgICAvLyBJT1MgaW1wbGVtZW50YXRpb24gZm9yIGZpeGVkIHBvc2l0aW9uaW5nIGhhcyBtYW55IGJ1Z3MsIHNvIHdlIHdpbGwgdXNlIGFic29sdXRlIHBvc2l0aW9uaW5nXHJcbiAgICBjb250YWluZXJTdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCB0aGUgY29udGFpbmVyIGZyb20gRE9NXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGRldGFjaCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGRlYm91bmNpbmcgdGltZXIgaWYgYXNzaWduZWRcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xlYXJEZWJvdW5jZVRpbWVyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBjb250YWluZXIgdG8gRE9NXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGF0dGFjaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lci5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgY29udGFpbmVyIGZvciBhdXRvY29tcGxldGUgaXMgZGlzcGxheWVkXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGNvbnRhaW5lckRpc3BsYXllZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGF1dG9jb21wbGV0ZSBzdGF0ZSBhbmQgaGlkZSBjb250YWluZXJcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gcHJldmVudCB0aGUgdXBkYXRlIGNhbGwgaWYgdGhlcmUgYXJlIHBlbmRpbmcgQUpBWCByZXF1ZXN0c1xyXG4gICAgICAgIGtleXByZXNzQ291bnRlcisrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGl0ZW1zID0gW107XHJcbiAgICAgICAgaW5wdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYXV0b2NvbXBsZXRlIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyRGlzcGxheWVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyU3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgICAgY29udGFpbmVyU3R5bGUud2lkdGggPSBpbnB1dC5vZmZzZXRXaWR0aCArIFwicHhcIjtcclxuXHJcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XHJcbiAgICAgICAgbGV0IGlucHV0UmVjdDogQ2xpZW50UmVjdCB8IERPTVJlY3QgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNhbGMoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY0VsID0gZG9jLmRvY3VtZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGRvYy5ib2R5LmNsaWVudFRvcCB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBjbGllbnRMZWZ0ID0gZG9jRWwuY2xpZW50TGVmdCB8fCBkb2MuYm9keS5jbGllbnRMZWZ0IHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2NFbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsTGVmdDtcclxuXHJcbiAgICAgICAgICAgIGlucHV0UmVjdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBpbnB1dFJlY3QudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0ICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaW5wdXRSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdDtcclxuICAgIFxyXG4gICAgICAgICAgICBjb250YWluZXJTdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xyXG4gICAgXHJcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIChpbnB1dFJlY3QudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAobWF4SGVpZ2h0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUuYm90dG9tID0gXCJcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLm1heEhlaWdodCA9IG1heEhlaWdodCArIFwicHhcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoZSBjYWxjIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB0d2ljZSwgb3RoZXJ3aXNlIHRoZSBjYWxjdWxhdGlvbiBtYXkgYmUgd3Jvbmcgb24gcmVzaXplIGV2ZW50IChjaHJvbWUgYnJvd3NlcilcclxuICAgICAgICBjYWxjKCk7XHJcbiAgICAgICAgY2FsYygpO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3MuY3VzdG9taXplICYmIGlucHV0UmVjdCkge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5jdXN0b21pemUoaW5wdXQsIGlucHV0UmVjdCwgY29udGFpbmVyLCBtYXhIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZHJhdyB0aGUgYXV0b2NvbXBsZXRlIGRpdiBlbGVtZW50IHdpdGggc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gZnJvbSBhdXRvY29tcGxldGUgRE9NIGNvbnRhaW5lclxyXG4gICAgICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZnVuY3Rpb24gZm9yIHJlbmRlcmluZyBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnNcclxuICAgICAgICBsZXQgcmVuZGVyID0gZnVuY3Rpb24oaXRlbTogVCwgY3VycmVudFZhbHVlOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50LnRleHRDb250ZW50ID0gaXRlbS5sYWJlbCB8fCBcIlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbUVsZW1lbnQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2V0dGluZ3MucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHJlbmRlciA9IHNldHRpbmdzLnJlbmRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIHJlbmRlciBhdXRvY29tcGxldGUgZ3JvdXBzXHJcbiAgICAgICAgbGV0IHJlbmRlckdyb3VwID0gZnVuY3Rpb24oZ3JvdXBOYW1lOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogc3RyaW5nKTogSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgICAgICBncm91cERpdi50ZXh0Q29udGVudCA9IGdyb3VwTmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwRGl2O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLnJlbmRlckdyb3VwKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckdyb3VwID0gc2V0dGluZ3MucmVuZGVyR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgbGV0IHByZXZHcm91cCA9IFwiIzk/JFwiO1xyXG5cclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW06IFQpOiB2b2lkIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uZ3JvdXAgJiYgaXRlbS5ncm91cCAhPT0gcHJldkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2R3JvdXAgPSBpdGVtLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBEaXYgPSByZW5kZXJHcm91cChpdGVtLmdyb3VwLCBpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cERpdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRGl2LmNsYXNzTmFtZSArPSBcIiBncm91cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGdyb3VwRGl2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkaXYgPSByZW5kZXIoaXRlbSwgaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChkaXYpIHtcclxuICAgICAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXY6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5vblNlbGVjdChpdGVtLCBpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lICs9IFwiIHNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuZW1wdHlNc2cpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBlbXB0eS5jbGFzc05hbWUgPSBcImVtcHR5XCI7XHJcbiAgICAgICAgICAgICAgICBlbXB0eS50ZXh0Q29udGVudCA9IHNldHRpbmdzLmVtcHR5TXNnO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVtcHR5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dGFjaCgpO1xyXG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgIHVwZGF0ZVNjcm9sbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlmRGlzcGxheWVkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250YWluZXJEaXNwbGF5ZWQoKSkge1xyXG4gICAgICAgICAgICB1cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVzaXplRXZlbnRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHVwZGF0ZUlmRGlzcGxheWVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2Nyb2xsRXZlbnRIYW5kbGVyKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgdXBkYXRlSWZEaXNwbGF5ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGtleXVwRXZlbnRIYW5kbGVyKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2LndoaWNoIHx8IGV2LmtleUNvZGUgfHwgMDtcclxuXHJcbiAgICAgICAgY29uc3QgaWdub3JlID0gW0tleXMuVXAsIEtleXMuRW50ZXIsIEtleXMuRXNjLCBLZXlzLlJpZ2h0LCBLZXlzLkxlZnQsIEtleXMuU2hpZnQsIEtleXMuQ3RybCwgS2V5cy5BbHQsIEtleXMuQ2Fwc0xvY2ssIEtleXMuV2luZG93c0tleSwgS2V5cy5UYWJdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGlnbm9yZSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlDb2RlID49IEtleXMuRjEgJiYga2V5Q29kZSA8PSBLZXlzLkYxMikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGUgZG93biBrZXkgaXMgdXNlZCB0byBvcGVuIGF1dG9jb21wbGV0ZVxyXG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkRvd24gJiYgY29udGFpbmVyRGlzcGxheWVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRGZXRjaChFdmVudFRyaWdnZXIuS2V5Ym9hcmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXV0b21hdGljYWxseSBtb3ZlIHNjcm9sbCBiYXIgaWYgc2VsZWN0ZWQgaXRlbSBpcyBub3QgdmlzaWJsZVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVTY3JvbGwoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZWxlbWVudHNbMF0gYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBtYWtlIGdyb3VwIHZpc2libGVcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy5jbGFzc05hbWUuaW5kZXhPZihcImdyb3VwXCIpICE9PSAtMSAmJiAhcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHByZXZpb3VzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5vZmZzZXRUb3AgPCBjb250YWluZXIuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RCb3R0b20gPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQm90dG9tID0gY29udGFpbmVyLnNjcm9sbFRvcCArIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0Qm90dG9tID4gY29udGFpbmVyQm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCArPSBzZWxlY3RCb3R0b20gLSBjb250YWluZXJCb3R0b207XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWxlY3QgdGhlIHByZXZpb3VzIGl0ZW0gaW4gc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2VsZWN0UHJldigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zW2ldIHx8IGkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBpdGVtc1tpIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCB0aGUgbmV4dCBpdGVtIGluIHN1Z2dlc3Rpb25zXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHNlbGVjdE5leHQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VsZWN0ZWQgfHwgc2VsZWN0ZWQgPT09IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkID0gaXRlbXNbMF07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoaXRlbXMubGVuZ3RoIC0gMSk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGtleWRvd25FdmVudEhhbmRsZXIoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXYud2hpY2ggfHwgZXYua2V5Q29kZSB8fCAwO1xyXG5cclxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5VcCB8fCBrZXlDb2RlID09PSBLZXlzLkRvd24gfHwga2V5Q29kZSA9PT0gS2V5cy5Fc2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySXNEaXNwbGF5ZWQgPSBjb250YWluZXJEaXNwbGF5ZWQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkVzYykge1xyXG4gICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVyRGlzcGxheWVkIHx8IGl0ZW1zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXlDb2RlID09PSBLZXlzLlVwXHJcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxlY3RQcmV2KClcclxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdE5leHQoKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVySXNEaXNwbGF5ZWQpIHtcclxuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm9uU2VsZWN0KHNlbGVjdGVkLCBpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHByZXZlbnRTdWJtaXQpIHtcclxuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9jdXNFdmVudEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHNob3dPbkZvY3VzKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0RmV0Y2goRXZlbnRUcmlnZ2VyLkZvY3VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnRGZXRjaCh0cmlnZ2VyOiBFdmVudFRyaWdnZXIpIHtcclxuICAgICAgICAvLyBpZiBtdWx0aXBsZSBrZXlzIHdlcmUgcHJlc3NlZCwgYmVmb3JlIHdlIGdldCB1cGRhdGUgZnJvbSBzZXJ2ZXIsXHJcbiAgICAgICAgLy8gdGhpcyBtYXkgY2F1c2UgcmVkcmF3aW5nIG91ciBhdXRvY29tcGxldGUgbXVsdGlwbGUgdGltZXMgYWZ0ZXIgdGhlIGxhc3Qga2V5IHByZXNzLlxyXG4gICAgICAgIC8vIHRvIGF2b2lkIHRoaXMsIHRoZSBudW1iZXIgb2YgdGltZXMga2V5Ym9hcmQgd2FzIHByZXNzZWQgd2lsbCBiZVxyXG4gICAgICAgIC8vIHNhdmVkIGFuZCBjaGVja2VkIGJlZm9yZSByZWRyYXcgb3VyIGF1dG9jb21wbGV0ZSBib3guXHJcbiAgICAgICAgY29uc3Qgc2F2ZWRLZXlwcmVzc0NvdW50ZXIgPSArK2tleXByZXNzQ291bnRlcjtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsID0gaW5wdXQudmFsdWU7XHJcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPj0gbWluTGVuIHx8IHRyaWdnZXIgPT09IEV2ZW50VHJpZ2dlci5Gb2N1cykge1xyXG4gICAgICAgICAgICBjbGVhckRlYm91bmNlVGltZXIoKTtcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuZmV0Y2godmFsLCBmdW5jdGlvbihlbGVtZW50czogVFtdIHwgZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cHJlc3NDb3VudGVyID09PSBzYXZlZEtleXByZXNzQ291bnRlciAmJiBlbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1swXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgRXZlbnRUcmlnZ2VyLktleWJvYXJkKTtcclxuICAgICAgICAgICAgfSwgdHJpZ2dlciA9PT0gRXZlbnRUcmlnZ2VyLktleWJvYXJkID8gZGVib3VuY2VXYWl0TXMgOiAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBibHVyRXZlbnRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZGVsYXkgY2xlYXIsIGJlY2F1c2Ugd2hlbiB3ZSBjbGljayBvbiBhbiBpdGVtLCBibHVyIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBjbGljayBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gRE9NXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAhPT0gaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRml4ZXMgIzI2OiBvbiBsb25nIGNsaWNrcyBmb2N1cyB3aWxsIGJlIGxvc3QgYW5kIG9uU2VsZWN0IG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZXZ0OiBFdmVudCkge1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRml4ZXMgIzMwOiBhdXRvY29tcGxldGUgY2xvc2VzIHdoZW4gc2Nyb2xsYmFyIGlzIGNsaWNrZWQgaW4gSUVcclxuICAgICAqIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzkyMTAyNjcvMTMxNzIzNDlcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoKSA9PiBpbnB1dC5mb2N1cygpKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUgRE9NIGVsZW1lbnRzIGFuZCBjbGVhciBldmVudCBoYW5kbGVyc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwga2V5ZG93bkV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXlVcEV2ZW50TmFtZSwga2V5dXBFdmVudEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCk7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgYmx1ckV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxFdmVudEhhbmRsZXIsIHRydWUpO1xyXG4gICAgICAgIGNsZWFyRGVib3VuY2VUaW1lcigpO1xyXG4gICAgICAgIGNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dXAgZXZlbnQgaGFuZGxlcnNcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGtleWRvd25FdmVudEhhbmRsZXIpO1xyXG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihrZXlVcEV2ZW50TmFtZSwga2V5dXBFdmVudEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCk7XHJcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyRXZlbnRIYW5kbGVyKTtcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVFdmVudEhhbmRsZXIpO1xyXG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsRXZlbnRIYW5kbGVyLCB0cnVlKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlc3Ryb3lcclxuICAgIH07XHJcbn1cclxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdGF0ZShpZCwgc3RhdGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICB0cnkge1xuICAgIG9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtblN0YXRlKHN0YXRlLmNvbHVtbnMpXG4gICAgb3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uR3JvdXBTdGF0ZShzdGF0ZS5ncm91cHMpXG4gICAgb3B0aW9ucy5hcGkuc2V0U29ydE1vZGVsKHN0YXRlLnNvcnQpXG4gICAgb3B0aW9ucy5hcGkuc2V0RmlsdGVyTW9kZWwoc3RhdGUuZmlsdGVycylcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIGdyaWQgc3RhdGUgZnJvbSBKU09OJywgZSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0U3RhdGUoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgY29sdW1ucyA9IG9wdGlvbnMuY29sdW1uQXBpLmdldENvbHVtblN0YXRlKClcbiAgY29uc3QgZ3JvdXBzID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0Q29sdW1uR3JvdXBTdGF0ZSgpXG4gIGNvbnN0IHNvcnQgPSBvcHRpb25zLmFwaS5nZXRTb3J0TW9kZWwoKVxuICBjb25zdCBmaWx0ZXJzID0gb3B0aW9ucy5hcGkuZ2V0RmlsdGVyTW9kZWwoKVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBncm91cHMsXG4gICAgICBzb3J0LFxuICAgICAgZmlsdGVycyxcbiAgICB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gY29udmVydCB0aGUgZ3JpZCBzdGF0ZSB0byBqc29uJywgZSlcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTaWRlQmFyVmlzaWJsZShpZCwgdmFsdWUpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2V0U2lkZUJhclZpc2libGUoQm9vbGVhbih2YWx1ZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19vcGVuVG9vbHBhbmVsKGdyaWRJZCwgdG9vbHBhbmVsSWQpIHtcbiAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuYXBpLm9wZW5Ub29sUGFuZWwodG9vbHBhbmVsSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19jbG9zZVRvb2xwYW5lbChncmlkSWQsIHRvb2xwYW5lbElkKSB7XG4gIGd3X2dldEdyaWQoZ3JpZElkKS5vcHRpb25zLmFwaS5jbG9zZVRvb2xQYW5lbCh0b29scGFuZWxJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldEZ1bmN0aW9uc1JlYWRPbmx5KGlkLCByZWFkb25seSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGdW5jdGlvbnNSZWFkT25seShCb29sZWFuKHJlYWRvbmx5KSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eShpZCwga2V5LCB2aXNpYmlsaXR5KSB7XG4gIGd3X2dldEdyaWQoaWQpXG4gICAgLm9wdGlvbnMuYXBpLmdldFN0YXR1c1BhbmVsKGtleSlcbiAgICAuc2V0VmlzaWJsZShCb29sZWFuKHZpc2liaWxpdHkpKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogU2hvdyBsb2FkaW5nIG92ZXJsYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3Nob3dMb2FkaW5nT3ZlcmxheShpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKVxufVxuXG4vKipcbiAqIFNob3cgJ25vIHJvd3MnIG92ZXJsYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3Nob3dOb1Jvd3NPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KClcbn1cblxuLyoqXG4gKiBDbGVhciBhbGwgb3ZlcmxheXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2hpZGVPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmhpZGVPdmVybGF5KClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG4vKipcbiAqIFVwZGF0ZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGNvbnRleHQncyBrZXkgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgIFRoZSBuZXcgY29udGV4dCdzIHZhbHVlXG4gKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBnd19sZWdhY3lVcGRhdGVDb250ZXh0KGlkLCBrZXksIHZhbHVlKSB7XG4vLyBcdGd3X2dldEdyaWQoaWQpXG4vLyBcdFx0Lm9wdGlvbnNcbi8vIFx0XHQuY29udGV4dFtrZXldID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4vLyB9XG5cbi8qKlxuICogVXBkYXRlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgVGhlIG5ldyBjb250ZXh0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdXBkYXRlQ29udGV4dChpZCwgY29udGV4dCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQgPSBjb250ZXh0XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9qc3MhanNzL2pzcy5qcydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogQWRkIG5ldyBzdHlsZVxuICpcbiAqIEFkZCBuZXcgc3R5bGUgdG8gdGhlIGRvY3VtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGNzcyBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVzIEpzb24gc3RyaW5nIGZvciBhbiBhcnJheSBvZiBydWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3R5bGUoc2VsZWN0b3IsIHJ1bGVzKSB7XG4gIGpzcy5mb3JEb2N1bWVudChnd19nZXREb2N1bWVudCgpKS5zZXQoc2VsZWN0b3IsIEpTT04ucGFyc2UocnVsZXMpKVxufVxuXG4vKipcbiAqIFJlbW92ZSBzdHlsZVxuICpcbiAqIFJlbW92ZSBhZGRlZCBzdHlsZSBmcm9tIHRoZXMgZG9jdW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgY3NzIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVTdHlsZShzZWxlY3Rvcikge1xuICBqc3MuZm9yRG9jdW1lbnQoZ3dfZ2V0RG9jdW1lbnQoKSkucmVtb3ZlKHNlbGVjdG9yKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxbXCJqc3NcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcanNzLmpzXCIpOyIsIi8qXG4gKiBKU1MgdjAuNiAtIEphdmFTY3JpcHQgU3R5bGVzaGVldHNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Cb3g5L2pzc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMSwgRGF2aWQgVGFuZ1xuICogTUlUIExpY2Vuc2VkIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqL1xudmFyIGpzcyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgYWRqU2VsQXR0clJlZ2V4ID0gLygoPzpcXC58IylbXlxcLlxccyNdKykoKD86XFwufCMpW15cXC5cXHMjXSspL2c7XG4gICAgdmFyIGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleCA9IC8oOjopKGJlZm9yZXxhZnRlcnxmaXJzdC1saW5lfGZpcnN0LWxldHRlcnxzZWxlY3Rpb24pLztcbiAgICB2YXIgc2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4ID0gLyhbXjpdKSg6KShiZWZvcmV8YWZ0ZXJ8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8c2VsZWN0aW9uKS87XG4gICAgdmFyIHNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHM7IC8vIGZsYWcgZm9yIG9sZGVyIGJyb3dzZXJzXG5cbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnNBbmRSdWxlcyhzaGVldCkge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gT2xkZXIgYnJvd3NlcnMgYW5kIEZGIHJlcG9ydCBwc2V1ZG8gZWxlbWVudCBzZWxlY3RvcnMgaW4gYW4gb3V0ZGF0ZWQgZm9ybWF0XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHNbc2VsZWN0b3JUZXh0XSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbc2VsZWN0b3JUZXh0XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0c1tzZWxlY3RvclRleHRdLnB1c2goe1xuICAgICAgICAgICAgICAgIHNoZWV0OiBzaGVldCxcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICBzdHlsZTogcnVsZXNbaV0uc3R5bGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJ1bGVzKHNoZWV0LCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgLy8gQnJvd3NlcnMgcmVwb3J0IHNlbGVjdG9ycyBpbiBsb3dlcmNhc2VcbiAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gcnVsZXNbaV0uc2VsZWN0b3JUZXh0O1xuICAgICAgICAgICAgLy8gTm90ZSAtIGNlcnRhaW4gcnVsZXMgKGUuZy4gQHJ1bGVzKSBkb24ndCBoYXZlIHNlbGVjdG9yVGV4dFxuICAgICAgICAgICAgaWYgKHNlbGVjdG9yVGV4dCAmJiAoc2VsZWN0b3JUZXh0ID09IHNlbGVjdG9yIHx8IHNlbGVjdG9yVGV4dCA9PSBzd2FwQWRqU2VsQXR0cihzZWxlY3RvcikgfHwgc2VsZWN0b3JUZXh0ID09IHN3YXBQc2V1ZG9FbFN5bnRheChzZWxlY3RvcikpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2ldLnN0eWxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkUnVsZShzaGVldCwgc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gc2hlZXQuY3NzUnVsZXMgfHwgc2hlZXQucnVsZXMgfHwgW107XG4gICAgICAgIHZhciBpbmRleCA9IHJ1bGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHBzZXVkb0VsZW1lbnRSdWxlID0gYWRkUHNldWRvRWxlbWVudFJ1bGUoc2hlZXQsIHNlbGVjdG9yLCBydWxlcywgaW5kZXgpO1xuXG4gICAgICAgIGlmICghcHNldWRvRWxlbWVudFJ1bGUpIHtcbiAgICAgICAgICAgIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBzZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2luZGV4XS5zdHlsZVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhZGRSdWxlVG9TaGVldChzaGVldCwgc2VsZWN0b3IsIGluZGV4KSB7XG4gICAgICAgIGlmIChzaGVldC5pbnNlcnRSdWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9yICsgJyB7IH0nLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaGVldC5hZGRSdWxlKHNlbGVjdG9yLCBudWxsLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHNpbmdsZSBjb2xvbiBzeW50YXggZm9yIG9sZGVyIGJyb3dzZXJzIGFuZCBidWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ5NjUxXG4gICAgZnVuY3Rpb24gYWRkUHNldWRvRWxlbWVudFJ1bGUoc2hlZXQsIHNlbGVjdG9yLCBydWxlcywgaW5kZXgpIHtcbiAgICAgICAgdmFyIGRvdWJsZUNvbG9uU2VsZWN0b3I7XG4gICAgICAgIHZhciBzaW5nbGVDb2xvblNlbGVjdG9yO1xuXG4gICAgICAgIGlmIChkb3VibGVDb2xvblBzZXVkb0VsUmVnZXguZXhlYyhzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGRvdWJsZUNvbG9uU2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgICAgIHNpbmdsZUNvbG9uU2VsZWN0b3IgPSB0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbmdsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgZG91YmxlQ29sb25TZWxlY3RvciA9IHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgICAgICBzaW5nbGVDb2xvblNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBkZWFsaW5nIHdpdGggYSBwc2V1ZG8gZWxlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWUgbW9kZXJuIGJyb3dzZXIgYW5kIHRoZW4gY2hlY2sgaWYgc3VjY2Vzc2Z1bFxuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIGRvdWJsZUNvbG9uU2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIHNpbmdsZUNvbG9uU2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVwbGFjZShzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgc3VibWF0Y2gxLCBzdWJtYXRjaDIsIHN1Ym1hdGNoMykge1xuICAgICAgICAgICAgcmV0dXJuIHN1Ym1hdGNoMSArICc6OicgKyBzdWJtYXRjaDM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVwbGFjZShkb3VibGVDb2xvblBzZXVkb0VsUmVnZXgsIGZ1bmN0aW9uKG1hdGNoLCBzdWJtYXRjaDEsIHN1Ym1hdGNoMikge1xuICAgICAgICAgICAgcmV0dXJuICc6JyArIHN1Ym1hdGNoMjtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVSdWxlKHJ1bGUpIHtcbiAgICAgICAgdmFyIHNoZWV0ID0gcnVsZS5zaGVldDtcbiAgICAgICAgaWYgKHNoZWV0LmRlbGV0ZVJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0LmRlbGV0ZVJ1bGUocnVsZS5pbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hlZXQucmVtb3ZlUnVsZSkge1xuICAgICAgICAgICAgc2hlZXQucmVtb3ZlUnVsZShydWxlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICAgICAgaWYgKCFzcmMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGRlc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZVN0eWxlcyhydWxlcykge1xuICAgICAgICB2YXIgYWdncmVnYXRlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGV4dGVuZChhZ2dyZWdhdGUsIGRlY2xhcmVkUHJvcGVydGllcyhydWxlc1tpXS5zdHlsZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjbGFyZWRQcm9wZXJ0aWVzKHN0eWxlKSB7XG4gICAgICAgIHZhciBkZWNsYXJlZCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWNsYXJlZFtzdHlsZVtpXV0gPSBzdHlsZVt0b0NhbWVsQ2FzZShzdHlsZVtpXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNsYXJlZDtcbiAgICB9XG5cbiAgICAvLyBJRTkgc3RvcmVzIHJ1bGVzIHdpdGggYXR0cmlidXRlcyAoY2xhc3NlcyBvciBJRCdzKSBhZGphY2VudCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIgYXMgZGVmaW5lZFxuICAgIC8vIGNhdXNpbmcgdGhlbSB0byBub3QgYmUgZm91bmQsIHNvIHRoaXMgbWV0aG9kIHN3YXBzIFsjfC5dc2VsMVsjfC5dc2VsMiB0byBiZWNvbWUgWyN8Ll1zZWwyWyN8Ll1zZWwxXG4gICAgZnVuY3Rpb24gc3dhcEFkalNlbEF0dHIoc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHN3YXAgPSAnJztcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IGFkalNlbEF0dHJSZWdleC5leGVjKHNlbGVjdG9yKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09PSAnJylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHIobWF0Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgsIG1hdGNoWzJdLmxlbmd0aCk7XG4gICAgICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cihtYXRjaC5pbmRleCwgbWF0Y2hbMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyKGxhc3RJbmRleCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc3dhcDtcbiAgICB9O1xuXG4gICAgLy8gRkYgYW5kIG9sZGVyIGJyb3dzZXJzIHN0b3JlIHJ1bGVzIHdpdGggcHNldWRvIGVsZW1lbnRzIHVzaW5nIHNpbmdsZS1jb2xvbiBzeW50YXhcbiAgICBmdW5jdGlvbiBzd2FwUHNldWRvRWxTeW50YXgoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFN0eWxlUHJvcGVydGllcyhydWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB2YXIgaW1wb3J0YW50SW5kZXggPSB2YWx1ZS5pbmRleE9mKCcgIWltcG9ydGFudCcpO1xuXG4gICAgICAgICAgICAvLyBNb2Rlcm4gYnJvd3NlcnMgc2VlbSB0byBoYW5kbGUgb3ZlcnJpZGVzIGZpbmUsIGJ1dCBJRTkgZG9lc24ndFxuICAgICAgICAgICAgcnVsZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpOyBcbiAgICAgICAgICAgIGlmIChpbXBvcnRhbnRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBydWxlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUuc3Vic3RyKDAsIGltcG9ydGFudEluZGV4KSwgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBydWxlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24gKG1hdGNoLCBzdWJtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1Ym1hdGNoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUNhbWVsQ2FzZWRQcm9wZXJ0eU5hbWVzKG9sZFByb3BzKSB7XG4gICAgICAgIHZhciBuZXdQcm9wcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgICAgICAgIG5ld1Byb3BzW3VuQ2FtZWxDYXNlKGtleSldID0gb2xkUHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5DYW1lbENhc2Uoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFtBLVpdKS9nLCBmdW5jdGlvbihtYXRjaCwgc3VibWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiAnLScgKyBzdWJtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgSnNzID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLmRvYy5oZWFkIHx8IHRoaXMuZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgIHRoaXMuc2hlZXRzID0gdGhpcy5kb2Muc3R5bGVTaGVldHMgfHwgW107XG4gICAgfTtcblxuICAgIEpzcy5wcm90b3R5cGUgPSB7XG4gICAgICAgIC8vIFJldHVybnMgSlNTIHJ1bGVzIChzZWxlY3RvciBpcyBvcHRpb25hbClcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVTdHlsZXMoZ2V0UnVsZXModGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRTZWxlY3RvcnNBbmRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCk7XG4gICAgICAgICAgICBmb3IgKHNlbGVjdG9yIGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgcnVsZXNbc2VsZWN0b3JdID0gYWdncmVnYXRlU3R5bGVzKHJ1bGVzW3NlbGVjdG9yXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJldHVybnMgYWxsIHJ1bGVzIChzZWxlY3RvciBpcyByZXF1aXJlZClcbiAgICAgICAgZ2V0QWxsOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBleHRlbmQocHJvcGVydGllcywgYWdncmVnYXRlU3R5bGVzKGdldFJ1bGVzKHRoaXMuc2hlZXRzW2ldLCBzZWxlY3RvcikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBZGRzIEpTUyBydWxlcyBmb3IgdGhlIHNlbGVjdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBwcm9wZXJ0aWVzXG4gICAgICAgIHNldDogZnVuY3Rpb24oc2VsZWN0b3IsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2hlZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTaGVldCA9IHRoaXMuX2NyZWF0ZVNoZWV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gdHJhbnNmb3JtQ2FtZWxDYXNlZFByb3BlcnR5TmFtZXMocHJvcGVydGllcyk7XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFydWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBydWxlcyA9IFthZGRSdWxlKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3RvcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNldFN0eWxlUHJvcGVydGllcyhydWxlc1tpXSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJlbW92ZXMgSlNTIHJ1bGVzIChzZWxlY3RvciBpcyBvcHRpb25hbClcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU2hlZXQodGhpcy5kZWZhdWx0U2hlZXQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRlZmF1bHRTaGVldDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGUocnVsZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgX2NyZWF0ZVNoZWV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZU5vZGUgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgc3R5bGVOb2RlLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgc3R5bGVOb2RlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgICAgIHRoaXMuaGVhZC5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlTm9kZS5zaGVldDtcbiAgICAgICAgfSxcbiAgICAgICAgX3JlbW92ZVNoZWV0OiBmdW5jdGlvbihzaGVldCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBzaGVldC5vd25lck5vZGU7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGV4cG9ydHMgPSBuZXcgSnNzKGRvY3VtZW50KTtcbiAgICBleHBvcnRzLmZvckRvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHJldHVybiBuZXcgSnNzKGRvYyk7XG4gICAgfTtcbiAgICByZXR1cm4gZXhwb3J0cztcbn0pKCk7XG5cbnR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzICYmIChtb2R1bGUuZXhwb3J0cyA9IGpzcyk7IC8vIENvbW1vbkpTIHN1cHBvcnQiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIm1vZHVsZS5leHBvcnRzID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgb3BhY2l0eTogMDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwYWRkaW5nOiAwO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbiAgYm9yZGVyOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xcbiAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaW5saW5lIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBtYXgtaGVpZ2h0OiA2NDBweDtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIub3BlbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB6LWluZGV4OiA5OTk5OTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hbmltYXRlLm9wZW4ge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZwRmFkZUluRG93biAzMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICAgICAgICAgIGFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IDJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5zdGF0aWMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiBjYWxjKDEwMCUgKyAycHgpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnN0YXRpYy5vcGVuIHtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMSkgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rNykge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5tdWx0aU1vbnRoIC5mbGF0cGlja3ItZGF5cyAuZGF5Q29udGFpbmVyOm50aC1jaGlsZChuKzIpIC5mbGF0cGlja3ItZGF5LmluUmFuZ2U6bnRoLWNoaWxkKDduKzEpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTJweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzVGltZSAuZGF5Q29udGFpbmVyIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaGFzVGltZSAuZmxhdHBpY2tyLXRpbWUge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubm9DYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb250ZW50OiAnJztcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgbGVmdDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dSaWdodDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YWZ0ZXIsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1JpZ2h0OmFmdGVyIHtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjphZnRlciB7XFxuICBsZWZ0OiA1MCU7XFxuICByaWdodDogNTAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmJlZm9yZSB7XFxuICBib3JkZXItd2lkdGg6IDVweDtcXG4gIG1hcmdpbjogMCAtNXB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmFmdGVyIHtcXG4gIGJvcmRlci13aWR0aDogNHB4O1xcbiAgbWFyZ2luOiAwIC00cHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xcbiAgYm90dG9tOiAxMDAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmJlZm9yZSB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YWZ0ZXIge1xcbiAgdG9wOiAxMDAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmJlZm9yZSB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmZsYXRwaWNrci13cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLmZsYXRwaWNrci1tb250aHMge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbW9udGgge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAtd2Via2l0LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGgge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIHotaW5kZXg6IDM7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIGksXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLXByZXYtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoIHtcXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbiAgbGVmdDogMDtcXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG59XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG4gIHJpZ2h0OiAwO1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbn1cXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoOmhvdmVyIHtcXG4gIGNvbG9yOiAjOTU5ZWE5O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIgc3ZnLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciBzdmcge1xcbiAgZmlsbDogI2Y2NDc0NztcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2ZyxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggc3ZnIHBhdGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2ZyBwYXRoIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgZmlsbDogaW5oZXJpdDtcXG59XFxuLm51bUlucHV0V3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQsXFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LW1zLWNsZWFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgcGFkZGluZzogMCA0cHggMCAycHg7XFxuICBoZWlnaHQ6IDUwJTtcXG4gIGxpbmUtaGVpZ2h0OiA1MCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjE1KTtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcCB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiA0cHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjYpO1xcbiAgdG9wOiAyNiU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd24ge1xcbiAgdG9wOiA1MCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC42KTtcXG4gIHRvcDogNDAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHtcXG4gIHdpZHRoOiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHBhdGgge1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjUpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIgc3BhbiB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGgge1xcbiAgZm9udC1zaXplOiAxMzUlO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNzUlO1xcbiAgbGVmdDogMTIuNSU7XFxuICBwYWRkaW5nOiA3LjQ4cHggMCAwIDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGhlaWdodDogMzRweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWNoO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHdpZHRoOiA2Y2g7XFxuICB3aWR0aDogN2NoXFxcXDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHRleHQ7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcltkaXNhYmxlZF0sXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXTpob3ZlciB7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjUpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMge1xcbiAgYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIG1hcmdpbjogLTFweCAwIDAgMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6Zm9jdXMsXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdlZWtkYXlzIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla2RheXMgLmZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuc3Bhbi5mbGF0cGlja3Itd2Vla2RheSB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmb250LXNpemU6IDkwJTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIG1hcmdpbjogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcbi5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci13ZWVrcyB7XFxuICBwYWRkaW5nOiAxcHggMCAwIDA7XFxufVxcbi5mbGF0cGlja3ItZGF5cyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XFxuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheXM6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmRheUNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgb3V0bGluZTogMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgbWluLXdpZHRoOiAzMDcuODc1cHg7XFxuICBtYXgtd2lkdGg6IDMwNy44NzVweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZGF5Q29udGFpbmVyICsgLmRheUNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5IHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDE1MHB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgd2lkdGg6IDE0LjI4NTcxNDMlO1xcbiAgLXdlYmtpdC1mbGV4LWJhc2lzOiAxNC4yODU3MTQzJTtcXG4gICAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTQuMjg1NzE0MyU7XFxuICAgICAgICAgIGZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xcbiAgbWF4LXdpZHRoOiAzOXB4O1xcbiAgaGVpZ2h0OiAzOXB4O1xcbiAgbGluZS1oZWlnaHQ6IDM5cHg7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5OmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6Zm9jdXMge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIGJhY2tncm91bmQ6ICNlNmU2ZTY7XFxuICBib3JkZXItY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LnRvZGF5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OWVhOTtcXG59XFxuLmZsYXRwaWNrci1kYXkudG9kYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkudG9kYXk6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xcbiAgYmFja2dyb3VuZDogIzk1OWVhOTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZCxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQ6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLm5leHRNb250aERheSB7XFxuICBiYWNrZ3JvdW5kOiAjNTY5ZmY3O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItY29sb3I6ICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweCAwIDAgNTBweDtcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5lbmRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiAwIDUwcHggNTBweCAwO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTEwcHggMCAwICM1NjlmZjc7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xMHB4IDAgMCAjNTY5ZmY3O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwcHg7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQubmV4dE1vbnRoRGF5IHtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMyk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMSk7XFxufVxcbi5mbGF0cGlja3ItZGF5LndlZWsuc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgIzU2OWZmNywgNXB4IDAgMCAjNTY5ZmY3O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjNTY5ZmY3LCA1cHggMCAwICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LmhpZGRlbiB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5yYW5nZU1vZGUgLmZsYXRwaWNrci1kYXkge1xcbiAgbWFyZ2luLXRvcDogMXB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla3Mge1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciAuZmxhdHBpY2tyLXdlZWtkYXkge1xcbiAgZmxvYXQ6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheSxcXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheTpob3ZlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uZmxhdHBpY2tyLXJDb250YWluZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZsYXRwaWNrci10aW1lIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG91dGxpbmU6IDA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgbWF4LWhlaWdodDogNDBweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci10aW1lOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogdGFibGU7XFxuICBjbGVhcjogYm90aDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIHdpZHRoOiA0MCU7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZS5oYXNTZWNvbmRzIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDI2JTtcXG59XFxuLmZsYXRwaWNrci10aW1lLnRpbWUyNGhyIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDQ5JTtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0IHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1ob3VyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLW1pbnV0ZSxcXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLXNlY29uZCB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJvcmRlcjogMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItdGltZS1zZXBhcmF0b3IsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG0ge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB3aWR0aDogMiU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtIHtcXG4gIG91dGxpbmU6IDA7XFxuICB3aWR0aDogMTglO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1cyxcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbn1cXG4uZmxhdHBpY2tyLWlucHV0W3JlYWRvbmx5XSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmcEZhZGVJbkRvd24ge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICB9XFxufVxcblwiIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG4iLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2NsYXNzZXMuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLypcXG4qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxcbiogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxcbipcXG4qIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXFxuKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cXG4qL1xcblxcbi5ndy1hbGlnbm1lbnQtY2VsbC1yaWdodCxcXG4uZ3ctYWxpZ25tZW50LWNlbGwtcmlnaHQgLmFnLWNlbGwtdmFsdWUge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XFxuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1jZWxsLWNlbnRlcixcXG4uZ3ctYWxpZ25tZW50LWNlbGwtY2VudGVyIC5hZy1jZWxsLXZhbHVlIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItcmlnaHQgLmFnLWhlYWRlci1jZWxsLWxhYmVsIHtcXG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLWNlbnRlciAuYWctaGVhZGVyLWNlbGwtbGFiZWwge1xcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1yaWdodCAuYWctY2VsbC1sYWJlbC1jb250YWluZXIsXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1jZWxsLWxhYmVsLWNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XFxuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLmd3LXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDFzO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcztcXG4gIGJvcmRlci1yYWRpdXM6IDMuMXB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAyNjBtcztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjYwbXM7XFxufVxcblxcbi5ndy10b29sdGlwLWxpZ2h0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmd3LXRvb2x0aXAtZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWMxZjIwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICM1YzVjNWM7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggIzVjNWM1YztcXG4gIGNvbG9yOiB3aGl0ZTtcXG59XFxuXCIiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9zdWdnZXN0aW9uLWVkaXRvci5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLmF1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQge1xcbiAgcGFkZGluZy1sZWZ0OiA2cHg7XFxuICBib3JkZXI6IHRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0MywgMC40KSk7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmFnLXRoZW1lLWFscGluZSAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCxcXG4uYWctdGhlbWUtYmFsaGFtIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1tYXRlcmlhbCAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcXG59XFxuXFxuLmFnLXRoZW1lLWFscGluZS1kYXJrIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1iYWxoYW0tZGFyayAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcXG4gIHotaW5kZXg6IDEwMDA7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXI6IHRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0MywgMC40KSk7XFxuICBib3JkZXItdG9wOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAzcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAzcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi5hdXRvY29tcGxldGUuZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KTtcXG4gIGNvbG9yOiB2YXIoLS1hZy1kYXRhLWNvbG9yLCB2YXIoLS1hZy1mb3JlZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XFxufVxcblxcbi5hdXRvY29tcGxldGUgLnN1Z2dlc3Rpb24tZ3JvdXAge1xcbiAgYmFja2dyb3VuZDogI2VlZTtcXG4gIHBhZGRpbmc6IDVweCA2cHg7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS5kYXJrIC5zdWdnZXN0aW9uLWdyb3VwIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMxODFkMWYpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW0ge1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuc3VnZ2VzdGlvbi1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLXJvdy1ob3Zlci1jb2xvciwgcmdiYSgzMywgMTUwLCAyNDQsIDAuMSkpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW0uc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKFxcbiAgICAtLWFnLXNlbGVjdGVkLXJvdy1iYWNrZ3JvdW5kLWNvbG9yLFxcbiAgICByZ2JhKDMzLCAxNTAsIDI0MywgMC4zKVxcbiAgKTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuZW1wdHkge1xcbiAgcGFkZGluZzogOHB4IDZweDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS1pbnB1dC1lcnJvciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgLTJweCAwICNlOTFlNjMgaW5zZXQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCAwICNlOTFlNjMgaW5zZXQ7XFxufVxcblxcbi5hdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcyB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgLTJweCAwICM0Y2FmNTAgaW5zZXQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCAwICM0Y2FmNTAgaW5zZXQ7XFxufVxcblwiIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZXAtcGFyc2UtanNvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvU3RyaW5nTWFzay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXhwcmVzc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Jvd3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jaGFydHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jZWxscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL2Rpc3QvYmJqLW1hc2tzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1pbnB1dC1tYXNraW5nL2Rpc3QvYmFzaXMtaW5wdXQtbWFza2luZy5qcy1leHBvc2VkIiwid2VicGFjazovLy8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCBmZDdmNjA0MjE5MmUxMjMyY2Y2NSIsIndlYnBhY2s6Ly8vd2VicGFjazovZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiU3RyaW5nTWFza1wiXX0iLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC9UZXh0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L3Rvb2xzLmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L051bWJlcklucHV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrOi9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJjb21tb25qczJcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiYW1kXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcInJvb3RcIjpbXCJCQmpcIixcIk1hc2tzXCIsXCJOdW1iZXJNYXNrXCJdfSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrL1N0cmluZ01hc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzay9OdW1iZXJNYXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L3dlYnBhY2svYm9vdHN0cmFwIDBiYWUwNTllMmI1ZmUyNmM1YjEwIiwid2VicGFjazovLy8vc3JjL0NvbXBvbmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL2F1dG9iaW5kLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvb3ZlcnJpZGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9wcml2YXRlL3V0aWxzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy8od2VicGFjaykvYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9yZWFkb25seS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdXRjVG9ab25lZFRpbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0V2ZW50c01peGluL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRWRpdG9yL0Jvb2xlYW5FZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQ29tcG9uZW50L0NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9sYXp5LWluaXRpYWxpemUuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzcz83NmEzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblJlbmRlcmVyL0Jvb2xlYW5SZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5GaWx0ZXIvQm9vbGVhbkZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzPzBkNWUiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3M/YWEwZSIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzPzA5MWIiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9UZW1wbGF0ZVJlbmRlcmVyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0ltYWdlUmVuZGVyZXIvSW1hZ2VSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9EYXRlVGltZUZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elRva2VuaXplRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdG9EYXRlL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRXZlbnRzTWl4aW4vRXZlbnRzTWl4aW4uanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3M/NGY2NyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3M/NzZmYiIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9EYXRlVGltZUVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcG9seWZpbGxzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9pbml0LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvbWVudXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL3NlbGVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9lZGl0aW5nLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9IVE1MVG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9uRWRpdG9yLmpzIiwid2VicGFjazovLy9hdXRvY29tcGxldGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Rvb2xwYW5lbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3N0YXR1c2Jhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL292ZXJsYXlzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2pzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanNzL2pzcy5qcy1leHBvc2VkIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qc3MvanNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzPzA5NDciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvY2xhc3Nlcy5jc3M/MDU1NSIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvY2xhc3Nlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlL3N1Z2dlc3Rpb24tZWRpdG9yLmNzcz8zZjI0Iiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3MiXSwibmFtZXMiOlsiZ3dfZ2V0RG9jdW1lbnQiLCIkZG9jIiwiZG9jdW1lbnQiLCJnd19nZXRXaW5kb3ciLCIkd25kIiwid2luZG93IiwiZ3dfZXNjYXBlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJnd191dWlkIiwicmVwbGFjZSIsImMiLCJyIiwiTWF0aCIsInJhbmRvbSIsInYiLCJ0b1N0cmluZyIsImd3X2dldEdyaWQiLCJpZCIsIkJCakdyaWRFeFdpZGdldCIsImdyaWQiLCJyZWdpc3RlcmVkR3JpZHMiLCJKU09OIiwic3RyaW5naWZ5IiwiT2JqZWN0Iiwia2V5cyIsIlR5cGVFcnJvciIsImd3X2FkZEdyaWQiLCJvcHRpb25zIiwiZ3dfZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsInRpbWVvdXQiLCJjb250ZXh0IiwiYXJncyIsImFyZ3VtZW50cyIsImxhdGVyIiwiYXBwbHkiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImd3X3NlbmRFdmVudCIsInBheWxvYWQiLCJldmVudElkIiwicmVnaXN0ZXJlZEludGVyZXN0cyIsImludGVyZXN0cyIsImluY2x1ZGVzIiwiZGl2IiwiZ2V0RWxlbWVudEJ5SWQiLCJiYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQiLCJnd19wYXJzZU5vZGUiLCJub2RlIiwiZ3JvdXAiLCJnZXRSb3dOb2RlSWQiLCJyb3dQaW5uZWQiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJkYXRhIiwieCIsInJvd0luZGV4IiwicCIsInBhcmVudCIsImtleSIsImNoaWxkSW5kZXgiLCJzIiwiQm9vbGVhbiIsInNlbGVjdGVkIiwiY3IiLCJwcCIsImd3X3BhcnNlTm9kZUZyb21FdmVudCIsImUiLCJnIiwiRnVuY3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImwiLCJkZWVwUGFyc2VKc29uIiwianNvblN0cmluZyIsInBhcnNlIiwiZXJyIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwidmFsIiwicmVkdWNlIiwib2JqIiwiR1dfRVZFTlRfUk9XX1NFTEVDVCIsIkdXX0VWRU5UX1JPV19DTElDSyIsIkdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0NMSUNLIiwiR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVEIiwiR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VEIiwiR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQiLCJHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCIsIkdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIiwiR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQiLCJHV19FVkVOVF9LRVlQUkVTUyIsImlzT2JqZWN0IiwidHlwZSIsInJvb3QiLCJmcmVlU2VsZiIsInNlbGYiLCJmcmVlR2xvYmFsIiwiZXEiLCJvdGhlciIsImlzQXJyYXlMaWtlIiwibGVuZ3RoIiwiU3RyaW5nTWFzayIsIk51bWJlck1hc2siLCJyZXF1aXJlIiwiZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsImRlZiIsImNoZWNrYm94U2VsZWN0aW9uIiwiZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3giLCJoZWFkZXJDaGVja2JveFNlbGVjdGlvbiIsImd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24iLCJ0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uIiwidG9vbHRpcFZhbHVlR2V0dGVyIiwicGFyYW1zIiwidG9vbHRpcENvbXBvbmVudCIsImVkaXRhYmxlIiwicm93U3BhbiIsImNvbFNwYW4iLCJnd19zZXRDb2x1bW5EZWZpbml0aW9ucyIsImRlZXBQYXJzZWREZWZpbml0aW9ucyIsImFwaSIsInNldENvbHVtbkRlZnMiLCJjb2x1bW5EZWZzIiwiZ3dfc2l6ZUNvbHVtbnNUb0ZpdCIsIndpZHRoIiwiY29sdW1uc0FQSSIsImNvbHVtbkFwaSIsInNpemVDb2x1bW5zVG9GaXQiLCJOdW1iZXIiLCJnd19hdXRvU2l6ZUNvbHVtbnMiLCJza2lwSGVhZGVyIiwiY29sdW1ucyIsImFsbENvbHVtbklkcyIsImdldEFsbENvbHVtbnMiLCJmb3JFYWNoIiwiY29sdW1uIiwicHVzaCIsImNvbElkIiwiYXV0b1NpemVDb2x1bW5zIiwiZ3dfZW5zdXJlQ29sdW1uVmlzaWJsZSIsImNvbHVtbklkIiwiZW5zdXJlQ29sdW1uVmlzaWJsZSIsImd3X3NldENvbHVtbldpZHRoIiwic2V0Q29sdW1uV2lkdGgiLCJnd19waW5Db2x1bW4iLCJwaW4iLCJzZXRDb2x1bW5QaW5uZWQiLCJnd19tb3ZlQ29sdW1uIiwidG9JbmRleCIsIm1vdmVDb2x1bW4iLCJwYXJhbSIsInNob3dTZWxlY3Rpb25DaGVja2JveCIsImdldEFsbEdyaWRDb2x1bW5zIiwiY29sRGVmIiwiZmllbGQiLCJncmlkT3B0aW9uc1dyYXBwZXIiLCJncmlkT3B0aW9ucyIsInNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCIsImd3X2FkZFJvd0dyb3VwQ29sdW1uIiwic2V0Iiwic3BsaXQiLCJ0cmltIiwiZ3dfcmVtb3ZlUm93R3JvdXBDb2x1bW4iLCJyZW1vdmVSb3dHcm91cENvbHVtbnMiLCJnd19nZXRQaXZvdE1vZGUiLCJpc1Bpdm90TW9kZSIsImd3X3NldFBpdm90TW9kZSIsIm1vZGUiLCJzZXRQaXZvdE1vZGUiLCJnd19hZGRQaXZvdENvbHVtbnMiLCJnd19yZW1vdmVQaXZvdENvbHVtbnMiLCJyZW1vdmVQaXZvdENvbHVtbnMiLCJnd19hZGRWYWx1ZUNvbHVtbnMiLCJhZGRWYWx1ZUNvbHVtbnMiLCJnd19yZW1vdmVWYWx1ZUNvbHVtbnMiLCJyZW1vdmVWYWx1ZUNvbHVtbnMiLCJnd19zZXRTb3J0TW9kZWwiLCJtb2RlbCIsImFzQXJyYXkiLCJwYXJzZWRNb2RlbCIsInNvcnQiLCJzZXRTb3J0TW9kZWwiLCJnd19yZWZyZXNoSGVhZGVyIiwicmVkcmF3Um93cyIsImd3X3NldENvbHVtblZpc2libGUiLCJ2aXNpYmxlIiwic2V0Q29sdW1uc1Zpc2libGUiLCJnd19jb21waWxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJleHByZXNzaW9uQ2FjaGUiLCJmdW5jdGlvbkJvZHkiLCJpbmRleE9mIiwidGhlRnVuY3Rpb24iLCJnd19leGVjdXRlRXhwcmVzc2lvbiIsImphdmFTY3JpcHRGdW5jdGlvbiIsInJlc3VsdCIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJnZXRWYWx1ZSIsImNvbHVtbkdyb3VwIiwiY29uc29sZSIsImxvZyIsImd3X3NldFF1aWNrRmlsdGVyIiwiZmlsdGVyIiwic2V0UXVpY2tGaWx0ZXIiLCJnd19leHBhbmRBbGwiLCJleHBhbmRBbGwiLCJnd19jb2xsYXBzZUFsbCIsImNvbGxhcHNlQWxsIiwiZ3dfZW5zdXJlSW5kZXhWaXNpYmxlIiwiaW5kZXgiLCJwb3NpdGlvbiIsImdldFJvd05vZGUiLCJlbnN1cmVOb2RlVmlzaWJsZSIsImVuc3VyZUluZGV4VmlzaWJsZSIsImd3X25hdmlnYXRlVG9OZXh0Um93IiwicHJldmlvdXNDZWxsIiwicHJldmlvdXNDZWxsUG9zaXRpb24iLCJzdWdnZXN0ZWROZXh0Q2VsbCIsIm5leHRDZWxsUG9zaXRpb24iLCJLRVlfVVAiLCJLRVlfRE9XTiIsIktFWV9MRUZUIiwiS0VZX1JJR0hUIiwicm93IiwiZ2V0RGlzcGxheWVkUm93QXRJbmRleCIsImdldEZpcnN0RGlzcGxheWVkUm93Iiwic2V0U2VsZWN0ZWQiLCJmb3JFYWNoTm9kZSIsImdldExhc3REaXNwbGF5ZWRSb3ciLCJFcnJvciIsImd3X2dldFJvd05vZGVJZCIsImd3X3NldFJvd0RhdGEiLCJqc29uIiwic2V0Um93RGF0YSIsInJvd0RhdGEiLCJnd191cGRhdGVSb3dEYXRhIiwidHJhbnNhY3Rpb24iLCJiYXRjaFVwZGF0ZSIsInJlbW92ZSIsIml0ZW1zIiwiYXBwbHlUcmFuc2FjdGlvbiIsImFwcGx5VHJhbnNhY3Rpb25Bc3luYyIsImd3X3NldFJvd3NIZWlnaHQiLCJoZWlnaHQiLCJzZXRSb3dIZWlnaHQiLCJvblJvd0hlaWdodENoYW5nZWQiLCJnd19zZXRSb3dIZWlnaHQiLCJ3YXJuIiwiZ3dfcmVzZXRSb3dIZWlnaHRzIiwicmVzZXRSb3dIZWlnaHRzIiwiZ3dfc2V0U2VsZWN0ZWRSb3dzIiwicm93cyIsImZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0IiwiU3RyaW5nIiwiZXhwYW5kZWQiLCJvbkdyb3VwRXhwYW5kZWRPckNvbGxhcHNlZCIsImd3X3NlbGVjdEFsbCIsImZpbHRlcmVkIiwic2VsZWN0QWxsRmlsdGVyZWQiLCJzZWxlY3RBbGwiLCJnd19kZXNlbGVjdEFsbCIsImRlc2VsZWN0QWxsRmlsdGVyZWQiLCJkZXNlbGVjdEFsbCIsImd3X2dldFNlbGVjdGVkUm93cyIsIm5vZGVzIiwiZ2V0U2VsZWN0ZWROb2RlcyIsInBhcnNlZCIsImd3X2dldFNlbGVjdGVkUm93IiwiZ3dfZ2V0Um93IiwiZ3dfZ2V0Um93cyIsInBoYXNlIiwiZmlsdGVyRXhwcmVzc2lvbiIsImNhblByb2Nlc3MiLCJncmlkQXBpIiwiZ3dfcmVkcmF3Um93cyIsImd3X3NldFBpbm5lZFRvcFJvd0RhdGEiLCJzZXRQaW5uZWRUb3BSb3dEYXRhIiwiZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YSIsInNldFBpbm5lZEJvdHRvbVJvd0RhdGEiLCJnd19nZXRDaGFydFRvb2xiYXJJdGVtcyIsImNoYXJ0VG9vbGJhckl0ZW1zIiwiZ3dfYWRkQ2hhcnRSYW5nZSIsInJhbmdlIiwicHIiLCJjZWxsUmFuZ2UiLCJyZWYiLCJjcmVhdGVSYW5nZUNoYXJ0IiwidXVpZCIsImNyZWF0ZWRfY2hhcnRzIiwiZ3dfZGVzdHJveUNoYXJ0IiwiZGVzdHJveUNoYXJ0IiwiY2hhcnQiLCJnd19zdGFydEVkaXRpbmdDZWxsIiwiY29sS2V5Iiwia2V5UHJlc3MiLCJjaGFyUHJlc3MiLCJzdGFydEVkaXRpbmdDZWxsIiwiZ3dfc3RvcEVkaXRpbmciLCJjYW5jZWwiLCJzdG9wRWRpdGluZyIsImd3X3RhYlRvTmV4dENlbGwiLCJ0YWJUb05leHRDZWxsIiwiZ3dfdGFiVG9QcmV2aW91c0NlbGwiLCJ0YWJUb1ByZXZpb3VzQ2VsbCIsImd3X3NldEZvY3VzZWRDZWxsIiwiZmxvYXRpbmciLCJnZXRFZGl0aW5nQ2VsbHMiLCJmIiwibGFzdEZvY3VzZWRDZWxsIiwiZ2V0Rm9jdXNlZENlbGwiLCJpc0ludGVnZXIiLCJzZXRGb2N1c2VkQ2VsbCIsImd3X2dldFJhbmdlU2VsZWN0aW9ucyIsInJhbmdlcyIsImdldENlbGxSYW5nZXMiLCJnZXRNb2RlbCIsImFjY3VtdWxhdG9yIiwiY3VycmVudCIsInN0YXJJbmRleCIsIm1pbiIsInN0YXJ0Um93IiwiZW5kUm93IiwiZW5kSW5kZXgiLCJtYXgiLCJnZXRSb3ciLCJwYXJzZWROb2RlIiwiZ3dfcGFyc2VBZGRDZWxsUmFuZ2UiLCJzdGFydCIsImVuZCIsInJvd1N0YXJ0SW5kZXgiLCJhYnMiLCJyb3dFbmRJbmRleCIsImd3X2FkZENlbGxSYW5nZSIsImFkZENlbGxSYW5nZSIsImd3X2NsZWFyUmFuZ2VTZWxlY3Rpb24iLCJjbGVhclJhbmdlU2VsZWN0aW9uIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc1RlbXBsYXRlIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJvYmplY3RQcm90byIsInByb3RvdHlwZSIsInRlbXBsYXRlIiwic3RyaW5nIiwiZ3VhcmQiLCJzZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3MiLCJpbXBvcnRzIiwiXyIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJpbXBvcnRzS2V5cyIsImltcG9ydHNWYWx1ZXMiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW50ZXJwb2xhdGUiLCJzb3VyY2UiLCJyZURlbGltaXRlcnMiLCJSZWdFeHAiLCJlc2NhcGUiLCJyZUludGVycG9sYXRlIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJjYWxsIiwibWF0Y2giLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwib2Zmc2V0Iiwic2xpY2UiLCJlc2NhcGVTdHJpbmdDaGFyIiwidmFyaWFibGUiLCJiYXNlQXNzaWduVmFsdWUiLCJvYmplY3QiLCJhc3luY1RhZyIsImZ1bmNUYWciLCJnZW5UYWciLCJwcm94eVRhZyIsImlzRnVuY3Rpb24iLCJ0YWciLCJnbG9iYWwiLCJiYXNlUmVzdCIsImlkZW50aXR5IiwidGhpc0FyZyIsImlzSXRlcmF0ZWVDYWxsIiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwicmVJc1VpbnQiLCJpc0luZGV4IiwidGVzdCIsImFycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJpc1Byb3RvdHlwZSIsIkN0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvIiwiZG9tRXhjVGFnIiwiZXJyb3JUYWciLCJpc0Vycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiYXJnIiwiYXJyYXlNYXAiLCJhcnJheSIsIml0ZXJhdGVlIiwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJmYWN0b3J5IiwiZGVmaW5lIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJtIiwiZCIsImdldHRlciIsIm8iLCJjb25maWd1cmFibGUiLCJuIiwiX19lc01vZHVsZSIsImdldERlZmF1bHQiLCJnZXRNb2R1bGVFeHBvcnRzIiwicHJvcGVydHkiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwidG9JbnRlZ2VyIiwiZGlydHlOdW1iZXIiLCJOYU4iLCJudW1iZXIiLCJpc05hTiIsImNlaWwiLCJmbG9vciIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fIiwidHpQYXJzZVRpbWV6b25lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fIiwiTUlMTElTRUNPTkRTX0lOX0hPVVIiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIiwicGF0dGVybnMiLCJ0aW1lem9uZSIsInRpbWV6b25lWiIsInRpbWV6b25lSEgiLCJ0aW1lem9uZUhITU0iLCJ0aW1lem9uZUlBTkEiLCJ0aW1lem9uZVN0cmluZyIsImRhdGUiLCJ0b2tlbiIsImFic29sdXRlT2Zmc2V0IiwiZXhlYyIsImhvdXJzIiwicGFyc2VJbnQiLCJ2YWxpZGF0ZVRpbWV6b25lIiwibWludXRlcyIsInRva2VucyIsImFzVVRDIiwiRGF0ZSIsIlVUQyIsInRpbWVzdGFtcFdpdGhNc1plcm9lZCIsImdldFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0cmluZ01hc2tfXyIsIlV0aWxzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18iLCJEYXRlcyIsImdldERheU9mWWVhciIsImdldFdlZWtOdW1iZXIiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSIsIklTX0RBVEVfUkVHRVgiLCJJU19USU1FX1JFR0VYIiwiZml4U2hvcnRJU08iLCJnZXRUaW1lem9uZU9yT2Zmc2V0IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwid3JpdGFibGUiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJtYXNrIiwiX21hc2siLCJncm91cGluZ1NlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmb3JjZVRyYWlsaW5nWmVyb3MiLCJsb29zZSIsIm1hc2tMZW4iLCJzdHIiLCJtYXNrQmVmb3JlRGVjaW1hbCIsIm1hc2tBZnRlckRlY2ltYWwiLCJmb3VuZERlY2ltYWwiLCJjaGFyQXQiLCJudW0iLCJfcm91bmQiLCJieXRlcyIsIl90b0NoYXJBcnJheSIsImluTGVuIiwibnVtQmVmb3JlRGVjaW1hbCIsIm51bUFmdGVyRGVjaW1hbCIsIl9pIiwiX2kyIiwiZmlsbEJ5dGUiLCJmbG9hdEJ5dGUiLCJpblBvcyIsIm91dFBvcyIsImZsb2F0UG9zIiwiZmlsbEluaXQiLCJpc05lZ2F0aXZlIiwiX2dldFNpZ24iLCJlbWl0RGVjaW1hbCIsImZvdW5kWmVybyIsImZvdW5kRGlnaXQiLCJjdXJyZW5jeSIsInJldCIsIm1hc2tQb3MiLCJfbSIsImpvaW4iLCJfc2hpZnQiLCJwcmVjaXNpb24iLCJyZXZlcnNlU2hpZnQiLCJudW1BcnJheSIsInJvdW5kIiwic2lnbnVtIiwiY2hhcnMiLCJjb25jYXQiLCJzdWJzdHJpbmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyIsImxvY2FsZSIsImdldEZ1bGxZZWFyIiwiZGlmZiIsImdldFRpbWV6b25lT2Zmc2V0Iiwib25lRGF5IiwiZGF5IiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJwYWQiLCJ3ZWVrU3RhcnQiLCJnZXRNb250aCIsImdldERhdGUiLCJkYXlOdW0iLCJnZXRVVENEYXkiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF0ZSIsInllYXJTdGFydCIsImdldFVUQ0Z1bGxZZWFyIiwiRGF0ZU1hc2siLCJkYXRlT2JqZWN0IiwidHJhbnNsYXRpb24iLCJfYnVpbGRUcmFuc2xhdGlvbiIsInllYXIiLCJtb250aCIsIm1vbnRoU2hvcnQiLCJmb3JtYXQiLCJtb250aExvbmciLCJkYXlTaG9ydCIsIndlZWtkYXkiLCJkYXlMb25nIiwiZ2V0TWludXRlcyIsInNlY29uZHMiLCJnZXRTZWNvbmRzIiwiaG91cnMyNCIsImdldEhvdXJzIiwiaG91cnMxMiIsImRheU9mWWVhciIsImRheU9mV2VlayIsImdldERheSIsIndlZWtOdW1iZXIiLCJrIiwiZGF0ZURldGFpbHMiLCJZeiIsInN1YnN0ciIsIllzIiwiWWwiLCJZcCIsImZyb21DaGFyQ29kZSIsIllkIiwiWSIsIk16IiwiTXMiLCJNbCIsIk1wIiwiTWQiLCJNIiwiRHoiLCJEcyIsIkRsIiwiRHAiLCJEZCIsIkQiLCJIeiIsIkhzIiwiSGwiLCJIcCIsIkhkIiwiSCIsImh6IiwiaHMiLCJobCIsImhwIiwiaGQiLCJoIiwibXoiLCJtcyIsIm1sIiwibXAiLCJtZCIsInN6Iiwic3MiLCJzbCIsInNwIiwic2QiLCJQUCIsIlAiLCJKeiIsIkpzIiwiSmwiLCJKZCIsIkoiLCJXeiIsIldzIiwiV2wiLCJXcCIsIldkIiwiVyIsInd6Iiwid3MiLCJ3bCIsIndwIiwid2QiLCJ3IiwidXRjVG9ab25lZFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fIiwiZGlydHlEYXRlIiwidXRjRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIm9mZnNldE1pbGxpc2Vjb25kcyIsInR6VG9rZW5pemVEYXRlIiwiZHRmIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwicGFydHNPZmZzZXQiLCJoYWNreU9mZnNldCIsInR5cGVUb1BvcyIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJmb3JtYXR0ZWQiLCJmaWxsZWQiLCJwb3MiLCJkdGZDYWNoZSIsInRlc3REYXRlRm9ybWF0dGVkIiwiaG91cjEyIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwiaG91ckN5Y2xlIiwic3ViTWlsbGlzZWNvbmRzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiZGlydHlBbW91bnQiLCJhbW91bnQiLCJhZGRNaWxsaXNlY29uZHMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fIiwidGltZXN0YW1wIiwidG9EYXRlIiwiYXJndW1lbnQiLCJhcmdTdHIiLCJzdGFjayIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18iLCJERUZBVUxUX0FERElUSU9OQUxfRElHSVRTIiwiZGF0ZVRpbWVEZWxpbWV0ZXIiLCJwbGFpblRpbWUiLCJ0aW1lWm9uZURlbGltZXRlciIsIllZIiwiWVlZIiwiWVlZWSIsIllZWVlZIiwiTU0iLCJEREQiLCJNTUREIiwiV3d3IiwiV3d3RCIsIkhIIiwiSEhNTSIsIkhITU1TUyIsImRpcnR5T3B0aW9ucyIsImFkZGl0aW9uYWxEaWdpdHMiLCJSYW5nZUVycm9yIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlRGF0ZSIsInRpbWUiLCJwYXJzZVRpbWUiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsInBhdHRlcm5ZWVkiLCJwYXR0ZXJuWVlZWVkiLCJ5ZWFyU3RyaW5nIiwiY2VudHVyeVN0cmluZyIsIndlZWsiLCJzZXRVVENGdWxsWWVhciIsInZhbGlkYXRlRGF0ZSIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInZhbGlkYXRlV2Vla0RhdGUiLCJkYXlPZklTT1dlZWtZZWFyIiwicGFyc2VGbG9hdCIsInZhbGlkYXRlVGltZSIsImlzb1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5RGF5IiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiaXNMZWFwWWVhckluZGV4IiwiaXNMZWFwWWVhciIsImdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMiLCJiYXNlVGltZXpvbmVPZmZzZXQiLCJzZXRTZWNvbmRzIiwibWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSQxIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcGlfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfXyIsImdldFdlZWtTdGFydEJ5UmVnaW9uJDEiLCJyZWdpb25Db2RlIiwiZ2V0V2Vla1N0YXJ0QnlSZWdpb24iLCJyZWdpb25EYXlNYXAiLCJjb2RlIiwidG9VcHBlckNhc2UiLCJsYW5nUmVnaW9uTWFwIiwidG9Mb3dlckNhc2UiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJlbiIsInpoIiwiemhfaGFucyIsImhhbnMiLCJ3dXUiLCJoc24iLCJoYWsiLCJuYW4iLCJnYW4iLCJoaSIsInRlIiwibXIiLCJ0YSIsImd1Iiwia24iLCJvciIsInBhX2d1cnUiLCJiaG8iLCJhd2EiLCJhcyIsIm13ciIsIm1haSIsIm1hZyIsImJnYyIsImhuZSIsImRjYyIsImR6IiwidG4iLCJhbSIsIm9tIiwicXVjIiwianYiLCJzdSIsIm1hZCIsIm1zX2FyYWIiLCJnYSIsImhlIiwiamFtIiwiamEiLCJrbSIsImtvIiwibG8iLCJtaCIsIm15IiwibXQiLCJuZSIsImZpbCIsImNlYiIsImlsbyIsInVyIiwicGEiLCJwYV9hcmFiIiwiYXJhYiIsImxhaCIsInBzIiwic2RfYXJhYiIsInNrciIsImduIiwidGgiLCJ0dHMiLCJhZWIiLCJ6aF9oYW50IiwiaGFudCIsInNtIiwienUiLCJzbiIsImFycSIsImFyIiwiYXJ6IiwiZmEiLCJhel9hcmFiIiwiYXJ5IiwiYm4iLCJya3QiLCJkdiIsIkFHIiwiQVRHIiwiQVIiLCJBUkciLCJBUyIsIkFTTSIsIkFVIiwiQVVTIiwiQlIiLCJCUkEiLCJCUyIsIkJIUyIsIkJUIiwiQlROIiwiQlciLCJCV0EiLCJCWiIsIkJMWiIsIkNBIiwiQ0FOIiwiQ04iLCJDSE4iLCJDTyIsIkNPTCIsIkRNIiwiRE1BIiwiRE8iLCJET00iLCJFVCIsIkVUSCIsIkdUIiwiR1RNIiwiR1UiLCJHVU0iLCJISyIsIkhLRyIsIkhOIiwiSE5EIiwiSUQiLCJJRE4iLCJJRSIsIklSTCIsIklMIiwiSVNSIiwiSU4iLCJJTkQiLCJKTSIsIkpBTSIsIkpQIiwiSlBOIiwiS0UiLCJLRU4iLCJLSCIsIktITSIsIktSIiwiS09SIiwiTEEiLCJMQTAiLCJNSCIsIk1ITCIsIk1NUiIsIk1PIiwiTUFDIiwiTVQiLCJNTFQiLCJNWCIsIk1FWCIsIk1aIiwiTU9aIiwiTkkiLCJOSUMiLCJOUCIsIk5QTCIsIk5aIiwiTlpMIiwiUEEiLCJQQU4iLCJQRSIsIlBFUiIsIlBIIiwiUEhMIiwiUEsiLCJQQUsiLCJQUiIsIlBSSSIsIlBZIiwiUFJZIiwiU0EiLCJTQVUiLCJTRyIsIlNHUCIsIlNWIiwiU0xWIiwiVEgiLCJUSEEiLCJUTiIsIlRVTiIsIlRUIiwiVFRPIiwiVFciLCJUV04iLCJVTSIsIlVNSSIsIlVTIiwiVVNBIiwiVkUiLCJWRU4iLCJWSSIsIlZJUiIsIldTIiwiV1NNIiwiWUUiLCJZRU0iLCJaQSIsIlpBRiIsIlpXIiwiWldFIiwiQUUiLCJBUkUiLCJBRiIsIkFGRyIsIkJIIiwiQkhSIiwiREoiLCJESkkiLCJEWiIsIkRaQSIsIkVHIiwiRUdZIiwiSVEiLCJJUlEiLCJJUiIsIklSTiIsIkpPIiwiSk9SIiwiS1ciLCJLV1QiLCJMWSIsIkxCWSIsIk1BIiwiTUFSIiwiT00iLCJPTU4iLCJRQSIsIlFBVCIsIlNEIiwiU0ROIiwiU1kiLCJTWVIiLCJCRCIsIkJHRCIsIk1WIiwiTURWIiwiaXNOdW1iZXJSZWdleCIsImlzV2hpdGVzcGFjZVJlZ2V4IiwicHVuY3R1YXRpb25MaXN0IiwiaXNMb3dlckNhc2UiLCJpc1VwcGVyQ2FzZSIsInBhc3NPclRocm93RXJyb3IiLCJfY2hhciIsInN0ckxlbiIsIm1hc2tCeXRlIiwiX2J5dGUiLCJfYnl0ZTIiLCJfYnl0ZTMiLCJfYnl0ZTQiLCJfYnl0ZTUiLCJfYnl0ZTYiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18iLCJUeXBlcyIsIl9udW1iZXIiLCJfZGF0ZSIsIlRleHRJbnB1dCIsImVsZW1lbnRzIiwiZG9jIiwiY3NzQ2xhc3NFcnJvciIsImNzc0NsYXNzU3VjY2VzcyIsIm9uVXBkYXRlIiwib25JbnZhbGlkIiwiaW5wdXQiLCJwYXJlbnRDbGFzcyIsImlzV3JhcHBlZCIsImlucHV0SWQiLCJpbnB1dE5hbWUiLCJvcmlnaW5hbFBhdHRlcm4iLCJkZWZhdWx0UGF0dGVybiIsImdlbmVyYXRlUGF0dGVybkZyb21NYXNrIiwicGF0dGVybiIsIndyYXAiLCJ1bm1hc2tJbnB1dCIsIm1hc2tJZk5vdE1hc2tlZCIsInVubWFzayIsInRleHRJbnB1dCIsImV2ZW50VHlwZSIsImtleUNvZGUiLCJrZXlDb250ZW50IiwiaW5zZXJ0UG9zaXRpb24iLCJmaW5kQ2FyZXRQb3NpdGlvbiIsIm1hc2tFcnJvciIsInNlbGVjdGlvblN0YXJ0IiwidW5tYXNrZWRWYWx1ZSIsImlzVmFsaWQiLCJ2YWx1ZU1hc2tlZCIsInZhbHVlVW5tYXNrZWQiLCJlcnJvciIsInN0YXRlIiwiU1VQUE9SVEVEX01BU0tTIiwiSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQiLCJldmFsIiwiaXNNYXNrZWRWYWx1ZSIsImNhY2hlS2V5IiwibWFza0FzQXJyeSIsInJlZ2V4IiwibWFza0FzQXJyYXkiLCJtYXNrZWRWYWx1ZUFzQXJyYXkiLCJtYXNrZWRWYWx1ZSIsInVubWFza2VkIiwiZWwiLCJlbEhhc01hc2siLCJOdW1iZXJJbnB1dCIsImNvdW50RGVjaW1hbHMiLCJhY3R1YWxJbnB1dCIsImFjdHVhbElucHV0SWQiLCJhY3R1YWxJbnB1dE5hbWUiLCJhY3R1YWxJbnB1dFN0ZXAiLCJhY3R1YWxJbnB1dE1heCIsImFjdHVhbElucHV0TWluIiwiYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvciIsImFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvciIsImFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zIiwiYWN0dWFsSW5wdXRNYXNrIiwiYWN0dWFsSW5wdXRDbGFzc2VzIiwiYWN0dWFsSW5wdXRSZXF1aXJlZCIsInVubWFza2VkSW5wdXQiLCJkZWNpbWFscyIsInN0ZXAiLCJ3cmFwcGVyIiwicmVzdG9yZSIsImNoYXIiLCJieXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwiX19zcHJlYWRBcnJheXMiLCJpbCIsImEiLCJqIiwiamwiLCJIT09LUyIsImRlZmF1bHRzIiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYWxsb3dJbnB1dCIsImFsbG93SW52YWxpZFByZWxvYWQiLCJhbHRGb3JtYXQiLCJhbHRJbnB1dCIsImFsdElucHV0Q2xhc3MiLCJhbmltYXRlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXJpYURhdGVGb3JtYXQiLCJhdXRvRmlsbERlZmF1bHRUaW1lIiwiY2xpY2tPcGVucyIsImNsb3NlT25TZWxlY3QiLCJjb25qdW5jdGlvbiIsImRhdGVGb3JtYXQiLCJkZWZhdWx0SG91ciIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsImRpc2FibGUiLCJkaXNhYmxlTW9iaWxlIiwiZW5hYmxlIiwiZW5hYmxlU2Vjb25kcyIsImVuYWJsZVRpbWUiLCJlcnJvckhhbmRsZXIiLCJnZXRXZWVrIiwiZ2l2ZW5EYXRlIiwic2V0SG91cnMiLCJzZXREYXRlIiwid2VlazEiLCJob3VySW5jcmVtZW50IiwiaWdub3JlZEZvY3VzRWxlbWVudHMiLCJpbmxpbmUiLCJtaW51dGVJbmNyZW1lbnQiLCJtb250aFNlbGVjdG9yVHlwZSIsIm5leHRBcnJvdyIsIm5vQ2FsZW5kYXIiLCJub3ciLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkRheUNyZWF0ZSIsIm9uRGVzdHJveSIsIm9uS2V5RG93biIsIm9uTW9udGhDaGFuZ2UiLCJvbk9wZW4iLCJvblBhcnNlQ29uZmlnIiwib25SZWFkeSIsIm9uVmFsdWVVcGRhdGUiLCJvblllYXJDaGFuZ2UiLCJvblByZUNhbGVuZGFyUG9zaXRpb24iLCJwbHVnaW5zIiwicG9zaXRpb25FbGVtZW50IiwicHJldkFycm93Iiwic2hvcnRoYW5kQ3VycmVudE1vbnRoIiwic2hvd01vbnRocyIsInN0YXRpYyIsInRpbWVfMjRociIsIndlZWtOdW1iZXJzIiwiZW5nbGlzaCIsIndlZWtkYXlzIiwic2hvcnRoYW5kIiwibG9uZ2hhbmQiLCJtb250aHMiLCJkYXlzSW5Nb250aCIsImZpcnN0RGF5T2ZXZWVrIiwib3JkaW5hbCIsIm50aCIsInJhbmdlU2VwYXJhdG9yIiwid2Vla0FiYnJldmlhdGlvbiIsInNjcm9sbFRpdGxlIiwidG9nZ2xlVGl0bGUiLCJhbVBNIiwieWVhckFyaWFMYWJlbCIsIm1vbnRoQXJpYUxhYmVsIiwiaG91ckFyaWFMYWJlbCIsIm1pbnV0ZUFyaWFMYWJlbCIsImludCIsImJvb2wiLCJkZWJvdW5jZSIsImFycmF5aWZ5IiwidG9nZ2xlQ2xhc3MiLCJlbGVtIiwiY2xhc3NOYW1lIiwiY2xhc3NMaXN0IiwiYWRkIiwiY3JlYXRlRWxlbWVudCIsImNvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImNsZWFyTm9kZSIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImZpbmRQYXJlbnQiLCJjb25kaXRpb24iLCJwYXJlbnROb2RlIiwiY3JlYXRlTnVtYmVySW5wdXQiLCJpbnB1dENsYXNzTmFtZSIsIm9wdHMiLCJudW1JbnB1dCIsImFycm93VXAiLCJhcnJvd0Rvd24iLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImdldEV2ZW50VGFyZ2V0IiwiZXZlbnQiLCJjb21wb3NlZFBhdGgiLCJwYXRoIiwiZG9Ob3RoaW5nIiwibW9udGhUb1N0ciIsIm1vbnRoTnVtYmVyIiwicmV2Rm9ybWF0IiwiRiIsImRhdGVPYmoiLCJtb250aE5hbWUiLCJzZXRNb250aCIsIkciLCJLIiwic2hvcnRNb250aCIsIlMiLCJVIiwidW5peFNlY29uZHMiLCJ3ZWVrTnVtIiwic2V0RnVsbFllYXIiLCJaIiwiSVNPRGF0ZSIsInNldE1pbnV0ZXMiLCJ1IiwidW5peE1pbGxTZWNvbmRzIiwieSIsInRva2VuUmVnZXgiLCJmb3JtYXRzIiwidG9JU09TdHJpbmciLCJjcmVhdGVEYXRlRm9ybWF0dGVyIiwiX2EiLCJfYiIsImNvbmZpZyIsIl9jIiwibDEwbiIsIl9kIiwiaXNNb2JpbGUiLCJmcm10Iiwib3ZlcnJpZGVMb2NhbGUiLCJmb3JtYXREYXRlIiwiYXJyIiwiY3JlYXRlRGF0ZVBhcnNlciIsImdpdmVuRm9ybWF0IiwidGltZWxlc3MiLCJjdXN0b21Mb2NhbGUiLCJwYXJzZWREYXRlIiwiZGF0ZU9yaWciLCJ0b0ZpeGVkIiwiZGF0ZXN0ciIsIm1hdGNoZWQiLCJvcHMiLCJtYXRjaEluZGV4IiwicmVnZXhTdHIiLCJ0b2tlbl8xIiwiaXNCYWNrU2xhc2giLCJlc2NhcGVkIiwiZm4iLCJjb21wYXJlRGF0ZXMiLCJkYXRlMSIsImRhdGUyIiwiaXNCZXR3ZWVuIiwidHMiLCJ0czEiLCJ0czIiLCJkdXJhdGlvbiIsIkRBWSIsIl9sb29wXzEiLCJhcmdzXzEiLCJERUJPVU5DRURfQ0hBTkdFX01TIiwiRmxhdHBpY2tySW5zdGFuY2UiLCJlbGVtZW50IiwiaW5zdGFuY2VDb25maWciLCJmbGF0cGlja3IiLCJkZWZhdWx0Q29uZmlnIiwiX2hhbmRsZXJzIiwicGx1Z2luRWxlbWVudHMiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJiaW5kIiwiX3NldEhvdXJzRnJvbURhdGUiLCJzZXRIb3Vyc0Zyb21EYXRlIiwiX3Bvc2l0aW9uQ2FsZW5kYXIiLCJwb3NpdGlvbkNhbGVuZGFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwiY2xlYXIiLCJjbG9zZSIsIl9jcmVhdGVFbGVtZW50IiwiZGVzdHJveSIsImlzRW5hYmxlZCIsImp1bXBUb0RhdGUiLCJvcGVuIiwicmVkcmF3IiwidG9nZ2xlIiwic2V0dXBIZWxwZXJGdW5jdGlvbnMiLCJ1dGlscyIsImdldERheXNJbk1vbnRoIiwieXIiLCJjdXJyZW50TW9udGgiLCJjdXJyZW50WWVhciIsImluaXQiLCJpc09wZW4iLCJwYXJzZUNvbmZpZyIsInNldHVwTG9jYWxlIiwic2V0dXBJbnB1dHMiLCJzZXR1cERhdGVzIiwiYnVpbGQiLCJiaW5kRXZlbnRzIiwic2VsZWN0ZWREYXRlcyIsImxhdGVzdFNlbGVjdGVkRGF0ZU9iaiIsIm1pbkRhdGUiLCJ1cGRhdGVWYWx1ZSIsInNldENhbGVuZGFyV2lkdGgiLCJpc1NhZmFyaSIsInRyaWdnZXJFdmVudCIsImJpbmRUb0luc3RhbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkaXNwbGF5IiwiZGF5c0NvbnRhaW5lciIsImRheXNXaWR0aCIsImRheXMiLCJvZmZzZXRXaWR0aCIsIndlZWtXcmFwcGVyIiwicmVtb3ZlUHJvcGVydHkiLCJ1cGRhdGVUaW1lIiwiZGVmYXVsdERhdGUiLCJnZXREZWZhdWx0SG91cnMiLCJ0aW1lV3JhcHBlciIsInByZXZWYWx1ZSIsIl9pbnB1dCIsInNldEhvdXJzRnJvbUlucHV0cyIsIl9kZWJvdW5jZWRDaGFuZ2UiLCJhbXBtMm1pbGl0YXJ5IiwibWlsaXRhcnkyYW1wbSIsImhvdXJFbGVtZW50IiwibWludXRlRWxlbWVudCIsInNlY29uZEVsZW1lbnQiLCJsaW1pdE1pbkhvdXJzIiwibWluVGltZSIsIm1pbkRhdGVIYXNUaW1lIiwibGltaXRNYXhIb3VycyIsIm1heFRpbWUiLCJtYXhEYXRlIiwibWF4RGF0ZUhhc1RpbWUiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJvblllYXJJbnB1dCIsImV2ZW50VGFyZ2V0IiwiZGVsdGEiLCJoYW5kbGVyIiwiZXYiLCJhZGRFdmVudExpc3RlbmVyIiwidHJpZ2dlckNoYW5nZSIsImV2dCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9uUmVzaXplIiwib25Nb3VzZU92ZXIiLCJib2R5Iiwib250b3VjaHN0YXJ0IiwiZG9jdW1lbnRDbGljayIsImNhcHR1cmUiLCJtb250aE5hdiIsIm9uTW9udGhOYXZDbGljayIsInNlbGVjdERhdGUiLCJ0aW1lQ29udGFpbmVyIiwic2VsVGV4dCIsInNlbGVjdCIsInRpbWVJbmNyZW1lbnQiLCJvbkJsdXIiLCJqdW1wRGF0ZSIsImp1bXBUbyIsIm9sZFllYXIiLCJvbGRNb250aCIsImJ1aWxkTW9udGhTd2l0Y2giLCJpbmNyZW1lbnROdW1JbnB1dCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwidGFiSW5kZXgiLCJidWlsZE1vbnRoTmF2IiwiaW5uZXJDb250YWluZXIiLCJidWlsZFdlZWtzIiwickNvbnRhaW5lciIsImJ1aWxkV2Vla2RheXMiLCJidWlsZERheXMiLCJidWlsZFRpbWUiLCJjdXN0b21BcHBlbmQiLCJhcHBlbmRUbyIsIm5vZGVUeXBlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJjcmVhdGVEYXkiLCJkYXlOdW1iZXIiLCJkYXRlSXNFbmFibGVkIiwiZGF5RWxlbWVudCIsIiRpIiwidG9kYXlEYXRlRWxlbSIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsImdldEZpcnN0QXZhaWxhYmxlRGF5Iiwic3RhcnRNb250aCIsImVuZE1vbnRoIiwic3RhcnRJbmRleCIsImdldE5leHRBdmFpbGFibGVEYXkiLCJnaXZlbk1vbnRoIiwibG9vcERlbHRhIiwibnVtTW9udGhEYXlzIiwiZm9jdXNPbkRheSIsImRheUZvY3VzZWQiLCJpc0luVmlldyIsImFjdGl2ZUVsZW1lbnQiLCJzdGFydEVsZW0iLCJidWlsZE1vbnRoRGF5cyIsImZpcnN0T2ZNb250aCIsInByZXZNb250aERheXMiLCJpc011bHRpTW9udGgiLCJwcmV2TW9udGhEYXlDbGFzcyIsIm5leHRNb250aERheUNsYXNzIiwiZGF5SW5kZXgiLCJkYXlDb250YWluZXIiLCJmcmFnIiwic2hvdWxkQnVpbGRNb250aCIsIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyIiwiaW5uZXJIVE1MIiwiYnVpbGRNb250aCIsImNvbnRhaW5lciIsIm1vbnRoTmF2RnJhZ21lbnQiLCJtb250aEVsZW1lbnQiLCJzZWxlY3RlZE1vbnRoIiwieWVhcklucHV0IiwidGFiaW5kZXgiLCJ5ZWFyRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZGlzYWJsZWQiLCJidWlsZE1vbnRocyIsInByZXZNb250aE5hdiIsInllYXJFbGVtZW50cyIsIm1vbnRoRWxlbWVudHMiLCJuZXh0TW9udGhOYXYiLCJfX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9faGlkZU5leHRNb250aEFycm93IiwiY3VycmVudFllYXJFbGVtZW50IiwidXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCIsInNlcGFyYXRvciIsImhvdXJJbnB1dCIsIm1pbnV0ZUlucHV0Iiwic2Vjb25kSW5wdXQiLCJnZXRBdHRyaWJ1dGUiLCJ0aXRsZSIsIndlZWtkYXlDb250YWluZXIiLCJ1cGRhdGVXZWVrZGF5cyIsInNwbGljZSIsImlzT2Zmc2V0IiwiX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9oaWRlTmV4dE1vbnRoQXJyb3ciLCJ0cmlnZ2VyQ2hhbmdlRXZlbnQiLCJ0b0luaXRpYWwiLCJtb2JpbGVJbnB1dCIsIl9pbml0aWFsRGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsYXN0Q2hpbGQiLCJfdHlwZSIsInJlbW92ZUF0dHJpYnV0ZSIsImlzQ2FsZW5kYXJFbGVtIiwiZXZlbnRUYXJnZXRfMSIsImlzQ2FsZW5kYXJFbGVtZW50IiwiaXNJbnB1dCIsImxvc3RGb2N1cyIsInJlbGF0ZWRUYXJnZXQiLCJpc0lnbm9yZWQiLCJzb21lIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImZyb20iLCJ0byIsImFsbG93S2V5ZG93biIsImFsbG93SW5saW5lS2V5ZG93biIsImJsdXIiLCJpc1RpbWVPYmoiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzQW5kQ2xvc2UiLCJkZWx0YV8xIiwiY3RybEtleSIsInN0b3BQcm9wYWdhdGlvbiIsImVsZW1zIiwic2hpZnRLZXkiLCJob3ZlckRhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImluaXRpYWxEYXRlIiwicmFuZ2VTdGFydERhdGUiLCJyYW5nZUVuZERhdGUiLCJjb250YWluc0Rpc2FibGVkIiwibWluUmFuZ2UiLCJtYXhSYW5nZSIsImRheUVsZW0iLCJvdXRPZlJhbmdlIiwiX3Bvc2l0aW9uRWxlbWVudCIsImNsaWNrIiwid2FzT3BlbiIsIm1pbk1heERhdGVTZXR0ZXIiLCJpbnZlcnNlRGF0ZU9iaiIsImJvb2xPcHRzIiwidXNlckNvbmZpZyIsImRhdGFzZXQiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsImdldElucHV0RWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJsMTBucyIsImRlZmF1bHQiLCJjdXN0b21Qb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsImFjYyIsImNoaWxkIiwib2Zmc2V0SGVpZ2h0IiwiY2FsZW5kYXJXaWR0aCIsImNvbmZpZ1BvcyIsImNvbmZpZ1Bvc1ZlcnRpY2FsIiwiY29uZmlnUG9zSG9yaXpvbnRhbCIsImlucHV0Qm91bmRzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzaG93T25Ub3AiLCJ0b3AiLCJwYWdlWU9mZnNldCIsImxlZnQiLCJwYWdlWE9mZnNldCIsImlzQ2VudGVyIiwiaXNSaWdodCIsInJpZ2h0IiwicmlnaHRNb3N0IiwiY2VudGVyTW9zdCIsImdldERvY3VtZW50U3R5bGVTaGVldCIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJCZWZvcmUiLCJjZW50ZXJBZnRlciIsImNlbnRlckluZGV4IiwiY3NzUnVsZXMiLCJjZW50ZXJTdHlsZSIsImluc2VydFJ1bGUiLCJlZGl0YWJsZVNoZWV0Iiwic3R5bGVTaGVldHMiLCJzaGVldCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJoZWFkIiwibXNNYXhUb3VjaFBvaW50cyIsImlzU2VsZWN0YWJsZSIsInNlbGVjdGVkRGF0ZSIsInNob3VsZENoYW5nZU1vbnRoIiwic2VsZWN0ZWRJbmRleCIsImIiLCJzaW5nbGUiLCJDQUxMQkFDS1MiLCJvcHRpb24iLCJzZXRTZWxlY3RlZERhdGUiLCJpbnB1dERhdGUiLCJydWxlIiwicHJlbG9hZGVkRGF0ZSIsIm5vZGVOYW1lIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsImlucHV0VHlwZSIsIm1vYmlsZUZvcm1hdFN0ciIsImRlZmF1bHRWYWx1ZSIsImhvb2tzIiwiaW5pdEV2ZW50IiwiZ2V0RGF0ZVN0ciIsImRPYmoiLCJpc1ByZXZNb250aCIsImlzTmV4dE1vbnRoIiwiaXNLZXlEb3duIiwiY3VyVmFsdWUiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJpc01pbnV0ZUVsZW0iLCJfZmxhdHBpY2tyIiwibm9kZUxpc3QiLCJIVE1MRWxlbWVudCIsImluc3RhbmNlcyIsIkhUTUxDb2xsZWN0aW9uIiwiTm9kZUxpc3QiLCJzZWxlY3RvciIsIk5vZGUiLCJsb2NhbGl6ZSIsInNldERlZmF1bHRzIiwialF1ZXJ5IiwiZnBfaW5jciIsIkNvbXBvbmVudCIsImdldFByb3RvdHlwZU9mIiwibWFwU3RvcmUiLCJzdXBlclN0b3JlIiwiZGVzY3MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwia2xhc3MiLCJnZXRPd25LZXlzIiwiZGVzYyIsImF1dG9iaW5kTWV0aG9kIiwiZ2V0Qm91bmRTdXBlciIsImJvdW5kRm4iLCJjcmVhdGVEZWZhdWx0U2V0dGVyIiwiYXV0b2JpbmRDbGFzcyIsImhhbmRsZSIsIkdFTkVSSUNfRlVOQ1RJT05fRVJST1IiLCJGVU5DVElPTl9SRUdFWFAiLCJTeW50YXhFcnJvclJlcG9ydGVyIiwidG9waWMiLCJwYXJlbnRLbGFzcyIsImNoaWxkS2xhc3MiLCJwYXJlbnREZXNjcmlwdG9yIiwiY2hpbGREZXNjcmlwdG9yIiwibXNnIiwicmVwb3J0ZXIiLCJwYXJlbnRWYWx1ZVR5cGUiLCJjaGlsZFZhbHVlVHlwZSIsImlzRnVuY3Rpb25PdmVyVW5kZWZpbmVkIiwiY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMiLCJwYXJlbnRIYXNHZXR0ZXIiLCJjaGlsZEhhc0dldHRlciIsInBhcmVudEhhc1NldHRlciIsImNoaWxkSGFzU2V0dGVyIiwicGFyZW50VHlwZSIsImdldERlc2NyaXB0b3JUeXBlIiwiY2hpbGRUeXBlIiwiY2hlY2tEYXRhRGVzY3JpcHRvcnMiLCJjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMiLCJzdWdnZXN0aW9uVHJhbnNmb3JtcyIsInN1Z2dlc3Rpb24iLCJzdXBlcktsYXNzIiwic3VwZXJEZXNjcmlwdG9yIiwic3VnZ2VzdGVkS2V5IiwiZmluZFBvc3NpYmxlQWx0ZXJuYXRpdmVzIiwiY2hlY2tEZXNjcmlwdG9ycyIsImRlY29yYXRlIiwibGlzdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJpdGVtIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJjc3NNYXBwaW5nIiwidXNlU291cmNlTWFwIiwic291cmNlTWFwcGluZyIsInRvQ29tbWVudCIsInNvdXJjZVVSTHMiLCJiYXNlNjQiLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpc0Rlc2NyaXB0b3IiLCJlbnRyeUFyZ3MiLCJoYW5kbGVEZXNjcmlwdG9yIiwiTWV0YSIsImxhenlJbml0aWFsaXplIiwiTUVUQV9LRVkiLCJzZWVuRGVwcmVjYXRpb25zIiwiQm9vbGVhblN3aXRjaCIsIlRlbXBsYXRlUmVuZGVyZXIiLCJnZXROYXRpdmUiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiaXNBcmd1bWVudHMiLCJpc0J1ZmZlciIsImlzVHlwZWRBcnJheSIsImJhc2VUaW1lcyIsIm9yaWdpbmFsTW9kdWxlIiwiaXNQbGFpbk9iamVjdCIsImJhc2VUb1N0cmluZyIsIkV2ZW50c01peGluIiwiRGF0ZVRpbWVJbnB1dCIsIkJvb2xlYW5FZGl0b3IiLCJrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlIiwic3dpdGNoZXIiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwidmFsdWVBc1N0cmluZyIsIl9ndWkiLCJmYWxsYmFjayIsIkFHcmlkQ29tcG9uZW50c01ldGFDb25maWciLCJ3aW4iLCJpbml0aWFsVmFsdWUiLCJsaXN0ZW5lciIsImJvb2xTd2l0Y2giLCJsYWJlbCIsIm92ZXJyaWRlIiwiYXV0b2JpbmQiLCJpbml0aWFsaXplciIsInVwZGF0ZSIsImxvY2F0aW9uIiwiYmFzZVVybCIsImN1cnJlbnREaXIiLCJmaXhlZENzcyIsInVucXVvdGVkT3JpZ1VybCIsIm5ld1VybCIsIkJvb2xlYW5SZW5kZXJlciIsImlzSW5pdCIsImJvb2xlYW5UcnVlUmVuZGVyVmFsdWUiLCJib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSIsImJvb2xlYW5UcnVlVmFsdWUiLCJib29sZWFuRmFsc2VWYWx1ZSIsIkJvb2xlYW5GaWx0ZXIiLCJ0b1RpdGxlQ2FzZSIsIndvcmQiLCJzdHJpcEhUTUwiLCJ0bXAiLCJfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uIiwidHJhbnNsYXRlIiwiaXNDbGVhckZpbHRlciIsImlzUmVzZXRCdXR0b24iLCJpc0FwcGx5QnV0dG9uIiwicmVzZXQiLCJhcHBseUZpbHRlclBhbmVsIiwiZmlsdGVyVHlwZSIsImZpbHRlclRleHRBc1N0cmluZyIsIk51bWJlckVkaXRvciIsInN0YXJ0VmFsdWUiLCJCYXNpcyIsIl9vbk51bWJlcklucHV0SW52YWxpZCIsImNhc3RlZCIsInJldFZhbHVlIiwiX21hc2tlZCIsImlzTmF2aWdhdGlvbktleSIsIlRleHRFZGl0b3IiLCJfb25UZXh0SW5wdXRJbnZhbGlkIiwiYXNzaWduSW5XaXRoIiwiYmFzZVZhbHVlcyIsImF0dGVtcHQiLCJjcmVhdGVBc3NpZ25lciIsImNvcHlPYmplY3QiLCJrZXlzSW4iLCJpc05ldyIsImN1c3RvbWl6ZXIiLCJhc3NpZ25WYWx1ZSIsIm9ialZhbHVlIiwiYmFzZUlzTmF0aXZlIiwicmVSZWdFeHBDaGFyIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwicmVJc05hdGl2ZSIsImlzTWFza2VkIiwidG9Tb3VyY2UiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwibWFza1NyY0tleSIsInVpZCIsImNvcmVKc0RhdGEiLCJzb3VyY2VzIiwiYXNzaWduZXIiLCJuYXRpdmVNYXgiLCJvdGhlckFyZ3MiLCJzaG9ydE91dCIsImJhc2VTZXRUb1N0cmluZyIsImNvbnN0YW50IiwiSE9UX0NPVU5UIiwiSE9UX1NQQU4iLCJuYXRpdmVOb3ciLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsImJhc2VLZXlzSW4iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImJhc2VJc0FyZ3VtZW50cyIsImFyZ3NUYWciLCJmcmVlRXhwb3J0cyIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiQnVmZmVyIiwibmF0aXZlSXNCdWZmZXIiLCJzdHViRmFsc2UiLCJub2RlSXNUeXBlZEFycmF5Iiwibm9kZVV0aWwiLCJiYXNlVW5hcnkiLCJiYXNlSXNUeXBlZEFycmF5IiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsIm9iamVjdFRhZyIsInJlZ2V4cFRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsIndlYWtNYXBUYWciLCJhcnJheUJ1ZmZlclRhZyIsImRhdGFWaWV3VGFnIiwiZmxvYXQzMlRhZyIsImZsb2F0NjRUYWciLCJpbnQ4VGFnIiwiaW50MTZUYWciLCJpbnQzMlRhZyIsInVpbnQ4VGFnIiwidWludDhDbGFtcGVkVGFnIiwidWludDE2VGFnIiwidWludDMyVGFnIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwibmF0aXZlS2V5c0luIiwiaXNQcm90byIsIm9iamVjdEN0b3JTdHJpbmciLCJnZXRQcm90b3R5cGUiLCJzdHJpbmdFc2NhcGVzIiwiYmFzZUtleXMiLCJuYXRpdmVLZXlzIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlSHRtbENoYXIiLCJodG1sRXNjYXBlcyIsImJhc2VQcm9wZXJ0eU9mIiwiSU5GSU5JVFkiLCJzeW1ib2xQcm90byIsInN5bWJvbFRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUYWciLCJJbWFnZVJlbmRlcmVyIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiaW1hZ2VMaXN0IiwiRGF0ZVRpbWVGaWx0ZXIiLCJUT0tFTlMiLCJUT0tFTl9FUVVBTCIsIlRPS0VOX05PVF9FUVVBTCIsIlRPS0VOX0xFU1MiLCJUT0tFTl9HUkVBVEVSIiwiVE9LRU5fUkFOR0UiLCJUT0tFTl9BTkQiLCJUT0tFTl9PUiIsIkNvbmRpdGlvblBhbmVsIiwid2l0aEV2ZW50c01peGluIiwiX2ZpbHRlclRpbWVJbnB1dCIsIl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQiLCJfZmlsdGVyT3B0aW9ucyIsIl9kZWZhdWx0T3B0aW9uIiwib3B0aW9uc1RyYW5zbGF0aW9ucyIsImd1aSIsImZpbHRlck9wdGlvbnMiLCJzZWxlY3RFbCIsImZpbHRlcklucHV0IiwiZmlsdGVyVG9JbnB1dCIsImZpbHRlckRhdGVUbyIsIk9OX0NPTkRJVElPTl9DSEFOR0VEIiwicmVhZG9ubHkiLCJmaWx0ZXJUbyIsIkpvaW5Db25kaXRpb25QYW5lbCIsIl9maXJzdENvbmRpdGlvblBhbmVsIiwiX3NlY29uZENvbmRpdGlvblBhbmVsIiwiX29wZXJhdG9yUGFuZWwiLCJfcGFyYW1zIiwiaWRPbmUiLCJpZFR3byIsInN1cHByZXNzQW5kT3JDb25kaXRpb24iLCJzZWNvbmRDb25kaXRpb25HdWkiLCJvcGVyYXRvclBhbmVsR3VpIiwiT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCIsImNvbmRpdGlvbjEiLCJjb25kaXRpb24yIiwib3BlcmF0b3IiLCJfSm9pbkNvbmRpdGlvblBhbmVsIiwiX3N0YXRlIiwiX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyIsImluUmFuZ2VJbmNsdXNpdmUiLCJ2YWx1ZUdldHRlciIsImRvZXNQYXNzRmlyc3RDb25kaXRpb24iLCJkb2VzUGFzc1NlY29uZENvbmRpdGlvbiIsImNsb25lIiwiZGF0ZVRpbWVNYXNrIiwiQkJqIiwiZmlyc3RDb25kaXRpb25Bc1N0cmluZyIsInNlY29uZENvbmRpdGlvbkFzU3RyaW5nIiwib3BlcmF0b3JBc1N0cmluZyIsInBhc3NlZCIsImlzQXBwbHlCdXR0b25BY3RpdmUiLCJyZXF1aXJlZEFyZ3MiLCJoYXNOZWdhdGl2ZVVUQ09mZnNldCIsImdldERhdGVNaWxsaXNlY29uZHNQYXJ0IiwiaGFuZGxlcnMiLCJpc0VkaXRvciIsInBpY2tlciIsImRhdGVUaW1lRm9ybWF0dGVyIiwid2Vla0RheXNTaG9ydCIsIndlZWtEYXlzTG9uZyIsIm1vbnRoc1Nob3J0IiwibW9udGhzTG9uZyIsIk9OX0RBVEVfQ0hBTkdFRCIsIkRhdGVUaW1lRWRpdG9yIiwiX3ZhbHVlIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRldGFpbCIsImluaXRDdXN0b21FdmVudCIsIkV2ZW50IiwiZ3dfaW5pdCIsImxpY2Vuc2UiLCJhZ0dyaWQiLCJMaWNlbnNlTWFuYWdlciIsInNldExpY2Vuc2VLZXkiLCJwYXJzZWRPcHRpb25zIiwiZ3dfcGFyc2VPcHRpb25zIiwiR3JpZCIsImRlZXBQYXJzZWRPcHRpb25zIiwiZ2V0RGF0YVBhdGhUZW1wbGF0ZSIsImdldERhdGFQYXRoIiwiZGVib3VuY2VEdXJhdGlvbiIsImZpbmFsT3B0aW9ucyIsImdldERvY3VtZW50Iiwib25DZWxsRWRpdGluZ1N0YXJ0ZWQiLCJvbkNlbGxFZGl0aW5nU3RvcHBlZCIsIm9uQ2VsbFZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0YXJ0ZWQiLCJvblJvd1ZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0b3BwZWQiLCJvbkdyaWRSZWFkeSIsImdldENvbnRleHRNZW51SXRlbXMiLCJnZXRDaGFydFRvb2xiYXJJdGVtcyIsInBvcHVwUGFyZW50Iiwib25Sb3dEb3VibGVDbGlja2VkIiwiZ3dfb25Sb3dEb3VibGVDbGlja2VkIiwib25Sb3dDbGlja2VkIiwiZ3dfb25Sb3dDbGlja2VkIiwib25DZWxsQ2xpY2tlZCIsImd3X29uQ2VsbENsaWNrRXZlbnQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwiZ3dfb25TZWxlY3Rpb25DaGFuZ2VkIiwib25SYW5nZVNlbGVjdGlvbkNoYW5nZWQiLCJnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCIsImNvbXBvbmVudHMiLCJBZ0dyaWRDb21wb25lbnRzIiwiSFRNTFRvb2x0aXAiLCJTdWdnZXN0aW9uRWRpdG9yIiwibmF2aWdhdGVUb05leHRDZWxsIiwidHJlZURhdGEiLCJnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQiLCJnd19nZXRDb250ZXh0TWVudSIsImdyaWRJZCIsImJ1aWxkQ29udGV4dE1lbnVBY3Rpb24iLCJwYXJzZU1lbnUiLCJtZW51IiwiY29udGV4dE1lbnUiLCJDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAiLCJjZWxsQ2xpY2tlZCIsImNlbGxEb3VibGVDbGlja2VkIiwiQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAiLCJjZWxsRWRpdGluZ1N0YXJ0ZWQiLCJjZWxsRWRpdGluZ1N0b3BwZWQiLCJjZWxsVmFsdWVDaGFuZ2VkIiwiUk9XX0VESVRJTkdfRVZFTlRTX01BUCIsInJvd0VkaXRpbmdTdGFydGVkIiwicm93RWRpdGluZ1N0b3BwZWQiLCJyb3dWYWx1ZUNoYW5nZWQiLCJnd19vbkNlbGxFZGl0aW5nRXZlbnQiLCJnd19vblJvd0VkaXRpbmdFdmVudCIsImd3X29uUmVhZHlFdmVudCIsIl9lIiwic3RhdGVEZWJvdW5jZSIsImNoYW5nZUV2ZW50Iiwia2V5ZG93bkV2ZW50Iiwia2MiLCJhayIsImFsdEtleSIsInNrIiwiY2siLCJnd19vblN0YXRlQ2hhbmdlZCIsImd3X29uS2V5ZG93biIsInNyY0luZGV4IiwiSUVfUFJPVE8iLCJwcm9jZXNzIiwiYmluZGluZyIsInNyY1ZhbHVlIiwiY2hyIiwiZUd1aSIsImlzSGVhZGVyIiwiaXNHcm91cGVkSGVhZGVyIiwidGhlbWUiLCJncmlkQ29yZSIsImVHcmlkRGl2IiwiZW5kc1dpdGgiLCJ0b29sdGlwRmllbGQiLCJwYXNzZWRQYXJhbXMiLCJ0ZXh0UGF0dGVybiIsInRleHRSZXF1aXJlZCIsInRleHRUaXRsZSIsImRlYm91bmNlV2FpdE1zIiwiX2ZvY3VzQWZ0ZXJBdHRhY2hlZCIsImNlbGxTdGFydGVkRWRpdCIsIl9oaWdobGlnaHRBbGxPbkZvY3VzIiwiX29uQ2hhbmdlIiwiX3JlbmRlckl0ZW1UZW1wbGF0ZSIsIml0ZW1UZW1wbGF0ZSIsIl9yZW5kZXJHcm91cFRlbXBsYXRlIiwiZ3JvdXBUZW1wbGF0ZSIsIl9hdXRvY29tcGxldGUiLCJwcmV2ZW50U3VibWl0IiwiZmV0Y2giLCJfb25BdXRvY29tcGxldGVGZXRjaCIsIm9uU2VsZWN0IiwiX29uQXV0b2NvbXBsZXRlU2VsZWN0IiwicmVuZGVyR3JvdXAiLCJfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cCIsInJlbmRlciIsIl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0iLCJjdXN0b21pemUiLCJfb25BdXRvY29tcGxldGVDdXN0b21pemUiLCJlbXB0eU1zZyIsImVtcHR5TWVzc2FnZSIsIm1pbkxlbmd0aCIsInNob3dPbkZvY3VzIiwiZm9jdXNJbiIsImFsbG93Q3VzdG9tVmFsdWVzIiwiX3ZhbGlkYXRlSW5wdXQiLCJfbGFzdEZldGNoZWREYXRhIiwiZmlsdGVyZWRJdGVtcyIsInRleHQiLCJzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCIsImVHcmlkQ2VsbCIsImN1cnJlbnRWYWx1ZSIsImdyb3VwTmFtZSIsImlucHV0UmVjdCIsIm1heEhlaWdodCIsImNoZWNrVmFsaWRpdHkiLCJnd19zZXRTdGF0ZSIsInNldENvbHVtblN0YXRlIiwic2V0Q29sdW1uR3JvdXBTdGF0ZSIsImdyb3VwcyIsInNldEZpbHRlck1vZGVsIiwiZmlsdGVycyIsImd3X2dldFN0YXRlIiwiZ2V0Q29sdW1uU3RhdGUiLCJnZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ2V0U29ydE1vZGVsIiwiZ2V0RmlsdGVyTW9kZWwiLCJnd19zZXRTaWRlQmFyVmlzaWJsZSIsInNldFNpZGVCYXJWaXNpYmxlIiwiZ3dfb3BlblRvb2xwYW5lbCIsInRvb2xwYW5lbElkIiwib3BlblRvb2xQYW5lbCIsImd3X2Nsb3NlVG9vbHBhbmVsIiwiY2xvc2VUb29sUGFuZWwiLCJnd19zZXRGdW5jdGlvbnNSZWFkT25seSIsInNldEZ1bmN0aW9uc1JlYWRPbmx5IiwiZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eSIsImdldFN0YXR1c1BhbmVsIiwic2V0VmlzaWJsZSIsImd3X3Nob3dMb2FkaW5nT3ZlcmxheSIsInNob3dMb2FkaW5nT3ZlcmxheSIsImd3X3Nob3dOb1Jvd3NPdmVybGF5Iiwic2hvd05vUm93c092ZXJsYXkiLCJnd19oaWRlT3ZlcmxheSIsImhpZGVPdmVybGF5IiwiZ3dfdXBkYXRlQ29udGV4dCIsImd3X3NldFN0eWxlIiwicnVsZXMiLCJqc3MiLCJmb3JEb2N1bWVudCIsImd3X3JlbW92ZVN0eWxlIiwiYWRqU2VsQXR0clJlZ2V4IiwiZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cyIsImdldFNlbGVjdG9yc0FuZFJ1bGVzIiwicmVzdWx0cyIsInNlbGVjdG9yVGV4dCIsInRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyIsImdldFJ1bGVzIiwic3dhcEFkalNlbEF0dHIiLCJzd2FwUHNldWRvRWxTeW50YXgiLCJhZGRSdWxlIiwicHNldWRvRWxlbWVudFJ1bGUiLCJhZGRQc2V1ZG9FbGVtZW50UnVsZSIsImFkZFJ1bGVUb1NoZWV0IiwiZG91YmxlQ29sb25TZWxlY3RvciIsInNpbmdsZUNvbG9uU2VsZWN0b3IiLCJ0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMiLCJzdWJtYXRjaDEiLCJzdWJtYXRjaDIiLCJzdWJtYXRjaDMiLCJyZW1vdmVSdWxlIiwiZGVsZXRlUnVsZSIsImV4dGVuZCIsImRlc3QiLCJzcmMiLCJhZ2dyZWdhdGVTdHlsZXMiLCJhZ2dyZWdhdGUiLCJkZWNsYXJlZFByb3BlcnRpZXMiLCJkZWNsYXJlZCIsInRvQ2FtZWxDYXNlIiwic3dhcCIsImxhc3RJbmRleCIsInNldFN0eWxlUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpbXBvcnRhbnRJbmRleCIsInNldFByb3BlcnR5Iiwic3VibWF0Y2giLCJ0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyIsIm9sZFByb3BzIiwibmV3UHJvcHMiLCJ1bkNhbWVsQ2FzZSIsIkpzcyIsInNoZWV0cyIsImRlZmF1bHRTaGVldCIsImdldEFsbCIsIl9jcmVhdGVTaGVldCIsIl9yZW1vdmVTaGVldCIsInN0eWxlTm9kZSIsInJlbCIsIm93bmVyTm9kZSIsImNzcyIsInByb3RvY29sIiwiaG9zdCIsInBhdGhuYW1lIiwiZnVsbE1hdGNoIiwib3JpZ1VybCIsIiQxIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFD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QUFDQTtBQUNBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxFQUFtRDs7QUFFeEU7O0FBRUEsR0FBRyxLQUFVLEVBQUUsRTs7Ozs7O0FDckJmLG9EQUFvRCxzQkFBc0IsbUZBQW1GLHVCQUF1QixpREFBaUQsbUJBQW1CLGtCQUFrQixHQUFHLGlLQUFpSyx1REFBdUQsR0FBRyxxSEFBcUgsMERBQTBELEdBQUcsbUJBQW1CLHVEQUF1RCxrQkFBa0IsbUNBQW1DLG1DQUFtQyxtRkFBbUYsa0JBQWtCLHVCQUF1Qiw4QkFBOEIsK0JBQStCLG1CQUFtQix3REFBd0Qsd0RBQXdELEdBQUcsd0JBQXdCLDBEQUEwRCxrRUFBa0UsR0FBRyxxQ0FBcUMscUJBQXFCLHFCQUFxQixzQkFBc0IsR0FBRywwQ0FBMEMsb0RBQW9ELEdBQUcsb0NBQW9DLGtCQUFrQixvQkFBb0IsR0FBRywwQ0FBMEMseUVBQXlFLEdBQUcsNkNBQTZDLHNHQUFzRyxHQUFHLDBCQUEwQixxQkFBcUIsR0FBRywrQkFBK0IsK0NBQStDLCtDQUErQyxHQUFHLGlDQUFpQywrQ0FBK0MsK0NBQStDLEdBQUcsRyIsImZpbGUiOiJiYmotZ3JpZC13aWRnZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDApO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogR2V0IGRvY3VtZW50XG4gKlxuICogR2V0IHRoZSBkb2N1bWVudCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgQkJqIGVudlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRG9jdW1lbnQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldERvY3VtZW50KCkge1xuICByZXR1cm4gdHlwZW9mICRkb2MgIT09ICd1bmRlZmluZWQnID8gJGRvYyA6IGRvY3VtZW50XG59XG5cbi8qKlxuICogR2V0IHdpbmRvd1xuICpcbiAqIEdldCB0aGUgd2luZG93IGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBCQmogZW52XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBXaW5kb3cgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFdpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiAkd25kICE9PSAndW5kZWZpbmVkJyA/ICR3bmQgOiB3aW5kb3dcbn1cblxuLyoqXG4gKiBFc2NhcGUgVmFsdWVcbiAqXG4gKiBDaGFuZ2UgbnVsbCBhbmQgdW5kZWZpbmVkIHRvIGVtcHR5IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVzY2FwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2VzY2FwZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJydcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSB1dWlkXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9jcmVhdGUtZ3VpZC11dWlkLWluLWphdmFzY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3V1aWQoKSB7XG4gIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcbiAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDhcbiAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgR3JpZFxuICpcbiAqIFJldHJpZXZlIHRoZSBncmlkIGluc3RhbmNlIGZyb20gYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gVGhlIGdyaWQncyBpbnN0YW5jZSBvZnIgbnVsbFxuICogQHRocm93cyBUeXBlRXJyb3Igd2hlbiB0aGUgZ3JpZCBpbnN0YW5jZSBpcyBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldEdyaWQoaWQpIHtcbiAgd2luZG93LkJCakdyaWRFeFdpZGdldCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgfHwge31cbiAgY29uc3QgZ3JpZCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdIHx8IG51bGxcblxuICBpZiAoIWdyaWQpIHtcbiAgICBjb25zdCByZWdpc3RlcmVkR3JpZHMgPSBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0KSlcbiAgICAvL2dldEZ1bmNBcmdzKGZ1bmMpLmZvckVhY2goKGtleSwgaSkgPT4gYXJnc09ialtrZXldID0gYXJnc1tpXSk7XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFxcblxcbltHcmlkIE5vdCBGb3VuZF0gVGhlIG1ldGhvZCBhc2tlZCBmb3Igbm9uLWV4aXN0ZW50IGdyaWQgaW5zdGFuY2UuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5SZXF1aXJlZCBHcmlkIElkIDogJHtpZH0gICBcblJlZ2lzdGVyZWQgR3JpZHMgOiAke3JlZ2lzdGVyZWRHcmlkc31cbmBcbiAgICApXG4gIH1cblxuICByZXR1cm4gZ3JpZFxufVxuXG4vKipcbiAqIEFkZCBHcmlkXG4gKlxuICogU3RvcmUgYSBuZXcgZ3JpZCBpbnN0YW5jZSBieSBpbiB0aGUgYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBUaGUgZ3JpZCdzIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IFN0b3JlZCBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRHcmlkKGlkLCBvcHRpb25zKSB7XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgPSB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0IHx8IHt9XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdID0gb3B0aW9uc1xuXG4gIHJldHVybiBnd19nZXRHcmlkKGlkKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19kZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXRcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb250ZXh0ID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHNcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZW5kIGFuIGV2ZW50IHRvIEJCaiBzaWRlXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY29udGV4dCB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCB0aGUgZXZlbnQgcGF5bG9hZFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50SWQgdGhlIGV2ZW50J3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NlbmRFdmVudChjb250ZXh0LCBwYXlsb2FkID0ge30sIGV2ZW50SWQgPSBbXSkge1xuICBjb25zdCByZWdpc3RlcmVkSW50ZXJlc3RzID0gY29udGV4dC5pbnRlcmVzdHMgfHwgW11cblxuICBpZiAocmVnaXN0ZXJlZEludGVyZXN0cy5pbmNsdWRlcyhldmVudElkKSkge1xuICAgIGNvbnN0IGRpdiA9IGd3X2dldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoYCR7Y29udGV4dC5pZH1gKVxuICAgIHdpbmRvdy5iYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQoZGl2LCBwYXlsb2FkKVxuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5kZXhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXJlbnRLZXlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGlsZEluZGV4XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBhIG5vZGUgYXMgQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5vZGUgYWcgZ3JpZCBub2RlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAgYWcgZ3JpZCBjb250ZXh0XG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd3xCb29sZWFufSBvYmplY3QgZm9ybWF0dGVkIGFzIEJCakdyaWRFeFdpZGdldFJvdy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgaWYgdGhlIG5vZGUgaXMgZm9yIGdyb3VwIG5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZShub2RlLCBjb250ZXh0KSB7XG4gIGlmICh0cnVlID09PSBub2RlLmdyb3VwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy8gd2UgZG8gbm90IG1hbmFnZSBncm91cHNcblxuICBjb25zdCBnZXRSb3dOb2RlSWQgPSBub2RlLnJvd1Bpbm5lZCA/ICdfX1JPV19JTkRFWCcgOiBjb250ZXh0LmdldFJvd05vZGVJZFxuXG4gIHJldHVybiB7XG4gICAgaTpcbiAgICAgIGNvbnRleHQuaGFzT3duUHJvcGVydHkoJ2dldFJvd05vZGVJZCcpICYmIG5vZGUuZGF0YVtnZXRSb3dOb2RlSWRdXG4gICAgICAgID8gbm9kZS5kYXRhW2dldFJvd05vZGVJZF1cbiAgICAgICAgOiBub2RlLmlkLCAvLyBpZFxuICAgIHg6IG5vZGUucm93SW5kZXgsIC8vIGluZGV4XG4gICAgcDpcbiAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICA6ICcnLCAvLyBwYXJlbnQga2V5XG4gICAgYzogbm9kZS5yb3dQaW5uZWQgPyAtMSA6IG5vZGUuY2hpbGRJbmRleCwgLy9jaGlsZEluZGV4XG4gICAgczogQm9vbGVhbihub2RlLnNlbGVjdGVkKSwgLy8gc2VsZWN0ZWRcbiAgICAvLyBjbGllbnQgcm93XG4gICAgY3I6XG4gICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KCdpbmNsdWRlQ2xpZW50Um93RGF0YScpICYmXG4gICAgICBjb250ZXh0WydpbmNsdWRlQ2xpZW50Um93RGF0YSddID09PSB0cnVlXG4gICAgICAgID8gbm9kZS5kYXRhXG4gICAgICAgIDogbnVsbCxcbiAgICBwcDogbm9kZS5yb3dQaW5uZWQsIC8vIHBpbiBwb3NpdGlvblxuICB9XG59XG5cbi8qKlxuICogUGFyc2Ugbm9kZSBmcm9tIGV2ZW50XG4gKlxuICogUGFyc2Ugbm9kZSBpbiB0aGUgcGFTc2VkIGV2ZW50IGFzIEJCakdyaWRFeFdpZGdldFJvd1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZUZyb21FdmVudChlKSB7XG4gIHJldHVybiBnd19wYXJzZU5vZGUoZS5ub2RlLCBlLmNvbnRleHQpXG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIFtSZWN1cnNpdmVseSBwYXJzZXMgYSBzdHJpbmdpZmllZCBKU09OXVxuICogQHBhcmFtICB7W3R5cGVdfSBqc29uU3RyaW5nIFtzdHJpbmdpZmllZCBqc29uIHRvIHBhcnNlXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICAgIFtub3JtYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XVxuICovXG5mdW5jdGlvbiBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmcpIHtcbiAgLy8gaWYgbm90IHN0cmluZ2lmaWVkIGpzb24gcmF0aGVyIGEgc2ltcGxlIHN0cmluZyB2YWx1ZSB0aGVuIEpTT04ucGFyc2Ugd2lsbCB0aHJvdyBlcnJvclxuICAvLyBvdGhlcndpc2UgY29udGludWUgcmVjdXJzaW9uXG4gIGlmICh0eXBlb2YganNvblN0cmluZyA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZShqc29uU3RyaW5nKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ganNvblN0cmluZztcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqc29uU3RyaW5nKSkge1xuICAgIC8vIGlmIGFuIGFycmF5IGlzIHJlY2VpdmVkLCBtYXAgb3ZlciB0aGUgYXJyYXkgYW5kIGRlZXBQYXJzZSBlYWNoIHZhbHVlXG4gICAgcmV0dXJuIGpzb25TdHJpbmcubWFwKHZhbCA9PiBkZWVwUGFyc2VKc29uKHZhbCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09PSAnb2JqZWN0JyAmJiBqc29uU3RyaW5nICE9PSBudWxsKSB7XG4gICAgLy8gaWYgYW4gb2JqZWN0IGlzIHJlY2VpdmVkIHRoZW4gZGVlcFBhcnNlIGVhY2ggZWxlbWVudCBpbiB0aGUgb2JqZWN0XG4gICAgLy8gdHlwZW9mIG51bGwgcmV0dXJucyAnb2JqZWN0JyB0b28sIHNvIHdlIGhhdmUgdG8gZWxpbWluYXRlIHRoYXRcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvblN0cmluZykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmdba2V5XSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIHdhcyByZWNlaXZlZFxuICAgIHJldHVybiBqc29uU3RyaW5nO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZWVwUGFyc2VKc29uIH07XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8vIHNlbGVjdGlvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfU0VMRUNUID0gNjlcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfQ0xJQ0sgPSA1MDExXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDSyA9IDUyXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9DTElDSyA9IDUwMDFcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyA9IDUwMDJcblxuLy8gZWRpdGluZyBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCA9IDUwMDNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCA9IDUwMDRcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQgPSA1MDA1XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCA9IDUwMDZcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVEID0gNTAwN1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VEID0gNTAxMlxuXG4vLyBzdGF0ZSBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9HUklEX1NUQVRFX0NIQU5HRSA9IDUwMDhcblxuLy8gcmFuZ2Ugc2VsZWN0aW9uXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQgPSA1MDA5XG5cbi8vIGtleWJvYXJkIGV2ZW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0tFWVBSRVNTID0gNTAxMFxuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG4iLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBwYXNzaW5nIGZ1bmN0aW9uIGluIG9wdGlvbnMsIHRoZW4gdXNlIGl0IGZvciByZXNvbHZlIFwiaGVhZFwiIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVXNlZnVsIGZvciBTaGFkb3cgUm9vdCBzdHlsZSBpLmVcbiAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgLy8gICBpbnNlcnRJbnRvOiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Zvb1wiKS5zaGFkb3dSb290IH1cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHZhciBzdHlsZVRhcmdldCA9IGdldFRhcmdldC5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBTdHJpbmdNYXNrIGZyb20gJy4vU3RyaW5nTWFzaydcblxuZXhwb3J0IGRlZmF1bHQgU3RyaW5nTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJy4vTnVtYmVyTWFzaydcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2V4ZWN1dGVFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbidcbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBFeHRlbmQgdGhlIGNvbHVtbiBkZWZpbml0aW9uc1xuICpcbiAqIEV4dGVuZCB0aGUgY29sdW1uIGRlZmluaXRpb25zIHdpdGggb3B0aW9ucyB3aGljaCBjYW4gbm90IGJlIGhhbmRsZWQgaW4gQkJqXG4gKiAoZXg6IGF0dGFjaGluZyBjYWxsYmFja3MpXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGVmaW5pdGlvbnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICBmb3IgKGxldCBpIGluIGRlZmluaXRpb25zKSB7XG4gICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnNbaV1cblxuICAgIGRlZi5jaGVja2JveFNlbGVjdGlvbiA9IGRlZi5jaGVja2JveFNlbGVjdGlvbiB8fCBnd19pc1Nob3dTZWxlY3Rpb25DaGVja2JveFxuICAgIGRlZi5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9XG4gICAgICBkZWYuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gfHwgZ3dfaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvblxuXG4gICAgY29uc3QgdG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbiA9IGRlZi50b29sdGlwVmFsdWVHZXR0ZXJcbiAgICBpZiAodG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbikge1xuICAgICAgZGVmLnRvb2x0aXBWYWx1ZUdldHRlciA9IHBhcmFtcyA9PlxuICAgICAgICBnd19leGVjdXRlRXhwcmVzc2lvbih0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgZGVmLnRvb2x0aXBDb21wb25lbnQgPSAnSFRNTFRvb2x0aXAnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSAmJiB0eXBlb2YgZGVmLmVkaXRhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZWRpdGFibGUgPSBkZWYuZWRpdGFibGVcbiAgICAgIGRlZi5lZGl0YWJsZSA9IHBhcmFtcyA9PiBnd19leGVjdXRlRXhwcmVzc2lvbihlZGl0YWJsZSwgcGFyYW1zKVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoZGVmLmhhc093blByb3BlcnR5KCdyb3dTcGFuJykgJiYgdHlwZW9mIGRlZi5yb3dTcGFuID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3Qgcm93U3BhbiA9IGRlZi5yb3dTcGFuXG4gICAgICBkZWYucm93U3BhbiA9IHBhcmFtcyA9PiBnd19leGVjdXRlRXhwcmVzc2lvbihyb3dTcGFuLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChkZWYuaGFzT3duUHJvcGVydHkoJ2NvbFNwYW4nKSAmJiB0eXBlb2YgZGVmLmNvbFNwYW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjb2xTcGFuID0gZGVmLmNvbFNwYW5cbiAgICAgIGRlZi5jb2xTcGFuID0gcGFyYW1zID0+IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGNvbFNwYW4sIHBhcmFtcylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSkge1xuICAgICAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVmLmNoaWxkcmVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgY29sdW1uIGRlZmluaXRpb25zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge0FycmF5fSBkZWZpbml0aW9ucyBhcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldENvbHVtbkRlZmluaXRpb25zKGlkLCBkZWZpbml0aW9ucykge1xuICBjb25zdCBncmlkID0gZ3dfZ2V0R3JpZChpZClcbiAgY29uc3QgZGVlcFBhcnNlZERlZmluaXRpb25zID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShkZWZpbml0aW9ucykpXG5cbiAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVlcFBhcnNlZERlZmluaXRpb25zKVxuXG4gIGdyaWQub3B0aW9ucy5hcGkuc2V0Q29sdW1uRGVmcyhkZWVwUGFyc2VkRGVmaW5pdGlvbnMpXG4gIGdyaWQub3B0aW9ucy5jb2x1bW5EZWZzID0gZGVlcFBhcnNlZERlZmluaXRpb25zXG59XG5cbi8qKlxuICogTWFrZSB0aGUgY3VycmVudGx5IHZpc2libGUgY29sdW1ucyBmaXQgdGhlIHNjcmVlblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gdGhlIHdpZHRoIHRvIHVzZSB0byBmaXQgYWxsIGNvbHVtbnMgaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NpemVDb2x1bW5zVG9GaXQoaWQsIHdpZHRoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IGNvbHVtbnNBUEkgPSBvcHRpb25zLmNvbHVtbkFwaVxuICBpZiAod2lkdGgpIHtcbiAgICBjb2x1bW5zQVBJLnNpemVDb2x1bW5zVG9GaXQoTnVtYmVyKHdpZHRoKSlcbiAgfSBlbHNlIHtcbiAgICBhcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpXG4gIH1cbn1cblxuLyoqXG4gKiBXb3JrIG91dCB0aGUgYmVzdCB3aWR0aCB0byBmaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjZWxscyBpbiB0aGUgY29sdW1uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtza2lwSGVhZGVyPWZhbHNlXSB3aGVuIHRydWUgaW5kaWNhdGUgdGhhdCB0aGUgaGVhZGVyIGNvbnRlbnQgKGhlYWRlck5hbWUpIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gW2NvbHVtbnM9bnVsbF0gYW4gYXJyYXkgb2YgY29sdW1ucyBpZHMgdG8gYXV0byBzaXplIG9yIG51bGwgdG8gYXV0byBzaXplIGFsbCBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hdXRvU2l6ZUNvbHVtbnMoaWQsIHNraXBIZWFkZXIgPSBmYWxzZSwgY29sdW1ucyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgY29sdW1uc0FQSSA9IG9wdGlvbnMuY29sdW1uQXBpXG5cbiAgaWYgKCEoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCkpIHtcbiAgICBjb25zdCBhbGxDb2x1bW5JZHMgPSBbXVxuXG4gICAgY29sdW1uc0FQSS5nZXRBbGxDb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmNvbElkKVxuICAgIH0pXG5cbiAgICBjb2x1bW5zQVBJLmF1dG9TaXplQ29sdW1ucyhhbGxDb2x1bW5JZHMsIEJvb2xlYW4oc2tpcEhlYWRlcikpXG4gIH0gZWxzZSB7XG4gICAgY29sdW1uc0FQSS5hdXRvU2l6ZUNvbHVtbnMoY29sdW1ucywgQm9vbGVhbihza2lwSGVhZGVyKSlcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmVzIHRoZSBjb2x1bW4gaXMgdmlzaWJsZSwgc2Nyb2xsaW5nIHRoZSB0YWJsZSBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgIHRoZSBjb2x1bW4gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2Vuc3VyZUNvbHVtblZpc2libGUoaWQsIGNvbHVtbklkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmVuc3VyZUNvbHVtblZpc2libGUoY29sdW1uSWQpXG59XG5cbi8qKlxuICogU2V0IENvbHVtbiBXaWR0aFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gd2lkdGggVGhlIG5ldyBjb2x1bW4gd2lkdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldENvbHVtbldpZHRoKGlkLCBjb2x1bW5JZCwgd2lkdGgpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uV2lkdGgoY29sdW1uSWQsIE51bWJlcih3aWR0aCkpXG59XG5cbi8qKlxuICogUGluIENvbHVtblxuICpcbiAqIFBpbiBhIGNvbHVtbiB0byBhIHNwZWNpZmljIGRpcmVjdGlvblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwaW4gVGhlIHBpbiBkaXJlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BpbkNvbHVtbihpZCwgY29sdW1uSWQsIHBpbikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5QaW5uZWQoY29sdW1uSWQsIHBpbilcbn1cblxuLyoqXG4gKiBNb3ZlIENvbHVtblxuICpcbiAqIE1vdmUgY29sdW1uIHRvIGEgc3BlY2lmaWMgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHRvSW5kZXggVGhlIG5ldyBjb2x1bW4gaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X21vdmVDb2x1bW4oaWQsIGNvbHVtbklkLCB0b0luZGV4KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLm1vdmVDb2x1bW4oY29sdW1uSWQsIHRvSW5kZXgpXG59XG5cbi8qKlxuICogU2hvdyAvIEhpZGUgc2VsZWN0aW9uIGNoZWNrYm94IGJhc2VkIG9uIHRoZSBmaXJzdCBjb2x1bW5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbWFrZSBzdXJlIHRoYXQgdGhlIHNlbGVjdGlvbiBjaGVja2JveCBpcyBhbHdheXMgc2hvd24gb24gdGhlXG4gKiBmaXJzdCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gZmlyc3QgY29sdW1uICwgZmFsc2UgaWYgbm90IHRoZSBmaXJzdCBjb2x1bW4gb3IgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBncmlkJ3MgYENvbnRleHQuc2hvd1NlbGVjdGlvbkNoZWNrYm94YCBpcyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3gocGFyYW0pIHtcbiAgaWYgKCFwYXJhbS5jb250ZXh0LnNob3dTZWxlY3Rpb25DaGVja2JveCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IHBhcmFtLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpXG5cbiAgcmV0dXJuIGNvbHVtbnNbMF0uY29sRGVmLmZpZWxkID09PSBwYXJhbS5jb2xEZWYuZmllbGRcbn1cblxuLyoqXG4gKiBTaG93IC8gSGlkZSBoZWFkZXIgc2VsZWN0aW9uIGNoZWNrYm94IGJhc2VkIG9uIHRoZSBmaXJzdCBjb2x1bW5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbWFrZSBzdXJlIHRoYXQgdGhlIGhlYWRlciBzZWxlY3Rpb24gY2hlY2tib3ggaXMgYWx3YXlzIHNob3duIG9uIHRoZVxuICogZmlyc3QgY29sdW1uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIGZpcnN0IGNvbHVtbiAsIGZhbHNlIGlmIG5vdCB0aGUgZmlyc3QgY29sdW1uIG9yIGlmIHRoZVxuICogICAgICAgICAgICAgICAgICAgZ3JpZCdzIGBDb250ZXh0LnNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveGAgaXMgZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24ocGFyYW0pIHtcbiAgY29uc3QgY29udGV4dCA9IHBhcmFtLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuXG4gIGlmICghY29udGV4dC5zaG93SGVhZGVyU2VsZWN0aW9uQ2hlY2tib3gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvbHVtbnMgPSBwYXJhbS5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVxuXG4gIHJldHVybiBjb2x1bW5zWzBdLmNvbERlZi5maWVsZCA9PT0gcGFyYW0uY29sRGVmLmZpZWxkXG59XG5cbi8qKlxuICogRW5hYmxlIHJvdyBncm91cGluZyBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHNldCAgV2hlbiB0cnVlICwgYHNldFJvd0dyb3VwQ29sdW1uc2Agd2lsbCBiZSB1c2VkICwgYGFkZFJvd0dyb3VwQ29sdW1uc2Agb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRSb3dHcm91cENvbHVtbihpZCwgY29sdW1ucywgc2V0KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpW1xuICAgIHNldCA/ICdzZXRSb3dHcm91cENvbHVtbnMnIDogJ2FkZFJvd0dyb3VwQ29sdW1ucydcbiAgXShjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpKVxufVxuXG4vKipcbiAqIERpc2FibGUgcm93IGdyb3VwaW5nIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVJvd0dyb3VwQ29sdW1uKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVJvd0dyb3VwQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFBpdm90TW9kZShpZCkge1xuICByZXR1cm4gZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuaXNQaXZvdE1vZGUoKVxufVxuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2JhbGUgcGl2b3QgbW9kZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtCb29sZWFufSBtb2RlIHdoZW4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGl2b3RNb2RlKGlkLCBtb2RlKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldFBpdm90TW9kZSghIU51bWJlcihtb2RlKSlcbn1cblxuLyoqXG4gKiBFbmFibGUgcGl2b3QgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICogQHBhcmFtIHtCb29sZWFufSBzZXQgIFdoZW4gdHJ1ZSAsIGBhZGRQaXZvdENvbHVtbnNgIHdpbGwgYmUgdXNlZCAsIGBzZXRQaXZvdENvbHVtbnNgIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkUGl2b3RDb2x1bW5zKGlkLCBjb2x1bW5zLCBzZXQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGlbc2V0ID8gJ3NldFBpdm90Q29sdW1ucycgOiAnYWRkUGl2b3RDb2x1bW5zJ10oXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRGlzYWJsZSBwaXZvdCBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVQaXZvdENvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlUGl2b3RDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIEVuYWJsZSB2YWx1ZSBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRWYWx1ZUNvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuYWRkVmFsdWVDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIERpc2FibGUgdmFsdWUgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlVmFsdWVDb2x1bW5zKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVZhbHVlQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGNvbHVtbiBzb3J0aW5nIG1vZGVsXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gbW9kZWwgbW9kZWwgYXMganNvbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U29ydE1vZGVsKGlkLCBtb2RlbCkge1xuICBjb25zdCBhc0FycmF5ID0gSlNPTi5wYXJzZShtb2RlbClcbiAgY29uc3QgcGFyc2VkTW9kZWwgPSBbXVxuICBhc0FycmF5LmZvckVhY2goaSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaSkge1xuICAgICAgcGFyc2VkTW9kZWwucHVzaCh7XG4gICAgICAgIGNvbElkOiBrZXksXG4gICAgICAgIHNvcnQ6IGlba2V5XSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFNvcnRNb2RlbChwYXJzZWRNb2RlbClcbn1cblxuLyoqXG4gKiBSZWRyYXdzIHRoZSBoZWFkZXIuIFVzZWZ1bCBpZiBhIGNvbHVtbiBuYW1lIGNoYW5nZXMsXG4gKiBvciBzb21ldGhpbmcgZWxzZSB0aGF0IGNoYW5nZXMgaG93IHRoZSBjb2x1bW4gaGVhZGVyIGlzIGRpc3BsYXllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZWZyZXNoSGVhZGVyKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlZHJhd1Jvd3MoKVxufVxuXG4vKipcbiAqIFVwZGF0ZSBjb2x1bW4gdmlhYmlsaXR5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY29sdW1uIGlkc1xuICogQHBhcmFtIHtCb29sZWFufSB2aXNpYmxlIHRydWUgdG8gbWFrZSB0aGUgY29sdW1ucyB2aXNpYmxlICwgZmFsc2UgdG8gaGlkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uVmlzaWJsZShpZCwgY29sdW1ucywgdmlzaWJsZSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5zVmlzaWJsZShcbiAgICBjb2x1bW5zLnNwbGl0KCcsJyksXG4gICAgQm9vbGVhbih2aXNpYmxlKVxuICApXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogQnVpbGQgYSBqcyBmdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBleHByZXNzaW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBleHByZXNzaW9uIGNhY2hlIGhhcyBiZWVuIGluaXRpYWxpemVkXG4gIGlmICh0eXBlb2YgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID09ICd1bmRlZmluZWQnKSB7XG4gICAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID0gW11cbiAgfVxuXG4gIC8vIGNoZWNrIGNhY2hlIGZpcnN0XG4gIGlmIChnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl0pIHtcbiAgICByZXR1cm4gZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dXG4gIH1cblxuICAvLyBpZiBub3QgZm91bmQgaW4gY2FjaGUsIHJldHVybiB0aGUgZnVuY3Rpb25cbiAgbGV0IGZ1bmN0aW9uQm9keSA9IG51bGxcbiAgLy8gaWYgdGhlIGV4cHJlc3Npb24gaGFzIHRoZSAncmV0dXJuJyB3b3JkIGluIGl0LCB0aGVuIHVzZSBhcyBpcyxcbiAgLy8gaWYgbm90LCB0aGVuIHdyYXAgaXQgd2l0aCByZXR1cm4gYW5kICc7JyB0byBtYWtlIGEgZnVuY3Rpb25cbiAgaWYgKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkge1xuICAgIGZ1bmN0aW9uQm9keSA9IGV4cHJlc3Npb25cbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbkJvZHkgPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gIH1cblxuICBjb25zdCB0aGVGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihcbiAgICAneCwgY3R4LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHZhbHVlLCBub2RlLCBkYXRhLCBjb2xEZWYsIHJvd0luZGV4LCBhcGksIGNvbHVtbkFwaSwgZ2V0VmFsdWUsIGNvbHVtbiwgY29sdW1uR3JvdXAnLFxuICAgIGZ1bmN0aW9uQm9keVxuICApXG5cbiAgLy8gc3RvcmUgaW4gY2FjaGVcbiAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dID0gdGhlRnVuY3Rpb25cblxuICByZXR1cm4gdGhlRnVuY3Rpb25cbn1cblxuLyoqXG4gKiBCdWlsZCBhbmQgZXhlY3V0ZWQgYW4gZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIG1peGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXJhbXMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBqYXZhU2NyaXB0RnVuY3Rpb24gPSBnd19jb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKVxuICAgIC8vIHRoZSBwYXJhbXMgZG9uJ3QgaGF2ZSBhbGwgdGhlc2UgdmFsdWVzLCByYXRoZXIgd2UgYWRkIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gdmFsdWUgYSBwYXJhbXMgY2FuIGhhdmUsIHdoaWNoIG1ha2VzIHdoYXRldmVyIGlzIGluIHRoZSBwYXJhbXMgYXZhaWxhYmxlLlxuICAgIGNvbnN0IHJlc3VsdCA9IGphdmFTY3JpcHRGdW5jdGlvbihcbiAgICAgIHBhcmFtcy52YWx1ZSxcbiAgICAgIHBhcmFtcy5jb250ZXh0LFxuICAgICAgcGFyYW1zLm9sZFZhbHVlLFxuICAgICAgcGFyYW1zLm5ld1ZhbHVlLFxuICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgcGFyYW1zLm5vZGUsXG4gICAgICBwYXJhbXMuZGF0YSxcbiAgICAgIHBhcmFtcy5jb2xEZWYsXG4gICAgICBwYXJhbXMucm93SW5kZXgsXG4gICAgICBwYXJhbXMuYXBpLFxuICAgICAgcGFyYW1zLmNvbHVtbkFwaSxcbiAgICAgIHBhcmFtcy5nZXRWYWx1ZSxcbiAgICAgIHBhcmFtcy5jb2x1bW4sXG4gICAgICBwYXJhbXMuY29sdW1uR3JvdXBcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gdGhlIGV4cHJlc3Npb24gZmFpbGVkLCB3aGljaCBjYW4gaGFwcGVuLCBhcyBpdCdzIHRoZSBjbGllbnQgdGhhdFxuICAgIC8vIHByb3ZpZGVzIHRoZSBleHByZXNzaW9uLiBzbyBwcmludCBhIG5pY2UgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzaW5nIG9mIHRoZSBleHByZXNzaW9uIGZhaWxlZCcpXG4gICAgY29uc29sZS5sb2coJ0V4cHJlc3Npb24gPSAnICsgZXhwcmVzc2lvbilcbiAgICBjb25zb2xlLmxvZygnUGFyYW1zID0nLCBwYXJhbXMpXG4gICAgY29uc29sZS5sb2coJ0V4Y2VwdGlvbiA9ICcgKyBlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGUgfSBmcm9tICdldmVudHMvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXhlY3V0ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9uJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UXVpY2tGaWx0ZXIoaWQsIGZpbHRlcikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRRdWlja0ZpbHRlcihmaWx0ZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19leHBhbmRBbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuZXhwYW5kQWxsKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbGxhcHNlQWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmNvbGxhcHNlQWxsKClcbn1cbi8qKlxuICogRW5zdXJlcyB0aGUgcm93IGluZGV4IGlzIHZpc2libGUgYnkgdmVydGljYWxseSBzY3JvbGxpbmcgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwb3NpdGlvbiB7J3RvcCcsICdtaWRkbGUnLCAnYm90dG9tJywgdW5kZWZpbmVkL251bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19lbnN1cmVJbmRleFZpc2libGUoaWQsIGluZGV4LCBwb3NpdGlvbikge1xuICBjb25zdCBhcGkgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaVxuICBjb25zdCBub2RlID0gYXBpLmdldFJvd05vZGUoaW5kZXgpXG5cbiAgaWYgKG5vZGUpIHtcbiAgICBhcGkuZW5zdXJlTm9kZVZpc2libGUobm9kZSwgcG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgYXBpLmVuc3VyZUluZGV4VmlzaWJsZShOdW1iZXIoaW5kZXgpLCBwb3NpdGlvbilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfbmF2aWdhdGVUb05leHRSb3coaWQsIHBhcmFtcykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBsZXQgcHJldmlvdXNDZWxsID0gcGFyYW1zLnByZXZpb3VzQ2VsbFBvc2l0aW9uXG4gIGxldCBzdWdnZXN0ZWROZXh0Q2VsbCA9IHBhcmFtcy5uZXh0Q2VsbFBvc2l0aW9uXG5cbiAgY29uc3QgS0VZX1VQID0gMzhcbiAgY29uc3QgS0VZX0RPV04gPSA0MFxuICBjb25zdCBLRVlfTEVGVCA9IDM3XG4gIGNvbnN0IEtFWV9SSUdIVCA9IDM5XG5cbiAgc3dpdGNoIChwYXJhbXMua2V5KSB7XG4gICAgY2FzZSBLRVlfRE9XTjpcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBjZWxsIG9uIGN1cnJlbnQgY2VsbCArIDFcbiAgICAgIGlmIChzdWdnZXN0ZWROZXh0Q2VsbCAmJiAhc3VnZ2VzdGVkTmV4dENlbGwucm93UGlubmVkKSB7XG4gICAgICAgIGlmIChwcmV2aW91c0NlbGwucm93UGlubmVkKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gb3B0aW9ucy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChcbiAgICAgICAgICAgIG9wdGlvbnMuYXBpLmdldEZpcnN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCArIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1Z2dlc3RlZE5leHRDZWxsXG4gICAgY2FzZSBLRVlfVVA6XG4gICAgICAvLyBzZXQgc2VsZWN0ZWQgY2VsbCBvbiBjdXJyZW50IGNlbGwgLSAxXG4gICAgICBpZiAoc3VnZ2VzdGVkTmV4dENlbGwgJiYgIXN1Z2dlc3RlZE5leHRDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IG9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoXG4gICAgICAgICAgICBvcHRpb25zLmFwaS5nZXRMYXN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCAtIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWdnZXN0ZWROZXh0Q2VsbFxuICAgIGNhc2UgS0VZX0xFRlQ6XG4gICAgY2FzZSBLRVlfUklHSFQ6XG4gICAgICByZXR1cm4gc3VnZ2VzdGVkTmV4dENlbGxcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSBzdXBlciBzdHJhbmdlIGtleWJvYXJkJylcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByb3cgYmFzZWQgb24gYGdldFJvd05vZGVJZGAgY29uZmlnIGRlZmluZWQgaW4gdGhlIGdyaWQgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSAgdGhlIGRhdGEgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3dOb2RlSWQoaWQsIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGFbZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LmdldFJvd05vZGVJZF1cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGdyaWQncyBkYXRhIHNldFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0ganNvbiBqc29uIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgbmV3IGRhdGFzZXQgdG8gdXBkYXRlIHRoZSBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dEYXRhKGlkLCBqc29uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgb3B0aW9ucy5hcGkuc2V0Um93RGF0YShqc29uKVxuICBvcHRpb25zLnJvd0RhdGEgPSBqc29uXG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBncmlkIHdpdGggYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3VwZGF0ZVJvd0RhdGEoaWQsIHRyYW5zYWN0aW9uLCBiYXRjaFVwZGF0ZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICh0cmFuc2FjdGlvbi5yZW1vdmUubGVuZ3RoKSB7XG4gICAgbGV0IGl0ZW1zID0gW11cblxuICAgIHRyYW5zYWN0aW9uLnJlbW92ZS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGl0ZW1zLnB1c2gob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCkuZGF0YSlcbiAgICB9KVxuXG4gICAgdHJhbnNhY3Rpb24ucmVtb3ZlID0gaXRlbXNcbiAgfVxuXG4gIGlmICghYmF0Y2hVcGRhdGUpIHtcbiAgICBvcHRpb25zLmFwaS5hcHBseVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLmFwcGx5VHJhbnNhY3Rpb25Bc3luYyh0cmFuc2FjdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgaGVpZ2h0IG9mIGFsbCByb3dzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gaGVpZ2h0IHRoZSByb3cgaGVpZ2h0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dzSGVpZ2h0KGlkLCBoZWlnaHQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcblxuICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICByb3cuc2V0Um93SGVpZ2h0KGhlaWdodClcbiAgfSlcblxuICBhcGkub25Sb3dIZWlnaHRDaGFuZ2VkKClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGdpdmVuIHJvdyBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgdGhlIG5ldyBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd0hlaWdodChpZCwgaW5kZXgsIGhlaWdodCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuICBjb25zdCByb3cgPSBhcGkuZ2V0Um93Tm9kZShpbmRleCkgfHwgYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoaW5kZXgpXG5cbiAgaWYgKHJvdykge1xuICAgIHJvdy5zZXRSb3dIZWlnaHQoaGVpZ2h0KVxuICAgIG9wdGlvbnMuYXBpLm9uUm93SGVpZ2h0Q2hhbmdlZCgpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gc2V0IGhlaWdodCBmb3Igcm93ICR7aW5kZXh9LiBSb3cgY2Fubm90IGJlIGZvdW5kYClcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSByb3cgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVzZXRSb3dIZWlnaHRzKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlc2V0Um93SGVpZ2h0cygpXG59XG5cbi8qKlxuICogU2VsZWN0IHJvdyBvciBtb3JlIGJhc2VkIG9uIHRoZSByb3cgaWQgb3IgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gcm93cyBhbiBhcnJheSBvZiByb3cga2V5cyBhbmQgaW5kZXhlcyB0byBzZWxlY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNlbGVjdGVkUm93cyhpZCwgcm93cykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuXG4gIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChub2RlID0+IHtcbiAgICBpZiAoXG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUucm93SW5kZXgpKSA+IC0xIHx8XG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUuaWQpKSA+IC0xXG4gICAgKSB7XG4gICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZVxuICAgIH1cbiAgfSlcblxuICBhcGkub25Hcm91cEV4cGFuZGVkT3JDb2xsYXBzZWQoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2VsZWN0QWxsKGlkLCBmaWx0ZXJlZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICgxID09PSBmaWx0ZXJlZCkge1xuICAgIG9wdGlvbnMuYXBpLnNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5zZWxlY3RBbGwoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19kZXNlbGVjdEFsbChpZCwgZmlsdGVyZWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICBpZiAoMSA9PT0gZmlsdGVyZWQpIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbCgpXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcm93c1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgc2VsZWN0ZWQgcm93cyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRTZWxlY3RlZFJvd3MoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3Qgbm9kZXMgPSBvcHRpb25zLmFwaS5nZXRTZWxlY3RlZE5vZGVzKClcbiAgbGV0IHBhcnNlZCA9IFtdXG5cbiAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICBwYXJzZWQucHVzaChnd19wYXJzZU5vZGUobm9kZSwgb3B0aW9ucy5jb250ZXh0KSlcbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldCB0aGUgbGFzdCBzZWxlY3RlZCByb3dcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcm93IGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFNlbGVjdGVkUm93KGlkKSB7XG4gIGNvbnN0IHJvd3MgPSBKU09OLnBhcnNlKGd3X2dldFNlbGVjdGVkUm93cyhpZCkpXG5cbiAgaWYgKHJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJvd3Nbcm93cy5sZW5ndGggLSAxXSlcbiAgfVxuXG4gIHJldHVybiAnJ1xufVxuXG4vKipcbiAqIEdldCB0aGUgcm93IGJ5IGl0cyBpZCBvciBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXhcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJvdyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3coaWQsIGluZGV4KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBnd19wYXJzZU5vZGUob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCksIG9wdGlvbnMuY29udGV4dClcbiAgKVxufVxuXG4vKipcbiAqIEdldCByb3dzIGZyb20gdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHBoYXNlIFRoZSByb3dzIHBoYXNlXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsdGVyRXhwcmVzc2lvbiBBIGZpbHRlciBleHByZXNzaW9uXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBKc29uIHN0cmluZ2lmaWVkIGFycmF5IG9mIHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvd3MoaWQsIHBoYXNlLCBmaWx0ZXJFeHByZXNzaW9uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IHBhcnNlZCA9IFtdXG5cbiAgb3B0aW9ucy5hcGlbcGhhc2VdKG5vZGUgPT4ge1xuICAgIGlmICghbm9kZS5ncm91cCkge1xuICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb24pIHtcbiAgICAgICAgY29uc3QgY2FuUHJvY2VzcyA9IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGZpbHRlckV4cHJlc3Npb24sIHtcbiAgICAgICAgICB2YWx1ZTogbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICBvbGRWYWx1ZTogbnVsbCxcbiAgICAgICAgICBuZXdWYWx1ZTogbnVsbCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YSxcbiAgICAgICAgICBjb2xEZWY6IG51bGwsXG4gICAgICAgICAgcm93SW5kZXg6IG5vZGUucm93SW5kZXgsXG4gICAgICAgICAgYXBpOiBub2RlLmdyaWRBcGksXG4gICAgICAgICAgY29sdW1uQXBpOiBub2RlLmNvbHVtbkFwaSxcbiAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4gbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgICBjb2x1bW5Hcm91cDpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChjYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgcGFyc2VkLnB1c2goZ3dfcGFyc2VOb2RlKG5vZGUsIG9wdGlvbnMuY29udGV4dCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZC5wdXNoKGd3X3BhcnNlTm9kZShub2RlLCBvcHRpb25zLmNvbnRleHQpKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGdyaWQgdG8gcmVtb3ZlIGEgcm93IGZyb20gdGhlIERPTSBhbmQgcmVjcmVhdGUgaXQgYWdhaW4gZnJvbSBzY3JhdGNoLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlZHJhd1Jvd3MoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVkcmF3Um93cygpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgdG9wIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkVG9wUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRUb3BSb3dEYXRhKGRhdGEpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgYm90dG9tIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRCb3R0b21Sb3dEYXRhKGRhdGEpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCwgZ3dfdXVpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZUFkZENlbGxSYW5nZSB9IGZyb20gJ2FwaS9jZWxscydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFRoZSBhcnJheSBjb250YWlucyByZWZlcmVuY2VzIHRvIGNyZWF0ZWQgY2hhcnRzIGZyb20gQkJqLlxuICogRXZlcnkgcmVmZXJlbmNlIGlzIGEgQ2hhcnRSZWYgb2JqZWN0IHdoaWNoIHByb3ZpZGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZVxuICogZGVzdHJveUNoYXJ0KCkgbWV0aG9kIHRoYXQgaXMgcmVxdWlyZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZGlzcG9zZSB0aGUgY2hhcnQuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNoYXJ0IHRvb2xiYXIgaXRlbXMgZGVmaW5lZCBpbiB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5IG9mIHN1cHBvcnRlZCBjaGFydCBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMocGFyYW1zKSB7XG4gIHJldHVybiAoXG4gICAgcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dC5jaGFydFRvb2xiYXJJdGVtcyB8fCBbXVxuICApXG59XG5cbi8qKlxuICogQWRkIG5ldyBjaGFydCByYW5nZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSAgYm91bmRlZCBvciB1bmJvdW5kZWQgcmFuZ2UgbW9kZWxcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgdW5pcXVlIGlkIGZvciB0aGUgZ2VuZXJhdGUgY2hhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZENoYXJ0UmFuZ2UoaWQsIHJhbmdlKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuICBjb25zdCBvcHRpb25zID0gZ3JpZC5vcHRpb25zXG4gIGNvbnN0IHByID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShyYW5nZSkpXG5cbiAgcHIuY2VsbFJhbmdlID0gZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcHIuY2VsbFJhbmdlKVxuXG4gIGNvbnN0IHJlZiA9IG9wdGlvbnMuYXBpLmNyZWF0ZVJhbmdlQ2hhcnQocHIpXG4gIGNvbnN0IHV1aWQgPSBnd191dWlkKClcblxuICBncmlkLmNyZWF0ZWRfY2hhcnRzID0gZ3JpZC5jcmVhdGVkX2NoYXJ0cyB8fCB7fVxuICBncmlkLmNyZWF0ZWRfY2hhcnRzW3V1aWRdID0gcmVmXG5cbiAgcmV0dXJuIHV1aWRcbn1cblxuLyoqXG4gKiBEZXN0cm95IGNyZWF0ZWQgY2hhcnRzXG4gKlxuICogRGVzdHJveSBhbHJlYWR5IGNyZWF0ZWQgY2hhcnQgYnkgaWQgb3IgYWxsIGNyZWF0ZWQgY2hhcnRzXG4gKiB3aGVuIHRoZSBgdXVpZGAgaXMgb21pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdXVpZCBUaGUgY2hhcnQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZGVzdHJveUNoYXJ0KGlkLCB1dWlkKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuXG4gIGlmICh1dWlkKSB7XG4gICAgaWYgKFxuICAgICAgZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSAmJlxuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0cy5oYXNPd25Qcm9wZXJ0eSh1dWlkKVxuICAgICkge1xuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0c1t1dWlkXS5kZXN0cm95Q2hhcnQoKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSkge1xuICAgICAgZm9yIChjb25zdCBpIGluIGdyaWQuY3JlYXRlZF9jaGFydHMpIHtcbiAgICAgICAgaWYgKGdyaWQuY3JlYXRlZF9jaGFydHMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICBjb25zdCBjaGFydCA9IGdyaWQuY3JlYXRlZF9jaGFydHNbaV1cbiAgICAgICAgICBjaGFydC5kZXN0cm95Q2hhcnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBTdGFydCBjZWxsIGVkaXRpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8bnVtYmVyfSByb3cgVGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2xLZXkgVGhlIGNvbHVtbidzIGtleVxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlQcmVzcyAgS2V5IHByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gY2hhclByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gcm93UGlubmVkIFNldCB0byAndG9wJyBvciAnYm90dG9tJyB0byBzdGFydGVkIGVkaXRpbmcgYSBwaW5uZWQgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zdGFydEVkaXRpbmdDZWxsKFxuICBpZCxcbiAgcm93LFxuICBjb2xLZXksXG4gIGtleVByZXNzLFxuICBjaGFyUHJlc3MsXG4gIHJvd1Bpbm5lZFxuKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IG5vZGUgPSBhcGkuZ2V0Um93Tm9kZShyb3cpIHx8IGFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHJvdylcblxuICBvcHRpb25zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcbiAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICBrZXlQcmVzczogTnVtYmVyKGtleVByZXNzKSxcbiAgICBjb2xLZXksXG4gICAgY2hhclByZXNzLFxuICAgIHJvd1Bpbm5lZCxcbiAgfSlcbn1cblxuLyoqXG4gKiBTdG9wIGNlbGwgZWRpdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhbmNlbCB3aGVuIHRydWUgY2FuY2VsIGVkaXRzICwgc2F2ZSBlZGl0cyBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3N0b3BFZGl0aW5nKGlkLCBjYW5jZWwpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc3RvcEVkaXRpbmcoY2FuY2VsKVxufVxuXG4vKipcbiAqIE5hdmlnYXRlcyB0aGUgZ3JpZCBmb2N1cyB0byB0aGUgbmV4dCBjZWxsLCBhcyBpZiB0YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvTmV4dENlbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkudGFiVG9OZXh0Q2VsbCgpXG59XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSBncmlkIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBjZWxsLCBhcyBpZiBzaGlmdC10YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvUHJldmlvdXNDZWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKClcbn1cblxuLyoqXG4gKiBTZXQgRm9jdXMgb24gdGhlIGdpdmVuIHJvdyBhbmQgY29sdW1uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gcm93IFRoZSByb3cncyBpbmRleC9pZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbiBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxvYXRpbmcgbnVsbCwgJ3RvcCcsIG9yICdib3R0b20nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Rm9jdXNlZENlbGwoaWQsIHJvdywgY29sdW1uLCBmbG9hdGluZyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICAvLyBpZ25vcmUgZm9jdXMgY2FsbHMgaWYgZWRpdGluZ1xuICBpZiAob3B0aW9ucy5hcGkuZ2V0RWRpdGluZ0NlbGxzKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IHIsIGMsIGZcbiAgaWYgKHJvdyA9PSAtMSkge1xuICAgIC8vIHRyeSB0byByZXRhaW4gdGhlIGZvY3VzXG4gICAgY29uc3QgbGFzdEZvY3VzZWRDZWxsID0gb3B0aW9ucy5hcGkuZ2V0Rm9jdXNlZENlbGwoKVxuXG4gICAgaWYgKGxhc3RGb2N1c2VkQ2VsbCkge1xuICAgICAgciA9IGxhc3RGb2N1c2VkQ2VsbC5yb3dJbmRleFxuICAgICAgYyA9IGxhc3RGb2N1c2VkQ2VsbC5jb2x1bW4uY29sSWRcbiAgICAgIGYgPSBsYXN0Rm9jdXNlZENlbGwucm93UGlubmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSAwXG4gICAgICBjID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVswXS5jb2xJZFxuICAgICAgZiA9IGZsb2F0aW5nXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHIgPSAhcm93XG4gICAgICA/IDBcbiAgICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcm93KVxuICAgICAgPyArcm93XG4gICAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocm93KS5yb3dJbmRleFxuICAgIGMgPSBjb2x1bW4gPyBjb2x1bW4gOiBvcHRpb25zLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpWzBdLmNvbElkXG4gICAgZiA9IGZsb2F0aW5nXG4gIH1cblxuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGb2N1c2VkQ2VsbChyLCBjLCBmKVxufVxuXG4vKipcbiAqIEdldCBSYW5nZSBTZWxlY3Rpb25zXG4gKlxuICogVGhlIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIHJhbmdlIGpzb24gbW9kZWwgZm9yIGVhY2ggcmFuZ2Ugd2hpY2ggY2FuIGJlIHBhcnNlZCBpbiBCQmogc2lkZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcmFuZ2VzIGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJhbmdlU2VsZWN0aW9ucyhpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0XG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IHJhbmdlcyA9IGFwaS5nZXRDZWxsUmFuZ2VzKClcbiAgY29uc3QgbW9kZWwgPSBhcGkuZ2V0TW9kZWwoKVxuICBsZXQgcmVzdWx0ID0gW11cblxuICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XG4gICAgLy8gY29uc3Qgc3RhcnQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4KSwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAvLyBjb25zdCBlbmQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLmVuZFJvdy5yb3dJbmRleCksIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAvL2lmIChzdGFydCAhPT0gZmFsc2UgJiYgZW5kICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSByYW5nZS5jb2x1bW5zXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoJ2FnLUdyaWQtQXV0b0NvbHVtbicgIT09IGN1cnJlbnQuY29sSWQpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKGN1cnJlbnQuY29sSWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3JcbiAgICAgIH0sIFtdKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuXG4gICAgY29uc3Qgc3RhckluZGV4ID0gTWF0aC5taW4ocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgsIHJhbmdlLmVuZFJvdy5yb3dJbmRleClcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWF4KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4LCByYW5nZS5lbmRSb3cucm93SW5kZXgpXG4gICAgY29uc3Qgcm93cyA9IFtdXG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IHN0YXJJbmRleDsgcm93SW5kZXggPD0gZW5kSW5kZXg7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBtb2RlbC5nZXRSb3cocm93SW5kZXgpXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJzZWROb2RlID0gZ3dfcGFyc2VOb2RlKG5vZGUsIGNvbnRleHQpXG4gICAgICAgIGlmIChwYXJzZWROb2RlKSB7XG4gICAgICAgICAgcm93cy5wdXNoKHBhcnNlZE5vZGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocm93cy5sZW5ndGggJiYgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgcjogcm93cywgYzogY29sdW1ucyB9KVxuICAgIH1cbiAgICAvL31cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KVxufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBjZWxscyByYW5nZSBpbiBhIGZvcm1hdCB0aGUgZ3JpZCBjYW4gdW5kZXJzdGFuZCB3aGVuIGl0IGlzIHBhc3NlZFxuICogdG8gYGFwaS5hZGRDZWxsUmFuZ2VgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGdyaWQncyBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHJhbmdlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCByYW5nZSkge1xuICBjb25zdCBwciA9IGRlZXBQYXJzZUpzb24oSlNPTi5zdHJpbmdpZnkocmFuZ2UpKVxuICBjb25zdCBzdGFydCA9ICEocHIuc3RhcnQgfHwgbnVsbClcbiAgICA/IDBcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLnN0YXJ0KVxuICAgID8gK3ByLnN0YXJ0XG4gICAgOiBvcHRpb25zLmFwaS5nZXRSb3dOb2RlKHByLnN0YXJ0KS5yb3dJbmRleFxuICBjb25zdCBlbmQgPSAhKHByLmVuZCB8fCBudWxsKVxuICAgID8gb3B0aW9ucy5yb3dEYXRhLmxlbmd0aCAtIDFcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLmVuZClcbiAgICA/ICtwci5lbmRcbiAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocHIuZW5kKS5yb3dJbmRleFxuXG4gIHJldHVybiB7XG4gICAgcm93U3RhcnRJbmRleDogTWF0aC5hYnMoc3RhcnQpLFxuICAgIHJvd0VuZEluZGV4OiBNYXRoLmFicyhlbmQpLFxuICAgIGNvbHVtbnM6IHByLmNvbHVtbnMsXG4gIH1cbn1cbi8qKlxuICogQWRkIG5ldyBjZWxsIHJhbmdlXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlICBib3VuZGVkIG9yIHVuYm91bmRlZCByYW5nZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkQ2VsbFJhbmdlKGlkLCByYW5nZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBvcHRpb25zLmFwaS5hZGRDZWxsUmFuZ2UoZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcmFuZ2UpKVxufVxuXG4vKipcbiAqIENsZWFycyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfY2xlYXJSYW5nZVNlbGVjdGlvbihpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5jbGVhclJhbmdlU2VsZWN0aW9uKClcbn1cbiIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcbiIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSXRlcmF0ZWVDYWxsO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJbmRleDtcbiIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcbiIsImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0ICdleHBvc2UtbG9hZGVyP0JCai5NYXNrcyFiYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuSW5wdXRNYXNraW5nIWJhc2lzLWlucHV0LW1hc2tpbmcvZGlzdC9iYXNpcy1pbnB1dC1tYXNraW5nLmpzJ1xuaW1wb3J0ICdleHBvc2UtbG9hZGVyP2ZsYXRwaWNrciFmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuQWdHcmlkQ29tcG9uZW50cyFiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzJ1xuXG5yZXF1aXJlKCdmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzJylcbnJlcXVpcmUoJy4vc3R5bGUvY2xhc3Nlcy5jc3MnKVxucmVxdWlyZSgnLi9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3MnKVxuXG5leHBvcnQgKiBmcm9tICcuL3BvbHlmaWxscy5qcydcbmV4cG9ydCAqIGZyb20gJy4vYXBpJ1xuIiwiaWYoIWdsb2JhbFtcIkJCalwiXSkgZ2xvYmFsW1wiQkJqXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJCalwiXVtcIk1hc2tzXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJiai1tYXNrcy5qc1wiKTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJNYXNrc1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCQmpcIl0gPSByb290W1wiQkJqXCJdIHx8IHt9LCByb290W1wiQkJqXCJdW1wiTWFza3NcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDUpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdG9JbnRlZ2VyO1xuZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZ1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiaFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYlwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZlwiXTsgfSk7XG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJjXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfX1tcImNcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdHpQYXJzZVRpbWV6b25lO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdHpUb2tlbml6ZURhdGVfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RyaW5nTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlV0aWxzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVXRpbHM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fU3RyaW5nTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlR5cGVzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOdW1iZXJNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRhdGVNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiY1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdHJpbmdNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCJdOyB9KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cblxuXG52YXIgVXRpbHMgPSB7XG4gIERhdGVzOiB7XG4gICAgZ2V0RGF5T2ZZZWFyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJlXCIgLyogZ2V0RGF5T2ZZZWFyICovXSxcbiAgICBnZXRXZWVrTnVtYmVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJnXCIgLyogZ2V0V2Vla051bWJlciAqL10sXG4gICAgZ2V0V2Vla1N0YXJ0QnlMb2NhbGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImhcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10sXG4gICAgSVNfREFURV9SRUdFWDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiYVwiIC8qIElTX0RBVEVfUkVHRVggKi9dLFxuICAgIElTX1RJTUVfUkVHRVg6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImJcIiAvKiBJU19USU1FX1JFR0VYICovXSxcbiAgICBmaXhTaG9ydElTTzogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiZFwiIC8qIGZpeFNob3J0SVNPICovXSxcbiAgICBnZXRUaW1lem9uZU9yT2Zmc2V0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJmXCIgLyogZ2V0VGltZXpvbmVPck9mZnNldCAqL11cbiAgfVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG52YXIgTnVtYmVyTWFzayA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE51bWJlck1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlck1hc2spO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE51bWJlck1hc2ssIG51bGwsIFt7XG4gICAga2V5OiBcIm1hc2tcIixcblxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVjaW1hbFNlcGFyYXRvcj0uXSAgLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqIFxuICAgICAqIEB0aHJvd3Mge01hc2tFcnJvcn0gb25seSBpZiBsb29zZSBpcyBkaXNhYmxlZFxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2sobnVtYmVyLCBfbWFzaykge1xuICAgICAgdmFyIGdyb3VwaW5nU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnLCc7XG4gICAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJy4nO1xuICAgICAgdmFyIGZvcmNlVHJhaWxpbmdaZXJvcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcblxuICAgICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gc3RyOyAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlcIlxuICAgICAgICAgIH07XG4gICAgICB9IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBNQVNLXG5cblxuICAgICAgdmFyIG1hc2tCZWZvcmVEZWNpbWFsID0gMDtcbiAgICAgIHZhciBtYXNrQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIHZhciBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrTGVuOyArK2kpIHtcbiAgICAgICAgdmFyIG0gPSBfbWFzay5jaGFyQXQoaSk7XG5cbiAgICAgICAgaWYgKG0gPT0gJzAnIHx8IG0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsO2Vsc2UgKyttYXNrQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bWJlciwgbWFza0FmdGVyRGVjaW1hbCk7XG5cbiAgICAgIHZhciBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBOVU1CRVJcblxuXG4gICAgICB2YXIgaW5MZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICB2YXIgbnVtQmVmb3JlRGVjaW1hbCA9IDA7XG4gICAgICB2YXIgbnVtQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW5MZW47ICsrX2kpIHtcbiAgICAgICAgaWYgKGJ5dGVzW19pXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKytudW1BZnRlckRlY2ltYWw7ZWxzZSArK251bUJlZm9yZURlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrXCJcbiAgICAgICAgICB9O1xuICAgICAgfSAvLyByb3VuZCBpZiBtYXNrIGlzIGZvciBhIGxvd2VyIHByZWNpc2lvbiBudW1iZXJcblxuXG4gICAgICBpZiAobnVtQWZ0ZXJEZWNpbWFsID4gbWFza0FmdGVyRGVjaW1hbCkge1xuICAgICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpO1xuICAgICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7XG4gICAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoOyAvLyBHZXQgbmV3IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuXG4gICAgICAgIG51bUJlZm9yZURlY2ltYWwgPSAwO1xuICAgICAgICBudW1BZnRlckRlY2ltYWwgPSAwO1xuICAgICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBpbkxlbjsgKytfaTIpIHtcbiAgICAgICAgICBpZiAoYnl0ZXNbX2kyXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbDtlbHNlICsrbnVtQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgICBpZiAobnVtQmVmb3JlRGVjaW1hbCA+IG1hc2tCZWZvcmVEZWNpbWFsKSB7XG4gICAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCk7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza1wiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWxsQnl0ZSA9ICcgJyxcbiAgICAgICAgICBmbG9hdEJ5dGUgPSAnICc7XG4gICAgICB2YXIgaW5Qb3MgPSAwLFxuICAgICAgICAgIG91dFBvcyA9IDAsXG4gICAgICAgICAgZmxvYXRQb3MgPSAwO1xuICAgICAgaWYgKF9tYXNrLmNoYXJBdCgwKSA9PSAnKicpIGZpbGxCeXRlID0gJyonO1xuICAgICAgdmFyIGZpbGxJbml0ID0gZmlsbEJ5dGU7XG4gICAgICB2YXIgaXNOZWdhdGl2ZSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtKSA8IDA7XG4gICAgICB2YXIgZW1pdERlY2ltYWwgPSBpbkxlbiA+IDAgfHwgX21hc2suaW5kZXhPZignMCcpID49IDA7XG4gICAgICB2YXIgZm91bmRaZXJvID0gZmFsc2U7XG4gICAgICB2YXIgZm91bmREaWdpdCA9IGZhbHNlO1xuICAgICAgdmFyIGN1cnJlbmN5ID0gZmFsc2U7XG4gICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcbiAgICAgIHZhciByZXQgPSBuZXcgQXJyYXkobWFza0xlbik7XG5cbiAgICAgIGZvciAodmFyIG1hc2tQb3MgPSAwOyBtYXNrUG9zIDwgbWFza0xlbjsgKyttYXNrUG9zKSB7XG4gICAgICAgIHZhciBfbSA9IF9tYXNrLmNoYXJBdChtYXNrUG9zKTtcblxuICAgICAgICBzd2l0Y2ggKF9tKSB7XG4gICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsO1xuXG4gICAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBieXRlc1tpblBvc107XG4gICAgICAgICAgICAgICsraW5Qb3M7XG4gICAgICAgICAgICAgIGZvdW5kRGlnaXQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCc7XG4gICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWw7XG5cbiAgICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXTtcbiAgICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCAmJiBmb3JjZVRyYWlsaW5nWmVyb3MgJiYgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDAgPyAnMCcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1BvcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgICAgaWYgKGZvdW5kWmVybyB8fCBpblBvcyA+IDApIHJldFtvdXRQb3NdID0gZ3JvdXBpbmdTZXBhcmF0b3I7ZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJy0nO1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1BvcztcbiAgICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiBmaWxsQnl0ZTtcblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgZmxvYXRCeXRlID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogJysnO1xuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBmbG9hdEJ5dGUgPSAnJCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnJCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICcmJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG4gICAgICAgICAgLy8gY2FzZSAnQCc6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICdAJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICdAJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSBmbG9hdEJ5dGUgPSAnKCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcpJzpcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmb3VuZERlY2ltYWwgPyAnICcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcgJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnICc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnUic7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKic7XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGVtaXREZWNpbWFsID8gZGVjaW1hbFNlcGFyYXRvciA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgZmlsbEJ5dGUgPSAnICc7XG4gICAgICAgICAgICBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IF9tO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmxvYXRCeXRlICE9ICcgJykge1xuICAgICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvcztcblxuICAgICAgICB3aGlsZSAoZmxvYXRQb3MgPj0gbWFza0xlbikge1xuICAgICAgICAgIC0tZmxvYXRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0W2Zsb2F0UG9zXSA9PSBmaWxsSW5pdCkgcmV0W2Zsb2F0UG9zXSA9IGZsb2F0Qnl0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3NoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgICBpZiAocmV2ZXJzZVNoaWZ0KSBwcmVjaXNpb24gPSAtcHJlY2lzaW9uO1xuICAgICAgdmFyIG51bUFycmF5ID0gKCcnICsgbnVtYmVyKS5zcGxpdCgnZScpO1xuICAgICAgcmV0dXJuICsobnVtQXJyYXlbMF0gKyAnZScgKyAobnVtQXJyYXlbMV0gPyArbnVtQXJyYXlbMV0gKyBwcmVjaXNpb24gOiBwcmVjaXNpb24pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3JvdW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yb3VuZChudW1iZXIsIHByZWNpc2lvbikge1xuICAgICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KE1hdGgucm91bmQoTnVtYmVyTWFzay5fc2hpZnQobnVtYmVyLCBwcmVjaXNpb24sIGZhbHNlKSksIHByZWNpc2lvbiwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl90b0NoYXJBcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9DaGFyQXJyYXkobnVtYmVyKSB7XG4gICAgICB2YXIgc2lnbnVtID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW1iZXIpO1xuXG4gICAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgICAgaWYgKHNpZ251bSAhPT0gMCkge1xuICAgICAgICB2YXIgc3RyaW5nID0gc2lnbnVtIDwgMCA/IFwiXCIuY29uY2F0KC0xICogbnVtYmVyLnRvU3RyaW5nKCkpIDogbnVtYmVyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJykgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKTsgLy8gVGhlIHN0cmluZyBjb250YWlucyBvbmx5IFswLTldIGFuZCAnLidcblxuICAgICAgICBjaGFycyA9IHN0cmluZy5zcGxpdCgnJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHggbnVtYmVyXG4gICAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG5lZ2F0aXZlIG51bWJlciwgcG9zaXRpdmUgemVyb1xuICAgICAqICAgICAgICAgICAgICAgICAgIG9yIG5lZ2F0aXZlIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxLCAtMSwgMCBvciAtMCByZXNwZWN0aXZlbHkuXG4gICAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U2lnblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U2lnbih4KSB7XG4gICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE51bWJlck1hc2s7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoTnVtYmVyTWFzayk7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSVNfVElNRV9SRUdFWDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElTX0RBVEVfUkVHRVg7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeUxvY2FsZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldERheU9mWWVhcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpeFNob3J0SVNPOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0VGltZXpvbmVPck9mZnNldDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtOdW1iZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc190el91dGNUb1pvbmVkVGltZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfd2Vla3N0YXJ0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cblxudmFyIElTX1RJTUVfUkVHRVggPSAvXigyWzAtM118WzAxXVswLTldKTo/KFswLTVdWzAtOV0pOj8oWzAtNV1bMC05XSkoWnxbKy1dKD86MlswLTNdfFswMV1bMC05XSkoPzo6Pyg/OlswLTVdWzAtOV0pKT8pJC87XG52YXIgSVNfREFURV9SRUdFWCA9IC9eKChbMTJdXFxkezN9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdXFxkfDNbMDFdKShafFsrLV0oPzoyWzAtM118WzAxXVswLTldKSg/Ojo/KD86WzAtNV1bMC05XSkpPykpJC87XG4vKipcbiAqIEZpbmQgb3V0IHdoZW4gdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgcGFzc2VkIGxvY2FsZVxuICpcbiAqIEBwYXJhbSB7bG9jYWxlfSBsb2NhbGVcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGEgbnVtYmVyIDAgPSBzdW5kYXkgLCAxID0gbW9uZGF5ICwgLi4uLlxuICovXG5cbnZhciBnZXRXZWVrU3RhcnRCeUxvY2FsZSA9IGZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlKGxvY2FsZSkge1xuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfX1tcImFcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10pKGxvY2FsZSk7XG59O1xuLyoqXG4gKiAgR2V0IGRheSBudW1iZXIgaW4gdGhlIHllYXIgb2YgdGhlIHBhc3NlZCBkYXRlXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBkYXkgbnVtYmVyXG4gKi9cblxudmFyIGdldERheU9mWWVhciA9IGZ1bmN0aW9uIGdldERheU9mWWVhcihkYXRlKSB7XG4gIHZhciBzdGFydCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCk7XG4gIHZhciBkaWZmID0gZGF0ZSAtIHN0YXJ0ICsgKHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpICogNjAgKiAxMDAwO1xuICB2YXIgb25lRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcbiAgdmFyIGRheSA9IE1hdGguZmxvb3IoZGlmZiAvIG9uZURheSk7XG4gIHJldHVybiBkYXk7XG59O1xuLyoqXG4gKiBUYWtlcyBpbmNvbXBsZXRlIGlzbyBzdHJpbmcgYW5kIHJldHVybiBhIGNvbXBsZXRlIG9uZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gY29tcGxldGUgaXNvIHN0cmluZ1xuICovXG5cbnZhciBmaXhTaG9ydElTTyA9IGZ1bmN0aW9uIGZpeFNob3J0SVNPKGRhdGUpIHtcbiAgdmFyIHZhbHVlID0gZGF0ZTtcbiAgdmFyIG9mZnNldCA9ICh2YWx1ZS5tYXRjaCgveiR8WytcXC1dXFxkXFxkOlxcZFxcZCQvaSkgfHwgW10pWzBdO1xuXG4gIGlmICghb2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gJ1onO1xuICAgIHZhbHVlICs9IG9mZnNldDtcbiAgfVxuXG4gIGlmIChJU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIjE5NzAtMDEtMDFUXCIuY29uY2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmIChJU19EQVRFX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZS5zcGxpdChvZmZzZXQpWzBdLCBcIlQwMDowMDowMFwiKS5jb25jYXQob2Zmc2V0KTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIEdldCB0aGUgYnJvd3NlciB0aW1lem9uZSBuYW1lICwgaWYgbm90IHN1cHBvcnRlZCB0aGVuIHRoZSBicm93c2VyXG4gKiB0aW1lem9uZSBvZmZzZXQgZm9ybWF0dGVkXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSB0aW1lem9uZSBvZiBvZmZzZXRcbiAqL1xuXG52YXIgZ2V0VGltZXpvbmVPck9mZnNldCA9IGZ1bmN0aW9uIGdldFRpbWV6b25lT3JPZmZzZXQoKSB7XG4gIHZhciB0aW1lem9uZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcblxuICBpZiAoIXRpbWV6b25lKSB7XG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIHBhZChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgdmFyIHN0ciA9ICcnICsgbnVtYmVyO1xuXG4gICAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICBzdHIgPSAnMCcgKyBzdHI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfTtcblxuICAgIHZhciBvZmZzZXQgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgb2Zmc2V0ID0gKG9mZnNldCA8IDAgPyAnKycgOiAnLScpICsgLy8gTm90ZSB0aGUgcmV2ZXJzZWQgc2lnbiFcbiAgICBwYWQocGFyc2VJbnQoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSwgMikgKyBwYWQoTWF0aC5hYnMob2Zmc2V0ICUgNjApLCAyKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcmV0dXJuIHRpbWV6b25lO1xufTtcbi8qKlxuICogR2V0IHRoZSBXZWVrIE51bWJlciBpbiB0aGUgcGFzc2VkIGRhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBEYXRlIG9iamVjdFxuICogQHBhcmFtIHtOdW1iZXJ9IHdlZWtTdGFydCBBIG51bWJlciB3aGljaCBkZWZpbmVzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgID0gc3VuZGF5ICwgMSA9IG1vbmRheSAsIC4uLilcbiAqXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgd2VlayBudW1iZXJcbiAqL1xuXG52YXIgZ2V0V2Vla051bWJlciA9IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF0ZSwgd2Vla1N0YXJ0KSB7XG4gIHZhciBkID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7XG4gIHZhciBkYXlOdW0gPSBkLmdldFVUQ0RheSgpIC0gKHdlZWtTdGFydCAtIDEpIHx8IDc7XG4gIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSArIDQgLSBkYXlOdW0pO1xuICB2YXIgeWVhclN0YXJ0ID0gbmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSk7XG4gIHJldHVybiBNYXRoLmNlaWwoKChkIC0geWVhclN0YXJ0KSAvIDg2NDAwMDAwICsgMSkgLyA3KTtcbn07XG4vKipcbiAqIERhdGVNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogZGF0ZXMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIERhdGVNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGF0ZU1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVNYXNrKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhEYXRlTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayBkYXRlXG4gICAgICpcbiAgICAgKiBNYXNrIHRoZSBwYXNzZWQgZGF0ZSB3aXRoIHRoZSBwYXNzZWQgbWFza1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIG1hc2sgYXMgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2xvY2FsZT1Ccm93c2VyJ3MgbG9jYWxlXSB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGV4KGVuLVVTKS4gZGVmYXVsdCBpcyB0byB0aGUgc3lzdGVtIGxhbmd1YWdlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFt0aW1lem9uZT1TeXN0ZW0gdGltZXpvbmVdIHRoZSB0aW1lIHpvbmUgZGVzY3JpcHRvciAoZS5nLiBBbWVyaWNhL0xvc19BbmdlbGVzKS4gZGVmYXVsdCB0byB0aGUgc3lzdGVtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGEgZGF0ZSBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFza1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXNrKGRhdGUsIF9tYXNrLCBsb2NhbGUsIHRpbWV6b25lKSB7XG4gICAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICAgIGlmICghX21hc2spIHJldHVybiBkYXRlO1xuICAgICAgdGltZXpvbmUgPSB0aW1lem9uZSB8fCBnZXRUaW1lem9uZU9yT2Zmc2V0KCk7XG4gICAgICBsb2NhbGUgPSBsb2NhbGUgfHwgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnOyAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbXBsZXRlIGlzbyBzdHJpbmdcblxuICAgICAgZGF0ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IGZpeFNob3J0SVNPKGRhdGUpO1xuICAgICAgdmFyIGRhdGVPYmplY3QgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX3R6X3V0Y1RvWm9uZWRUaW1lX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRhdGUsIHRpbWV6b25lKTtcblxuICAgICAgdmFyIHRyYW5zbGF0aW9uID0gRGF0ZU1hc2suX2J1aWxkVHJhbnNsYXRpb24oe1xuICAgICAgICB5ZWFyOiBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCksXG4gICAgICAgIG1vbnRoOiBkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBtb250aFNob3J0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgbW9udGhMb25nOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBkYXk6IGRhdGVPYmplY3QuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXlTaG9ydDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgZGF5TG9uZzogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBtaW51dGVzOiBkYXRlT2JqZWN0LmdldE1pbnV0ZXMoKSxcbiAgICAgICAgc2Vjb25kczogZGF0ZU9iamVjdC5nZXRTZWNvbmRzKCksXG5cbiAgICAgICAgZ2V0IGhvdXJzMjQoKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVPYmplY3QuZ2V0SG91cnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQgaG91cnMxMigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ob3VyczI0ICUgMTIgfHwgMTI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF5T2ZZZWFyOiBnZXREYXlPZlllYXIoZGF0ZU9iamVjdCksXG4gICAgICAgIGRheU9mV2VlazogZGF0ZU9iamVjdC5nZXREYXkoKSArIDEsXG4gICAgICAgIC8vIFN1bmRheSA9IDEgaW4gQkJqIGJ1dCBTdW5kYXkgPSAwIGluIEpTXG4gICAgICAgIHdlZWtOdW1iZXI6IGdldFdlZWtOdW1iZXIoZGF0ZU9iamVjdCwgZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSksXG4gICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICB0aW1lem9uZTogdGltZXpvbmVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gX21hc2s7XG5cbiAgICAgIGZvciAodmFyIGsgaW4gdHJhbnNsYXRpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cCgnKCUnICsgayArICcpJywgJ2cnKSwgdHJhbnNsYXRpb25ba10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBtYXAgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBwb3NzaWJsZSBmb3JtcyBvZiBtYXNrc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGVEZXRhaWxzIGRhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZm9ybXMgbWFza3NcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIl9idWlsZFRyYW5zbGF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9idWlsZFRyYW5zbGF0aW9uKGRhdGVEZXRhaWxzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyB5ZWFyXG4gICAgICAgIFl6OiBkYXRlRGV0YWlscy55ZWFyLnRvU3RyaW5nKCkuc3Vic3RyKC0yKSxcbiAgICAgICAgWXM6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFlsOiBkYXRlRGV0YWlscy55ZWFyLFxuICAgICAgICBZcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy55ZWFyKSxcbiAgICAgICAgWWQ6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFk6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIC8vIG1vbnRoXG4gICAgICAgIE16OiBTdHJpbmcoZGF0ZURldGFpbHMubW9udGgpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubW9udGggOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgTXM6IGRhdGVEZXRhaWxzLm1vbnRoU2hvcnQsXG4gICAgICAgIE1sOiBkYXRlRGV0YWlscy5tb250aExvbmcsXG4gICAgICAgIE1wOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLm1vbnRoKSxcbiAgICAgICAgTWQ6IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICBNOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgLy8gZGF5XG4gICAgICAgIER6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5KS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheSA6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRHM6IGRhdGVEZXRhaWxzLmRheVNob3J0LFxuICAgICAgICBEbDogZGF0ZURldGFpbHMuZGF5TG9uZyxcbiAgICAgICAgRHA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5KSxcbiAgICAgICAgRGQ6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICAvLyBob3VyIDI0XG4gICAgICAgIEh6OiBTdHJpbmcoZGF0ZURldGFpbHMuaG91cnMyNCkubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5ob3VyczI0IDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSHM6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEhsOiBkYXRlRGV0YWlscy5ob3VyczI0LFxuICAgICAgICBIcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5ob3VyczI0KSxcbiAgICAgICAgSGQ6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEg6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIC8vIGhvdXIgMTJcbiAgICAgICAgaHo6IFN0cmluZyhkYXRlRGV0YWlscy5ob3VyczEyKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmhvdXJzMTIgOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBoczogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaGw6IGRhdGVEZXRhaWxzLmhvdXJzMTIsXG4gICAgICAgIGhwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLmhvdXJzMTIpLFxuICAgICAgICBoZDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgLy8gbWludXRlc1xuICAgICAgICBtejogU3RyaW5nKGRhdGVEZXRhaWxzLm1pbnV0ZXMpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubWludXRlcyA6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG1zOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtbDogZGF0ZURldGFpbHMubWludXRlcyxcbiAgICAgICAgbXA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMubWludXRlcyksXG4gICAgICAgIG1kOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgIHN6OiBTdHJpbmcoZGF0ZURldGFpbHMuc2Vjb25kcykubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5zZWNvbmRzIDogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgc3M6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHNsOiBkYXRlRGV0YWlscy5zZWNvbmRzLFxuICAgICAgICBzcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5zZWNvbmRzKSxcbiAgICAgICAgc2Q6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHM6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIC8vIEFNICwgUE1cbiAgICAgICAgUFA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdQTScgOiAnUE0nLFxuICAgICAgICBQOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAnUE0nIDogJ0FNJyxcbiAgICAgICAgcHA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdwbScgOiAnYW0nLFxuICAgICAgICBwOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAncG0nIDogJ2FtJyxcbiAgICAgICAgLy8gRGF5IG9mIFllYXJcbiAgICAgICAgSno6IFN0cmluZyhkYXRlRGV0YWlscy5kYXlPZlllYXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5T2ZZZWFyIDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKczogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKbDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKZDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIC8vIERheSBPZiBXZWVrXG4gICAgICAgIFd6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheU9mV2VlayA6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3M6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV2w6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKSxcbiAgICAgICAgV2Q6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgVzogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICAvLyB3ZWVrIG51bWJlclxuICAgICAgICB3ejogU3RyaW5nKGRhdGVEZXRhaWxzLndlZWtOdW1iZXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMud2Vla051bWJlciA6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHdzOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3bDogZGF0ZURldGFpbHMud2Vla051bWJlcixcbiAgICAgICAgd3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMud2Vla051bWJlciksXG4gICAgICAgIHdkOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3OiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEYXRlTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiY1wiXSA9IChEYXRlTWFzayk7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdXRjVG9ab25lZFRpbWU7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5cblxuXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodGltZVpvbmUsIGRhdGUpXG5cbiAgcmV0dXJuIG9mZnNldE1pbGxpc2Vjb25kc1xuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKHV0Y0RhdGUsIG9mZnNldE1pbGxpc2Vjb25kcylcbiAgICA6IHV0Y0RhdGVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHR6VG9rZW5pemVEYXRlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzXSB0b2tlbnMgb2YgdGhlIHByb3ZpZGVkXG4gKiBgZGF0ZWAgYXMgaXQgd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgYHRpbWVab25lYC5cbiAqL1xuZnVuY3Rpb24gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZVpvbmUpIHtcbiAgdmFyIGR0ZiA9IGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKVxuICByZXR1cm4gZHRmLmZvcm1hdFRvUGFydHMgPyBwYXJ0c09mZnNldChkdGYsIGRhdGUpIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKVxufVxuXG52YXIgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBob3VyOiAzLFxuICBtaW51dGU6IDQsXG4gIHNlY29uZDogNVxufVxuXG5mdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gIHZhciBmaWxsZWQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSB0eXBlVG9Qb3NbZm9ybWF0dGVkW2ldLnR5cGVdXG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQoZm9ybWF0dGVkW2ldLnZhbHVlLCAxMClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZFxufVxuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCAnJylcbiAgdmFyIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpXG4gIC8vIHZhciBbLCBmTW9udGgsIGZEYXksIGZZZWFyLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF0gPSBwYXJzZWRcbiAgLy8gcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF1cbiAgcmV0dXJuIFtwYXJzZWRbM10sIHBhcnNlZFsxXSwgcGFyc2VkWzJdLCBwYXJzZWRbNF0sIHBhcnNlZFs1XSwgcGFyc2VkWzZdXVxufVxuXG4vLyBHZXQgYSBjYWNoZWQgSW50bC5EYXRlVGltZUZvcm1hdCBpbnN0YW5jZSBmb3IgdGhlIElBTkEgYHRpbWVab25lYC4gVGhpcyBjYW4gYmUgdXNlZFxuLy8gdG8gZ2V0IGRldGVybWluaXN0aWMgbG9jYWwgZGF0ZS90aW1lIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGBlbi1VU2AgbG9jYWxlIHdoaWNoXG4vLyBjYW4gYmUgdXNlZCB0byBleHRyYWN0IGxvY2FsIHRpbWUgcGFydHMgYXMgbmVjZXNzYXJ5LlxudmFyIGR0ZkNhY2hlID0ge31cbmZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKSB7XG4gIGlmICghZHRmQ2FjaGVbdGltZVpvbmVdKSB7XG4gICAgLy8gTmV3IGJyb3dzZXJzIHVzZSBgaG91ckN5Y2xlYCwgSUUgYW5kIENocm9tZSA8NzMgZG9lcyBub3Qgc3VwcG9ydCBpdCBhbmQgdXNlcyBgaG91cjEyYFxuICAgIHZhciB0ZXN0RGF0ZUZvcm1hdHRlZCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICB0aW1lWm9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnLFxuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgIH0pLmZvcm1hdChuZXcgRGF0ZSgnMjAxNC0wNi0yNVQwNDowMDowMC4xMjNaJykpXG4gICAgdmFyIGhvdXJDeWNsZVN1cHBvcnRlZCA9XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJzA2LzI1LzIwMTQsIDAwOjAwOjAwJyB8fFxuICAgICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICfigI4wNuKAji/igI4yNeKAji/igI4yMDE04oCOIOKAjjAw4oCOOuKAjjAw4oCOOuKAjjAwJ1xuXG4gICAgZHRmQ2FjaGVbdGltZVpvbmVdID0gaG91ckN5Y2xlU3VwcG9ydGVkXG4gICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXJDeWNsZTogJ2gyMycsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICB9XG4gIHJldHVybiBkdGZDYWNoZVt0aW1lWm9uZV1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBzdWJNaWxsaXNlY29uZHM7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYWRkTWlsbGlzZWNvbmRzX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxuXG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hZGRNaWxsaXNlY29uZHNfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gYWRkTWlsbGlzZWNvbmRzO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cblxuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cblxuZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgdGltZXN0YW1wID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9EYXRlX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0b0RhdGU7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2ZqdWxlXCIpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHRvRGF0ZTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5cblxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG52YXIgREVGQVVMVF9BRERJVElPTkFMX0RJR0lUUyA9IDJcblxudmFyIHBhdHRlcm5zID0ge1xuICBkYXRlVGltZURlbGltZXRlcjogL1tUIF0vLFxuICBwbGFpblRpbWU6IC86LyxcbiAgdGltZVpvbmVEZWxpbWV0ZXI6IC9bWiBdL2ksXG5cbiAgLy8geWVhciB0b2tlbnNcbiAgWVk6IC9eKFxcZHsyfSkkLyxcbiAgWVlZOiBbXG4gICAgL14oWystXVxcZHsyfSkkLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7M30pJC8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7NH0pJC8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuICBZWVlZOiAvXihcXGR7NH0pLyxcbiAgWVlZWVk6IFtcbiAgICAvXihbKy1dXFxkezR9KS8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezV9KS8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7Nn0pLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG5cbiAgLy8gZGF0ZSB0b2tlbnNcbiAgTU06IC9eLShcXGR7Mn0pJC8sXG4gIERERDogL14tPyhcXGR7M30pJC8sXG4gIE1NREQ6IC9eLT8oXFxkezJ9KS0/KFxcZHsyfSkkLyxcbiAgV3d3OiAvXi0/VyhcXGR7Mn0pJC8sXG4gIFd3d0Q6IC9eLT9XKFxcZHsyfSktPyhcXGR7MX0pJC8sXG5cbiAgSEg6IC9eKFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NOiAvXihcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU1TUzogL14oXFxkezJ9KTo/KFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcblxuICAvLyB0aW1lem9uZSB0b2tlbnMgKHRvIGlkZW50aWZ5IHRoZSBwcmVzZW5jZSBvZiBhIHR6KVxuICB0aW1lem9uZTogLyhbWistXS4qfCBVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgYW4gYXJndW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBpdC5cbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvciB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqIEFsbCAqZGF0ZS1mbnMqIGZ1bmN0aW9ucyB3aWxsIHRocm93IGBSYW5nZUVycm9yYCBpZiBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBpcyBub3QgMCwgMSwgMiBvciB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T3B0aW9uc1dpdGhUWn0gW29wdGlvbnNdIC0gdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVpvbmU9JyddIC0gdXNlZCB0byBzcGVjaWZ5IHRoZSBJQU5BIHRpbWUgem9uZSBvZmZzZXQgb2YgYSBkYXRlIFN0cmluZy5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcrMDIwMTQxMDEnLCB7YWRkaXRpb25hbERpZ2l0czogMX0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5mdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGRpcnR5T3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50J1xuICAgIClcbiAgfVxuXG4gIGlmIChhcmd1bWVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fVxuXG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID1cbiAgICBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMgPT0gbnVsbFxuICAgICAgPyBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbGliX3R6UGFyc2VUaW1lem9uZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSlcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKSlcbiAgICAgIG9mZnNldCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgdmFyIGRhdGVTdHJpbmdzID0ge31cbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltZXRlcilcbiAgdmFyIHRpbWVTdHJpbmdcblxuICBpZiAocGF0dGVybnMucGxhaW5UaW1lLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGxcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF1cbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF1cbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV1cbiAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IGFycmF5WzJdXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyKVswXVxuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICBpZiAodGltZVN0cmluZykge1xuICAgIHZhciB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZylcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nLnJlcGxhY2UodG9rZW5bMV0sICcnKVxuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5nc1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcGF0dGVybllZWSA9IHBhdHRlcm5zLllZWVthZGRpdGlvbmFsRGlnaXRzXVxuICB2YXIgcGF0dGVybllZWVlZID0gcGF0dGVybnMuWVlZWVlbYWRkaXRpb25hbERpZ2l0c11cblxuICB2YXIgdG9rZW5cblxuICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWVlZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIHllYXJTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyU3RyaW5nLCAxMCksXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSh5ZWFyU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBZWSBvciDCsVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoY2VudHVyeVN0cmluZywgMTApICogMTAwLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoY2VudHVyeVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHRva2VuXG4gIHZhciBkYXRlXG4gIHZhciBtb250aFxuICB2YXIgd2Vla1xuXG4gIC8vIFlZWVlcbiAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLU1NXG4gIHRva2VuID0gcGF0dGVybnMuTU0uZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aClcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1EREQgb3IgWVlZWURERFxuICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIHZhciBkYXlPZlllYXIgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyB5eXl5LU1NLWRkIG9yIFlZWVlNTUREXG4gIHRva2VuID0gcGF0dGVybnMuTU1ERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5ID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLVd3dyBvciBZWVlZV3d3XG4gIHRva2VuID0gcGF0dGVybnMuV3d3LmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaylcbiAgfVxuXG4gIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3dELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheU9mV2VlayA9IHBhcnNlSW50KHRva2VuWzJdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgZGF0ZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgdG9rZW5cbiAgdmFyIGhvdXJzXG4gIHZhciBtaW51dGVzXG5cbiAgLy8gaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISC5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICB9XG5cbiAgLy8gaGg6bW0gb3IgaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgKVxuICB9XG5cbiAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTVNTLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgK1xuICAgICAgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgK1xuICAgICAgc2Vjb25kcyAqIDEwMDBcbiAgICApXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgd2VlayA9IHdlZWsgfHwgMFxuICBkYXkgPSBkYXkgfHwgMFxuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApXG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpXG4gIHZhciBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDdcbiAgdmFyIGRpZmYgPSB3ZWVrICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXlcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZilcbiAgcmV0dXJuIGRhdGVcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICBpZiAoZGF5T2ZZZWFyIDwgMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgaWYgKGlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY2KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCFpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2NSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgaWYgKHdlZWsgPCAwIHx8IHdlZWsgPiA1Mikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRheSAhPSBudWxsICYmIChkYXkgPCAwIHx8IGRheSA+IDYpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzICE9IG51bGwgJiYgKGhvdXJzIDwgMCB8fCBob3VycyA+PSAyNSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoc2Vjb25kcyAhPSBudWxsICYmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSkge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRpcnR5RGF0ZS5nZXRUaW1lKCkpO1xuICB2YXIgYmFzZVRpbWV6b25lT2Zmc2V0ID0gTWF0aC5jZWlsKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGRhdGUuc2V0U2Vjb25kcygwLCAwKTtcbiAgdmFyIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lKCkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGdldFdlZWtTdGFydEJ5UmVnaW9uICovXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlJDE7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fcmVnaW9uRGF5TWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxuXG5cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlSZWdpb24kMShyZWdpb25Db2RlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYlwiIC8qIGdldFdlZWtTdGFydEJ5UmVnaW9uICovXSkocmVnaW9uQ29kZSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlJDEobG9jYWxlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYVwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSkobG9jYWxlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlOyB9KTtcbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5UmVnaW9uKHJlZ2lvbkNvZGUsIHJlZ2lvbkRheU1hcCkge1xuICAgIHZhciBjb2RlID0gcmVnaW9uRGF5TWFwW3R5cGVvZiByZWdpb25Db2RlID09PSAnc3RyaW5nJyA/IHJlZ2lvbkNvZGUudG9VcHBlckNhc2UoKSA6IHJlZ2lvbkNvZGVdO1xuICAgIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ251bWJlcicgPyBjb2RlIDogMTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlLCBsYW5nUmVnaW9uTWFwLCByZWdpb25EYXlNYXApIHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgIHZhciBkYXRhID0gbG9jYWxlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1stX10vKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gZGF0YVswXTtcbiAgICAgICAgdmFyIGNvdW50cnk7XG4gICAgICAgIGlmIChkYXRhWzFdICYmIGRhdGFbMV0ubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICBsYW5ndWFnZSArPSBcIl9cIiArIChkYXRhWzFdKTtcbiAgICAgICAgICAgIGNvdW50cnkgPSBkYXRhWzJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRyeSA9IGRhdGFbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3VudHJ5KSB7XG4gICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ1JlZ2lvbk1hcFtsYW5ndWFnZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbihjb3VudHJ5Lm1hdGNoKC9eXFxkKyQvKSA/IE51bWJlcihjb3VudHJ5KSA6IGNvdW50cnksIHJlZ2lvbkRheU1hcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDE7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbGFuZ1JlZ2lvbk1hcCA9IHtcbiAgICBlbjogJ1VTJyxcbiAgICB6aDogJ0NOJyxcbiAgICB6aF9oYW5zOiAnQ04nLFxuICAgIGhhbnM6ICdDTicsXG4gICAgd3V1OiAnQ04nLFxuICAgIGhzbjogJ0NOJyxcbiAgICBoYWs6ICdDTicsXG4gICAgbmFuOiAnQ04nLFxuICAgIGdhbjogJ0NOJyxcbiAgICBoaTogJ0lOJyxcbiAgICB0ZTogJ0lOJyxcbiAgICBtcjogJ0lOJyxcbiAgICB0YTogJ0lOJyxcbiAgICBndTogJ0lOJyxcbiAgICBrbjogJ0lOJyxcbiAgICBvcjogJ0lOJyxcbiAgICBtbDogJ0lOJyxcbiAgICBwYV9ndXJ1OiAnSU4nLFxuICAgIGJobzogJ0lOJyxcbiAgICBhd2E6ICdJTicsXG4gICAgYXM6ICdJTicsXG4gICAgbXdyOiAnSU4nLFxuICAgIG1haTogJ0lOJyxcbiAgICBtYWc6ICdJTicsXG4gICAgYmdjOiAnSU4nLFxuICAgIGhuZTogJ0lOJyxcbiAgICBkY2M6ICdJTicsXG4gICAgZHo6ICdCVCcsXG4gICAgdG46ICdCVycsXG4gICAgYW06ICdFVCcsXG4gICAgb206ICdFVCcsXG4gICAgcXVjOiAnR1QnLFxuICAgIGlkOiAnSUQnLFxuICAgIGp2OiAnSUQnLFxuICAgIHN1OiAnSUQnLFxuICAgIG1hZDogJ0lEJyxcbiAgICBtc19hcmFiOiAnSUQnLFxuICAgIGdhOiAnSUUnLFxuICAgIGhlOiAnSUwnLFxuICAgIGphbTogJ0pNJyxcbiAgICBqYTogJ0pQJyxcbiAgICBrbTogJ0tIJyxcbiAgICBrbzogJ0tSJyxcbiAgICBsbzogJ0xBJyxcbiAgICBtaDogJ01IJyxcbiAgICBteTogJ01NJyxcbiAgICBtdDogJ01UJyxcbiAgICBuZTogJ05QJyxcbiAgICBmaWw6ICdQSCcsXG4gICAgY2ViOiAnUEgnLFxuICAgIGlsbzogJ1BIJyxcbiAgICB1cjogJ1BLJyxcbiAgICBwYTogJ1BLJyxcbiAgICBwYV9hcmFiOiAnUEsnLFxuICAgIGFyYWI6ICdQSycsXG4gICAgbGFoOiAnUEsnLFxuICAgIHBzOiAnUEsnLFxuICAgIHNkOiAnUEsnLFxuICAgIHNkX2FyYWI6ICdQSycsXG4gICAgc2tyOiAnUEsnLFxuICAgIGduOiAnUFknLFxuICAgIHRoOiAnVEgnLFxuICAgIHR0czogJ1RIJyxcbiAgICBhZWI6ICdUTicsXG4gICAgemhfaGFudDogJ1RXJyxcbiAgICBoYW50OiAnVFcnLFxuICAgIHNtOiAnV1MnLFxuICAgIHp1OiAnWkEnLFxuICAgIHNuOiAnWlcnLFxuICAgIGFycTogJ0RaJyxcbiAgICBhcjogJ0VHJyxcbiAgICBhcno6ICdFRycsXG4gICAgZmE6ICdJUicsXG4gICAgYXpfYXJhYjogJ0lSJyxcbiAgICBhcnk6ICdNQScsXG4gICAgYm46ICdCRCcsXG4gICAgcmt0OiAnQkQnLFxuICAgIGR2OiAnTVYnXG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGxhbmdSZWdpb25NYXApO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZ1JlZ2lvbk1hcC5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIHJlZ2lvbkRheU1hcCA9IHtcbiAgICBBRzogMCxcbiAgICBBVEc6IDAsXG4gICAgMjg6IDAsXG4gICAgQVI6IDAsXG4gICAgQVJHOiAwLFxuICAgIDMyOiAwLFxuICAgIEFTOiAwLFxuICAgIEFTTTogMCxcbiAgICAxNjogMCxcbiAgICBBVTogMCxcbiAgICBBVVM6IDAsXG4gICAgMzY6IDAsXG4gICAgQlI6IDAsXG4gICAgQlJBOiAwLFxuICAgIDc2OiAwLFxuICAgIEJTOiAwLFxuICAgIEJIUzogMCxcbiAgICA0NDogMCxcbiAgICBCVDogMCxcbiAgICBCVE46IDAsXG4gICAgNjQ6IDAsXG4gICAgQlc6IDAsXG4gICAgQldBOiAwLFxuICAgIDcyOiAwLFxuICAgIEJaOiAwLFxuICAgIEJMWjogMCxcbiAgICA4NDogMCxcbiAgICBDQTogMCxcbiAgICBDQU46IDAsXG4gICAgMTI0OiAwLFxuICAgIENOOiAwLFxuICAgIENITjogMCxcbiAgICAxNTY6IDAsXG4gICAgQ086IDAsXG4gICAgQ09MOiAwLFxuICAgIDE3MDogMCxcbiAgICBETTogMCxcbiAgICBETUE6IDAsXG4gICAgMjEyOiAwLFxuICAgIERPOiAwLFxuICAgIERPTTogMCxcbiAgICAyMTQ6IDAsXG4gICAgRVQ6IDAsXG4gICAgRVRIOiAwLFxuICAgIDIzMTogMCxcbiAgICBHVDogMCxcbiAgICBHVE06IDAsXG4gICAgMzIwOiAwLFxuICAgIEdVOiAwLFxuICAgIEdVTTogMCxcbiAgICAzMTY6IDAsXG4gICAgSEs6IDAsXG4gICAgSEtHOiAwLFxuICAgIDM0NDogMCxcbiAgICBITjogMCxcbiAgICBITkQ6IDAsXG4gICAgMzQwOiAwLFxuICAgIElEOiAwLFxuICAgIElETjogMCxcbiAgICAzNjA6IDAsXG4gICAgSUU6IDAsXG4gICAgSVJMOiAwLFxuICAgIDM3MjogMCxcbiAgICBJTDogMCxcbiAgICBJU1I6IDAsXG4gICAgMzc2OiAwLFxuICAgIElOOiAwLFxuICAgIElORDogMCxcbiAgICAzNTY6IDAsXG4gICAgSk06IDAsXG4gICAgSkFNOiAwLFxuICAgIDM4ODogMCxcbiAgICBKUDogMCxcbiAgICBKUE46IDAsXG4gICAgMzkyOiAwLFxuICAgIEtFOiAwLFxuICAgIEtFTjogMCxcbiAgICA0MDQ6IDAsXG4gICAgS0g6IDAsXG4gICAgS0hNOiAwLFxuICAgIDExNjogMCxcbiAgICBLUjogMCxcbiAgICBLT1I6IDAsXG4gICAgNDEwOiAwLFxuICAgIExBOiAwLFxuICAgIExBMDogMCxcbiAgICA0MTg6IDAsXG4gICAgTUg6IDAsXG4gICAgTUhMOiAwLFxuICAgIDU4NDogMCxcbiAgICBNTTogMCxcbiAgICBNTVI6IDAsXG4gICAgMTA0OiAwLFxuICAgIE1POiAwLFxuICAgIE1BQzogMCxcbiAgICA0NDY6IDAsXG4gICAgTVQ6IDAsXG4gICAgTUxUOiAwLFxuICAgIDQ3MDogMCxcbiAgICBNWDogMCxcbiAgICBNRVg6IDAsXG4gICAgNDg0OiAwLFxuICAgIE1aOiAwLFxuICAgIE1PWjogMCxcbiAgICA1MDg6IDAsXG4gICAgTkk6IDAsXG4gICAgTklDOiAwLFxuICAgIDU1ODogMCxcbiAgICBOUDogMCxcbiAgICBOUEw6IDAsXG4gICAgNTI0OiAwLFxuICAgIE5aOiAwLFxuICAgIE5aTDogMCxcbiAgICA1NTQ6IDAsXG4gICAgUEE6IDAsXG4gICAgUEFOOiAwLFxuICAgIDU5MTogMCxcbiAgICBQRTogMCxcbiAgICBQRVI6IDAsXG4gICAgNjA0OiAwLFxuICAgIFBIOiAwLFxuICAgIFBITDogMCxcbiAgICA2MDg6IDAsXG4gICAgUEs6IDAsXG4gICAgUEFLOiAwLFxuICAgIDU4NjogMCxcbiAgICBQUjogMCxcbiAgICBQUkk6IDAsXG4gICAgNjMwOiAwLFxuICAgIFBZOiAwLFxuICAgIFBSWTogMCxcbiAgICA2MDA6IDAsXG4gICAgU0E6IDAsXG4gICAgU0FVOiAwLFxuICAgIDY4MjogMCxcbiAgICBTRzogMCxcbiAgICBTR1A6IDAsXG4gICAgNzAyOiAwLFxuICAgIFNWOiAwLFxuICAgIFNMVjogMCxcbiAgICAyMjI6IDAsXG4gICAgVEg6IDAsXG4gICAgVEhBOiAwLFxuICAgIDc2NDogMCxcbiAgICBUTjogMCxcbiAgICBUVU46IDAsXG4gICAgNzg4OiAwLFxuICAgIFRUOiAwLFxuICAgIFRUTzogMCxcbiAgICA3ODA6IDAsXG4gICAgVFc6IDAsXG4gICAgVFdOOiAwLFxuICAgIDE1ODogMCxcbiAgICBVTTogMCxcbiAgICBVTUk6IDAsXG4gICAgNTgxOiAwLFxuICAgIFVTOiAwLFxuICAgIFVTQTogMCxcbiAgICA4NDA6IDAsXG4gICAgVkU6IDAsXG4gICAgVkVOOiAwLFxuICAgIDg2MjogMCxcbiAgICBWSTogMCxcbiAgICBWSVI6IDAsXG4gICAgODUwOiAwLFxuICAgIFdTOiAwLFxuICAgIFdTTTogMCxcbiAgICA4ODI6IDAsXG4gICAgWUU6IDAsXG4gICAgWUVNOiAwLFxuICAgIDg4NzogMCxcbiAgICBaQTogMCxcbiAgICBaQUY6IDAsXG4gICAgNzEwOiAwLFxuICAgIFpXOiAwLFxuICAgIFpXRTogMCxcbiAgICA3MTY6IDAsXG4gICAgQUU6IDYsXG4gICAgQVJFOiA2LFxuICAgIDc4NDogNixcbiAgICBBRjogNixcbiAgICBBRkc6IDYsXG4gICAgNDogNixcbiAgICBCSDogNixcbiAgICBCSFI6IDYsXG4gICAgNDg6IDYsXG4gICAgREo6IDYsXG4gICAgREpJOiA2LFxuICAgIDI2MjogNixcbiAgICBEWjogNixcbiAgICBEWkE6IDYsXG4gICAgMTI6IDYsXG4gICAgRUc6IDYsXG4gICAgRUdZOiA2LFxuICAgIDgxODogNixcbiAgICBJUTogNixcbiAgICBJUlE6IDYsXG4gICAgMzY4OiA2LFxuICAgIElSOiA2LFxuICAgIElSTjogNixcbiAgICAzNjQ6IDYsXG4gICAgSk86IDYsXG4gICAgSk9SOiA2LFxuICAgIDQwMDogNixcbiAgICBLVzogNixcbiAgICBLV1Q6IDYsXG4gICAgNDE0OiA2LFxuICAgIExZOiA2LFxuICAgIExCWTogNixcbiAgICA0MzQ6IDYsXG4gICAgTUE6IDYsXG4gICAgTUFSOiA2LFxuICAgIDUwNDogNixcbiAgICBPTTogNixcbiAgICBPTU46IDYsXG4gICAgNTEyOiA2LFxuICAgIFFBOiA2LFxuICAgIFFBVDogNixcbiAgICA2MzQ6IDYsXG4gICAgU0Q6IDYsXG4gICAgU0ROOiA2LFxuICAgIDcyOTogNixcbiAgICBTWTogNixcbiAgICBTWVI6IDYsXG4gICAgNzYwOiA2LFxuICAgIEJEOiA1LFxuICAgIEJHRDogNSxcbiAgICA1MDogNSxcbiAgICBNVjogNSxcbiAgICBNRFY6IDUsXG4gICAgNDYyOiA1XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHJlZ2lvbkRheU1hcCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpb25EYXlNYXAuanMubWFwXG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG52YXIgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvO1xudmFyIGlzV2hpdGVzcGFjZVJlZ2V4ID0gL1xccy87XG52YXIgcHVuY3R1YXRpb25MaXN0ID0gJyFcIiMkJSZcXCcoKSorLC0uLzo7PD0+P0BbXV5fYHt8fX4nO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cblxudmFyIGlzTG93ZXJDYXNlID0gZnVuY3Rpb24gaXNMb3dlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b1VwcGVyQ2FzZSgpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiB1cHBlciBjYXNlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICovXG5cblxudmFyIGlzVXBwZXJDYXNlID0gZnVuY3Rpb24gaXNVcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIHBhc3NPclRocm93RXJyb3IgPSBmdW5jdGlvbiBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cikge1xuICBpZiAoIWxvb3NlKSB7XG4gICAgdmFyIF9jaGFyID0gc3RyLmNoYXJBdChpKTtcblxuICAgIHZhciBwb3MgPSBpICsgMTtcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IFwiU3RyaW5nTWFza0Vycm9yOiBlcnJvciBhcHBseWluZyBtYXNrIGF0IHBvc2l0aW9uIFxcXCJcIi5jb25jYXQocG9zLCBcIlxcXCIgLCBjaGFyIFxcXCJcIikuY29uY2F0KF9jaGFyLCBcIlxcXCJcIiksXG4gICAgICBwb3M6IHBvcyxcbiAgICAgIFwiY2hhclwiOiBfY2hhclxuICAgIH07XG4gIH0gZWxzZSByZXRbaV0gPSAnICc7XG59O1xuLyoqXG4gKiBOdW1iZXJNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogbnVtYmVycyBtYXNraW5nXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG5cbnZhciBTdHJpbmdNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RyaW5nTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaW5nTWFzayk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3RyaW5nTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICogXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2soc3RyLCBfbWFzaykge1xuICAgICAgdmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgICBfbWFzayA9IFN0cmluZyhfbWFzayk7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcbiAgICAgIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RyTGVuID4gbWFza0xlbikge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBzdHI7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgIGVsc2UgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tJc1Rvb1Nob3J0RXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrSXNUb29TaG9ydEVycm9yOiBNYXNrIGlzIHNob3J0ZXIgdGhhbiB0aGUgcGFzc2VkIHN0cmluZ1wiXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJldCA9IG5ldyBBcnJheShtYXNrTGVuKTtcbiAgICAgIHZhciBwb3MgPSAwOyAvLyB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJcblxuICAgICAgdmFyIG1hc2tCeXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICAgIG1hc2tCeXRlID0gX21hc2suY2hhckF0KGkpO1xuXG4gICAgICAgIHN3aXRjaCAobWFza0J5dGUpIHtcbiAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGFueSBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHJldFtpXSA9IHBvcyA8IHN0ckxlbiA/IHN0ci5jaGFyQXQocG9zKSA6ICcgJztcbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlcjsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGUgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlKSkgcmV0W2ldID0gX2J5dGU7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGUpKSByZXRbaV0gPSBfYnl0ZS50b1VwcGVyQ2FzZSgpO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTIgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlMikgfHwgaXNMb3dlckNhc2UoX2J5dGUyKSkgcmV0W2ldID0gX2J5dGUyO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlMyA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlMykpIHJldFtpXSA9IF9ieXRlMztlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU0ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTQpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTQpKSByZXRbaV0gPSBfYnl0ZTQ7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGU0KSkgcmV0W2ldID0gX2J5dGU0LnRvVXBwZXJDYXNlKCk7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneic6XG4gICAgICAgICAgICAvLyBtYXRjaCBsZXR0ZXIgb3IgZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlNSA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGU1KSB8fCBpc0xvd2VyQ2FzZShfYnl0ZTUpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTUpKSByZXRbaV0gPSBfYnl0ZTU7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdVJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciAoZm9yY2UgdXBwZXIgY2FzZSksIGRpZ2l0LCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uLlxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU2ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShfYnl0ZTYpKSByZXRbaV0gPSBfYnl0ZTYudG9VcHBlckNhc2UoKTtlbHNlIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTYpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTYpIHx8IGlzV2hpdGVzcGFjZVJlZ2V4LnRlc3QoX2J5dGU2KSB8fCBwdW5jdHVhdGlvbkxpc3QuaW5kZXhPZihfYnl0ZTYpID4gLTEpIHJldFtpXSA9IF9ieXRlNjtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0W2ldID0gbWFza0J5dGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgIGlmICghbG9vc2UpIHtcbiAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3RyaW5nTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChTdHJpbmdNYXNrKTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVHlwZXNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG5cbi8qKlxuICogVHlwZXNcbiAqXG4gKiBCQmogbWFza3MgZmFjdG9yeVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIFR5cGVzID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHlwZXMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGVzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUeXBlcywgbnVsbCwgW3tcbiAgICBrZXk6IFwibnVtYmVyXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIHRoZSBnaXZlbiBudW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbWFzayBhY2NvcmRpbmcgdG8gQkJqIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlY2ltYWxTZXBhcmF0b3I9Ll0gIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VUcmFpbGluZ1plcm9zPWZhbHNlXSAtIEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG51bWJlcihfbnVtYmVyLCBtYXNrKSB7XG4gICAgICB2YXIgZ3JvdXBpbmdTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLic7XG4gICAgICB2YXIgZm9yY2VUcmFpbGluZ1plcm9zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5tYXNrKF9udW1iZXIsIG1hc2ssIGdyb3VwaW5nU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yLCBmb3JjZVRyYWlsaW5nWmVyb3MsIGxvb3NlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFzayBhIGRhdGUgYWNjb3JkaW5nIHRvIGJiaiBtYXNraW5nIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgbWFzayBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbbG9jYWxlPUJyb3dzZXIncyBsb2NhbGVdIHRoZSBsYW5ndWFnZSB0byB1c2UgZXgoZW4tVVMpLiBkZWZhdWx0IGlzIHRvIHRoZSBzeXN0ZW0gbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3RpbWV6b25lPVN5c3RlbSB0aW1lem9uZV0gdGhlIHRpbWUgem9uZSBkZXNjcmlwdG9yIChlLmcuIEFtZXJpY2EvTG9zX0FuZ2VsZXMpLiBkZWZhdWx0IHRvIHRoZSBzeXN0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gbnVtYmVyIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGUoX2RhdGUsIG1hc2ssIGxvY2FsZSwgdGltZXpvbmUpIHtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJjXCIgLyogZGVmYXVsdCAqL10ubWFzayhfZGF0ZSwgbWFzaywgbG9jYWxlLCB0aW1lem9uZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBtYXNrXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJpbmcoc3RyLCBtYXNrKSB7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10ubWFzayhzdHIsIG1hc2ssIGxvb3NlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVHlwZXM7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoVHlwZXMpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJiai1tYXNrcy5qcy5tYXAiLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiSW5wdXRNYXNraW5nXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJhc2lzLWlucHV0LW1hc2tpbmcuanNcIik7IiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCYXNpc1wiXSA9IHJvb3RbXCJCYXNpc1wiXSB8fCB7fSwgcm9vdFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZmQ3ZjYwNDIxOTJlMTIzMmNmNjUiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImNvbW1vbmpzMlwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJhbWRcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwicm9vdFwiOltcIkJCalwiLFwiTWFza3NcIixcIlN0cmluZ01hc2tcIl19XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tICcuL1RleHRJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5pbXBvcnQge1xyXG4gIG1hc2tJZk5vdE1hc2tlZCxcclxuICB1bm1hc2ssXHJcbiAgZmluZENhcmV0UG9zaXRpb24sXHJcbiAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2ssXHJcbn0gZnJvbSAnLi90b29scy5qcydcclxuXHJcbi8qKlxyXG4gKiBUaGUgYFRleHRJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBzdHJpbmcgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNzdHJpbmctbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBzdHJpbmcgbWFzayBAc2VlIFtCQmogU3RyaW5nIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI3N0cmluZy1tYXNrcykgfFxyXG4gKlxyXG4gKiAgPGJyPlxyXG4gKlxyXG4gKiAqKkV4YW1wbGUgOioqXHJcbiAqIGBgYGh0bWxcclxuICogIDxpbnB1dCBjbGFzcz1cImJiai10ZXh0LW1hc2tlZFwiIG5hbWU9XCJ0ZXN0XCIgaWQ9XCJ0ZXN0XCIgdmFsdWU9XCJlZDIzXCIgZGF0YS1tYXNrPVwiQUEtMDBcIj5cclxuICpcclxuICogIDxzY3JpcHQ+XHJcbiAqICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoZSkge1xyXG4gKiAgICAgIG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuVGV4dElucHV0KHtcclxuICogICAgICAgICBvblVwZGF0ZTogKG1hc2tlZFZhbHVlICwgcmF3VmFsdWUgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH0sXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIFRleHRJbnB1dCB7XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0IG5ldyBUZXh0SW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9ucyAtIFRoZSBpbnB1dCBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5lbGVtZW50cz1cIi5iYmotdGV4dC1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotdGV4dC1tYXNrZWQnLFxyXG4gICAgICAgIGRvYzogZG9jdW1lbnQsXHJcbiAgICAgICAgY3NzQ2xhc3NFcnJvcjogJ2Jiai1tYXNrLWVycm9yJyxcclxuICAgICAgICBjc3NDbGFzc1N1Y2Nlc3M6ICdiYmotbWFzay1zdWNjZXNzJyxcclxuICAgICAgICBvblVwZGF0ZTogbnVsbCxcclxuICAgICAgICBvbkludmFsaWQ6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9XHJcbiAgICB0aGlzLl9vbktleXN0cm9rZSA9IHRoaXMuX29uS2V5c3Ryb2tlLmJpbmQodGhpcylcclxuICAgIHRoaXMuX29uRm9jdXMgPSB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcylcclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQgYW5kIHdyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGZvciBtYXNraW5nIGluIGNhc2VcclxuICAgKiB0aGV5IGFyZSBub3Qgd3JhcHBlZCB5ZXRcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG4gICAgbGV0IGlucHV0LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgcGFyZW50Q2xhc3MgPSBpbnB1dC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgICBpZiAoIWlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQkJqTWFza2luZzogSW5wdXQgaGFzIG5vIElELiBXaXRob3V0IGFuIElEIHRoZSBpbnB1dCBjYW5ub3QgYmUgbWFza2VkYCxcclxuICAgICAgICAgICAgaW5wdXRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBpbnB1dCdzIHdyYXAgdHdpY2VcclxuICAgICAgICBjb25zdCBpc1dyYXBwZWQgPVxyXG4gICAgICAgICAgcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3MuaW5kZXhPZigndGV4dElucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCd0ZXh0SW5wdXRNYXNrX193cmFwJykgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3Vud3JhcChwYXJlbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgdGV4dCBtYXNraW5nIGlucHV0IHdyYXBwZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGlucHV0IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzV3JhcHBlZCB3aGVuIHRydWUgdGhlIGlucHV0IGlzIGFscmVhZHkgd3JhcHBlZCBhbmQgd2UgbmVlZCB0byBhZGQgd2hhdCBpc1xyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0hUTUxTcGFuRWxlbWVudH0gdGhlIHdyYXAgZWxlbWVudFxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF93cmFwKGlucHV0LCBpc1dyYXBwZWQpIHtcclxuICAgIGNvbnN0IGlucHV0SWQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgIGlucHV0TmFtZSA9IGlucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpLFxyXG4gICAgICBtYXNrID0gaW5wdXQuZGF0YXNldC5tYXNrIHx8ICcnLFxyXG4gICAgICBvcmlnaW5hbFBhdHRlcm4gPSBpbnB1dC5wYXR0ZXJuLFxyXG4gICAgICBkZWZhdWx0UGF0dGVybiA9IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICBwYXR0ZXJuID0gb3JpZ2luYWxQYXR0ZXJuIHx8IGRlZmF1bHRQYXR0ZXJuXHJcblxyXG4gICAgbGV0IHdyYXAgPSBudWxsLFxyXG4gICAgICB1bm1hc2tJbnB1dCA9IG51bGxcclxuXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICB3cmFwID0gdGhpcy5vcHRpb25zLmRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgdW5tYXNrSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza0lucHV0ID0gd3JhcC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uZmlndXJlIHRoZSBhY3R1YWwgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpbnB1dC52YWx1ZSA9IG1hc2tJZk5vdE1hc2tlZChpbnB1dC52YWx1ZSwgbWFzaylcclxuICAgIGlucHV0LnBhdHRlcm4gPSBwYXR0ZXJuXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX190ZXh0SW5wdXQnKVxyXG4gICAgaW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xyXG4gICAgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgaWYgKG9yaWdpbmFsUGF0dGVybiAmJiBvcmlnaW5hbFBhdHRlcm4gIT09IGRlZmF1bHRQYXR0ZXJuKSB7XHJcbiAgICAgIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIGlmICghKGlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSB8fCBpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGUnKSkpIHtcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uRm9jdXMpXHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgaW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcclxuICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShpbnB1dC52YWx1ZSwgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxyXG4gICAgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpXHJcbiAgICB1bm1hc2tJbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIHVubWFza0lucHV0LnZhbHVlID0gaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICBpZiAoaW5wdXRJZCkgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2lucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChpbnB1dE5hbWUpIHVubWFza0lucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke2lucHV0TmFtZX0tdW5tYXNrZWRgKVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIC8vIGNvbmZpZ3VyZSB0aGUgd3JhcHBlclxyXG4gICAgICB3cmFwLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGV4dElucHV0TWFza19fd3JhcCcpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQodW5tYXNrSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoaW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB0ZXh0SW5wdXQgdGhlIHdyYXBwZXIgc3BhbiBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF91bndyYXAodGV4dElucHV0KSB7XHJcbiAgICB0ZXh0SW5wdXQucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHRleHRJbnB1dC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB0ZXh0SW5wdXQucXVlcnlTZWxlY3RvcignLnRleHRJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGRlbGV0ZSBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIGlmICghaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm4pIHtcclxuICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdwYXR0ZXJuJylcclxuICAgICAgZGVsZXRlIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuXHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuXHJcbiAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5wdXQsIHRleHRJbnB1dClcclxuICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRJbnB1dClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBldmVyeSBrZXlzdHJva2Ugb24gdGhlIGlucHV0IGFuZCB1cGRhdGUgdGhlIG1hc2tlZCBhbmQgdGhlIHVubWFza2VkIHZhbHVlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX29uS2V5c3Ryb2tlKGUpIHtcclxuICAgIGlmIChlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXkpIHJldHVyblxyXG4gICAgaWYoZS5rZXlDb2RlICE9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQsXHJcbiAgICAgIG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2ssXHJcbiAgICAgIGV2ZW50VHlwZSA9IGUudHlwZVxyXG5cclxuICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWUsXHJcbiAgICAgIGtleUNvZGUgPSBlLmtleUNvZGUsXHJcbiAgICAgIGtleUNvbnRlbnQgPSBlLmtleSB8fCBlLmNvZGUucmVwbGFjZSgvW14wLTldL2csICcnKSxcclxuICAgICAga2V5ID0ga2V5Q29udGVudCA/IChrZXlDb250ZW50Lmxlbmd0aCA+IDEgPyAnJyA6IGtleUNvbnRlbnQpIDogJycsXHJcbiAgICAgIGluc2VydFBvc2l0aW9uID0gZmluZENhcmV0UG9zaXRpb24odmFsdWUsIG1hc2spLFxyXG4gICAgICBuZXdWYWx1ZSxcclxuICAgICAgdW5tYXNrZWRWYWx1ZSxcclxuICAgICAgbWFza0Vycm9yID0gZmFsc2VcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgbmV3VmFsdWUgPSBtYXNrSWZOb3RNYXNrZWQoXHJcbiAgICAgICAgICAoZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9hcmREYXRhKS5nZXREYXRhKCdUZXh0JyksXHJcbiAgICAgICAgICBtYXNrXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2tleXVwJzpcclxuICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAna2V5cHJlc3MnOlxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnRcclxuICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgIT09IGluc2VydFBvc2l0aW9uKSBpbnNlcnRQb3NpdGlvbiA9IHNlbGVjdGlvblN0YXJ0XHJcblxyXG4gICAgICAgIG5ld1ZhbHVlID1cclxuICAgICAgICAgIHZhbHVlLnN1YnN0cigwLCBpbnNlcnRQb3NpdGlvbikgKyBrZXkgKyB2YWx1ZS5zdWJzdHIoaW5zZXJ0UG9zaXRpb24pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFza2VkVmFsdWUgPSB1bm1hc2sobmV3VmFsdWUsIG1hc2spXHJcblxyXG4gICAgaWYgKFszNSwgMzYsIDM3LCAzOCwgMzksIDQwXS5pbmRleE9mKGtleUNvZGUpID09PSAtMSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2ssIGZhbHNlKVxyXG4gICAgICAgIGlmKHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7XHJcbiAgICAgICAgICBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2tlZFZhbHVlXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGAjJHtpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyl9LXVubWFza2VkYFxyXG4gICAgICAgICAgKS52YWx1ZSA9IHVubWFza2VkVmFsdWVcclxuICAgICAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUoaW5wdXQudmFsdWUsIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCwgaW5wdXQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc2tFcnJvciA9IGZhbHNlXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpXHJcbiAgICAgICAgbWFza0Vycm9yID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVDYXJldFBvc2l0aW9uKGlucHV0LCBtYXNrKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbWFza0Vycm9yKSB0aGlzLl92YWxpZGF0ZUlucHV0KGlucHV0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGZvY3VzIGV2ZW50cyBvbiB0aGUgaW5wdXQgYW5kIHVwZGF0ZSB0aGUgY2FyZXQgcG9zaXRpb25cclxuICAgKiB3aGVyZSB0aGUgbmV4dCBjaGFyIHNob3VsZCBiZSBpbnNlcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG1hc2tcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Rm9jdXNFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9vbkZvY3VzKGUpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXRcclxuICAgIGNvbnN0IG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2tcclxuICAgIHRoaXMuX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNhcmV0IHBvc2l0aW9uIG9uIHRoZSBpbnB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gbWFza1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBiYmogc3RyaW5nXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZpbmRDYXJldFBvc2l0aW9uKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShwb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBgY2hlY2tWYWxpZGl0eWAgb24gdGhlIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgdGhpcy5fX2ZpcmVPbkludmFsaWQoaW5wdXQudmFsaWRhdGlvbk1lc3NhZ2UsIGlucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPbkludmFsaWQoZXJyb3IsIGlucHV0KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uSW52YWxpZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25JbnZhbGlkKGVycm9yLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsIHN0YXRlKSB7XHJcbiAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5cclxuY29uc3QgU1VQUE9SVEVEX01BU0tTID0gWydYJywgJ2EnLCAnQScsICcwJywgJ3onLCAnWicsICdVJ11cclxuLyoqXHJcbiAqIFdoZW4gdHJ1ZSAsIHRoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgVW5pY29kZSBQcm9wZXJ0eSBFc2NhcGVzXHJcbiAqIG90aGVyd2lzZSBpdCBpcyBmYWxzZSBcclxuICogXHJcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yZWdleHAtdW5pY29kZS1wcm9wZXJ0eS1lc2NhcGVzfVxyXG4gKi9cclxubGV0IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxudHJ5IHtcclxuICBldmFsKCcvXFxcXHB7TH0vdScpXHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSB0cnVlXHJcbn0gY2F0Y2ggKGVycikge1xyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBvciBub3RcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIG1hc2tlZCBvciB1bm1hc2tlZCB2YWx1ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYSBiYmogbWFza1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHZhbHVlIGlzIG1hc2tlZCB3aXRoIGdpdmVuIG1hc2sgLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmNvbnN0IGlzTWFza2VkVmFsdWUgPSAodmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGlzTWFza2VkVmFsdWUuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHt2YWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCFpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0pIHtcclxuICAgIGNvbnN0IHVubWFza2VkVmFsdWUgPSB1bm1hc2sodmFsdWUsIG1hc2spXHJcbiAgICBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICB2YWx1ZSA9PT0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2spXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXNrIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBtYXNrIGluIGNhc2UgdGhlIHZhbHVlIGlzIG5vdCBhbHJlYWR5IG1hc2tlZCB3aXRoIHRoZVxyXG4gKiBnaXZlbiBtYXNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBtYXNrZWQgb3IgdW5tYXNrZWQgdmFsdWVcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIGEgYmJqIG1hc2tcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSBhIG1hc2tlZCB2YWx1ZVxyXG4gKi9cclxuY29uc3QgbWFza0lmTm90TWFza2VkID0gKHZhbHVlLCBtYXNrKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke3ZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIW1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBpZiAoaXNNYXNrZWRWYWx1ZSh2YWx1ZSwgbWFzaykpIHtcclxuICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IFN0cmluZ01hc2subWFzayhcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgbWFzayxcclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSBTdHJpbmdNYXNrLm1hc2soJycsIG1hc2spXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSByZWdleCBwYXR0ZXIgYmFzZWQgb24gdGhlIGdpdmUgdGFza1xyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYmJqIHN0cmluZyBtYXNrXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gcmVnZXggZm9yIHRoZSBnaXZlIG1hc2tcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrID0gbWFzayA9PiB7XHJcbiAgaWYgKHR5cGVvZiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBtYXNrXHJcblxyXG4gIGlmICghZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyeSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBsZXQgcmVnZXggPSAnJ1xyXG4gICAgbWFza0FzQXJyeS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGMpIHtcclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoW14gLX5dKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnYSc6XHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAvLyBodHRwczovL21vdGhlcmVmZi5pbi9yZWdleHB1I2lucHV0PXZhcityZWdleCslM0QrLyU1Q3AlN0JMJTdEL3UlM0ImdW5pY29kZVByb3BlcnR5RXNjYXBlPTFcclxuICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1MDAzMy9yZWd1bGFyLWV4cHJlc3Npb24tdG8tbWF0Y2gtbm9uLWFzY2lpLWNoYXJhY3RlcnMjYW5zd2VyLTQ4OTAyNzY1XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICdcXFxccHtMfSdcclxuICAgICAgICAgICAgOiAnKCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoWzAtOV0pJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICd6JzpcclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJyhbMC05XXxcXFxccHtMfSknXHJcbiAgICAgICAgICAgIDogJyhbMC05XXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICcoKFswLTldKXwoXFxcXHMpfChbLiwvIyEkJV4mKjs6e309LV9gfigpXSl8KFxcXFxwe0x9KSknXHJcbiAgICAgICAgICAgIDogJygoWzAtOV0pfChcXFxccyl8KFsuLC8jISQlXiYqOzp7fT0tX2B+KCldKXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJlZ2V4ICs9IGMucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldID0gcmVnZXhcclxuICB9XHJcblxyXG4gIHJldHVybiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVbm1hc2sgdGhlIGdpdmVuIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrZWRWYWx1ZSBtYXNrZWQgc3RyaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICB0aGUgdXNlZCBtYXNrIHRvIHByb2R1Y2UgdGhlIG1hc2tlZCBzdHJpbmdcclxuICovXHJcbmNvbnN0IHVubWFzayA9IChtYXNrZWRWYWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgdW5tYXNrLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHVubWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHttYXNrZWRWYWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCF1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgY29uc3QgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWUuc3BsaXQoJycpXHJcblxyXG4gICAgbGV0IHVubWFza2VkID0gJydcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbCA9IG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF1cclxuICAgICAgY29uc3QgbWFzayA9IG1hc2tBc0FycmF5W2luZGV4XVxyXG4gICAgICBjb25zdCBlbEhhc01hc2sgPSBTVVBQT1JURURfTUFTS1MuaW5kZXhPZihtYXNrKSA+IC0xXHJcbiAgICAgIGlmIChlbEhhc01hc2spIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICAgICAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPyAndScgOiAnJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocGF0dGVybi50ZXN0KGVsKSkgdW5tYXNrZWQgKz0gZWxcclxuICAgICAgICBlbHNlIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSA9IHVubWFza2VkLnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICB9XHJcblxyXG4gIHJldHVybiB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gdGhlIG1hc2tlZCBzdHJpbmcgLCBmaW5kIHRoZSBuZXh0IGNhcmV0IHBvc2l0aW9uIGRlcGVuZGluZyBvblxyXG4gKiB3aGF0IGlzIG1pc3NpbmcgdG8gY29tcGxldGUgdGhlIG1hc2tcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2tlZFZhbHVlIG1hc2tlZCBzdHJpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIHRoZSB1c2VkIG1hc2sgdG8gcHJvZHVjZSB0aGUgbWFza2VkIHN0cmluZ1xyXG4gKi9cclxuY29uc3QgZmluZENhcmV0UG9zaXRpb24gPSAobWFza2VkVmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke21hc2tlZFZhbHVlfS0ke21hc2t9YFxyXG4gIGlmICghZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgbGV0IG1hc2tlZFZhbHVlQXNBcnJheSA9IG1hc2tlZFZhbHVlLnNwbGl0KCcnKVxyXG4gICAgaWYgKG1hc2tlZFZhbHVlQXNBcnJheS5sZW5ndGggPCBtYXNrQXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWVBc0FycmF5LmNvbmNhdChcclxuICAgICAgICBuZXcgQXJyYXkobWFza0FzQXJyYXkubGVuZ3RoIC0gbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aCkuam9pbignICcpLnNwbGl0KCcnKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uID0gLTFcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXNrQXNBcnJheS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWwgPSBtYXNrQXNBcnJheVtpbmRleF1cclxuICAgICAgaWYgKGVsICE9PSBtYXNrZWRWYWx1ZUFzQXJyYXlbaW5kZXhdKSB7XHJcbiAgICAgICAgLy8gaWYgKG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF0gPT09ICcgJykgcmV0dXJuIGluZGV4XHJcbiAgICAgICAgaWYgKFNVUFBPUlRFRF9NQVNLUy5pbmRleE9mKGVsKSA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2soZWwpLFxyXG4gICAgICAgICAgICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA/ICd1JyA6ICcnXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QobWFza2VkVmFsdWVBc0FycmF5W2luZGV4XSkpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSBpbmRleFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICBwb3NpdGlvbiA8IDAgPyBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoIDogcG9zaXRpb25cclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbi5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgaXNNYXNrZWRWYWx1ZSxcclxuICBtYXNrSWZOb3RNYXNrZWQsXHJcbiAgdW5tYXNrLFxyXG4gIGZpbmRDYXJldFBvc2l0aW9uLFxyXG4gIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLFxyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVELFxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvdG9vbHMuanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgTnVtYmVySW5wdXQgZnJvbSAnLi9OdW1iZXJJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9pbmRleC5qcyIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWlucHV0LW1hc2tpbmcgbGliLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJ2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzaydcclxuXHJcbmNvbnN0IGNvdW50RGVjaW1hbHMgPSB2YWx1ZSA9PiB7XHJcbiAgaWYgKHZhbHVlICUgMSAhPSAwKSB7XHJcbiAgICBjb25zdCBzcGxpdCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVxyXG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMikgcmV0dXJuIHNwbGl0WzFdLmxlbmd0aFxyXG4gIH1cclxuICByZXR1cm4gMFxyXG59XHJcblxyXG4vKipcclxuICogVGhlIGBOdW1iZXJJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBOdW1iZXIgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNudW1iZXItbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBudW1iZXIgbWFzayBAc2VlIFtCQmogTnVtYmVyIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI251bWJlci1tYXNrcykgfFxyXG4gKiB8IG1pbiB8ICAgICAgICAgfCBUaGUgbWF4aW11bSB2YWx1ZSB0byBhY2NlcHQgZm9yIHRoaXMgaW5wdXR8XHJcbiAqIHwgbWF4IHwgICAgICAgICB8IFRoZSBtaW5pbXVtIHZhbHVlIHRvIGFjY2VwdCBmb3IgdGhpcyBpbnB1dHxcclxuICogfCBzdGVwIHwgICAgICAgICB8IEEgc3RlcHBpbmcgaW50ZXJ2YWwgdG8gdXNlIHdoZW4gdXNpbmcgdXAgYW5kIGRvd24gYXJyb3dzIHRvIGFkanVzdCB0aGUgdmFsdWUsIGFzIHdlbGwgYXMgZm9yIHZhbGlkYXRpb258XHJcbiAqIHxncm91cGluZy1zZXBhcmF0b3IgfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvciB8XHJcbiAqIHxkZWNpbWFsLXNlcGFyYXRvciB8IC4gfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3IgfFxyXG4gKiB8Zm9yY2UtdHJhaWxpbmctemVyb3MgfCBmYWxzZSB8IEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLiBmb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpIHJldHVybnMgLjEwIGluc3RlYWQgb2YgLjF8XHJcbiAqXHJcbiAqICA8YnI+XHJcbiAqXHJcbiAqICoqRXhhbXBsZSA6KipcclxuICogYGBgaHRtbFxyXG4gKiAgPGlucHV0IGNsYXNzPVwiYmJqLW51bWJlci1tYXNrZWRcIiBuYW1lPVwidGVzdFwiIGlkPVwidGVzdFwiIHZhbHVlPVwiMTIzNFwiIGRhdGEtbWFzaz1cIiMjLCMjMFwiPlxyXG4gKlxyXG4gKiAgPHNjcmlwdD5cclxuICogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAqICAgICAgbmV3IEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dCh7XHJcbiAqXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtTdHJpbmd9IHZhbHVlTWFza2VkICBtYXNrZWQgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge051bWJlcn0gdmFsdWVVbm1hc2tlZCAgb3JpZ2luYWwgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICogICAgICAgICBvblVwZGF0ZTogKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCwgaXNBcHBsaWVkLCBpc0luaXRpYWwpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9LFxyXG4gKlxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIE51bWJlcklucHV0IHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3QgbmV3IE51bWJlcklucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnMgLSBUaGUgaW5wdXQgb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fFN0cmluZ30gW29wdGlvbnMuZWxlbWVudHM9XCIuYmJqLW51bWJlci1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotbnVtYmVyLW1hc2tlZCcsXHJcbiAgICAgICAgZG9jOiBkb2N1bWVudCxcclxuICAgICAgICBjc3NDbGFzc0Vycm9yOiAnYmJqLW1hc2stZXJyb3InLFxyXG4gICAgICAgIGNzc0NsYXNzU3VjY2VzczogJ2Jiai1tYXNrLXN1Y2Nlc3MnLFxyXG4gICAgICAgIG9uVXBkYXRlOiBudWxsLFxyXG4gICAgICAgIG9uSW52YWxpZDogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIgPSB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIgPSB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnJlZnJlc2goKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50IGFuZCB3cmFwIHRoZSBpbnB1dCBlbGVtZW50cyBmb3IgbWFza2luZyBpbiBjYXNlXHJcbiAgICogdGhleSBhcmUgbm90IHdyYXBwZWQgeWV0XHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuICAgIGxldCBpbnB1dCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgIHBhcmVudENsYXNzID0gaW5wdXQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgICAgaWYgKCFpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJykpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYEJCak1hc2tpbmc6IElucHV0IGhhcyBubyBJRC4gV2l0aG91dCBhbiBJRCB0aGUgaW5wdXQgY2Fubm90IGJlIG1hc2tlZGAsXHJcbiAgICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gd2UgZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5wdXQncyB3cmFwIHR3aWNlXHJcbiAgICAgICAgY29uc3QgaXNXcmFwcGVkID1cclxuICAgICAgICAgIHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ251bWJlcklucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW53cmFwKHBhcmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBudW1iZXIgbWFza2luZyBpbnB1dCB3cmFwcGVyXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGFjdHVhbElucHV0IHRoZSBpbnB1dCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1dyYXBwZWQgd2hlbiB0cnVlIHRoZSBpbnB1dCBpcyBhbHJlYWR5IHdyYXBwZWQgYW5kIHdlIG5lZWQgdG8gYWRkIHdoYXQgaXNcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9ubHlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtIVE1MU3BhbkVsZW1lbnR9IHdyYXBwZXIgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfd3JhcChhY3R1YWxJbnB1dCwgaXNXcmFwcGVkKSB7XHJcbiAgICBjb25zdCBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpLFxyXG4gICAgICBhY3R1YWxJbnB1dE5hbWUgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSxcclxuICAgICAgYWN0dWFsSW5wdXRTdGVwID0gYWN0dWFsSW5wdXQuZGF0YXNldC5zdGVwIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWF4ID0gYWN0dWFsSW5wdXQuZGF0YXNldC5tYXggfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNaW4gPSBhY3R1YWxJbnB1dC5kYXRhc2V0Lm1pbiB8fCBudWxsLFxyXG4gICAgICBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yID1cclxuICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yIHx8ICcsJyxcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcuJyxcclxuICAgICAgYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MgPVxyXG4gICAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayA9IGFjdHVhbElucHV0LmRhdGFzZXQubWFzayB8fCAnJyxcclxuICAgICAgYWN0dWFsSW5wdXRDbGFzc2VzID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLFxyXG4gICAgICBhY3R1YWxJbnB1dFJlcXVpcmVkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpIHx8IG51bGxcclxuXHJcbiAgICBsZXQgd3JhcCA9IG51bGwsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSBudWxsXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgd3JhcCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBhY3R1YWxJbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy5udW1iZXJJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgYWN0dWFsIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgYWN0dWFsSW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgYWN0dWFsSW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgICAgaWYgKFxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHxcclxuICAgICAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCA9IGFjdHVhbElucHV0LnZhbHVlIHx8IDBcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZ3JvdXBpbmdTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yXHJcbiAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3JcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zID0gYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3NcclxuICAgIGFjdHVhbElucHV0LnZhbHVlID0gTnVtYmVyTWFzay5tYXNrKFxyXG4gICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayxcclxuICAgICAgYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG4gICAgKS50cmltKClcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQoXHJcbiAgICAgICdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3NcclxuICAgIClcclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tlZElucHV0LnZhbHVlID0gYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgYWN0dWFsSW5wdXRDbGFzc2VzKVxyXG4gICAgaWYgKGFjdHVhbElucHV0SWQpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2FjdHVhbElucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChhY3R1YWxJbnB1dE5hbWUpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7YWN0dWFsSW5wdXROYW1lfS11bm1hc2tlZGApXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRSZXF1aXJlZCkgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJ3JlcXVpcmVkJylcclxuXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRTdGVwKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIGFjdHVhbElucHV0U3RlcClcclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBkZWNpbWFscyA9IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgICAgbGV0IHN0ZXAgPSAnMSdcclxuICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xyXG4gICAgICAgIHN0ZXAgPSBgLiR7QXJyYXkoZGVjaW1hbHMpLmpvaW4oJzAnKX0xYFxyXG4gICAgICB9XHJcblxyXG4gICAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIHN0ZXApXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdHVhbElucHV0TWluKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnbWluJywgYWN0dWFsSW5wdXRNaW4pXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRNYXgpIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdtYXgnLCBhY3R1YWxJbnB1dE1heClcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5pbnB1dElkID0gYWN0dWFsSW5wdXRJZFxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lm1hc2sgPSBhY3R1YWxJbnB1dE1hc2tcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3JcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgPSBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LmFkZCgnbnVtYmVySW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgICAgLy8gY29uZmlndXJlIHRoZSB3cmFwcGVyXHJcbiAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdjbGFzcycsICdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKVxyXG4gICAgICB3cmFwLmFwcGVuZENoaWxkKHVubWFza2VkSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYWN0dWFsSW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihOdW1iZXIoYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkKSkpIHtcclxuICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpKSB7XHJcbiAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShcclxuICAgICAgICAgIGFjdHVhbElucHV0LnZhbHVlLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB3cmFwcGVyIHRoZSB3cmFwcGVyIHNwYW4gaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdW53cmFwKHdyYXBwZXIpIHtcclxuICAgIGNvbnN0IGFjdHVhbElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcubnVtYmVySW5wdXRNYXNrX190ZXh0SW5wdXQnKSxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGApXHJcblxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgIHdyYXBwZXIucmVtb3ZlQ2hpbGQodW5tYXNrZWRJbnB1dClcclxuXHJcbiAgICBhY3R1YWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgIGFjdHVhbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgZGVsZXRlIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG5cclxuICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYWN0dWFsSW5wdXQsIHdyYXBwZXIpXHJcbiAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcilcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBjbGljayBhbmQgZm9jdXNpbiBldmVudCBvbiB0aGUgYWN0dWFsIGlucHV0IGFuZCB0b2dnbGUgdGhlIG51bWJlciBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9hY3R1YWxJbnB1dEhhbmRsZXIoZSkge1xyXG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGBcclxuICAgICAgKVxyXG5cclxuICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbnVtYmVyJylcclxuICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5mb2N1cygpXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IFN0cmluZyh1bm1hc2tlZElucHV0LnZhbHVlKS5sZW5ndGhcclxuICAgICAgdW5tYXNrZWRJbnB1dC50eXBlID0gJ3RleHQnXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpXHJcbiAgICAgIHVubWFza2VkSW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIHRoZSB1bm1hc2tlZCBpbnB1dCBrZXlkb3duIGFuZCBmb2N1c291dCBldmVudHMgYW5kIGNoZWNrXHJcbiAgICogaWYgdGhlIGlucHV0IHZhbHVlIGNhbiBiZSBtYXNrZWQgb3Igbm90XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VubWFza2VkSW5wdXRIYW5kbGVyKGUpIHtcclxuICAgIGNvbnN0IHVubWFza2VkSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAga2V5Q29kZSA9IGUua2V5Q29kZSxcclxuICAgICAgbWFzayA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5tYXNrLFxyXG4gICAgICBncm91cGluZ1NlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSB1bm1hc2tlZElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zLFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmlucHV0SWQsXHJcbiAgICAgIGFjdHVhbElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfWApXHJcblxyXG4gICAgbGV0IHJlc3RvcmUgPSBmYWxzZSxcclxuICAgICAgYXBwbHkgPSBmYWxzZSxcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZSxcclxuICAgICAgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBOdW1iZXJNYXNrLm1hc2soXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC52YWx1ZSB8fCAwLFxyXG4gICAgICAgIG1hc2ssXHJcbiAgICAgICAgZ3JvdXBpbmdTZXBhcmF0b3IsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcixcclxuICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKS50cmltKClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZVxyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlLCBhY3R1YWxJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICByZXN0b3JlID0gWzEzLCAyN10uaW5kZXhPZihrZXlDb2RlKSA+IC0xIHx8IGUudHlwZSA9PT0gJ2ZvY3Vzb3V0J1xyXG4gICAgYXBwbHkgPSBtYXNrZWRWYWx1ZSAmJiBpc1ZhbGlkXHJcblxyXG4gICAgaWYgKHJlc3RvcmUpIHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICAgIGFjdHVhbElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpXHJcblxyXG4gICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgICBhY3R1YWxJbnB1dC52YWx1ZSA9IG1hc2tlZFZhbHVlXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrZWRJbnB1dC52YWx1ZVxyXG4gICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUobWFza2VkVmFsdWUsIHVubWFza2VkSW5wdXQudmFsdWUsIGFjdHVhbElucHV0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVubWFza2VkSW5wdXQudmFsdWUgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYGNoZWNrVmFsaWRpdHlgIG9uIHRoZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSB1bm1hc2tlZElucHV0XHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBhY3R1YWxJbnB1dFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUlucHV0KHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0KSB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IHRydWVcclxuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHVubWFza2VkSW5wdXQudmFsdWUpXHJcbiAgICBpZiAodW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbicgJiYgIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBtYXggPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnbWF4JylcclxuICAgICAgY29uc3QgbWluID0gdW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ21pbicpXHJcbiAgICAgIGNvbnN0IHN0ZXAgPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnc3RlcCcpXHJcblxyXG4gICAgICBpZiAobWluKSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA+PSBOdW1iZXIobWluKVxyXG4gICAgICBpZiAobWF4KSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA8PSBOdW1iZXIobWF4KVxyXG5cclxuICAgICAgaWYgKHN0ZXApXHJcbiAgICAgICAgaXNWYWxpZCA9XHJcbiAgICAgICAgICBpc1ZhbGlkICYmIGNvdW50RGVjaW1hbHMoc3RlcCkgPT09IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgIH0gZWxzZSBpc1ZhbGlkID0gdW5tYXNrZWRJbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChcclxuICAgICAgICB1bm1hc2tlZElucHV0LnZhbGlkYXRpb25NZXNzYWdlIHx8ICdWYWxpZGl0eSBjaGVjayBmYWlscycsXHJcbiAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVNYXNrZWQgIG1hc2tlZCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVVubWFza2VkICBvcmlnaW5hbCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGFjdHVhbCBpbnB1dCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPblVwZGF0ZSh2YWx1ZU1hc2tlZCwgdmFsdWVVbm1hc2tlZCwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25VcGRhdGUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vbkludmFsaWQoZXJyb3IsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2FwcGx5Q3NzQ2xhc3NTdGF0ZSh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dCwgc3RhdGUpIHtcclxuICAgIGlmIChcclxuICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8XHJcbiAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgKSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9OdW1iZXJJbnB1dC5qcyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV83X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiTnVtYmVyTWFza1wiXX1cbi8vIG1vZHVsZSBpZCA9IDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuY29uc3QgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvXG5jb25zdCBpc1doaXRlc3BhY2VSZWdleCA9IC9cXHMvXG5jb25zdCBwdW5jdHVhdGlvbkxpc3QgPSAnIVwiIyQlJlxcJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fidcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzTG93ZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvVXBwZXJDYXNlKClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIHVwcGVyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzVXBwZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvTG93ZXJDYXNlKClcbn1cblxuY29uc3QgcGFzc09yVGhyb3dFcnJvciA9IChsb29zZSwgcmV0LCBpLCBzdHIpID0+IHtcbiAgaWYgKCFsb29zZSkge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckF0KGkpXG4gICAgY29uc3QgcG9zID0gaSArIDFcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IGBTdHJpbmdNYXNrRXJyb3I6IGVycm9yIGFwcGx5aW5nIG1hc2sgYXQgcG9zaXRpb24gXCIke3Bvc31cIiAsIGNoYXIgXCIke2NoYXJ9XCJgLFxuICAgICAgcG9zLFxuICAgICAgY2hhclxuICAgIH1cbiAgfSBlbHNlIHJldFtpXSA9ICcgJ1xufVxuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBTdHJpbmdNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAqIFxuICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAqIEB0aHJvd3Mge01hc2tFcnJvcn1cbiAgICogXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgbWFzayhzdHIsIG1hc2ssIGxvb3NlID0gdHJ1ZSkge1xuICAgIHN0ciA9IFN0cmluZyhzdHIpXG4gICAgbWFzayA9IFN0cmluZyhtYXNrKVxuICAgIGNvbnN0IG1hc2tMZW4gPSBtYXNrLmxlbmd0aFxuICAgIGNvbnN0IHN0ckxlbiA9IHN0ci5sZW5ndGhcblxuICAgIGlmIChzdHJMZW4gPiBtYXNrTGVuKSB7XG4gICAgICBpZiAobG9vc2UpIHJldHVybiBzdHJcbiAgICAgIC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBuYW1lOiAnTWFza0lzVG9vU2hvcnRFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tJc1Rvb1Nob3J0RXJyb3I6IE1hc2sgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXNzZWQgc3RyaW5nYFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pXG4gICAgbGV0IHBvcyA9IDAgLy8gdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyXG4gICAgbGV0IG1hc2tCeXRlID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICBtYXNrQnl0ZSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBzd2l0Y2ggKG1hc2tCeXRlKSB7XG4gICAgICAgIGNhc2UgJ1gnOiAvLyBtYXRjaCBhbnkgY2hhcmFjdGVyXG4gICAgICAgICAgcmV0W2ldID0gcG9zIDwgc3RyTGVuID8gc3RyLmNoYXJBdChwb3MpIDogJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0EnOiAvLyBtYXRjaCBsZXR0ZXI7IGZvcmNlIHVwcGVyIGNhc2VcbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdhJzogLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKGJ5dGUpIHx8IGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlXG4gICAgICAgICAgICBlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKVxuICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJzAnOiAvLyBtYXRjaCBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnWic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShieXRlKSB8fCBpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNVcHBlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNMb3dlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZWdleC50ZXN0KGJ5dGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ1UnOiAvLyBtYXRjaCBsZXR0ZXIgKGZvcmNlIHVwcGVyIGNhc2UpLCBkaWdpdCwgd2hpdGVzcGFjZSBvciBwdW5jdHVhdGlvbi5cbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzVXBwZXJDYXNlKGJ5dGUpIHx8XG4gICAgICAgICAgICAgIGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSB8fFxuICAgICAgICAgICAgICBpc1doaXRlc3BhY2VSZWdleC50ZXN0KGJ5dGUpIHx8XG4gICAgICAgICAgICAgIHB1bmN0dWF0aW9uTGlzdC5pbmRleE9mKGJ5dGUpID4gLTFcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldFtpXSA9IG1hc2tCeXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICBpZiAoIWxvb3NlKSB7XG4gICAgICAgIHRocm93IHsgbmFtZTogJ01hc2tFcnJvcicsIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0cmluZ01hc2tcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBOdW1iZXJNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWNpbWFsU2VwYXJhdG9yPS5dICAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgKiBcbiAgICogQHRocm93cyB7TWFza0Vycm9yfSBvbmx5IGlmIGxvb3NlIGlzIGRpc2FibGVkXG4gICAqIFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgbWFza2VkIG51bWJlclxuICAgKi9cbiAgc3RhdGljIG1hc2soXG4gICAgbnVtYmVyLFxuICAgIG1hc2ssXG4gICAgZ3JvdXBpbmdTZXBhcmF0b3IgPSAnLCcsXG4gICAgZGVjaW1hbFNlcGFyYXRvciA9ICcuJyxcbiAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSBmYWxzZSxcbiAgICBsb29zZSA9IHRydWVcbiAgKSB7XG4gICAgY29uc3QgbWFza0xlbiA9IG1hc2subGVuZ3RoXG4gICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0clxuICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTUFTS1xuICAgIGxldCBtYXNrQmVmb3JlRGVjaW1hbCA9IDBcbiAgICBsZXQgbWFza0FmdGVyRGVjaW1hbCA9IDBcbiAgICBsZXQgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tMZW47ICsraSkge1xuICAgICAgY29uc3QgbSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBpZiAobSA9PSAnMCcgfHwgbSA9PSAnIycpIHtcbiAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsXG4gICAgICAgIGVsc2UgKyttYXNrQmVmb3JlRGVjaW1hbFxuICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgIH1cblxuICAgIGxldCBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW1iZXIsIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgbGV0IGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKVxuXG4gICAgLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuICAgIGxldCBpbkxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGxldCBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgIGxldCBudW1BZnRlckRlY2ltYWwgPSAwXG4gICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluTGVuOyArK2kpIHtcbiAgICAgIGlmIChieXRlc1tpXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbFxuICAgICAgICBlbHNlICsrbnVtQmVmb3JlRGVjaW1hbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsd2F5cyBpZ25vcmUgbWFzayBvdmVyZmxvd1xuICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIG51bWJlci50b1N0cmluZygpXG4gICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJvdW5kIGlmIG1hc2sgaXMgZm9yIGEgbG93ZXIgcHJlY2lzaW9uIG51bWJlclxuICAgIGlmIChudW1BZnRlckRlY2ltYWwgPiBtYXNrQWZ0ZXJEZWNpbWFsKSB7XG4gICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSlcbiAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoXG5cbiAgICAgIC8vIEdldCBuZXcgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG4gICAgICBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgICAgbnVtQWZ0ZXJEZWNpbWFsID0gMFxuICAgICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5MZW47ICsraSkge1xuICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsXG4gICAgICAgICAgZWxzZSArK251bUJlZm9yZURlY2ltYWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcbiAgICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKClcbiAgICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbGxCeXRlID0gJyAnLFxuICAgICAgZmxvYXRCeXRlID0gJyAnXG4gICAgbGV0IGluUG9zID0gMCxcbiAgICAgIG91dFBvcyA9IDAsXG4gICAgICBmbG9hdFBvcyA9IDBcbiAgICBpZiAobWFzay5jaGFyQXQoMCkgPT0gJyonKSBmaWxsQnl0ZSA9ICcqJ1xuXG4gICAgY29uc3QgZmlsbEluaXQgPSBmaWxsQnl0ZVxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgPCAwXG4gICAgbGV0IGVtaXREZWNpbWFsID0gaW5MZW4gPiAwIHx8IG1hc2suaW5kZXhPZignMCcpID49IDBcbiAgICBsZXQgZm91bmRaZXJvID0gZmFsc2VcbiAgICBsZXQgZm91bmREaWdpdCA9IGZhbHNlXG4gICAgbGV0IGN1cnJlbmN5ID0gZmFsc2VcbiAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuXG4gICAgbGV0IHJldCA9IG5ldyBBcnJheShtYXNrTGVuKVxuXG4gICAgZm9yIChsZXQgbWFza1BvcyA9IDA7IG1hc2tQb3MgPCBtYXNrTGVuOyArK21hc2tQb3MpIHtcbiAgICAgIGxldCBtID0gbWFzay5jaGFyQXQobWFza1BvcylcbiAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsXG4gICAgICAgICAgaWYgKG1hc2tCZWZvcmVEZWNpbWFsIDwgbnVtQmVmb3JlRGVjaW1hbCAmJiBpblBvcyA8IGluTGVuKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXVxuICAgICAgICAgICAgKytpblBvc1xuICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCdcbiAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWxcbiAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdXG4gICAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9XG4gICAgICAgICAgICAgIGZvdW5kRGVjaW1hbCAmJlxuICAgICAgICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgJiZcbiAgICAgICAgICAgICAgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDBcbiAgICAgICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgICAgIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3NcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgIGlmIChmb3VuZFplcm8gfHwgaW5Qb3MgPiAwKSByZXRbb3V0UG9zXSA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBpZiAoIWZvdW5kRGVjaW1hbCkgZmxvYXRQb3MgPSBtYXNrUG9zXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICctJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogZmlsbEJ5dGVcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgIGZsb2F0Qnl0ZSA9IGlzTmVnYXRpdmUgPyAnLScgOiAnKydcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHJldFtvdXRQb3NdID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJ1xuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgZmxvYXRCeXRlID0gJyQnXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICckJ1xuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgIC8vICAgY3VycmVuY3kgPSB0cnVlXG4gICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSAnJidcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgLy8gICBicmVha1xuXG4gICAgICAgIC8vIGNhc2UgJ0AnOlxuICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgIC8vICAgICBmbG9hdEJ5dGUgPSAnQCdcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJ0AnXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgICsrb3V0UG9zXG4gICAgICAgIC8vICAgYnJlYWtcblxuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICcoJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKCdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcpJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnICdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0QnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyonXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gZW1pdERlY2ltYWwgPyBkZWNpbWFsU2VwYXJhdG9yIDogZmlsbEJ5dGVcbiAgICAgICAgICBmaWxsQnl0ZSA9ICcgJ1xuICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0W291dFBvc10gPSBtXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmbG9hdEJ5dGUgIT0gJyAnKSB7XG4gICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvc1xuICAgICAgd2hpbGUgKGZsb2F0UG9zID49IG1hc2tMZW4pIC0tZmxvYXRQb3NcbiAgICAgIGlmIChyZXRbZmxvYXRQb3NdID09IGZpbGxJbml0KSByZXRbZmxvYXRQb3NdID0gZmxvYXRCeXRlXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG5cbiAgc3RhdGljIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgaWYgKHJldmVyc2VTaGlmdCkgcHJlY2lzaW9uID0gLXByZWNpc2lvblxuICAgIHZhciBudW1BcnJheSA9ICgnJyArIG51bWJlcikuc3BsaXQoJ2UnKVxuICAgIHJldHVybiArKFxuICAgICAgbnVtQXJyYXlbMF0gK1xuICAgICAgJ2UnICtcbiAgICAgIChudW1BcnJheVsxXSA/ICtudW1BcnJheVsxXSArIHByZWNpc2lvbiA6IHByZWNpc2lvbilcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3JvdW5kKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KFxuICAgICAgTWF0aC5yb3VuZChOdW1iZXJNYXNrLl9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgZmFsc2UpKSxcbiAgICAgIHByZWNpc2lvbixcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3RvQ2hhckFycmF5KG51bWJlcikge1xuICAgIGNvbnN0IHNpZ251bSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtYmVyKVxuICAgIGxldCBjaGFycyA9IFtdXG5cbiAgICBpZiAoc2lnbnVtICE9PSAwKSB7XG4gICAgICBsZXQgc3RyaW5nID0gc2lnbnVtIDwgMCA/IGAkey0xICogbnVtYmVyLnRvU3RyaW5nKCl9YCA6IG51bWJlci50b1N0cmluZygpXG5cbiAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJylcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKVxuXG4gICAgICAvLyBUaGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgWzAtOV0gYW5kICcuJ1xuICAgICAgY2hhcnMgPSBzdHJpbmcuc3BsaXQoJycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYXJzXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0geCBudW1iZXJcbiAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICogICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCBuZWdhdGl2ZSBudW1iZXIsIHBvc2l0aXZlIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgb3IgbmVnYXRpdmUgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEsIC0xLCAwIG9yIC0wIHJlc3BlY3RpdmVseS5cbiAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBzdGF0aWMgX2dldFNpZ24oeCkge1xuICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlck1hc2tcbiIsIm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiZmxhdHBpY2tyXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGZsYXRwaWNrci5qc1wiKTsiLCIvKiBmbGF0cGlja3IgdjQuNi42LCBAbGljZW5zZSBNSVQgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuZmxhdHBpY2tyID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcbiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxuICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcbiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuICAgIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuICAgIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG4gICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuICAgIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICAgIHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfVxuXG4gICAgdmFyIEhPT0tTID0gW1xuICAgICAgICBcIm9uQ2hhbmdlXCIsXG4gICAgICAgIFwib25DbG9zZVwiLFxuICAgICAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgICAgIFwib25EZXN0cm95XCIsXG4gICAgICAgIFwib25LZXlEb3duXCIsXG4gICAgICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgICAgICBcIm9uT3BlblwiLFxuICAgICAgICBcIm9uUGFyc2VDb25maWdcIixcbiAgICAgICAgXCJvblJlYWR5XCIsXG4gICAgICAgIFwib25WYWx1ZVVwZGF0ZVwiLFxuICAgICAgICBcIm9uWWVhckNoYW5nZVwiLFxuICAgICAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuICAgIF07XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICBfZGlzYWJsZTogW10sXG4gICAgICAgIF9lbmFibGU6IFtdLFxuICAgICAgICBhbGxvd0lucHV0OiBmYWxzZSxcbiAgICAgICAgYWxsb3dJbnZhbGlkUHJlbG9hZDogZmFsc2UsXG4gICAgICAgIGFsdEZvcm1hdDogXCJGIGosIFlcIixcbiAgICAgICAgYWx0SW5wdXQ6IGZhbHNlLFxuICAgICAgICBhbHRJbnB1dENsYXNzOiBcImZvcm0tY29udHJvbCBpbnB1dFwiLFxuICAgICAgICBhbmltYXRlOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSA9PT0gLTEsXG4gICAgICAgIGFyaWFEYXRlRm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBhdXRvRmlsbERlZmF1bHRUaW1lOiB0cnVlLFxuICAgICAgICBjbGlja09wZW5zOiB0cnVlLFxuICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgICBjb25qdW5jdGlvbjogXCIsIFwiLFxuICAgICAgICBkYXRlRm9ybWF0OiBcIlktbS1kXCIsXG4gICAgICAgIGRlZmF1bHRIb3VyOiAxMixcbiAgICAgICAgZGVmYXVsdE1pbnV0ZTogMCxcbiAgICAgICAgZGVmYXVsdFNlY29uZHM6IDAsXG4gICAgICAgIGRpc2FibGU6IFtdLFxuICAgICAgICBkaXNhYmxlTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlOiBbXSxcbiAgICAgICAgZW5hYmxlU2Vjb25kczogZmFsc2UsXG4gICAgICAgIGVuYWJsZVRpbWU6IGZhbHNlLFxuICAgICAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VlazogZnVuY3Rpb24gKGdpdmVuRGF0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShnaXZlbkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhci5cbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpKTtcbiAgICAgICAgICAgIC8vIEphbnVhcnkgNCBpcyBhbHdheXMgaW4gd2VlayAxLlxuICAgICAgICAgICAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlazEuXG4gICAgICAgICAgICByZXR1cm4gKDEgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtXG4gICAgICAgICAgICAgICAgICAgIDMgK1xuICAgICAgICAgICAgICAgICAgICAoKHdlZWsxLmdldERheSgpICsgNikgJSA3KSkgL1xuICAgICAgICAgICAgICAgICAgICA3KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhvdXJJbmNyZW1lbnQ6IDEsXG4gICAgICAgIGlnbm9yZWRGb2N1c0VsZW1lbnRzOiBbXSxcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgbG9jYWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgbWludXRlSW5jcmVtZW50OiA1LFxuICAgICAgICBtb2RlOiBcInNpbmdsZVwiLFxuICAgICAgICBtb250aFNlbGVjdG9yVHlwZTogXCJkcm9wZG93blwiLFxuICAgICAgICBuZXh0QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J00xMy4yMDcgOC40NzJsLTcuODU0IDcuODU0LTAuNzA3LTAuNzA3IDcuMTQ2LTcuMTQ2LTcuMTQ2LTcuMTQ4IDAuNzA3LTAuNzA3IDcuODU0IDcuODU0eicgLz48L3N2Zz5cIixcbiAgICAgICAgbm9DYWxlbmRhcjogZmFsc2UsXG4gICAgICAgIG5vdzogbmV3IERhdGUoKSxcbiAgICAgICAgb25DaGFuZ2U6IFtdLFxuICAgICAgICBvbkNsb3NlOiBbXSxcbiAgICAgICAgb25EYXlDcmVhdGU6IFtdLFxuICAgICAgICBvbkRlc3Ryb3k6IFtdLFxuICAgICAgICBvbktleURvd246IFtdLFxuICAgICAgICBvbk1vbnRoQ2hhbmdlOiBbXSxcbiAgICAgICAgb25PcGVuOiBbXSxcbiAgICAgICAgb25QYXJzZUNvbmZpZzogW10sXG4gICAgICAgIG9uUmVhZHk6IFtdLFxuICAgICAgICBvblZhbHVlVXBkYXRlOiBbXSxcbiAgICAgICAgb25ZZWFyQ2hhbmdlOiBbXSxcbiAgICAgICAgb25QcmVDYWxlbmRhclBvc2l0aW9uOiBbXSxcbiAgICAgICAgcGx1Z2luczogW10sXG4gICAgICAgIHBvc2l0aW9uOiBcImF1dG9cIixcbiAgICAgICAgcG9zaXRpb25FbGVtZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHByZXZBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTUuMjA3IDguNDcxbDcuMTQ2IDcuMTQ3LTAuNzA3IDAuNzA3LTcuODUzLTcuODU0IDcuODU0LTcuODUzIDAuNzA3IDAuNzA3LTcuMTQ3IDcuMTQ2eicgLz48L3N2Zz5cIixcbiAgICAgICAgc2hvcnRoYW5kQ3VycmVudE1vbnRoOiBmYWxzZSxcbiAgICAgICAgc2hvd01vbnRoczogMSxcbiAgICAgICAgc3RhdGljOiBmYWxzZSxcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICAgICAgd2Vla051bWJlcnM6IGZhbHNlLFxuICAgICAgICB3cmFwOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIGVuZ2xpc2ggPSB7XG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgICAgICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICAgICAgXCJTdW5kYXlcIixcbiAgICAgICAgICAgICAgICBcIk1vbmRheVwiLFxuICAgICAgICAgICAgICAgIFwiVHVlc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJUaHVyc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiRnJpZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJTYXR1cmRheVwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIkphblwiLFxuICAgICAgICAgICAgICAgIFwiRmViXCIsXG4gICAgICAgICAgICAgICAgXCJNYXJcIixcbiAgICAgICAgICAgICAgICBcIkFwclwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5cIixcbiAgICAgICAgICAgICAgICBcIkp1bFwiLFxuICAgICAgICAgICAgICAgIFwiQXVnXCIsXG4gICAgICAgICAgICAgICAgXCJTZXBcIixcbiAgICAgICAgICAgICAgICBcIk9jdFwiLFxuICAgICAgICAgICAgICAgIFwiTm92XCIsXG4gICAgICAgICAgICAgICAgXCJEZWNcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiSmFudWFyeVwiLFxuICAgICAgICAgICAgICAgIFwiRmVicnVhcnlcIixcbiAgICAgICAgICAgICAgICBcIk1hcmNoXCIsXG4gICAgICAgICAgICAgICAgXCJBcHJpbFwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5lXCIsXG4gICAgICAgICAgICAgICAgXCJKdWx5XCIsXG4gICAgICAgICAgICAgICAgXCJBdWd1c3RcIixcbiAgICAgICAgICAgICAgICBcIlNlcHRlbWJlclwiLFxuICAgICAgICAgICAgICAgIFwiT2N0b2JlclwiLFxuICAgICAgICAgICAgICAgIFwiTm92ZW1iZXJcIixcbiAgICAgICAgICAgICAgICBcIkRlY2VtYmVyXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgICAgICBmaXJzdERheU9mV2VlazogMCxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG50aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBudGggJSAxMDA7XG4gICAgICAgICAgICBpZiAocyA+IDMgJiYgcyA8IDIxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICBzd2l0Y2ggKHMgJSAxMCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5kXCI7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZFwiO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlU2VwYXJhdG9yOiBcIiB0byBcIixcbiAgICAgICAgd2Vla0FiYnJldmlhdGlvbjogXCJXa1wiLFxuICAgICAgICBzY3JvbGxUaXRsZTogXCJTY3JvbGwgdG8gaW5jcmVtZW50XCIsXG4gICAgICAgIHRvZ2dsZVRpdGxlOiBcIkNsaWNrIHRvIHRvZ2dsZVwiLFxuICAgICAgICBhbVBNOiBbXCJBTVwiLCBcIlBNXCJdLFxuICAgICAgICB5ZWFyQXJpYUxhYmVsOiBcIlllYXJcIixcbiAgICAgICAgbW9udGhBcmlhTGFiZWw6IFwiTW9udGhcIixcbiAgICAgICAgaG91ckFyaWFMYWJlbDogXCJIb3VyXCIsXG4gICAgICAgIG1pbnV0ZUFyaWFMYWJlbDogXCJNaW51dGVcIixcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMjsgfVxuICAgICAgICByZXR1cm4gKFwiMDAwXCIgKyBudW1iZXIpLnNsaWNlKGxlbmd0aCAqIC0xKTtcbiAgICB9O1xuICAgIHZhciBpbnQgPSBmdW5jdGlvbiAoYm9vbCkgeyByZXR1cm4gKGJvb2wgPT09IHRydWUgPyAxIDogMCk7IH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSA9PT0gdm9pZCAwKSB7IGltbWVkaWF0ZSA9IGZhbHNlOyB9XG4gICAgICAgIHZhciB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgdGltZW91dCAhPT0gbnVsbCAmJiBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKVxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlICYmICF0aW1lb3V0KVxuICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBhcnJheWlmeSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5ID8gb2JqIDogW29ial07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgICAgICBpZiAoYm9vbCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnLCBjbGFzc05hbWUsIGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIGUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyTm9kZShub2RlKSB7XG4gICAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpXG4gICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRQYXJlbnQobm9kZSwgY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24obm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXJlbnQobm9kZS5wYXJlbnROb2RlLCBjb25kaXRpb24pO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3RoaW5nIGZvdW5kXG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU51bWJlcklucHV0KGlucHV0Q2xhc3NOYW1lLCBvcHRzKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcIm51bUlucHV0V3JhcHBlclwiKSwgbnVtSW5wdXQgPSBjcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgXCJudW1JbnB1dCBcIiArIGlucHV0Q2xhc3NOYW1lKSwgYXJyb3dVcCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dVcFwiKSwgYXJyb3dEb3duID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd0Rvd25cIik7XG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFIDkuMFwiKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIG51bUlucHV0LnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbnVtSW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgbnVtSW5wdXQucGF0dGVybiA9IFwiXFxcXGQqXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKVxuICAgICAgICAgICAgICAgIG51bUlucHV0LnNldEF0dHJpYnV0ZShrZXksIG9wdHNba2V5XSk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobnVtSW5wdXQpO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93VXApO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93RG93bik7XG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkb05vdGhpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH07XG4gICAgdmFyIG1vbnRoVG9TdHIgPSBmdW5jdGlvbiAobW9udGhOdW1iZXIsIHNob3J0aGFuZCwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUubW9udGhzW3Nob3J0aGFuZCA/IFwic2hvcnRoYW5kXCIgOiBcImxvbmdoYW5kXCJdW21vbnRoTnVtYmVyXTsgfTtcbiAgICB2YXIgcmV2Rm9ybWF0ID0ge1xuICAgICAgICBEOiBkb05vdGhpbmcsXG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aE5hbWUsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLmxvbmdoYW5kLmluZGV4T2YobW9udGhOYW1lKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEc6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBIOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSjogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIEs6IGZ1bmN0aW9uIChkYXRlT2JqLCBhbVBNLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyKSArXG4gICAgICAgICAgICAgICAgMTIgKiBpbnQobmV3IFJlZ0V4cChsb2NhbGUuYW1QTVsxXSwgXCJpXCIpLnRlc3QoYW1QTSkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgTTogZnVuY3Rpb24gKGRhdGVPYmosIHNob3J0TW9udGgsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLnNob3J0aGFuZC5pbmRleE9mKHNob3J0TW9udGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgUzogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgVTogZnVuY3Rpb24gKF8sIHVuaXhTZWNvbmRzKSB7IHJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KHVuaXhTZWNvbmRzKSAqIDEwMDApOyB9LFxuICAgICAgICBXOiBmdW5jdGlvbiAoZGF0ZU9iaiwgd2Vla051bSwgbG9jYWxlKSB7XG4gICAgICAgICAgICB2YXIgd2Vla051bWJlciA9IHBhcnNlSW50KHdlZWtOdW0pO1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkYXRlT2JqLmdldEZ1bGxZZWFyKCksIDAsIDIgKyAod2Vla051bWJlciAtIDEpICogNywgMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgbG9jYWxlLmZpcnN0RGF5T2ZXZWVrKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9LFxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcihwYXJzZUZsb2F0KHllYXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgWjogZnVuY3Rpb24gKF8sIElTT0RhdGUpIHsgcmV0dXJuIG5ldyBEYXRlKElTT0RhdGUpOyB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlT2JqLCBtaW51dGVzKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1pbnV0ZXMocGFyc2VGbG9hdChtaW51dGVzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBsOiBkb05vdGhpbmcsXG4gICAgICAgIG06IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbW9udGgpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TW9udGgocGFyc2VGbG9hdChtb250aCkgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgczogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdTogZnVuY3Rpb24gKF8sIHVuaXhNaWxsU2Vjb25kcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peE1pbGxTZWNvbmRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHc6IGRvTm90aGluZyxcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGVPYmosIHllYXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIoMjAwMCArIHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgdmFyIHRva2VuUmVnZXggPSB7XG4gICAgICAgIEQ6IFwiKFxcXFx3KylcIixcbiAgICAgICAgRjogXCIoXFxcXHcrKVwiLFxuICAgICAgICBHOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBIOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBKOiBcIihcXFxcZFxcXFxkfFxcXFxkKVxcXFx3K1wiLFxuICAgICAgICBLOiBcIlwiLFxuICAgICAgICBNOiBcIihcXFxcdyspXCIsXG4gICAgICAgIFM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIFU6IFwiKC4rKVwiLFxuICAgICAgICBXOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBZOiBcIihcXFxcZHs0fSlcIixcbiAgICAgICAgWjogXCIoLispXCIsXG4gICAgICAgIGQ6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGk6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGw6IFwiKFxcXFx3KylcIixcbiAgICAgICAgbTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgbjogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgczogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgdTogXCIoLispXCIsXG4gICAgICAgIHc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHk6IFwiKFxcXFxkezJ9KVwiLFxuICAgIH07XG4gICAgdmFyIGZvcm1hdHMgPSB7XG4gICAgICAgIC8vIGdldCB0aGUgZGF0ZSBpbiBVVENcbiAgICAgICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBzaG9ydCwgZS5nLiBUaHVcbiAgICAgICAgRDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5cy5zaG9ydGhhbmRbZm9ybWF0cy53KGRhdGUsIGxvY2FsZSwgb3B0aW9ucyldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdWxsIG1vbnRoIG5hbWUgZS5nLiBKYW51YXJ5XG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGZvcm1hdHMubihkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIC0gMSwgZmFsc2UsIGxvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBob3VyIDEtMTJcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGhvdXJzIHdpdGggbGVhZGluZyB6ZXJvIGUuZy4gMDNcbiAgICAgICAgSDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEhvdXJzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgKDEtMzApIHdpdGggb3JkaW5hbCBzdWZmaXggZS5nLiAxc3QsIDJuZFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZGF0ZS5nZXREYXRlKCkgKyBsb2NhbGUub3JkaW5hbChkYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA6IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBTS9QTVxuICAgICAgICBLOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUuYW1QTVtpbnQoZGF0ZS5nZXRIb3VycygpID4gMTEpXTsgfSxcbiAgICAgICAgLy8gc2hvcnRoYW5kIG1vbnRoIGUuZy4gSmFuLCBTZXAsIE9jdCwgZXRjXG4gICAgICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGRhdGUuZ2V0TW9udGgoKSwgdHJ1ZSwgbG9jYWxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwMC01OVxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTsgfSxcbiAgICAgICAgLy8gdW5peCB0aW1lc3RhbXBcbiAgICAgICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICAgICAgVzogZnVuY3Rpb24gKGRhdGUsIF8sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmdldFdlZWsoZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bGwgeWVhciBlLmcuIDIwMTYsIHBhZGRlZCAoMDAwMS05OTk5KVxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RnVsbFllYXIoKSwgNCk7IH0sXG4gICAgICAgIC8vIGRheSBpbiBtb250aCwgcGFkZGVkICgwMS0zMClcbiAgICAgICAgZDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldERhdGUoKSk7IH0sXG4gICAgICAgIC8vIGhvdXIgZnJvbSAxLTEyIChhbS9wbSlcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIChkYXRlLmdldEhvdXJzKCkgJSAxMiA/IGRhdGUuZ2V0SG91cnMoKSAlIDEyIDogMTIpOyB9LFxuICAgICAgICAvLyBtaW51dGVzLCBwYWRkZWQgd2l0aCBsZWFkaW5nIHplcm8gZS5nLiAwOVxuICAgICAgICBpOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TWludXRlcygpKTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoICgxLTMwKVxuICAgICAgICBqOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXRlKCk7IH0sXG4gICAgICAgIC8vIHdlZWtkYXkgbmFtZSwgZnVsbCwgZS5nLiBUaHVyc2RheVxuICAgICAgICBsOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLmxvbmdoYW5kW2RhdGUuZ2V0RGF5KCldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBwYWRkZWQgbW9udGggbnVtYmVyICgwMS0xMilcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKTsgfSxcbiAgICAgICAgLy8gdGhlIG1vbnRoIG51bWJlciAoMS0xMilcbiAgICAgICAgbjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7IH0sXG4gICAgICAgIC8vIHNlY29uZHMgMC01OVxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7IH0sXG4gICAgICAgIC8vIFVuaXggTWlsbGlzZWNvbmRzXG4gICAgICAgIHU6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFRpbWUoKTsgfSxcbiAgICAgICAgLy8gbnVtYmVyIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgdzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7IH0sXG4gICAgICAgIC8vIGxhc3QgdHdvIGRpZ2l0cyBvZiB5ZWFyIGUuZy4gMTYgZm9yIDIwMTZcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpLnN1YnN0cmluZygyKTsgfSxcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZURhdGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIF9iID0gX2EuY29uZmlnLCBjb25maWcgPSBfYiA9PT0gdm9pZCAwID8gZGVmYXVsdHMgOiBfYiwgX2MgPSBfYS5sMTBuLCBsMTBuID0gX2MgPT09IHZvaWQgMCA/IGVuZ2xpc2ggOiBfYywgX2QgPSBfYS5pc01vYmlsZSwgaXNNb2JpbGUgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlT2JqLCBmcm10LCBvdmVycmlkZUxvY2FsZSkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG92ZXJyaWRlTG9jYWxlIHx8IGwxMG47XG4gICAgICAgICAgICBpZiAoY29uZmlnLmZvcm1hdERhdGUgIT09IHVuZGVmaW5lZCAmJiAhaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmZvcm1hdERhdGUoZGF0ZU9iaiwgZnJtdCwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmcm10XG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHNbY10gJiYgYXJyW2kgLSAxXSAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2NdKGRhdGVPYmosIGxvY2FsZSwgY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGdpdmVuRm9ybWF0LCB0aW1lbGVzcywgY3VzdG9tTG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGN1c3RvbUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgICAgICB2YXIgZGF0ZU9yaWcgPSBkYXRlO1xuICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGRhdGUudG9GaXhlZCAhPT0gdW5kZWZpbmVkIC8vIHRpbWVzdGFtcFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvcHlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdpdmVuRm9ybWF0IHx8IChjb25maWcgfHwgZGVmYXVsdHMpLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlc3RyID09PSBcInRvZGF5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoL1okLy50ZXN0KGRhdGVzdHIpIHx8XG4gICAgICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpIC8vIGRhdGVzdHJpbmdzIHcvIHRpbWV6b25lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJzZURhdGUpXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBjb25maWcucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZyB8fCAhY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHZvaWQgMCwgb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5fMSA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0JhY2tTbGFzaCA9IHRva2VuXzEgPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmb3JtYXRbaSAtIDFdID09PSBcIlxcXFxcIiB8fCBpc0JhY2tTbGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblJlZ2V4W3Rva2VuXzFdICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhTdHIgKz0gdG9rZW5SZWdleFt0b2tlbl8xXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1t0b2tlbl8xICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiByZXZGb3JtYXRbdG9rZW5fMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw6IG1hdGNoWysrbWF0Y2hJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0JhY2tTbGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSBcIi5cIjsgLy8gZG9uJ3QgcmVhbGx5IGNhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IF9hLmZuLCB2YWwgPSBfYS52YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZWREYXRlID0gZm4ocGFyc2VkRGF0ZSwgdmFsLCBsb2NhbGUpIHx8IHBhcnNlZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG1hdGNoZWQgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBpZiAoIShwYXJzZWREYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHByb3ZpZGVkOiBcIiArIGRhdGVPcmlnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGluIGRhdGVzLCBtZWFzdXJlZCBpbiBtc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRlcyhkYXRlMSwgZGF0ZTIsIHRpbWVsZXNzKSB7XG4gICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdm9pZCAwKSB7IHRpbWVsZXNzID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodGltZWxlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLVxuICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUyLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHZhciBpc0JldHdlZW4gPSBmdW5jdGlvbiAodHMsIHRzMSwgdHMyKSB7XG4gICAgICAgIHJldHVybiB0cyA+IE1hdGgubWluKHRzMSwgdHMyKSAmJiB0cyA8IE1hdGgubWF4KHRzMSwgdHMyKTtcbiAgICB9O1xuICAgIHZhciBkdXJhdGlvbiA9IHtcbiAgICAgICAgREFZOiA4NjQwMDAwMCxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIF9hID0gMCwgYXJnc18xID0gYXJnczsgX2EgPCBhcmdzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3NfMVtfYV07XG4gICAgICAgICAgICAgICAgX2xvb3BfMShzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgREVCT1VOQ0VEX0NIQU5HRV9NUyA9IDMwMDtcbiAgICBmdW5jdGlvbiBGbGF0cGlja3JJbnN0YW5jZShlbGVtZW50LCBpbnN0YW5jZUNvbmZpZykge1xuICAgICAgICB2YXIgc2VsZiA9IHtcbiAgICAgICAgICAgIGNvbmZpZzogX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRzKSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLFxuICAgICAgICAgICAgbDEwbjogZW5nbGlzaCxcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICBzZWxmLnBsdWdpbkVsZW1lbnRzID0gW107XG4gICAgICAgIHNlbGYubG9hZGVkUGx1Z2lucyA9IFtdO1xuICAgICAgICBzZWxmLl9iaW5kID0gYmluZDtcbiAgICAgICAgc2VsZi5fc2V0SG91cnNGcm9tRGF0ZSA9IHNldEhvdXJzRnJvbURhdGU7XG4gICAgICAgIHNlbGYuX3Bvc2l0aW9uQ2FsZW5kYXIgPSBwb3NpdGlvbkNhbGVuZGFyO1xuICAgICAgICBzZWxmLmNoYW5nZU1vbnRoID0gY2hhbmdlTW9udGg7XG4gICAgICAgIHNlbGYuY2hhbmdlWWVhciA9IGNoYW5nZVllYXI7XG4gICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcjtcbiAgICAgICAgc2VsZi5jbG9zZSA9IGNsb3NlO1xuICAgICAgICBzZWxmLl9jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudDtcbiAgICAgICAgc2VsZi5kZXN0cm95ID0gZGVzdHJveTtcbiAgICAgICAgc2VsZi5pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gICAgICAgIHNlbGYuanVtcFRvRGF0ZSA9IGp1bXBUb0RhdGU7XG4gICAgICAgIHNlbGYub3BlbiA9IG9wZW47XG4gICAgICAgIHNlbGYucmVkcmF3ID0gcmVkcmF3O1xuICAgICAgICBzZWxmLnNldCA9IHNldDtcbiAgICAgICAgc2VsZi5zZXREYXRlID0gc2V0RGF0ZTtcbiAgICAgICAgc2VsZi50b2dnbGUgPSB0b2dnbGU7XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICAgICAgc2VsZi51dGlscyA9IHtcbiAgICAgICAgICAgICAgICBnZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKG1vbnRoLCB5cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IHZvaWQgMCkgeyBtb250aCA9IHNlbGYuY3VycmVudE1vbnRoOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh5ciA9PT0gdm9pZCAwKSB7IHlyID0gc2VsZi5jdXJyZW50WWVhcjsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IDEgJiYgKCh5ciAlIDQgPT09IDAgJiYgeXIgJSAxMDAgIT09IDApIHx8IHlyICUgNDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubDEwbi5kYXlzSW5Nb250aFttb250aF07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgICAgIHNlbGYuZWxlbWVudCA9IHNlbGYuaW5wdXQgPSBlbGVtZW50O1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHBhcnNlQ29uZmlnKCk7XG4gICAgICAgICAgICBzZXR1cExvY2FsZSgpO1xuICAgICAgICAgICAgc2V0dXBJbnB1dHMoKTtcbiAgICAgICAgICAgIHNldHVwRGF0ZXMoKTtcbiAgICAgICAgICAgIHNldHVwSGVscGVyRnVuY3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgYnVpbGQoKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIHx8IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHwgc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDYWxlbmRhcldpZHRoKCk7XG4gICAgICAgICAgICB2YXIgaXNTYWZhcmkgPSAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICAgICAgLyogVE9ETzogaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyXG4gICAgICAgIFxuICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZXJlIGlzIHdlaXJkIHBvc2l0aW9uaW5nIGJlaGF2aW9yIGluIHNhZmFyaSBjYXVzaW5nIHBhZ2VzXG4gICAgICAgICAgICAgIHRvIHNjcm9sbCB1cC4gaHR0cHM6Ly9naXRodWIuY29tL2NobWxuL2ZsYXRwaWNrci9pc3N1ZXMvNTYzXG4gICAgICAgIFxuICAgICAgICAgICAgICBIb3dldmVyLCBtb3N0IGJyb3dzZXJzIGFyZSBub3QgU2FmYXJpIGFuZCBwb3NpdGlvbmluZyBpcyBleHBlbnNpdmUgd2hlbiB1c2VkXG4gICAgICAgICAgICAgIGluIHNjYWxlLiBodHRwczovL2dpdGh1Yi5jb20vY2htbG4vZmxhdHBpY2tyL2lzc3Vlcy8xMDk2XG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlICYmIGlzU2FmYXJpKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25SZWFkeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBiaW5kVG9JbnN0YW5jZShmbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmJpbmQoc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0Q2FsZW5kYXJXaWR0aCgpIHtcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBzZWxmLmNvbmZpZztcbiAgICAgICAgICAgIGlmIChjb25maWcud2Vla051bWJlcnMgPT09IGZhbHNlICYmIGNvbmZpZy5zaG93TW9udGhzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLm5vQ2FsZW5kYXIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXlzV2lkdGggPSAoc2VsZi5kYXlzLm9mZnNldFdpZHRoICsgMSkgKiBjb25maWcuc2hvd01vbnRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5zdHlsZS53aWR0aCA9IGRheXNXaWR0aCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUud2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheXNXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLndlZWtXcmFwcGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi53ZWVrV3JhcHBlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGhhbmRsZXIgZm9yIGFsbCBldmVudHMgdGFyZ2V0aW5nIHRoZSB0aW1lIGlucHV0c1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGltZShlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZSA9IHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gZ2V0RGVmYXVsdEhvdXJzKCksIGhvdXJzID0gX2EuaG91cnMsIG1pbnV0ZXMgPSBfYS5taW51dGVzLCBzZWNvbmRzID0gX2Euc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcywgMCk7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZmF1bHREYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZSAhPT0gdW5kZWZpbmVkICYmIGUudHlwZSAhPT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aW1lV3JhcHBlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2VmFsdWUgPSBzZWxmLl9pbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dC52YWx1ZSAhPT0gcHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYW1wbTJtaWxpdGFyeShob3VyLCBhbVBNKSB7XG4gICAgICAgICAgICByZXR1cm4gKGhvdXIgJSAxMikgKyAxMiAqIGludChhbVBNID09PSBzZWxmLmwxMG4uYW1QTVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWlsaXRhcnkyYW1wbShob3VyKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGhvdXIgJSAyNCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgJSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGhlIHNlbGVjdGVkIGRhdGUgb2JqZWN0IHRpbWUgd2l0aCB1c2VyJ3MgdGltZSBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tSW5wdXRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBzZWxmLm1pbnV0ZUVsZW1lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG91cnMgPSAocGFyc2VJbnQoc2VsZi5ob3VyRWxlbWVudC52YWx1ZS5zbGljZSgtMiksIDEwKSB8fCAwKSAlIDI0LCBtaW51dGVzID0gKHBhcnNlSW50KHNlbGYubWludXRlRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjAsIHNlY29uZHMgPSBzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gKHBhcnNlSW50KHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjBcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IGFtcG0ybWlsaXRhcnkoaG91cnMsIHNlbGYuYW1QTS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGltaXRNaW5Ib3VycyA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgdmFyIGxpbWl0TWF4SG91cnMgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERhdGVIYXNUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5jb25maWcubWF4RGF0ZSwgdHJ1ZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgICAgIGlmIChsaW1pdE1heEhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heFRpbWUgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhUaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4VGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWludXRlcywgbWF4VGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtYXhUaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWluKHNlY29uZHMsIG1heFRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW1pdE1pbkhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pblRpbWUgPSBzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5UaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWluRGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWF4KGhvdXJzLCBtaW5UaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWluVGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWludXRlcywgbWluVGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtaW5UaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWF4KHNlY29uZHMsIG1pblRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGltZSBpbnB1dCB2YWx1ZXMgd2l0aCBhIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaikge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXRlT2JqIHx8IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqO1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGVmYXVsdEhvdXJzKCkge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gc2VsZi5jb25maWcuZGVmYXVsdEhvdXI7XG4gICAgICAgICAgICB2YXIgbWludXRlcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGU7XG4gICAgICAgICAgICB2YXIgc2Vjb25kcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBtaW5IciA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWluTWludXRlcyA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pbkhyKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhyKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWluTWludXRlcywgbWludXRlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5IciAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heEhyID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICAgIHZhciBtYXhNaW51dGVzID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4SHIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtYXhNaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heEhyICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGhvdXJzOiBob3VycywgbWludXRlczogbWludXRlcywgc2Vjb25kczogc2Vjb25kcyB9O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBob3VycywgbWludXRlcywgYW5kIG9wdGlvbmFsbHkgc2Vjb25kc1xuICAgICAgICAgKiBvZiB0aGUgbGF0ZXN0IHNlbGVjdGVkIGRhdGUgb2JqZWN0IGFuZCB0aGVcbiAgICAgICAgICogY29ycmVzcG9uZGluZyB0aW1lIGlucHV0c1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaG91cnMgdGhlIGhvdXIuIHdoZXRoZXIgaXRzIG1pbGl0YXJ5XG4gICAgICAgICAqICAgICAgICAgICAgICAgICBvciBhbS1wbSBnZXRzIGluZmVycmVkIGZyb20gY29uZmlnXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtaW51dGVzIHRoZSBtaW51dGVzXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzZWNvbmRzIHRoZSBzZWNvbmRzIChvcHRpb25hbClcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLnNldEhvdXJzKGhvdXJzICUgMjQsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuaG91ckVsZW1lbnQgfHwgIXNlbGYubWludXRlRWxlbWVudCB8fCBzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoIXNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgID8gKCgxMiArIGhvdXJzKSAlIDEyKSArIDEyICogaW50KGhvdXJzICUgMTIgPT09IDApXG4gICAgICAgICAgICAgICAgOiBob3Vycyk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQobWludXRlcyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1baW50KGhvdXJzID49IDEyKV07XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIYW5kbGVzIHRoZSB5ZWFyIGlucHV0IGFuZCBpbmNyZW1lbnRpbmcgZXZlbnRzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IHRoZSBrZXl1cCBvciBpbmNyZW1lbnQgZXZlbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG9uWWVhcklucHV0KGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KGV2ZW50VGFyZ2V0LnZhbHVlKSArIChldmVudC5kZWx0YSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh5ZWFyIC8gMTAwMCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIS9bXlxcZF0vLnRlc3QoeWVhci50b1N0cmluZygpKSkpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHllYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFc3NlbnRpYWxseSBhZGRFdmVudExpc3RlbmVyICsgdHJhY2tpbmdcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGFkZEV2ZW50TGlzdGVuZXIgdG9cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IHRoZSBldmVudCBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGJpbmQoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChldikgeyByZXR1cm4gYmluZChlbGVtZW50LCBldiwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gYmluZChlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9KTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgYWxsIHRoZSBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgICAgICBbXCJvcGVuXCIsIFwiY2xvc2VcIiwgXCJ0b2dnbGVcIiwgXCJjbGVhclwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzZWxmLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLVwiICsgZXZ0ICsgXCJdXCIpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBzZXR1cE1vYmlsZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZShvblJlc2l6ZSwgNTApO1xuICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICYmICEvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcihnZXRFdmVudFRhcmdldChlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudC5ib2R5LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuaW5saW5lICYmICFzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcInRvdWNoc3RhcnRcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwiY2xpY2tcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJmb2N1c1wiLCBkb2N1bWVudENsaWNrLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xpY2tPcGVucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiZm9jdXNcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImNsaWNrXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFwiY2xpY2tcIiwgb25Nb250aE5hdkNsaWNrKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFtcImtleXVwXCIsIFwiaW5jcmVtZW50XCJdLCBvblllYXJJbnB1dCk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwiY2xpY2tcIiwgc2VsZWN0RGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi50aW1lQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWxUZXh0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEV2ZW50VGFyZ2V0KGUpLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFtcImluY3JlbWVudFwiXSwgdXBkYXRlVGltZSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiYmx1clwiLCB1cGRhdGVUaW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiY2xpY2tcIiwgdGltZUluY3JlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZChbc2VsZi5ob3VyRWxlbWVudCwgc2VsZi5taW51dGVFbGVtZW50XSwgW1wiZm9jdXNcIiwgXCJjbGlja1wiXSwgc2VsVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuc2Vjb25kRWxlbWVudCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLnNlY29uZEVsZW1lbnQgJiYgc2VsZi5zZWNvbmRFbGVtZW50LnNlbGVjdCgpOyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZChzZWxmLmFtUE0sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0KVxuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiYmx1clwiLCBvbkJsdXIpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhlIGNhbGVuZGFyIHZpZXcgdG8gYSBwYXJ0aWN1bGFyIGRhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7RGF0ZX0ganVtcERhdGUgdGhlIGRhdGUgdG8gc2V0IHRoZSB2aWV3IHRvXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJpZ2dlckNoYW5nZSBpZiBjaGFuZ2UgZXZlbnRzIHNob3VsZCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGp1bXBUb0RhdGUoanVtcERhdGUsIHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBqdW1wVG8gPSBqdW1wRGF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBzZWxmLnBhcnNlRGF0ZShqdW1wRGF0ZSlcbiAgICAgICAgICAgICAgICA6IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIHx8XG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmIHNlbGYuY29uZmlnLm1pbkRhdGUgPiBzZWxmLm5vd1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiYgc2VsZi5jb25maWcubWF4RGF0ZSA8IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdyk7XG4gICAgICAgICAgICB2YXIgb2xkWWVhciA9IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICB2YXIgb2xkTW9udGggPSBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGp1bXBUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBqdW1wVG8uZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBqdW1wVG8uZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsganVtcFRvO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmIHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciAhPT0gb2xkWWVhciB8fCBzZWxmLmN1cnJlbnRNb250aCAhPT0gb2xkTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB1cC9kb3duIGFycm93IGhhbmRsZXIgZm9yIHRpbWUgaW5wdXRzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGUgdGhlIGNsaWNrIGV2ZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB0aW1lSW5jcmVtZW50KGUpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgaWYgKH5ldmVudFRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImFycm93XCIpKVxuICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KGUsIGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikgPyAxIDogLTEpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmNyZW1lbnRzL2RlY3JlbWVudHMgdGhlIHZhbHVlIG9mIGlucHV0IGFzc29jaS1cbiAgICAgICAgICogYXRlZCB3aXRoIHRoZSB1cC9kb3duIGFycm93IGJ5IGRpc3BhdGNoaW5nIGFuXG4gICAgICAgICAqIFwiaW5jcmVtZW50XCIgZXZlbnQgb24gdGhlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBjbGljayBldmVudFxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGEgdGhlIGRpZmYgKHVzdWFsbHkgMSBvciAtMSlcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBpbnB1dEVsZW0gdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGluY3JlbWVudE51bUlucHV0KGUsIGRlbHRhLCBpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlICYmIGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRFbGVtIHx8XG4gICAgICAgICAgICAgICAgKHRhcmdldCAmJiB0YXJnZXQucGFyZW50Tm9kZSAmJiB0YXJnZXQucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUV2ZW50KFwiaW5jcmVtZW50XCIpO1xuICAgICAgICAgICAgZXZlbnQuZGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgIGlucHV0ICYmIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRNb250aE5hdigpKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1pbm5lckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcud2Vla051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hID0gYnVpbGRXZWVrcygpLCB3ZWVrV3JhcHBlciA9IF9hLndlZWtXcmFwcGVyLCB3ZWVrTnVtYmVycyA9IF9hLndlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHdlZWtXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycyA9IHdlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtXcmFwcGVyID0gd2Vla1dyYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoYnVpbGRXZWVrZGF5cygpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWRheXNcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc2VsZi5pbm5lckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGJ1aWxkVGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmFuZ2VNb2RlXCIsIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFuaW1hdGVcIiwgc2VsZi5jb25maWcuYW5pbWF0ZSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcIm11bHRpTW9udGhcIiwgc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgICAgICB2YXIgY3VzdG9tQXBwZW5kID0gc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lIHx8IHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5pbmxpbmUgPyBcImlubGluZVwiIDogXCJzdGF0aWNcIik7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUFwcGVuZCAmJiBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBzZWxmLl9pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5hcHBlbmRUby5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd3JhcHBlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hcHBlbmRUb1xuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy5kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVEYXkoY2xhc3NOYW1lLCBkYXRlLCBkYXlOdW1iZXIsIGkpIHtcbiAgICAgICAgICAgIHZhciBkYXRlSXNFbmFibGVkID0gaXNFbmFibGVkKGRhdGUsIHRydWUpLCBkYXlFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItZGF5IFwiICsgY2xhc3NOYW1lLCBkYXRlLmdldERhdGUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuZGF0ZU9iaiA9IGRhdGU7XG4gICAgICAgICAgICBkYXlFbGVtZW50LiRpID0gaTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmZvcm1hdERhdGUoZGF0ZSwgc2VsZi5jb25maWcuYXJpYURhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5ub3cpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50b2RheURhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0b2RheVwiKTtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtY3VycmVudFwiLCBcImRhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IGRheUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwic3RhcnRSYW5nZVwiLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhkYXlFbGVtZW50LCBcImVuZFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09IFwibmV4dE1vbnRoRGF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1kaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZShkYXRlKSAmJiAhaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgIT09IFwicHJldk1vbnRoRGF5XCIgJiZcbiAgICAgICAgICAgICAgICBkYXlOdW1iZXIgJSA3ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgXCI8c3BhbiBjbGFzcz0nZmxhdHBpY2tyLWRheSc+XCIgKyBzZWxmLmNvbmZpZy5nZXRXZWVrKGRhdGUpICsgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EYXlDcmVhdGVcIiwgZGF5RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gZGF5RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb2N1c09uRGF5RWxlbSh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICB0YXJnZXROb2RlLmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKHRhcmdldE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEZpcnN0QXZhaWxhYmxlRGF5KGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRNb250aCA9IGRlbHRhID4gMCA/IDAgOiBzZWxmLmNvbmZpZy5zaG93TW9udGhzIC0gMTtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBzdGFydE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZGVsdGEgPiAwID8gMCA6IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gZGVsdGEgPiAwID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIDogLTE7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgIT0gZW5kSW5kZXg7IGkgKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBtb250aC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmIGlzRW5hYmxlZChjLmRhdGVPYmopKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlRGF5KGN1cnJlbnQsIGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgZ2l2ZW5Nb250aCA9IGN1cnJlbnQuY2xhc3NOYW1lLmluZGV4T2YoXCJNb250aFwiKSA9PT0gLTFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQuZGF0ZU9iai5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIHZhciBsb29wRGVsdGEgPSBkZWx0YSA+IDAgPyAxIDogLTE7XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGdpdmVuTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCA9PT0gbVxuICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQuJGkgKyBkZWx0YVxuICAgICAgICAgICAgICAgICAgICA6IGRlbHRhIDwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgdmFyIG51bU1vbnRoRGF5cyA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA+PSAwICYmIGkgPCBudW1Nb250aERheXMgJiYgaSAhPSAoZGVsdGEgPiAwID8gbnVtTW9udGhEYXlzIDogLTEpOyBpICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5hYmxlZChjLmRhdGVPYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhjdXJyZW50LiRpIC0gaSkgPj0gTWF0aC5hYnMoZGVsdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzT25EYXlFbGVtKGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgobG9vcERlbHRhKTtcbiAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkobG9vcERlbHRhKSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXkoY3VycmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICB2YXIgZGF5Rm9jdXNlZCA9IGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgICB2YXIgc3RhcnRFbGVtID0gY3VycmVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICAgICAgOiBkYXlGb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYuc2VsZWN0ZWREYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYudG9kYXlEYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYudG9kYXlEYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYudG9kYXlEYXRlRWxlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Rmlyc3RBdmFpbGFibGVEYXkob2Zmc2V0ID4gMCA/IDEgOiAtMSk7XG4gICAgICAgICAgICBpZiAoc3RhcnRFbGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWRheUZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbShzdGFydEVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0TmV4dEF2YWlsYWJsZURheShzdGFydEVsZW0sIG9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aERheXMoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdE9mTW9udGggPSAobmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpIC0gc2VsZi5sMTBuLmZpcnN0RGF5T2ZXZWVrICsgNykgJSA3O1xuICAgICAgICAgICAgdmFyIHByZXZNb250aERheXMgPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKChtb250aCAtIDEgKyAxMikgJSAxMiwgeWVhcik7XG4gICAgICAgICAgICB2YXIgZGF5c0luTW9udGggPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKG1vbnRoLCB5ZWFyKSwgZGF5cyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGlzTXVsdGlNb250aCA9IHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxLCBwcmV2TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwicHJldk1vbnRoRGF5IGhpZGRlblwiIDogXCJwcmV2TW9udGhEYXlcIiwgbmV4dE1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcIm5leHRNb250aERheSBoaWRkZW5cIiA6IFwibmV4dE1vbnRoRGF5XCI7XG4gICAgICAgICAgICB2YXIgZGF5TnVtYmVyID0gcHJldk1vbnRoRGF5cyArIDEgLSBmaXJzdE9mTW9udGgsIGRheUluZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIHByZXBlbmQgZGF5cyBmcm9tIHRoZSBlbmRpbmcgb2YgcHJldmlvdXMgbW9udGhcbiAgICAgICAgICAgIGZvciAoOyBkYXlOdW1iZXIgPD0gcHJldk1vbnRoRGF5czsgZGF5TnVtYmVyKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShwcmV2TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCBhdCAxIHNpbmNlIHRoZXJlIGlzIG5vIDB0aCBkYXlcbiAgICAgICAgICAgIGZvciAoZGF5TnVtYmVyID0gMTsgZGF5TnVtYmVyIDw9IGRheXNJbk1vbnRoOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KFwiXCIsIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgZGF5cyBmcm9tIHRoZSBuZXh0IG1vbnRoXG4gICAgICAgICAgICBmb3IgKHZhciBkYXlOdW0gPSBkYXlzSW5Nb250aCArIDE7IGRheU51bSA8PSA0MiAtIGZpcnN0T2ZNb250aCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxIHx8IGRheUluZGV4ICUgNyAhPT0gMCk7IGRheU51bSsrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkobmV4dE1vbnRoRGF5Q2xhc3MsIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgZGF5TnVtICUgZGF5c0luTW9udGgpLCBkYXlOdW0sIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3VwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIHZhciBkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZGF5Q29udGFpbmVyXCIpO1xuICAgICAgICAgICAgZGF5Q29udGFpbmVyLmFwcGVuZENoaWxkKGRheXMpO1xuICAgICAgICAgICAgcmV0dXJuIGRheUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZERheXMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGVhck5vZGUoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIC8vIFRPRE86IHdlZWsgbnVtYmVycyBmb3IgZWFjaCBtb250aFxuICAgICAgICAgICAgaWYgKHNlbGYud2Vla051bWJlcnMpXG4gICAgICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYud2Vla051bWJlcnMpO1xuICAgICAgICAgICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGJ1aWxkTW9udGhEYXlzKGQuZ2V0RnVsbFllYXIoKSwgZC5nZXRNb250aCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZyk7XG4gICAgICAgICAgICBzZWxmLmRheXMgPSBzZWxmLmRheXNDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aFN3aXRjaCgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlICE9PSBcImRyb3Bkb3duXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHNob3VsZEJ1aWxkTW9udGggPSBmdW5jdGlvbiAobW9udGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgICAgICAgICBtb250aCA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhKHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQnVpbGRNb250aChpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCBcImZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIG1vbnRoLnZhbHVlID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgaSkuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG1vbnRoLnRleHRDb250ZW50ID0gbW9udGhUb1N0cihpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbik7XG4gICAgICAgICAgICAgICAgbW9udGgudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50TW9udGggPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhcIik7XG4gICAgICAgICAgICB2YXIgbW9udGhOYXZGcmFnbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICB2YXIgbW9udGhFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImN1ci1tb250aFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ubW9udGhBcmlhTGFiZWwpO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lciwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRNb250aCA9IHBhcnNlSW50KHRhcmdldC52YWx1ZSwgMTApO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZU1vbnRoKHNlbGVjdGVkTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgeWVhcklucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJjdXIteWVhclwiLCB7IHRhYmluZGV4OiBcIi0xXCIgfSk7XG4gICAgICAgICAgICB2YXIgeWVhckVsZW1lbnQgPSB5ZWFySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgc2VsZi5sMTBuLnllYXJBcmlhTGFiZWwpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJyZW50TW9udGggPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWN1cnJlbnQtbW9udGhcIik7XG4gICAgICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQobW9udGhFbGVtZW50KTtcbiAgICAgICAgICAgIGN1cnJlbnRNb250aC5hcHBlbmRDaGlsZCh5ZWFySW5wdXQpO1xuICAgICAgICAgICAgbW9udGhOYXZGcmFnbWVudC5hcHBlbmRDaGlsZChjdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoTmF2RnJhZ21lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudDogeWVhckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50OiBtb250aEVsZW1lbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhzKCkge1xuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYubW9udGhOYXYpO1xuICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocykge1xuICAgICAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgbS0tOykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5wdXNoKG1vbnRoLnllYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMucHVzaChtb250aC5tb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5uZXh0TW9udGhOYXYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhOYXYoKSB7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aHNcIik7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXByZXYtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLW5leHQtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5uZXh0QXJyb3c7XG4gICAgICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZVByZXZNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYucHJldk1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZU5leHRNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYubmV4dE1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQgPSBzZWxmLnllYXJFbGVtZW50c1swXTtcbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLm1vbnRoTmF2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkVGltZSgpIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1RpbWVcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhcilcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJub0NhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci10aW1lXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpO1xuICAgICAgICAgICAgdmFyIGhvdXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLWhvdXJcIiwge1xuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxmLmwxMG4uaG91ckFyaWFMYWJlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZUlucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItbWludXRlXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLm1pbnV0ZUFyaWFMYWJlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ID0gbWludXRlSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudGFiSW5kZXggPSBzZWxmLm1pbnV0ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldEhvdXJzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyXG4gICAgICAgICAgICAgICAgICAgIDogbWlsaXRhcnkyYW1wbShzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRNaW51dGVzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGUpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLmhvdXJJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5taW51dGVJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjBcIiA6IFwiMVwiKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMjNcIiA6IFwiMTJcIik7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChob3VySW5wdXQpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlcGFyYXRvcik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQobWludXRlSW5wdXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnRpbWVfMjRocilcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInRpbWUyNGhyXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1NlY29uZHNcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlY29uZElucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3Itc2Vjb25kXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCA9IHNlY29uZElucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0U2Vjb25kcygpXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdFNlY29uZHMpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYubWludXRlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIFwiNTlcIik7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKSk7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlY29uZElucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcudGltZV8yNGhyKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHNlbGYuYW1QTSBpZiBhcHByb3ByaWF0ZVxuICAgICAgICAgICAgICAgIHNlbGYuYW1QTSA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLWFtLXBtXCIsIHNlbGYubDEwbi5hbVBNW2ludCgoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmhvdXJFbGVtZW50LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdEhvdXIpID4gMTEpXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRpdGxlID0gc2VsZi5sMTBuLnRvZ2dsZVRpdGxlO1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmFtUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYudGltZUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpXG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5c1wiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrZGF5Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVdlZWtkYXlzKCk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi53ZWVrZGF5Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWs7XG4gICAgICAgICAgICB2YXIgd2Vla2RheXMgPSBfX3NwcmVhZEFycmF5cyhzZWxmLmwxMG4ud2Vla2RheXMuc2hvcnRoYW5kKTtcbiAgICAgICAgICAgIGlmIChmaXJzdERheU9mV2VlayA+IDAgJiYgZmlyc3REYXlPZldlZWsgPCB3ZWVrZGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5cyA9IF9fc3ByZWFkQXJyYXlzKHdlZWtkYXlzLnNwbGljZShmaXJzdERheU9mV2Vlaywgd2Vla2RheXMubGVuZ3RoKSwgd2Vla2RheXMuc3BsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5jaGlsZHJlbltpXS5pbm5lckhUTUwgPSBcIlxcbiAgICAgIDxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XFxuICAgICAgICBcIiArIHdlZWtkYXlzLmpvaW4oXCI8L3NwYW4+PHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cIikgKyBcIlxcbiAgICAgIDwvc3Bhbj5cXG4gICAgICBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtzKCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzV2Vla3NcIik7XG4gICAgICAgICAgICB2YXIgd2Vla1dyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWt3cmFwcGVyXCIpO1xuICAgICAgICAgICAgd2Vla1dyYXBwZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3Itd2Vla2RheVwiLCBzZWxmLmwxMG4ud2Vla0FiYnJldmlhdGlvbikpO1xuICAgICAgICAgICAgdmFyIHdlZWtOdW1iZXJzID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrc1wiKTtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKHdlZWtOdW1iZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2Vla1dyYXBwZXI6IHdlZWtXcmFwcGVyLFxuICAgICAgICAgICAgICAgIHdlZWtOdW1iZXJzOiB3ZWVrTnVtYmVycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoaXNPZmZzZXQgPT09IHZvaWQgMCkgeyBpc09mZnNldCA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGlzT2Zmc2V0ID8gdmFsdWUgOiB2YWx1ZSAtIHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIChkZWx0YSA+IDAgJiYgc2VsZi5faGlkZU5leHRNb250aEFycm93ID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA8IDAgfHwgc2VsZi5jdXJyZW50TW9udGggPiAxMSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgKz0gc2VsZi5jdXJyZW50TW9udGggPiAxMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYXIodHJpZ2dlckNoYW5nZUV2ZW50LCB0b0luaXRpYWwpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB2b2lkIDApIHsgdG9Jbml0aWFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBnZXREZWZhdWx0SG91cnMoKSwgaG91cnMgPSBfYS5ob3VycywgbWludXRlcyA9IF9hLm1pbnV0ZXMsIHNlY29uZHMgPSBfYS5zZWNvbmRzO1xuICAgICAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJDaGFuZ2VFdmVudCBpcyB0cnVlIChkZWZhdWx0KSBvciBhbiBFdmVudFxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNsb3NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRlc3Ryb3lcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5faGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGggPSBzZWxmLl9oYW5kbGVyc1tpXTtcbiAgICAgICAgICAgICAgICBoLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLmV2ZW50LCBoLmhhbmRsZXIsIGgub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5tb2JpbGVJbnB1dCk7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIubGFzdENoaWxkICYmIHdyYXBwZXIucmVtb3ZlQ2hpbGQod3JhcHBlci5sYXN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod3JhcHBlci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlci5maXJzdENoaWxkLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmFsdElucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBzZWxmLmlucHV0Ll90eXBlO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnJlbW92ZUF0dHJpYnV0ZShcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiX3Nob3dUaW1lSW5wdXRcIixcbiAgICAgICAgICAgICAgICBcImxhdGVzdFNlbGVjdGVkRGF0ZU9ialwiLFxuICAgICAgICAgICAgICAgIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX19oaWRlTmV4dE1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcIl9faGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJpc01vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwiaXNPcGVuXCIsXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJtaW5EYXRlSGFzVGltZVwiLFxuICAgICAgICAgICAgICAgIFwibWF4RGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgICAgICBcImRheXNcIixcbiAgICAgICAgICAgICAgICBcImRheXNDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIl9pbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwiX3Bvc2l0aW9uRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwiaW5uZXJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcInJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJ0b2RheURhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJjYWxlbmRhckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheUNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwicHJldk1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0TW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50TW9udGhFbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50WWVhckVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcIm5hdmlnYXRpb25DdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ1wiLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJFbGVtKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hcHBlbmRUbyAmJiBzZWxmLmNvbmZpZy5hcHBlbmRUby5jb250YWlucyhlbGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRvY3VtZW50Q2xpY2soZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXRfMSA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIHZhciBpc0NhbGVuZGFyRWxlbWVudCA9IGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0XzEpO1xuICAgICAgICAgICAgICAgIHZhciBpc0lucHV0ID0gZXZlbnRUYXJnZXRfMSA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldF8xID09PSBzZWxmLmFsdElucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5jb250YWlucyhldmVudFRhcmdldF8xKSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZWIgY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyBlLnBhdGggaXMgbm90IHByZXNlbnQgaW4gYWxsIGJyb3dzZXJzLiBjaXJjdW12ZW50aW5nIHR5cGVjaGVja3NcbiAgICAgICAgICAgICAgICAgICAgKGUucGF0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXRoLmluZGV4T2YgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh+ZS5wYXRoLmluZGV4T2Yoc2VsZi5pbnB1dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+ZS5wYXRoLmluZGV4T2Yoc2VsZi5hbHRJbnB1dCkpKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9zdEZvY3VzID0gZS50eXBlID09PSBcImJsdXJcIlxuICAgICAgICAgICAgICAgICAgICA/IGlzSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmVsYXRlZFRhcmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgOiAhaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB2YXIgaXNJZ25vcmVkID0gIXNlbGYuY29uZmlnLmlnbm9yZWRGb2N1c0VsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uY29udGFpbnMoZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvc3RGb2N1cyAmJiBpc0lnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSBcIlwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlWWVhcihuZXdZZWFyKSB7XG4gICAgICAgICAgICBpZiAoIW5ld1llYXIgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBuZXdZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmIG5ld1llYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBuZXdZZWFyTnVtID0gbmV3WWVhciwgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gbmV3WWVhck51bTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBuZXdZZWFyTnVtIHx8IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5taW4oc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1heChzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05ld1llYXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNFbmFibGVkKGRhdGUsIHRpbWVsZXNzKSB7XG4gICAgICAgICAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkYXRlVG9DaGVjayA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHVuZGVmaW5lZCwgdGltZWxlc3MpOyAvLyB0aW1lbGVzc1xuICAgICAgICAgICAgaWYgKChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1pbkRhdGVIYXNUaW1lKSA8IDApIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5tYXhEYXRlSGFzVGltZSkgPiAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA9PT0gMCAmJiBzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkYXRlVG9DaGVjayA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBib29sID0gc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA+IDAsIGFycmF5ID0gYm9vbCA/IHNlbGYuY29uZmlnLmVuYWJsZSA6IHNlbGYuY29uZmlnLmRpc2FibGU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZCA9IHZvaWQgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZCA9IGFycmF5W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIGQoZGF0ZVRvQ2hlY2spIC8vIGRpc2FibGVkIGJ5IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIgJiYgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBkYXRlIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZURhdGUoZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCAmJiBwYXJzZWQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYm9vbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAhYm9vbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgcmFuZ2VcbiAgICAgICAgICAgICAgICB0eXBlb2YgZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBkLnRvICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA+PSBkLmZyb20uZ2V0VGltZSgpICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA8PSBkLnRvLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIWJvb2w7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNJblZpZXcoZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImZsYXRwaWNrci1kaXNhYmxlZFwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBlLnRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgICAgICBpZiAoaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICEoZS5yZWxhdGVkVGFyZ2V0ICYmIGlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBlLnRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICAgICAgICAvLyBlLmtleSAgICAgICAgICAgICAgICAgICAgICBlLmtleUNvZGVcbiAgICAgICAgICAgIC8vIFwiQmFja3NwYWNlXCIgICAgICAgICAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICAvLyBcIlRhYlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgLy8gXCJFbnRlclwiICAgICAgICAgICAgICAgICAgICAgICAgICAgMTNcbiAgICAgICAgICAgIC8vIFwiRXNjYXBlXCIgICAgIChJRSBcIkVzY1wiKSAgICAgICAgICAgMjdcbiAgICAgICAgICAgIC8vIFwiQXJyb3dMZWZ0XCIgIChJRSBcIkxlZnRcIikgICAgICAgICAgMzdcbiAgICAgICAgICAgIC8vIFwiQXJyb3dVcFwiICAgIChJRSBcIlVwXCIpICAgICAgICAgICAgMzhcbiAgICAgICAgICAgIC8vIFwiQXJyb3dSaWdodFwiIChJRSBcIlJpZ2h0XCIpICAgICAgICAgMzlcbiAgICAgICAgICAgIC8vIFwiQXJyb3dEb3duXCIgIChJRSBcIkRvd25cIikgICAgICAgICAgNDBcbiAgICAgICAgICAgIC8vIFwiRGVsZXRlXCIgICAgIChJRSBcIkRlbFwiKSAgICAgICAgICAgNDZcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KVxuICAgICAgICAgICAgICAgIDogZXZlbnRUYXJnZXQgPT09IHNlbGYuX2lucHV0O1xuICAgICAgICAgICAgdmFyIGFsbG93SW5wdXQgPSBzZWxmLmNvbmZpZy5hbGxvd0lucHV0O1xuICAgICAgICAgICAgdmFyIGFsbG93S2V5ZG93biA9IHNlbGYuaXNPcGVuICYmICghYWxsb3dJbnB1dCB8fCAhaXNJbnB1dCk7XG4gICAgICAgICAgICB2YXIgYWxsb3dJbmxpbmVLZXlkb3duID0gc2VsZi5jb25maWcuaW5saW5lICYmIGlzSW5wdXQgJiYgIWFsbG93SW5wdXQ7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiBpc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBldmVudFRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldCkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd0tleWRvd24gfHxcbiAgICAgICAgICAgICAgICBhbGxvd0lubGluZUtleWRvd24pIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNUaW1lT2JqID0gISFzZWxmLnRpbWVDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGltZU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5wdXQgJiYgIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiAhaXNJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG93SW5wdXQgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBpc0luVmlldyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YV8xID0gZS5rZXlDb2RlID09PSAzOSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoKGRlbHRhXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheSgxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gZS5rZXlDb2RlID09PSA0MCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuJGkgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNUaW1lT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGEgKiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0ID09PSBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiBzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLnBsdWdpbkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVsZW1zLmluZGV4T2YoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZWxlbXNbaSArIChlLnNoaWZ0S2V5ID8gLTEgOiAxKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCB8fCBzZWxmLl9pbnB1dCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZXZlbnRUYXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMF0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVsxXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25LZXlEb3duXCIsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VPdmVyKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSAxIHx8XG4gICAgICAgICAgICAgICAgKGVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFlbGVtLmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kYXlcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvdmVyRGF0ZSA9IGVsZW1cbiAgICAgICAgICAgICAgICA/IGVsZW0uZGF0ZU9iai5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuZGF5cy5maXJzdEVsZW1lbnRDaGlsZC5kYXRlT2JqLmdldFRpbWUoKSwgaW5pdGlhbERhdGUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHVuZGVmaW5lZCwgdHJ1ZSkuZ2V0VGltZSgpLCByYW5nZVN0YXJ0RGF0ZSA9IE1hdGgubWluKGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSksIHJhbmdlRW5kRGF0ZSA9IE1hdGgubWF4KGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB2YXIgY29udGFpbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIG1pblJhbmdlID0gMCwgbWF4UmFuZ2UgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgdCA9IHJhbmdlU3RhcnREYXRlOyB0IDwgcmFuZ2VFbmREYXRlOyB0ICs9IGR1cmF0aW9uLkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNFbmFibGVkKG5ldyBEYXRlKHQpLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgfHwgKHQgPiByYW5nZVN0YXJ0RGF0ZSAmJiB0IDwgcmFuZ2VFbmREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCBpbml0aWFsRGF0ZSAmJiAoIW1pblJhbmdlIHx8IHQgPiBtaW5SYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPiBpbml0aWFsRGF0ZSAmJiAoIW1heFJhbmdlIHx8IHQgPCBtYXhSYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBtKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSwgbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF5RWxlbSA9IG1vbnRoLmNoaWxkcmVuW2ldLCBkYXRlID0gZGF5RWxlbS5kYXRlT2JqO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvdXRPZlJhbmdlID0gKG1pblJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPCBtaW5SYW5nZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA+IDAgJiYgdGltZXN0YW1wID4gbWF4UmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcImluUmFuZ2VcIiwgXCJzdGFydFJhbmdlXCIsIFwiZW5kUmFuZ2VcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250YWluc0Rpc2FibGVkICYmICFvdXRPZlJhbmdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgW1wic3RhcnRSYW5nZVwiLCBcImluUmFuZ2VcIiwgXCJlbmRSYW5nZVwiLCBcIm5vdEFsbG93ZWRcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGhvdmVyRGF0ZSA8PSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInN0YXJ0UmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsRGF0ZSA8IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcInN0YXJ0UmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcImVuZFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA+PSBtaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA9PT0gMCB8fCB0aW1lc3RhbXAgPD0gbWF4UmFuZ2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNCZXR3ZWVuKHRpbWVzdGFtcCwgaW5pdGlhbERhdGUsIGhvdmVyRGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBtb250aC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3BfMShpLCBsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLnN0YXRpYyAmJiAhc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvcGVuKGUsIHBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uRWxlbWVudCA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uRWxlbWVudCA9IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDsgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCAmJiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uT3BlblwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQuZGlzYWJsZWQgfHwgc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB3YXNPcGVuID0gc2VsZi5pc09wZW47XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXdhc09wZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIocG9zaXRpb25FbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgKGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuaG91ckVsZW1lbnQuc2VsZWN0KCk7IH0sIDUwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWluTWF4RGF0ZVNldHRlcih0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZU9iaiA9IChzZWxmLmNvbmZpZ1tcIl9cIiArIHR5cGUgKyBcIkRhdGVcIl0gPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgdmFyIGludmVyc2VEYXRlT2JqID0gc2VsZi5jb25maWdbXCJfXCIgKyAodHlwZSA9PT0gXCJtaW5cIiA/IFwibWF4XCIgOiBcIm1pblwiKSArIFwiRGF0ZVwiXTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGZbdHlwZSA9PT0gXCJtaW5cIiA/IFwibWluRGF0ZUhhc1RpbWVcIiA6IFwibWF4RGF0ZUhhc1RpbWVcIl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0U2Vjb25kcygpID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBzZWxmLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBpc0VuYWJsZWQoZCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggJiYgdHlwZSA9PT0gXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaik7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlT2JqICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudFt0eXBlXSA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICEhaW52ZXJzZURhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlRGF0ZU9iai5nZXRGdWxsWWVhcigpID09PSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZUNvbmZpZygpIHtcbiAgICAgICAgICAgIHZhciBib29sT3B0cyA9IFtcbiAgICAgICAgICAgICAgICBcIndyYXBcIixcbiAgICAgICAgICAgICAgICBcIndlZWtOdW1iZXJzXCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0ludmFsaWRQcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgXCJjbGlja09wZW5zXCIsXG4gICAgICAgICAgICAgICAgXCJ0aW1lXzI0aHJcIixcbiAgICAgICAgICAgICAgICBcImVuYWJsZVRpbWVcIixcbiAgICAgICAgICAgICAgICBcIm5vQ2FsZW5kYXJcIixcbiAgICAgICAgICAgICAgICBcImFsdElucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJzaG9ydGhhbmRDdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcImlubGluZVwiLFxuICAgICAgICAgICAgICAgIFwic3RhdGljXCIsXG4gICAgICAgICAgICAgICAgXCJlbmFibGVTZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlTW9iaWxlXCIsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LmRhdGFzZXQgfHwge30pKSksIGluc3RhbmNlQ29uZmlnKTtcbiAgICAgICAgICAgIHZhciBmb3JtYXRzID0ge307XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5wYXJzZURhdGUgPSB1c2VyQ29uZmlnLnBhcnNlRGF0ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmZvcm1hdERhdGUgPSB1c2VyQ29uZmlnLmZvcm1hdERhdGU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZW5hYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9lbmFibGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuX2VuYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZGlzYWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZGlzYWJsZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZGlzYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgdGltZU1vZGUgPSB1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiO1xuICAgICAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmRhdGVGb3JtYXQgJiYgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdERhdGVGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0IHx8IGRlZmF1bHRzLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5kYXRlRm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERhdGVGb3JtYXQgKyBcIiBIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLmFsdElucHV0ICYmXG4gICAgICAgICAgICAgICAgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkgJiZcbiAgICAgICAgICAgICAgICAhdXNlckNvbmZpZy5hbHRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdEFsdEZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmFsdEZvcm1hdCB8fCBkZWZhdWx0cy5hbHRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5hbHRGb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTIEtcIiA6IFwiIEtcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdEFsdEZvcm1hdCArIChcIiBoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKSArIFwiIEtcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluRGF0ZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heERhdGVTZXR0ZXIoXCJtaW5cIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9tYXhEYXRlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG1pbk1heFRpbWVTZXR0ZXIgPSBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW3R5cGUgPT09IFwibWluXCIgPyBcIl9taW5UaW1lXCIgOiBcIl9tYXhUaW1lXCJdID0gc2VsZi5wYXJzZURhdGUodmFsLCBcIkg6aTpTXCIpO1xuICAgICAgICAgICAgfTsgfTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtaW5UaW1lXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5UaW1lOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1pblwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heFRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWF4XCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodXNlckNvbmZpZy5tb2RlID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLmNvbmZpZywgZm9ybWF0cywgdXNlckNvbmZpZyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xPcHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzE2NjNcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICBIT09LUy5maWx0ZXIoZnVuY3Rpb24gKGhvb2spIHsgcmV0dXJuIHNlbGYuY29uZmlnW2hvb2tdICE9PSB1bmRlZmluZWQ7IH0pLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tob29rXSA9IGFycmF5aWZ5KHNlbGYuY29uZmlnW2hvb2tdIHx8IFtdKS5tYXAoYmluZFRvSW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmlzTW9iaWxlID1cbiAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZU1vYmlsZSAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuaW5saW5lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgICAgICAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZmlnLnBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcGx1Z2luQ29uZiA9IHNlbGYuY29uZmlnLnBsdWdpbnNbaV0oc2VsZikgfHwge307XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBsdWdpbkNvbmYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEhPT0tTLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gYXJyYXlpZnkocGx1Z2luQ29uZltrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYmluZFRvSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLmNvbmZpZ1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdXNlckNvbmZpZ1trZXldID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdba2V5XSA9IHBsdWdpbkNvbmZba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXVzZXJDb25maWcuYWx0SW5wdXRDbGFzcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJbnB1dEVsZW0oKS5jbGFzc05hbWUgKyBcIiBcIiArIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblBhcnNlQ29uZmlnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldElucHV0RWxlbSgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1pbnB1dF1cIilcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBMb2NhbGUoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlbGYuY29uZmlnLmxvY2FsZSAhPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiZmxhdHBpY2tyOiBpbnZhbGlkIGxvY2FsZSBcIiArIHNlbGYuY29uZmlnLmxvY2FsZSkpO1xuICAgICAgICAgICAgc2VsZi5sMTBuID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0KSwgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubG9jYWxlICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICA/IGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcpLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLnRpbWVfMjRociA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPSBzZWxmLmwxMG4udGltZV8yNGhyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcihzZWxmKTtcbiAgICAgICAgICAgIHNlbGYucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7IGNvbmZpZzogc2VsZi5jb25maWcsIGwxMG46IHNlbGYubDEwbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwb3NpdGlvbkNhbGVuZGFyKGN1c3RvbVBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblByZUNhbGVuZGFyUG9zaXRpb25cIik7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25FbGVtZW50ID0gY3VzdG9tUG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDtcbiAgICAgICAgICAgIHZhciBjYWxlbmRhckhlaWdodCA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNoaWxkcmVuLCAoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHsgcmV0dXJuIGFjYyArIGNoaWxkLm9mZnNldEhlaWdodDsgfSksIDApLCBjYWxlbmRhcldpZHRoID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5vZmZzZXRXaWR0aCwgY29uZmlnUG9zID0gc2VsZi5jb25maWcucG9zaXRpb24uc3BsaXQoXCIgXCIpLCBjb25maWdQb3NWZXJ0aWNhbCA9IGNvbmZpZ1Bvc1swXSwgY29uZmlnUG9zSG9yaXpvbnRhbCA9IGNvbmZpZ1Bvcy5sZW5ndGggPiAxID8gY29uZmlnUG9zWzFdIDogbnVsbCwgaW5wdXRCb3VuZHMgPSBwb3NpdGlvbkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRpc3RhbmNlRnJvbUJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGlucHV0Qm91bmRzLmJvdHRvbSwgc2hvd09uVG9wID0gY29uZmlnUG9zVmVydGljYWwgPT09IFwiYWJvdmVcIiB8fFxuICAgICAgICAgICAgICAgIChjb25maWdQb3NWZXJ0aWNhbCAhPT0gXCJiZWxvd1wiICYmXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlRnJvbUJvdHRvbSA8IGNhbGVuZGFySGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCA+IGNhbGVuZGFySGVpZ2h0KTtcbiAgICAgICAgICAgIHZhciB0b3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgK1xuICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCArXG4gICAgICAgICAgICAgICAgKCFzaG93T25Ub3AgPyBwb3NpdGlvbkVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgMiA6IC1jYWxlbmRhckhlaWdodCAtIDIpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1RvcFwiLCAhc2hvd09uVG9wKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dCb3R0b21cIiwgc2hvd09uVG9wKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5sZWZ0O1xuICAgICAgICAgICAgdmFyIGlzQ2VudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaXNSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgICAgICBsZWZ0IC09IChjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgICAgICAgICAgICBpc0NlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWdQb3NIb3Jpem9udGFsID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgICAgICBsZWZ0IC09IGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dMZWZ0XCIsICFpc0NlbnRlciAmJiAhaXNSaWdodCk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93Q2VudGVyXCIsIGlzQ2VudGVyKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dSaWdodFwiLCBpc1JpZ2h0KTtcbiAgICAgICAgICAgIHZhciByaWdodCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoIC1cbiAgICAgICAgICAgICAgICAod2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMucmlnaHQpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0TW9zdCA9IGxlZnQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTW9zdCA9IHJpZ2h0ICsgY2FsZW5kYXJXaWR0aCA+IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICBpZiAoIXJpZ2h0TW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNlbnRlck1vc3QpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZ2V0RG9jdW1lbnRTdHlsZVNoZWV0KCk7XG4gICAgICAgICAgICAgICAgLy8gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGNzcyBzdXBwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGRvYyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIGJvZHlXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJMZWZ0ID0gTWF0aC5tYXgoMCwgYm9keVdpZHRoIC8gMiAtIGNhbGVuZGFyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckFmdGVyID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YWZ0ZXJcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVySW5kZXggPSBkb2MuY3NzUnVsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJjZW50ZXJNb3N0XCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGNlbnRlckxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldERvY3VtZW50U3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgIHZhciBlZGl0YWJsZVNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWRpdGFibGVTaGVldCA9IHNoZWV0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVkaXRhYmxlU2hlZXQgIT0gbnVsbCA/IGVkaXRhYmxlU2hlZXQgOiBjcmVhdGVTdHlsZVNoZWV0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlLnNoZWV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNBbmRDbG9zZSgpIHtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGhhY2sgLSBidWdzIGluIHRoZSB3YXkgSUUgaGFuZGxlcyBmb2N1cyBrZWVwcyB0aGUgY2FsZW5kYXIgb3BlblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5jbG9zZSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0RGF0ZShlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyIGlzU2VsZWN0YWJsZSA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kaXNhYmxlZFwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHQgPSBmaW5kUGFyZW50KGdldEV2ZW50VGFyZ2V0KGUpLCBpc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdDtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDaGFuZ2VNb250aCA9IChzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA8IHNlbGYuY3VycmVudE1vbnRoIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgPlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc3BsaWNlKHBhcnNlSW50KHNlbGVjdGVkSW5kZXgpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHNlbGVjdGluZyBzYW1lIGRhdGUgdHdpY2UsIHNvcnQgYXNjZW5kaW5nbHlcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZURhdGVzKHNlbGVjdGVkRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIC8vIG1haW50YWluIGZvY3VzXG4gICAgICAgICAgICBpZiAoIXNob3VsZENoYW5nZU1vbnRoICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbSh0YXJnZXQpO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gJiYgc2VsZi5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBzaW5nbGUgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGUgfHwgcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQ0FMTEJBQ0tTID0ge1xuICAgICAgICAgICAgbG9jYWxlOiBbc2V0dXBMb2NhbGUsIHVwZGF0ZVdlZWtkYXlzXSxcbiAgICAgICAgICAgIHNob3dNb250aHM6IFtidWlsZE1vbnRocywgc2V0Q2FsZW5kYXJXaWR0aCwgYnVpbGRXZWVrZGF5c10sXG4gICAgICAgICAgICBtaW5EYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgICAgICBtYXhEYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHNldChvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENBTExCQUNLU1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW29wdGlvbl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChIT09LUy5pbmRleE9mKG9wdGlvbikgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IGFycmF5aWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRTZWxlY3RlZERhdGUoaW5wdXREYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIHZhciBkYXRlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZCwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBpbnB1dERhdGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dERhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGYuY29uZmlnLm1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYW5nZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoaW5wdXREYXRlKSkpO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gKHNlbGYuY29uZmlnLmFsbG93SW52YWxpZFByZWxvYWRcbiAgICAgICAgICAgICAgICA/IGRhdGVzXG4gICAgICAgICAgICAgICAgOiBkYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzRW5hYmxlZChkLCBmYWxzZSk7IH0pKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQ7IH1cbiAgICAgICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xlYXIodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXNbc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIGp1bXBUb0RhdGUodW5kZWZpbmVkLCB0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlRGF0ZVJ1bGVzKGFycikge1xuICAgICAgICAgICAgcmV0dXJuIGFyclxuICAgICAgICAgICAgICAgIC5zbGljZSgpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgICAgICAgICBydWxlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZURhdGUocnVsZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocnVsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBydWxlLmZyb20gJiZcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50bylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHNlbGYucGFyc2VEYXRlKHJ1bGUuZnJvbSwgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBzZWxmLnBhcnNlRGF0ZShydWxlLnRvLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTsgLy8gcmVtb3ZlIGZhbHN5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwRGF0ZXMoKSB7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYubm93ID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubm93KSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBJRTExIHNldHRpbmcgcGxhY2Vob2xkZXIgYXMgdGhlIGlucHV0J3MgdmFsdWVcbiAgICAgICAgICAgIHZhciBwcmVsb2FkZWREYXRlID0gc2VsZi5jb25maWcuZGVmYXVsdERhdGUgfHxcbiAgICAgICAgICAgICAgICAoKHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiSU5QVVRcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0Lm5vZGVOYW1lID09PSBcIlRFWFRBUkVBXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9PT0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcmVsb2FkZWREYXRlKVxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGF0ZShwcmVsb2FkZWREYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuc2VsZWN0ZWREYXRlc1swXVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpID4gc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0VGltZSgpIDwgc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdztcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZi5zZWxlY3RlZERhdGVzWzBdO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWluVGltZSwgXCJIOmlcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heFRpbWUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5tYXhUaW1lLCBcIkg6aVwiKTtcbiAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZS5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICAgICAgc2VsZi5tYXhEYXRlSGFzVGltZSA9XG4gICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBJbnB1dHMoKSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0ID0gZ2V0SW5wdXRFbGVtKCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgZWxlbWVudCBzcGVjaWZpZWRcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhY2s6IHN0b3JlIHByZXZpb3VzIHR5cGUgdG8gcmVzdG9yZSBpdCBhZnRlciBkZXN0cm95KClcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuX3R5cGUgPSBzZWxmLmlucHV0LnR5cGU7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbHRJbnB1dCkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxpY2F0ZSBzZWxmLmVsZW1lbnRcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0ID0gY3JlYXRlRWxlbWVudChzZWxmLmlucHV0Lm5vZGVOYW1lLCBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5yZXF1aXJlZCA9IHNlbGYuaW5wdXQucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50YWJJbmRleCA9IHNlbGYuaW5wdXQudGFiSW5kZXg7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmFsdElucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuYWxsb3dJbnB1dClcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgc2VsZi5fcG9zaXRpb25FbGVtZW50ID0gc2VsZi5jb25maWcucG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX2lucHV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwTW9iaWxlKCkge1xuICAgICAgICAgICAgdmFyIGlucHV0VHlwZSA9IHNlbGYuY29uZmlnLmVuYWJsZVRpbWVcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgIDogXCJkYXRlXCI7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgZmxhdHBpY2tyLW1vYmlsZVwiKTtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudGFiSW5kZXggPSAxO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50eXBlID0gaW5wdXRUeXBlO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFxcXFxUSDppOlNcIlxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiSDppOlNcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGVmYXVsdFZhbHVlID0gc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWluID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnN0ZXAgPSBTdHJpbmcoc2VsZi5pbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5tb2JpbGVJbnB1dCwgc2VsZi5pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHsgfVxuICAgICAgICAgICAgYmluZChzZWxmLm1vYmlsZUlucHV0LCBcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShnZXRFdmVudFRhcmdldChlKS52YWx1ZSwgZmFsc2UsIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNsb3NlXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzT3BlbiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZSgpO1xuICAgICAgICAgICAgc2VsZi5vcGVuKGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChldmVudCwgZGF0YSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZCBhbHJlYWR5LCBhbGwgaG9va3MgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob29rcyA9IHNlbGYuY29uZmlnW2V2ZW50XTtcbiAgICAgICAgICAgIGlmIChob29rcyAhPT0gdW5kZWZpbmVkICYmIGhvb2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaG9va3NbaV0gJiYgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBob29rc1tpXShzZWxmLnNlbGVjdGVkRGF0ZXMsIHNlbGYuaW5wdXQudmFsdWUsIHNlbGYsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcIm9uQ2hhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJjaGFuZ2VcIikpO1xuICAgICAgICAgICAgICAgIC8vIG1hbnkgZnJvbnQtZW5kIGZyYW1ld29ya3MgYmluZCB0byB0aGUgaW5wdXQgZXZlbnRcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJpbnB1dFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuICAgICAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgICAgICAgICAgZS5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0RhdGVTZWxlY3RlZChkYXRlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlRGF0ZXMoc2VsZi5zZWxlY3RlZERhdGVzW2ldLCBkYXRlKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0ZUluUmFuZ2UoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fCBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gKGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0pID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzFdKSA8PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSB8fCAhc2VsZi5tb250aE5hdilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh5ZWFyRWxlbWVudCwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzW2ldLnRleHRDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoVG9TdHIoZC5nZXRNb250aCgpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbikgKyBcIiBcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudmFsdWUgPSBkLmdldE1vbnRoKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQudmFsdWUgPSBkLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5faGlkZVByZXZNb250aEFycm93ID1cbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCA8PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jdXJyZW50WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY3VycmVudE1vbnRoICsgMSA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXREYXRlU3RyKGZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VsZWN0ZWREYXRlc1xuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRPYmopIHsgcmV0dXJuIHNlbGYuZm9ybWF0RGF0ZShkT2JqLCBmb3JtYXQpOyB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQsIGksIGFycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZW5hYmxlVGltZSB8fFxuICAgICAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZihkKSA9PT0gaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5jb25qdW5jdGlvblxuICAgICAgICAgICAgICAgIDogc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgdmFsdWVzIG9mIGlucHV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGVuZGFyXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkICYmIHNlbGYubW9iaWxlRm9ybWF0U3RyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5mb3JtYXREYXRlKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLm1vYmlsZUZvcm1hdFN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmFsdEZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25WYWx1ZVVwZGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbk1vbnRoTmF2Q2xpY2soZSkge1xuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2YXIgaXNQcmV2TW9udGggPSBzZWxmLnByZXZNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoaXNQcmV2TW9udGggfHwgaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VNb250aChpc1ByZXZNb250aCA/IC0xIDogMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLnllYXJFbGVtZW50cy5pbmRleE9mKGV2ZW50VGFyZ2V0KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldmVudFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93RG93blwiKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdGltZVdyYXBwZXIoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGlzS2V5RG93biA9IGUudHlwZSA9PT0gXCJrZXlkb3duXCIsIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSksIGlucHV0ID0gZXZlbnRUYXJnZXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZXZlbnRUYXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgICAgIChpc0tleURvd24gPyAoZS53aGljaCA9PT0gMzggPyAxIDogLTEpIDogMCk7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXJWYWx1ZSArIHN0ZXAgKiBkZWx0YTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzSG91ckVsZW0gPSBpbnB1dCA9PT0gc2VsZi5ob3VyRWxlbWVudCwgaXNNaW51dGVFbGVtID0gaW5wdXQgPT09IHNlbGYubWludXRlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludChpc0hvdXJFbGVtKSAmJiBpbnQoIXNlbGYuYW1QTSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld1ZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50ID8gbmV3VmFsdWUgLSBtYXggLSBpbnQoIXNlbGYuYW1QTSkgOiBtaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKHN0ZXAgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUgKyBjdXJWYWx1ZSA9PT0gMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBwYWQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluaXQoKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgICAgIC8vIHN0YXRpYyBsaXN0XG4gICAgICAgIHZhciBub2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAgICAgLmNhbGwobm9kZUxpc3QpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgICAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZnAtb21pdFwiKSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuX2ZsYXRwaWNrciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gRmxhdHBpY2tySW5zdGFuY2Uobm9kZSwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIEhUTUxDb2xsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBicm93c2VyIGVudlxuICAgICAgICBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuZmxhdHBpY2tyID0gTm9kZUxpc3QucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihbdGhpc10sIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdmFyIGZsYXRwaWNrciA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGZsYXRwaWNrci5sMTBucyA9IHtcbiAgICAgICAgZW46IF9fYXNzaWduKHt9LCBlbmdsaXNoKSxcbiAgICAgICAgZGVmYXVsdDogX19hc3NpZ24oe30sIGVuZ2xpc2gpLFxuICAgIH07XG4gICAgZmxhdHBpY2tyLmxvY2FsaXplID0gZnVuY3Rpb24gKGwxMG4pIHtcbiAgICAgICAgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQpLCBsMTBuKTtcbiAgICB9O1xuICAgIGZsYXRwaWNrci5zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLCBjb25maWcpO1xuICAgIH07XG4gICAgZmxhdHBpY2tyLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoe30pO1xuICAgIGZsYXRwaWNrci5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcih7fSk7XG4gICAgZmxhdHBpY2tyLmNvbXBhcmVEYXRlcyA9IGNvbXBhcmVEYXRlcztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBqUXVlcnkuZm4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgalF1ZXJ5LmZuLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY2FtZWxjYXNlXG4gICAgRGF0ZS5wcm90b3R5cGUuZnBfaW5jciA9IGZ1bmN0aW9uIChkYXlzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksIHRoaXMuZ2V0TW9udGgoKSwgdGhpcy5nZXREYXRlKCkgKyAodHlwZW9mIGRheXMgPT09IFwic3RyaW5nXCIgPyBwYXJzZUludChkYXlzLCAxMCkgOiBkYXlzKSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB3aW5kb3cuZmxhdHBpY2tyID0gZmxhdHBpY2tyO1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0cGlja3I7XG5cbn0pKSk7XG4iLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IHJlcXVpcmUoXCItIUQ6XFxcXEdpdGh1YlxcXFxCQmpHcmlkRXhXaWRnZXRcXFxcY2xpZW50XFxcXG5vZGVfbW9kdWxlc1xcXFxiYWJlbC1sb2FkZXJcXFxcbGliXFxcXGluZGV4LmpzPz9yZWYtLTQhLlxcXFxiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy5qc1wiKTsiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0Mik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMGJhZTA1OWUyYjVmZTI2YzViMTAiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4vQ29tcG9uZW50J1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Db21wb25lbnQvaW5kZXguanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlcixcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycywgZ2V0T3duS2V5cywgYmluZCB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRQcm90b3R5cGVPZiB9ID0gT2JqZWN0O1xuXG5sZXQgbWFwU3RvcmU7XG5cbmZ1bmN0aW9uIGdldEJvdW5kU3VwZXIob2JqLCBmbikge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVzaW5nIEBhdXRvYmluZCBvbiAke2ZuLm5hbWV9KCkgcmVxdWlyZXMgV2Vha01hcCBzdXBwb3J0IGR1ZSB0byBpdHMgdXNlIG9mIHN1cGVyLiR7Zm4ubmFtZX0oKVxuICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXlwaGVscHMvY29yZS1kZWNvcmF0b3JzLmpzL2lzc3Vlcy8yMGBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFtYXBTdG9yZSkge1xuICAgICBtYXBTdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIH1cblxuICBpZiAobWFwU3RvcmUuaGFzKG9iaikgPT09IGZhbHNlKSB7XG4gICAgbWFwU3RvcmUuc2V0KG9iaiwgbmV3IFdlYWtNYXAoKSk7XG4gIH1cblxuICBjb25zdCBzdXBlclN0b3JlID0gbWFwU3RvcmUuZ2V0KG9iaik7XG5cbiAgaWYgKHN1cGVyU3RvcmUuaGFzKGZuKSA9PT0gZmFsc2UpIHtcbiAgICBzdXBlclN0b3JlLnNldChmbiwgYmluZChmbiwgb2JqKSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJTdG9yZS5nZXQoZm4pO1xufVxuXG5mdW5jdGlvbiBhdXRvYmluZENsYXNzKGtsYXNzKSB7XG4gIGNvbnN0IGRlc2NzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhrbGFzcy5wcm90b3R5cGUpO1xuICBjb25zdCBrZXlzID0gZ2V0T3duS2V5cyhkZXNjcyk7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgIT09ICdmdW5jdGlvbicgfHwga2V5ID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBkZWZpbmVQcm9wZXJ0eShrbGFzcy5wcm90b3R5cGUsIGtleSwgYXV0b2JpbmRNZXRob2Qoa2xhc3MucHJvdG90eXBlLCBrZXksIGRlc2MpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRvYmluZE1ldGhvZCh0YXJnZXQsIGtleSwgeyB2YWx1ZTogZm4sIGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSB9KSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEBhdXRvYmluZCBjYW4gb25seSBiZSB1c2VkIG9uIGZ1bmN0aW9ucywgbm90OiAke2ZufWApO1xuICB9XG5cbiAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGFyZ2V0O1xuXG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGUsXG5cbiAgICBnZXQoKSB7XG4gICAgICAvLyBDbGFzcy5wcm90b3R5cGUua2V5IGxvb2t1cFxuICAgICAgLy8gU29tZW9uZSBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZSBvbiB3aGljaCBpdCBpc1xuICAgICAgLy8gYWN0dWFsbHkgZGVmaW5lZCBvbiwgaS5lLiBDbGFzcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYXNzLnByb3RvdHlwZS5rZXkgbG9va3VwXG4gICAgICAvLyBTb21lb25lIGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBkaXJlY3RseSBvbiBhIHByb3RvdHlwZSBidXQgaXQgd2FzIGZvdW5kXG4gICAgICAvLyB1cCB0aGUgY2hhaW4sIG5vdCBkZWZpbmVkIGRpcmVjdGx5IG9uIGl0XG4gICAgICAvLyBpLmUuIENsYXNzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShrZXkpID09IGZhbHNlICYmIGtleSBpbiBDbGFzcy5wcm90b3R5cGVcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvciA9PT0gY29uc3RydWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvYm91bmQgbWV0aG9kIGNhbGxpbmcgc3VwZXIuc2FtZU1ldGhvZCgpIHdoaWNoIGlzIGFsc28gYXV0b2JvdW5kIGFuZCBzbyBvbi5cbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBrZXkgaW4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIGdldEJvdW5kU3VwZXIodGhpcywgZm4pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZEZuID0gYmluZChmbiwgdGhpcyk7XG5cbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAvLyBOT1QgZW51bWVyYWJsZSB3aGVuIGl0J3MgYSBib3VuZCBtZXRob2RcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBib3VuZEZuXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJvdW5kRm47XG4gICAgfSxcbiAgICBzZXQ6IGNyZWF0ZURlZmF1bHRTZXR0ZXIoa2V5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYXV0b2JpbmRDbGFzcyguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXV0b2JpbmRNZXRob2QoLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2JpbmQoLi4uYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZShhcmd1bWVudHMpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGhhbmRsZShhcmdzKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvYXV0b2JpbmQuanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5cbmNvbnN0IEdFTkVSSUNfRlVOQ1RJT05fRVJST1IgPSAne2NoaWxkfSBkb2VzIG5vdCBwcm9wZXJseSBvdmVycmlkZSB7cGFyZW50fSc7XG5jb25zdCBGVU5DVElPTl9SRUdFWFAgPSAvXmZ1bmN0aW9uIChbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVtfJGEtekEtWjAtOVxceEEwLVxcdUZGRkZdKik/KFxcKFteXFwpXSpcXCkpW1xcc1xcU10rJC87XG5cbmNsYXNzIFN5bnRheEVycm9yUmVwb3J0ZXIge1xuICBwYXJlbnRLbGFzcztcbiAgY2hpbGRLbGFzcztcbiAgcGFyZW50RGVzY3JpcHRvcjtcbiAgY2hpbGREZXNjcmlwdG9yO1xuICBcbiAgZ2V0IGtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZERlc2NyaXB0b3Iua2V5OyAgXG4gIH1cbiAgXG4gIGdldCBwYXJlbnROb3RhdGlvbigpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYXJlbnRLbGFzcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMucGFyZW50UHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuXG4gIGdldCBjaGlsZE5vdGF0aW9uKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmNoaWxkS2xhc3MuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLmNoaWxkUHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuICBcbiAgZ2V0IHBhcmVudFRvcGljKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUb3BpYyh0aGlzLnBhcmVudERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBnZXQgY2hpbGRUb3BpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VG9waWModGhpcy5jaGlsZERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBfZ2V0VG9waWMoZGVzY3JpcHRvcikge1xuICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsOyAgXG4gICAgfVxuICAgIFxuICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ2dldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ3NldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iuc2V0O1xuICAgIH1cbiAgfVxuICBcbiAgZ2V0IHBhcmVudFByb3BlcnR5U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYWN0VG9waWNTaWduYXR1cmUodGhpcy5wYXJlbnRUb3BpYyk7IFxuICB9XG4gIFxuICBnZXQgY2hpbGRQcm9wZXJ0eVNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRoaXMuY2hpbGRUb3BpYyk7IFxuICB9XG4gIFxuICBfZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRvcGljKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdG9waWMpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RGdW5jdGlvblNpZ25hdHVyZSh0b3BpYyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XG4gICAgfVxuICB9XG4gIFxuICBfZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlKGZuKSB7XG4gICAgcmV0dXJuIGZuXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgIEZVTkNUSU9OX1JFR0VYUCxcbiAgICAgICAgKG1hdGNoLCBuYW1lID0gdGhpcy5rZXksIHBhcmFtcykgPT4gbmFtZSArIHBhcmFtc1xuICAgICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHBhcmVudEtsYXNzLCBjaGlsZEtsYXNzLCBwYXJlbnREZXNjcmlwdG9yLCBjaGlsZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLnBhcmVudEtsYXNzID0gcGFyZW50S2xhc3M7XG4gICAgdGhpcy5jaGlsZEtsYXNzID0gY2hpbGRLbGFzcztcbiAgICB0aGlzLnBhcmVudERlc2NyaXB0b3IgPSBwYXJlbnREZXNjcmlwdG9yO1xuICAgIHRoaXMuY2hpbGREZXNjcmlwdG9yID0gY2hpbGREZXNjcmlwdG9yO1xuICB9XG4gIFxuICBhc3NlcnQoY29uZGl0aW9uLCBtc2cgPSAnJykge1xuICAgIGlmIChjb25kaXRpb24gIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZXJyb3IoR0VORVJJQ19GVU5DVElPTl9FUlJPUiArIG1zZyk7XG4gICAgfVxuICB9XG4gIFxuICBlcnJvcihtc2cpIHtcbiAgICBtc2cgPSBtc2dcbiAgICAgIC8vIFJlcGxhY2UgbGF6aWx5LCBiZWNhdXNlIHRoZXkgYWN0dWFsbHkgbWlnaHQgbm90XG4gICAgICAvLyBiZSBhdmFpbGFibGUgaW4gYWxsIGNhc2VzXG4gICAgICAucmVwbGFjZSgne3BhcmVudH0nLCBtID0+IHRoaXMucGFyZW50Tm90YXRpb24pXG4gICAgICAucmVwbGFjZSgne2NoaWxkfScsIG0gPT4gdGhpcy5jaGlsZE5vdGF0aW9uKTtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IobXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yVHlwZShkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgcmV0dXJuICdkYXRhJztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdnZXQnKSB8fCBkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdzZXQnKSkge1xuICAgIHJldHVybiAnYWNjZXNzb3InO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGVtIGV4aXN0LCBicm93c2VycyB0cmVhdCBpdCBhc1xuICAvLyBhIGRhdGEgZGVzY3JpcHRvciB3aXRoIGEgdmFsdWUgb2YgYHVuZGVmaW5lZGBcbiAgcmV0dXJuICdkYXRhJztcbn1cblxuZnVuY3Rpb24gY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgcmVwb3J0ZXIuYXNzZXJ0KHBhcmVudC5sZW5ndGggPT09IGNoaWxkLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFZhbHVlVHlwZSA9IHR5cGVvZiBwYXJlbnQudmFsdWU7XG4gIGNvbnN0IGNoaWxkVmFsdWVUeXBlID0gdHlwZW9mIGNoaWxkLnZhbHVlO1xuICBcbiAgaWYgKHBhcmVudFZhbHVlVHlwZSA9PT0gJ3VuZGVmaW5lZCcgJiYgY2hpbGRWYWx1ZVR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gY2xhc3MgcHJvcGVydGllcyBjYW4gYmUgYW55IGV4cHJlc3Npb24sIHdoaWNoIGlzbid0IHJhbiB1bnRpbCB0aGVcbiAgICAvLyB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZCwgc28gd2UgY2FuJ3QgcmVsaWFibHkgZ2V0IHR5cGUgaW5mb3JtYXRpb25cbiAgICAvLyBmb3IgdGhlbSB5ZXQgKHBlciBzcGVjKS4gUGVyaGFwcyB3aGVuIEJhYmVsIGluY2x1ZGVzIGZsb3ctdHlwZSBpbmZvXG4gICAgLy8gaW4gcnVudGltZT8gVHJpZWQgcmVnZXggc29sdXRpb25zLCBidXQgc3VwZXIgaGFja3kgYW5kIG9ubHkgZmVhc2libGVcbiAgICAvLyBvbiBwcmltaXRpdmVzLCB3aGljaCBpcyBjb25mdXNpbmcgZm9yIHVzYWdlLi4uXG4gICAgcmVwb3J0ZXIuZXJyb3IoYGRlc2NyaXB0b3IgdmFsdWVzIGFyZSBib3RoIHVuZGVmaW5lZC4gKGNsYXNzIHByb3BlcnRpZXMgYXJlIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCknYCk7XG4gIH1cbiAgXG4gIGlmIChwYXJlbnRWYWx1ZVR5cGUgIT09IGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY29uc3QgaXNGdW5jdGlvbk92ZXJVbmRlZmluZWQgPSAoY2hpbGRWYWx1ZVR5cGUgPT09ICdmdW5jdGlvbicgJiYgcGFyZW50VmFsdWVUeXBlID09PSB1bmRlZmluZWQpO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgY2xhc3MgcHJvcGVydGllcywgdGhpc1xuICAgIC8vIHdpbGwgc3RpbGwgaGFuZGxlIG1vcmUgdGhhbiBqdXN0IGZ1bmN0aW9ucywganVzdCBpbiBjYXNlLlxuICAgIC8vIFNoYWRvd2luZyBhbiB1bmRlZmluZWQgdmFsdWUgaXMgYW4gZXJyb3IgaWYgdGhlIGluaGVyaXRlZFxuICAgIC8vIHZhbHVlIHdhcyB1bmRlZmluZWQgKHVzdWFsbHkgYSBjbGFzcyBwcm9wZXJ0eSwgbm90IGEgbWV0aG9kKVxuICAgIGlmIChpc0Z1bmN0aW9uT3ZlclVuZGVmaW5lZCB8fCBwYXJlbnRWYWx1ZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHZhbHVlIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFZhbHVlVHlwZX1cIiwge2NoaWxkfSBpcyBcIiR7Y2hpbGRWYWx1ZVR5cGV9XCJgKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFN3aXRjaCwgaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcgbW9yZSB0eXBlc1xuICBzd2l0Y2ggKGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LnZhbHVlLCBjaGlsZC52YWx1ZSwgcmVwb3J0ZXIpO1xuICAgICAgYnJlYWs7XG4gICAgICBcbiAgICBkZWZhdWx0OlxuICAgICAgcmVwb3J0ZXIuZXJyb3IoYFVuZXhwZWN0ZWQgZXJyb3IuIFBsZWFzZSBmaWxlIGEgYnVnIHdpdGg6IHtwYXJlbnR9IGlzIFwiJHtwYXJlbnRWYWx1ZVR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVmFsdWVUeXBlfVwiYCk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgY29uc3QgcGFyZW50SGFzR2V0dGVyID0gdHlwZW9mIHBhcmVudC5nZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzR2V0dGVyID0gdHlwZW9mIGNoaWxkLmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgcGFyZW50SGFzU2V0dGVyID0gdHlwZW9mIHBhcmVudC5zZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzU2V0dGVyID0gdHlwZW9mIGNoaWxkLnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgXG4gIGlmIChwYXJlbnRIYXNHZXR0ZXIgfHwgY2hpbGRIYXNHZXR0ZXIpIHtcbiAgICBpZiAoIXBhcmVudEhhc0dldHRlciAmJiBwYXJlbnRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBzZXR0ZXIgYnV0IHtjaGlsZH0gaXMgZ2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghY2hpbGRIYXNHZXR0ZXIgJiYgY2hpbGRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBnZXR0ZXIgYnV0IHtjaGlsZH0gaXMgc2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudC5nZXQsIGNoaWxkLmdldCwgcmVwb3J0ZXIpO1xuICB9XG4gIFxuICBpZiAocGFyZW50SGFzU2V0dGVyIHx8IGNoaWxkSGFzU2V0dGVyKSB7XG4gICAgaWYgKCFwYXJlbnRIYXNTZXR0ZXIgJiYgcGFyZW50SGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgZ2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIHNldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWNoaWxkSGFzU2V0dGVyICYmIGNoaWxkSGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgc2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIGdldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQuc2V0LCBjaGlsZC5zZXQsIHJlcG9ydGVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0Rlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShwYXJlbnQpO1xuICBjb25zdCBjaGlsZFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShjaGlsZCk7XG5cbiAgaWYgKHBhcmVudFR5cGUgIT09IGNoaWxkVHlwZSkge1xuICAgIHJlcG9ydGVyLmVycm9yKGBkZXNjcmlwdG9yIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVHlwZX1cImApO1xuICB9XG5cbiAgc3dpdGNoIChjaGlsZFR5cGUpIHtcbiAgICBjYXNlICdkYXRhJzpcbiAgICAgIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYWNjZXNzb3InOlxuICAgICAgY2hlY2tBY2Nlc3NvckRlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmNvbnN0IHN1Z2dlc3Rpb25UcmFuc2Zvcm1zID0gW1xuICBrZXkgPT4ga2V5LnRvTG93ZXJDYXNlKCksXG4gIGtleSA9PiBrZXkudG9VcHBlckNhc2UoKSxcbiAga2V5ID0+IGtleSArICdzJyxcbiAga2V5ID0+IGtleS5zbGljZSgwLCAtMSksXG4gIGtleSA9PiBrZXkuc2xpY2UoMSwga2V5Lmxlbmd0aCksXG5dO1xuXG5mdW5jdGlvbiBmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMoc3VwZXJLbGFzcywga2V5KSB7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gc3VnZ2VzdGlvblRyYW5zZm9ybXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgZm4gPSBzdWdnZXN0aW9uVHJhbnNmb3Jtc1tpXTtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gZm4oa2V5KTtcblxuICAgIGlmIChzdWdnZXN0aW9uIGluIHN1cGVyS2xhc3MpIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci5rZXkgPSBrZXk7XG4gIGNvbnN0IHN1cGVyS2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgY29uc3Qgc3VwZXJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdXBlcktsYXNzLCBrZXkpO1xuICBjb25zdCByZXBvcnRlciA9IG5ldyBTeW50YXhFcnJvclJlcG9ydGVyKHN1cGVyS2xhc3MsIHRhcmdldCwgc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yKTtcbiAgXG4gIGlmIChzdXBlckRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHN1Z2dlc3RlZEtleSA9IGZpbmRQb3NzaWJsZUFsdGVybmF0aXZlcyhzdXBlcktsYXNzLCBrZXkpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBzdWdnZXN0ZWRLZXkgPyBgXFxuXFxuICBEaWQgeW91IG1lYW4gXCIke3N1Z2dlc3RlZEtleX1cIj9gIDogJyc7XG4gICAgcmVwb3J0ZXIuZXJyb3IoYE5vIGRlc2NyaXB0b3IgbWF0Y2hpbmcge2NoaWxkfSB3YXMgZm91bmQgb24gdGhlIHByb3RvdHlwZSBjaGFpbi4ke3N1Z2dlc3Rpb259YCk7XG4gIH1cbiAgXG4gIGNoZWNrRGVzY3JpcHRvcnMoc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yLCByZXBvcnRlcik7XG4gIFxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3ZlcnJpZGUoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9vdmVycmlkZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG59O1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8gKyBcIiBcIiArIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGUsIHVwZGF0ZSwgcmVtb3ZlLCByZXN1bHQ7XG5cblx0Ly8gSWYgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gd2FzIGRlZmluZWQsIHJ1biBpdCBvbiB0aGUgY3NzXG5cdGlmIChvcHRpb25zLnRyYW5zZm9ybSAmJiBvYmouY3NzKSB7XG5cdCAgICByZXN1bHQgPSBvcHRpb25zLnRyYW5zZm9ybShvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIsImltcG9ydCBsYXp5SW5pdGlhbGl6ZSBmcm9tICcuLi9sYXp5LWluaXRpYWxpemUnO1xuXG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgIGdldE93blByb3BlcnR5TmFtZXMsIGdldE93blByb3BlcnR5U3ltYm9scyB9ID0gT2JqZWN0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjcmlwdG9yKGRlc2MpIHtcbiAgaWYgKCFkZXNjIHx8ICFkZXNjLmhhc093blByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IFsndmFsdWUnLCAnaW5pdGlhbGl6ZXInLCAnZ2V0JywgJ3NldCddO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZGVzYy5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgZW50cnlBcmdzKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZW50cnlBcmdzW2VudHJ5QXJncy5sZW5ndGggLSAxXSkpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVzY3JpcHRvciguLi5lbnRyeUFyZ3MsIFtdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZURlc2NyaXB0b3IoLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgZW50cnlBcmdzKTtcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIE1ldGEge1xuICBAbGF6eUluaXRpYWxpemVcbiAgZGVib3VuY2VUaW1lb3V0SWRzID0ge307XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHRocm90dGxlVGltZW91dElkcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVByZXZpb3VzVGltZXN0YW1wcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVRyYWlsaW5nQXJncyA9IG51bGw7XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHByb2ZpbGVMYXN0UmFuID0gbnVsbDtcbn1cblxuY29uc3QgTUVUQV9LRVkgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBTeW1ib2woJ19fY29yZV9kZWNvcmF0b3JzX18nKVxuICA6ICdfX2NvcmVfZGVjb3JhdG9yc19fJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFGb3Iob2JqKSB7XG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkoTUVUQV9LRVkpID09PSBmYWxzZSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iaiwgTUVUQV9LRVksIHtcbiAgICAgIC8vIERlZmF1bHRzOiBOT1QgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCBvciB3cml0YWJsZVxuICAgICAgdmFsdWU6IG5ldyBNZXRhKClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmpbTUVUQV9LRVldO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T3duS2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9sc1xuICAgID8gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpXG4gICAgICAgICAgLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSk7XG4gICAgICB9XG4gICAgOiBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaikge1xuICBjb25zdCBkZXNjcyA9IHt9O1xuXG4gIGdldE93bktleXMob2JqKS5mb3JFYWNoKFxuICAgIGtleSA9PiAoZGVzY3Nba2V5XSA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gICk7XG5cbiAgcmV0dXJuIGRlc2NzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChuZXdWYWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgLy8gSVMgZW51bWVyYWJsZSB3aGVuIHJlYXNzaWduZWQgYnkgdGhlIG91dHNpZGUgd29yZFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZChmbiwgY29udGV4dCkge1xuICBpZiAoZm4uYmluZCkge1xuICAgIHJldHVybiBmbi5iaW5kKGNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBfX2F1dG9iaW5kX18oKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3YXJuID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAnb2JqZWN0JyB8fCAhY29uc29sZSB8fCB0eXBlb2YgY29uc29sZS53YXJuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiaW5kKGNvbnNvbGUud2FybiwgY29uc29sZSk7XG4gIH1cbn0pKCk7XG5cbmNvbnN0IHNlZW5EZXByZWNhdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbERlcHJlY2F0aW9uKG1zZykge1xuICBpZiAoc2VlbkRlcHJlY2F0aW9uc1ttc2ddICE9PSB0cnVlKSB7XG4gICAgc2VlbkRlcHJlY2F0aW9uc1ttc2ddID0gdHJ1ZTtcbiAgICB3YXJuKCdERVBSRUNBVElPTjogJyArIG1zZyk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL3ByaXZhdGUvdXRpbHMuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuU3dpdGNoIGZyb20gJy4vQm9vbGVhblN3aXRjaCdcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuL1RlbXBsYXRlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZW1wbGF0ZVJlbmRlcmVyL2luZGV4LmpzIiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnblZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuZXhwb3J0IGRlZmF1bHQgZnJlZUdsb2JhbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNMZW5ndGg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XHJcblx0aWYoIW9yaWdpbmFsTW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xyXG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiZXhwb3J0c1wiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHR9KTtcclxuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9kdWxlO1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFcnJvci5qcyIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TWFwO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlSW50ZXJwb2xhdGUuanMiLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwiaW1wb3J0IHsgZGVjb3JhdGUgfSBmcm9tICcuL3ByaXZhdGUvdXRpbHMnO1xuXG5mdW5jdGlvbiBoYW5kbGVEZXNjcmlwdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlYWRvbmx5KC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcmVhZG9ubHkuanMiLCJpbXBvcnQgdHpQYXJzZVRpbWV6b25lIGZyb20gJy4uL19saWIvdHpQYXJzZVRpbWV6b25lJ1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzJ1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUnXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IHR6UGFyc2VUaW1lem9uZSh0aW1lWm9uZSwgdXRjRGF0ZSlcblxuICByZXR1cm4gb2Zmc2V0TWlsbGlzZWNvbmRzXG4gICAgPyBzdWJNaWxsaXNlY29uZHModXRjRGF0ZSwgb2Zmc2V0TWlsbGlzZWNvbmRzKVxuICAgIDogdXRjRGF0ZVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS91dGNUb1pvbmVkVGltZS9pbmRleC5qcyIsImltcG9ydCB0elRva2VuaXplRGF0ZSBmcm9tICcuLi90elRva2VuaXplRGF0ZS9pbmRleC5qcydcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elBhcnNlVGltZXpvbmUvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi9FdmVudHNNaXhpbidcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRzTWl4aW5cbmV4cG9ydCB7IHdpdGhFdmVudHNNaXhpbiB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRXZlbnRzTWl4aW4vaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuL0RhdGVUaW1lSW5wdXQnXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lSW5wdXRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUlucHV0L2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5FZGl0b3IgZnJvbSAnLi9Cb29sZWFuRWRpdG9yJ1xuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcbmltcG9ydCBCb29sZWFuRmlsdGVyIGZyb20gJy4vQm9vbGVhbkZpbHRlcidcbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL1RleHRFZGl0b3InXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuL1RlbXBsYXRlUmVuZGVyZXInXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5pbXBvcnQgRGF0ZVRpbWVGaWx0ZXIgZnJvbSAnLi9EYXRlVGltZUZpbHRlcidcbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQge1xuICBCb29sZWFuRWRpdG9yLFxuICBCb29sZWFuUmVuZGVyZXIsXG4gIEJvb2xlYW5GaWx0ZXIsXG4gIE51bWJlckVkaXRvcixcbiAgVGV4dEVkaXRvcixcbiAgVGVtcGxhdGVSZW5kZXJlcixcbiAgSW1hZ2VSZW5kZXJlcixcbiAgRGF0ZVRpbWVGaWx0ZXIsXG4gIERhdGVUaW1lRWRpdG9yLFxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5FZGl0b3IgZnJvbSAnLi9Cb29sZWFuRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IEJvb2xlYW5Td2l0Y2ggZnJvbSAnLi4vQm9vbGVhblN3aXRjaCdcblxuLyoqXG4gKiBCb29sZWFucyBFZGl0b3JcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmJvb2xlYW5Vc2VkVHJ1ZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0aGUgZWRpdG9yIGNoYW5nZXMgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZSB0byB0cnVlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0aGUgZWRpdG9yIGNoYW5nZXMgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZSB0byBmYWxzZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQm9vbGVhbkVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBCb29sZWFuKHBhcmFtcy5rZXlQcmVzcylcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gQm9vbGVhbihwYXJhbXMuY2hhclByZXNzKVxuICAgIH1cblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdLmNvbmNhdChcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pXG4gICAgKVxuXG4gICAgdGhpcy5fZmFsc2VWYWx1ZSA9IFtdLmNvbmNhdChcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSlcbiAgICApXG5cbiAgICB0aGlzLl9yZXR1cm5UcnVlVmFsdWUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdib29sZWFuVXNlZFRydWVWYWx1ZScsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl90cnVlVmFsdWVbMF1cbiAgICApXG4gICAgdGhpcy5fcmV0dXJuRmFsc2VWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2Jvb2xlYW5Vc2VkRmFsc2VWYWx1ZScsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl9mYWxzZVZhbHVlWzBdXG4gICAgKVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gdGhpcy5fdHJ1ZVZhbHVlLm1hcCh4ID0+IFN0cmluZyh4KSlcbiAgICB0aGlzLl9mYWxzZVZhbHVlID0gdGhpcy5fZmFsc2VWYWx1ZS5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICB0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCA9IHBhcmFtcy5jZWxsU3RhcnRlZEVkaXRcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZShcbiAgICAgIHRoaXMuX3ZhbHVlLFxuICAgICAgdGhpcy5fdHJ1ZVZhbHVlLFxuICAgICAgdGhpcy5fZmFsc2VWYWx1ZVxuICAgIClcblxuICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2godGhpcy5fdmFsdWUsIHN3aXRjaGVyID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKFxuICAgICAgICBzd2l0Y2hlci5pc0NoZWNrZWQoKSxcbiAgICAgICAgdGhpcy5fdHJ1ZVZhbHVlLFxuICAgICAgICB0aGlzLl9mYWxzZVZhbHVlXG4gICAgICApXG4gICAgfSlcbiAgICB0aGlzLl9zd2l0Y2hlci5pbml0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3dpdGNoZXIuZ2V0R3VpKClcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKiBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCBhbmQgbGlzdGVuaW5nIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgdGhpcy5mb2N1c0luKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaW5hbCB2YWx1ZSB0byB0aGUgZ3JpZCwgdGhlIHJlc3VsdCBvZiB0aGUgZWRpdGluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8gdGhpcy5fcmV0dXJuVHJ1ZVZhbHVlIDogdGhpcy5fcmV0dXJuRmFsc2VWYWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgaW5pdGlhbGl6ZWQgYW5kIHJldHVybnMgZmFsc2Ugc28gdGhlIGVkaXRvciBhcHBlYXJzIGluIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGFsd2F5cyBmYWxzZVxuICAgKiovXG4gIGlzUG9wdXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgaW50byB0aGUgY2VsbC5cbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGZvY3VzSW4oKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQoZmFsc2UpXG4gICAgdGhpcy5fc3dpdGNoZXIuZm9jdXMoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgb3V0IG9mIHRoZSBjZWxsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZm9jdXNPdXQoKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWUgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHRydWVWYWx1ZSB0cnVlIHZhbHVlIGFsaWFzXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gZmFsc2VWYWx1ZSBmYWxzZSB2YWx1ZSBhbGlhc1xuICAgKi9cbiAgX2NvbnZlcnRWYWx1ZSh2YWx1ZSwgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWVBc1N0cmluZyA9IFN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiB0cnVlVmFsdWUuaW5kZXhPZih2YWx1ZUFzU3RyaW5nKSA+IC0xXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlQXNTdHJpbmcpID4gLTFcbiAgICAgID8gZmFsc2VcbiAgICAgIDogdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkVkaXRvci9Cb29sZWFuRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogVGhlIGJhc2UgY29tcG9uZW50IGNsYXNzXG4gKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3Mgd2hpY2ggYWxsIGNvbXBvbmVudHMgc2hvdWxkIHVzZVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGh0bWwgZWxlbWVudFxuICAgKlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBfZ3VpID0gbnVsbFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbaW5pdF0gbWV0aG9kYFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIERPTSBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQsIHRoaXMgaXMgd2hhdCB0aGUgZ3JpZCBwdXRzIGludG8gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuIElmIHlvdXIgY3VzdG9tIGNvbXBvbmVudCBuZWVkcyB0byBkb1xuICAgKiBhbnkgcmVzb3VyY2UgY2xlYW5pbmcgdXAsIGRvIGl0IGhlcmUuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIC8vIHBhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSByZXF1aXJlZCBvcHRpb24gdmFsdWVcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBmaW5kIHRoZSBwYXNzZWQgb3B0aW9uJ3MgdmFsdWUgaW4gdGhlIGZvbGxvd2luZyBvcmRlclxuICAgKlxuICAgKiAgMS4gcGFyYW1zXG4gICAqICAyLiBTZWFyY2ggYHBhcmFtcy5jb2xEZWZgXG4gICAqICAzLiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0LkFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbQ09MVU1OX0lEXWAgb3IgYHBhcmFtcy5jb250ZXh0Lm1ldGFbQ09MVU1OX0lEXWBcbiAgICogIDQuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHQuQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ2Agb3IgYHBhcmFtcy5jb250ZXh0Lm1ldGFgXG4gICAqICA1LiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0YFxuICAgKiAgNi4gSWYgbm9uZSBmb3VuZCByZXR1cm4gdGhlIGZhbGxiYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBvcHRpb25cbiAgICogQHBhcmFtIHtwYXJhbXN9IHBhcmFtcyBhbiBvYmplY3QgdXNlZCB0byBzZWFyY2ggZm9yIHRoZSBvcHRpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IGZhbGxiYWNrIGEgdmFsdWUgdG8gcmV0dXJuIGluIGNhc2UgdGhlIG9wdGlvbiBjYW4gbm90IGJlIGZvdW5kXG4gICAqL1xuICBnZXRPcHRpb24obmFtZSwgcGFyYW1zLCBmYWxsYmFjayA9IG51bGwpIHtcbiAgICBsZXQgb3B0aW9uXG5cbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBwYXJhbXNbbmFtZV0gIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbiA9IHBhcmFtc1tuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0cnkgdG8gZmV0Y2ggZnJvbSB0aGUgY29sdW1uIGRlZiBmaXJzdFxuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2NvbERlZicpICYmXG4gICAgICAgIHBhcmFtcy5jb2xEZWYuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgcGFyYW1zLmNvbERlZltuYW1lXSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbiA9IHBhcmFtcy5jb2xEZWZbbmFtZV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWd8bWV0YSBpbiB0aGUgY29udGV4dFxuICAgICAgICBsZXQgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyA9IG51bGxcbiAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnY29udGV4dCcpKSB7XG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyA9XG4gICAgICAgICAgICBwYXJhbXMuY29udGV4dC5BR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnIHx8IHBhcmFtcy5jb250ZXh0Lm1ldGFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwYXJhbXMuY29sdW1uLmNvbElkKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF0uaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW3BhcmFtcy5jb2x1bW4uY29sSWRdW25hbWVdICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbiA9IEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF1bbmFtZV1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbbmFtZV0gIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9uID0gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tuYW1lXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdCBpdHNlbGZcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFyYW1zLmNvbnRleHRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb250ZXh0ICYmXG4gICAgICAgICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgICBjb250ZXh0W25hbWVdICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvcHRpb24gPSBjb250ZXh0W25hbWVdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRyeSB0byBjaGVjayBwYXJhbXMgaXRzZWxmIG9yIGZhbGxiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgICAgIG9wdGlvbiA9IGZhbGxiYWNrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb24gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uIDogZmFsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2luZG93IEluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgd2luZG93IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge1dpbmRvd31cbiAgICovXG4gIGdldFdpbihwYXJhbXMpIHtcbiAgICBjb25zdCB3aW4gPSB0aGlzLmdldE9wdGlvbignd2luZG93JywgcGFyYW1zKSB8fCB3aW5kb3cgfHwgbnVsbFxuXG4gICAgaWYgKCF3aW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdpbmRvdycpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkb2N1bWVudCBJbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge3BhcmFtc30gcGFyYW1zIGFuIG9iamVjdCB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIGRvY3VtZW50IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxEb2N1bWVudH1cbiAgICovXG4gIGdldERvYyhwYXJhbXMpIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLmdldE9wdGlvbignZG9jdW1lbnQnLCBwYXJhbXMpIHx8IGRvY3VtZW50IHx8IG51bGxcblxuICAgIGlmICghZG9jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkb2N1bWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0NvbXBvbmVudC9Db21wb25lbnQuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIEJvb2xlYW4gUmVuZGVyZXJcbiAqXG4gKiBTaW1wbGUgdG9nZ2xlIHN3aXRjaCB0byBoYW5kbGUgYm9vbGVhbiB2YWx1ZXNcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuU3dpdGNoIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhblN3aXRjaCBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbaW5pdGlhbFZhbHVlID0gZmFsc2VdIHRoZSBkZWZhdWx0IHN0YXRlICwgY2hlY2tlZCBvciB1bmNoZWNrZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyID0gbnVsbF0gYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZFxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlID0gZmFsc2UsIGxpc3RlbmVyID0gbnVsbCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldENoZWNrZWQoaW5pdGlhbFZhbHVlKVxuICAgIHRoaXMuc2V0TGlzdGVuZXIobGlzdGVuZXIpXG4gICAgdGhpcy5zZXREaXNhYmxlZChmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX29uQ2xpY2sgPSB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcylcbiAgICB0aGlzLl9vbktleWRvd24gPSB0aGlzLl9vbktleWRvd24uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5fZ3VpID0gdGhpcy5nZXREb2MocGFyYW1zKS5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAtMVxuXG4gICAgdGhpcy5yZW5kZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc3dpdGNoIHNsaWRlciBhbmQgaGlkZGVuIGlucHV0LlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2V0RG9jKHRoaXMuX3BhcmFtcylcblxuICAgIGNvbnN0IGJvb2xTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvb2xTd2l0Y2guY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2gnXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5pZCA9IGBlbC0ke01hdGgucmFuZG9tKCl9YFxuICAgIHRoaXMuX2lucHV0Lm5hbWUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2NoZWNrYm94J1xuICAgIHRoaXMuX2lucHV0LnR5cGUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkKClcbiAgICB0aGlzLl9pbnB1dC5kaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAnMCdcblxuICAgIC8vIGxhYmVsXG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpXG4gICAgbGFiZWwuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2xhYmVsJ1xuICAgIGxhYmVsLmZvciA9IHRoaXMuX2lucHV0LmlkXG4gICAgbGFiZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c3BhbiBjbGFzcz1cImJvb2xTd2l0Y2hfX2lubmVyXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJib29sU3dpdGNoX19zd2l0Y2hcIj48L3NwYW4+XG4gICAgYFxuXG4gICAgLy8gYXR0YWNoZSBpbnB1dCBhbmQgc2xpZGVyIHRvIGNvbXBvbmVudFxuICAgIGJvb2xTd2l0Y2guYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG4gICAgYm9vbFN3aXRjaC5hcHBlbmRDaGlsZChsYWJlbClcblxuICAgIGJvb2xTd2l0Y2guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKVxuICAgIHRoaXMuX2d1aS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlkb3duKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvb2xTd2l0Y2gpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBib29sU3dpdGNoID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sU3dpdGNoJylcbiAgICBib29sU3dpdGNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljaylcbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5ZG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgY29tcG9uZW50XG4gICAqL1xuICBmb2N1cygpIHtcbiAgICB0aGlzLl9ndWkuZm9jdXMoKVxuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3dpdGNoIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAgICovXG4gIHNldExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdGVuZXIgaW5zdGFuY2UgLCBpZlxuICAgKlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbnxudWxsfVxuICAgKi9cbiAgZ2V0TGlzdGVuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3RlbmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0IGNoZWNrZWRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSB0cnVlIHRvIGNoZWNrICwgZmFsc2UgdG8gdW5jaGVja1xuICAgKi9cbiAgc2V0Q2hlY2tlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2NoZWNrZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBpZiBzd2l0Y2ggaXMgY2hlY2tlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSAgdHJ1ZSB3aGVuIGNoZWNrZWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGlzQ2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZFxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgY29tcG9uZW50IHN0YXRlXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5zZXRDaGVja2VkKCF0aGlzLmlzQ2hlY2tlZCgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkaXNhYmxlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRydWUgdG8gZGlzYWJsZWQgLCBmYWxzZSB0byBlbmFibGVcbiAgICovXG4gIHNldERpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuZGlzYWJsZWQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgc3dpdGNoIGlzIGRpc2FibGVkXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBkaXNhYmxlZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjbGljayBsaXN0ZW5lciBvZiB0aGUgc3dpdGNoLiBJdCB3aWxsIHRvZ2dsZSB0aGUgc3RhdGUgYW5kIGZpcmUgYW55IHJlZ2lzdGVyZWQgbGlzdGVuZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZSB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdGhpcy50b2dnbGUoKVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBrZXkgbGlzdGVuZXIgb2YgdGhlIHN3aXRjaC4gSXQgd2lsbCB0b2dnbGUgdGhlIHN0YXRlIHVzaW5nIGtleWJvYXJkIGtleXMgKGxlZnQgLCByaWdodCAsIHNwYWNlKVxuICAgKiBhbmQgZmlyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlICB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25LZXlkb3duKGUpIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGUud2hpY2ggfHwgZS5rZXlDb2RlXG5cbiAgICAvLyBzcGFjZVxuICAgIGlmIChrZXkgPT0gMzIpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICAvLyByaWdodFxuICAgIGVsc2UgaWYgKGtleSA9PSAzOSkge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKHRydWUpXG4gICAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXIodGhpcylcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gICAgLy8gbGVmdFxuICAgIGVsc2UgaWYgKGtleSA9PSAzNykge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKGZhbHNlKVxuICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2hcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlciB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5IH0gPSBPYmplY3Q7XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgY29uc3QgeyBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIGluaXRpYWxpemVyLCB2YWx1ZSB9ID0gZGVzY3JpcHRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGUsXG4gICAgZW51bWVyYWJsZSxcblxuICAgIGdldCgpIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiBzb21lb25lIGFjY2Vzc2VzIHRoZVxuICAgICAgLy8gcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIuY2FsbCh0aGlzKSA6IHZhbHVlO1xuXG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlLFxuICAgICAgICBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHJldFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHNldDogY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhenlJbml0aWFsaXplKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvbGF6eS1pbml0aWFsaXplLmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmFnLWNlbGwtaW5saW5lLWVkaXRpbmcgLmJvb2xTd2l0Y2hfX3dyYXBwZXJ7bWFyZ2luOmF1dG8gMTFweH0uYm9vbFN3aXRjaF9fd3JhcHBlcntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7b3V0bGluZTpub25lO3BhZGRpbmctbGVmdDo2cHg7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmJvb2xTd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NTVweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5ib29sU3dpdGNoX19jaGVja2JveHtkaXNwbGF5Om5vbmV9LmJvb2xTd2l0Y2hfX2xhYmVse2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyO2JvcmRlcjoycHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjIwcHh9LmJvb2xTd2l0Y2hfX2lubmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjAwJTttYXJnaW4tbGVmdDotMTAwJTt0cmFuc2l0aW9uOm1hcmdpbiAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2lubmVyOmJlZm9yZSwuYm9vbFN3aXRjaF9faW5uZXI6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjUwJTtoZWlnaHQ6MTVweDtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6MTVweDtmb250LXNpemU6MTRweDtjb2xvcjp3aGl0ZTtmb250LWZhbWlseTonU2Vnb2UgVUkgU3ltYm9sJywgVHJlYnVjaGV0LCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXdlaWdodDpib2xkO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYm9vbFN3aXRjaF9faW5uZXI6YmVmb3Jle2NvbnRlbnQ6J1xcXFwyNzE0JztwYWRkaW5nLWxlZnQ6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLWFnLWFscGluZS1hY3RpdmUtY29sb3IsICMyMTk2ZjMpKTtjb2xvcjojZmZmZmZmfS5ib29sU3dpdGNoX19pbm5lcjphZnRlcntjb250ZW50OidcXFxcMjcxOCc7cGFkZGluZy1yaWdodDoxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTt0ZXh0LWFsaWduOnJpZ2h0fS5ib29sU3dpdGNoX19zd2l0Y2h7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O21hcmdpbjoxcHg7YmFja2dyb3VuZDojZmZmZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjM1cHg7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6MjBweDt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2NoZWNrYm94OmNoZWNrZWQrLmJvb2xTd2l0Y2hfX2xhYmVsIC5ib29sU3dpdGNoX19pbm5lcnttYXJnaW4tbGVmdDowfS5ib29sU3dpdGNoX19jaGVja2JveDpjaGVja2VkKy5ib29sU3dpdGNoX19sYWJlbCAuYm9vbFN3aXRjaF9fc3dpdGNoe3JpZ2h0OjBweH1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuLi9Cb29sZWFuU3dpdGNoJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBCb29sZWFucyBSZW5kZXJlclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBSZW5kZXJpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVHJ1ZVJlbmRlclZhbHVlKiogIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGB0cnVlYCB2YWx1ZXMuIDxicj4gKipzd2l0Y2gqKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byByZW5kZXIgdHJ1ZSB2YWx1ZXMgYXMgYSBzd2l0Y2ggY29tcG9uZW50ICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSoqIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGBmYWxzZWAgdmFsdWVzLiA8YnI+ICoqc3dpdGNoKiogaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gcmVuZGVyIHRydWUgdmFsdWVzIGFzIGEgc3dpdGNoIGNvbXBvbmVudCBcdHxcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5SZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5SZW5kZXJlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gd2lsbCB0aGlzIGFmZmVjdCBCQmogYnVpID9cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2Jvb2xSZW5kZXJlcidcbiAgICB0aGlzLl9ndWkuc3R5bGUuZm9udEZhbWlseSA9XG4gICAgICAnXCJTZWdvZSBVSSBTeW1ib2xcIixUcmVidWNoZXQsIEFyaWFsLCBzYW5zLXNlcmlmJ1xuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICB0aGlzLnJlZnJlc2gocGFyYW1zLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3N3aXRjaGVyKSB7XG4gICAgICB0aGlzLl9zd2l0Y2hlci5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY2VsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJlZnJlc2gocGFyYW1zLCBpc0luaXQpIHtcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgPyBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgOiBwYXJhbXMudmFsdWVcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgICBjb25zdCBib29sZWFuVHJ1ZVJlbmRlclZhbHVlID0gU3RyaW5nKFxuICAgICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblRydWVSZW5kZXJWYWx1ZScsIHBhcmFtcywgJ3N3aXRjaCcpXG4gICAgICApXG4gICAgICBjb25zdCBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSA9IFN0cmluZyhcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVJlbmRlclZhbHVlJywgcGFyYW1zLCAnc3dpdGNoJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGJvb2xlYW5UcnVlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuICAgICAgY29uc3QgYm9vbGVhbkZhbHNlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSkpXG4gICAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICAgIC8vIGhhbmRsZSB0cnVlIHZhbHVlc1xuICAgICAgaWYgKGJvb2xlYW5UcnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJvb2xlYW5UcnVlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhblRydWVSZW5kZXJWYWx1ZSA9PT0gJ3N3aXRjaCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZXIgPSB0aGlzLl9nZXRTd2l0Y2hlcihwYXJhbXMpXG4gICAgICAgICAgc3dpdGNoZXIuc2V0Q2hlY2tlZCh0cnVlKVxuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAnJ1xuICAgICAgICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChzd2l0Y2hlci5nZXRHdWkoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gYm9vbGVhblRydWVSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgZmFsc2UgdmFsdWVzXG4gICAgICBlbHNlIGlmIChib29sZWFuRmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUgPT09ICdzd2l0Y2gnXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHN3aXRjaGVyID0gdGhpcy5fZ2V0U3dpdGNoZXIocGFyYW1zKVxuICAgICAgICAgIHN3aXRjaGVyLnNldENoZWNrZWQoZmFsc2UpXG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHN3aXRjaGVyLmdldEd1aSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzd2l0Y2ggaW5zdGFuY2UgaWYgYXZhaWxhYmxlICwgb3IgY3JlYXRlIGl0IG90aGVyd2lzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW5Td2l0Y2h9IHN3aXRjaCBpbnN0YW5jZVxuICAgKi9cbiAgX2dldFN3aXRjaGVyKHBhcmFtcykge1xuICAgIGlmICghdGhpcy5fc3dpdGNoZXIpIHtcbiAgICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2goKVxuICAgICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICAgIHRoaXMuX3N3aXRjaGVyLmluaXQocGFyYW1zKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hlclxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5SZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5SZW5kZXJlci9Cb29sZWFuUmVuZGVyZXIuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkZpbHRlciBmcm9tICcuL0Jvb2xlYW5GaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgdG9UaXRsZUNhc2UgPSBwaHJhc2UgPT4ge1xuICByZXR1cm4gcGhyYXNlXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHN0cmlwSFRNTCA9IGh0bWwgPT4ge1xuICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKVxuICB0bXAuaW5uZXJIVE1MID0gaHRtbFxuICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJydcbn1cblxuLyoqXG4gKiBCb29sZWFucyBGaWx0ZXJcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRmlsdGVyaW5nXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqYm9vbGVhblVzZWRUcnVlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIHRoZSBmaWx0ZXIgZGlzcGxheXMgdGhlIHRydWUgc3RhdGUgLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byB1c2Ugd2hlbiB0aGUgZmlsdGVyIGRpc3BsYXlzIHRoZSBmYWxzZSBzdGF0ZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKiB8ICoqY2xlYXJCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIENsZWFyIGJ1dHRvbi4gVGhlIENsZWFyIGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSAoZm9ybSkgZGV0YWlscyBvZiB0aGUgZmlsdGVyIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoZSBjb2x1bW4uXG4gKiB8ICoqYXBwbHlCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhbiBBcHBseSBidXR0b24uIElmIHRoZSBBcHBseSBidXR0b24gaXMgcHJlc2VudCwgdGhlbiB0aGUgZmlsdGVyIGlzIG9ubHkgYXBwbGllZCBhZnRlciB0aGUgdXNlciBoaXRzIHRoZSBBcHBseSBidXR0b24uXG4gKiB8ICoqcmVzZXRCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIFJlc2V0IGJ1dHRvbi4gVGhlIFJlc2V0IGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgYW5kIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGF0IGNvbHVtbi5cbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRydWUgLCBmYWxzZSB0cmFuc2xhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbiA9IHt9XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5GaWx0ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdib29sZWFuRmlsdGVyIGFnLWZpbHRlci1ib2R5LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdldExvY2FsZVRleHRGdW5jKClcbiAgICBjb25zdCBpc0NsZWFyRmlsdGVyID0gdGhpcy5nZXRPcHRpb24oJ2NsZWFyQnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc1Jlc2V0QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ3Jlc2V0QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc0FwcGx5QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ2FwcGx5QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSBbXVxuICAgICAgLmNvbmNhdCh0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlVmFsdWUnLCBwYXJhbXMsIFtmYWxzZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX3VzZWRUcnVlVmFsdWUgPSBTdHJpbmcoXG4gICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblVzZWRUcnVlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX3RydWVWYWx1ZVswXSlcbiAgICApXG5cbiAgICB0aGlzLl91c2VkRmFsc2VWYWx1ZSA9IFN0cmluZyhcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVXNlZEZhbHNlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX2ZhbHNlVmFsdWVbMF0pXG4gICAgKVxuXG4gICAgdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHtcbiAgICAgICAgdHJ1ZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuVHJ1ZScsXG4gICAgICAgICAgdG9UaXRsZUNhc2UoU3RyaW5nKHRoaXMuX3VzZWRUcnVlVmFsdWUpKVxuICAgICAgICApLFxuICAgICAgICBmYWxzZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuRmFsc2UnLFxuICAgICAgICAgIHRvVGl0bGVDYXNlKFN0cmluZyh0aGlzLl91c2VkRmFsc2VWYWx1ZSkpXG4gICAgICAgICksXG4gICAgICAgIHJlc2V0OiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5SZXNldCcsXG4gICAgICAgICAgdHJhbnNsYXRlKCdyZXNldEZpbHRlcicsICdSZXNldCBGaWx0ZXInKVxuICAgICAgICApLFxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX2ZpbHRlclRleHQgPSBudWxsXG5cbiAgICB0aGlzLl9vblJhZGlvQ2hhbmdlID0gdGhpcy5fb25SYWRpb0NoYW5nZS5iaW5kKHRoaXMsIGlzQXBwbHlCdXR0b24pXG5cbiAgICAvLyBjcmVhdGUgYm9keVxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvZHkuY2xhc3NOYW1lID0gJ2Jvb2xlYW5GaWx0ZXJfX2JvZHkgYWctZmlsdGVyLWJvZHknXG4gICAgYm9keS5zdHlsZS5wYWRkaW5nID0gJzVweCAxNXB4J1xuICAgIGJvZHkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzXCI+XG5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCI+ICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItdHJ1ZSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidHJ1ZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwidHJ1ZVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlfTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cblxuXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiPiAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyLWZhbHNlIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmYWxzZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiZmFsc2VcIi8+ICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24uZmFsc2V9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIFxuICAgICAgICAgICR7XG4gICAgICAgICAgICAhaXNSZXNldEJ1dHRvblxuICAgICAgICAgICAgICA/IC8qIGh0bWwgKi8gYFxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIj4gICAgICAgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1yZXNldCBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXIgYWctY2hlY2tlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJyZXNldC1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiXCIgY2hlY2tlZC8+ICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24ucmVzZXR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgfSAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgYFxuXG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvZHkpXG5cbiAgICAvLyBjcmVhdGUgYXBwbHkgZmlsdGVyIHBhbmVsXG4gICAgY29uc3QgYXBwbHlGaWx0ZXJQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5jbGFzc05hbWUgPSBgYm9vbGVhbkZpbHRlcl9fYm9keV9fYXBwbHlQYW5lbCBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzJylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2FwcGx5UGFuZWwnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgc2VsZWN0ZWQgZmlsdGVyIG1hdGNoZXMgdGhlIHBhc3NlZCBjZWxsIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gcGFzcywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBkb2VzRmlsdGVyUGFzcyhwYXJhbXMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXIocGFyYW1zKVxuICAgICAgICA6IHRoaXMuX3BhcmFtcy52YWx1ZUdldHRlcihwYXJhbXMpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclRleHQgPT09ICd0cnVlJ1xuICAgICAgPyB0aGlzLl90cnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMVxuICAgICAgOiB0aGlzLl9mYWxzZVZhbHVlLmluZGV4T2YodmFsdWUpID4gLTFcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYXBwbHlpbmcgYW55IGZpbHRlciBvbiB0aGUgY29sdW1uXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqKi9cbiAgaXNGaWx0ZXJBY3RpdmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gJydcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlsdGVyIHN0YXRlLiBJZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZSwgdGhlbiBzaG91bGQgcmV0dXJuIG51bGwvdW5kZWZpbmVkLlxuICAgKiBUaGUgZ3JpZCBjYWxscyBnZXRNb2RlbCgpIG9uIGFsbCBhY3RpdmUgZmlsdGVycyB3aGVuIGdyaWRBcGkuZ2V0RmlsdGVyTW9kZWwoKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gT2JqZWN0IHwgbnVsbCB0aGUgZmlsdGVyIHN0YXRlXG4gICAqL1xuICBnZXRNb2RlbCgpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWx0ZXJBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbCA9IHsgdmFsdWU6IHRoaXMuX2ZpbHRlclRleHQsIGZpbHRlclR5cGU6ICdib29sZWFuJyB9XG4gICAgcmV0dXJuIG1vZGVsXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4gICAgdGhpcy5fZmlsdGVyVGV4dCA9IG1vZGVsICYmIG1vZGVsLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gbW9kZWwudmFsdWUgOiAnJ1xuXG4gICAgY29uc3QgZmlsdGVyVGV4dEFzU3RyaW5nID0gU3RyaW5nKHRoaXMuX2ZpbHRlclRleHQpXG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keScpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkudmFsdWUgPT0gZmlsdGVyVGV4dEFzU3RyaW5nKSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbHRlciBtb2RlbCBhcyBwbGFpbiBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmxvYXRpbmcgZmlsdGVyIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIGdldE1vZGVsQXNTdHJpbmcobW9kZWwpIHtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaXBIVE1MKFxuICAgICAgbW9kZWwudmFsdWUgPT09ICd0cnVlJ1xuICAgICAgICA/IHRoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlXG4gICAgICAgIDogdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLmZhbHNlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHknKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykuZm9yRWFjaChpID0+IHtcbiAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgfSlcblxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICB0cnkge1xuICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIHBhc3MgKi9cbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBzZWxlY3Rpb24gY2hhbmdlcyBpbiB0aGUgZmlsdGVyIHJhZGlvIGJ1dHRvbnMgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBmaWx0ZXIgdGV4dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBfb25SYWRpb0NoYW5nZShpc0FwcGx5QnV0dG9uLCBlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5JylcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1ZS1pbnB1dCcpKSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhbHNlLWlucHV0JykpIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QuYWRkKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhbHNlID09PSBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHRoZSBidXR0b24gY2xpY2tzIGluIHRoZSBidXR0b25zIHBhbmVsIGFuZCBhcHBseSB0aGUgY2hvc2VuIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGljayhlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcblxuICAgIGlmICh0YXJnZXQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncmVzZXQnKSkge1xuICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NsZWFyJykpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL0Jvb2xlYW5GaWx0ZXIuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo2cHh9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4IDB9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbCBzcGFue3BhZGRpbmctbGVmdDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKm51bWJlck1pblZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IG1pbiBhbGxvd2VkIHZhbHVlXG4gKiB8ICoqbnVtYmVyTWF4VmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbWF4IGFsbG93ZWQgdmFsdWVcbiAqIHwgKipudW1iZXJTdGVwVmFsdWUqKiAgICAgICB8IHVuZGVmaW5lZCAgXHR8IG51bWJlciBvZiBzdGVwIGJ5IGluY3JlbWVudCBvciBkZWNyZW1lbnRcbiAqIHwgKipudW1iZXJNYXNrKiogICAgICAgfCB1bmRlZmluZWQgIFx0fCBhIGJiaiBudW1iZXIgbWFzayB0byB2YWxpZGF0ZSB0aGUgbnVtYmVyIGFnYWluc3RcbiAqIHwqKm51bWJlckdyb3VwaW5nU2VwYXJhdG9yKiogfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvci4gVGhlIG9wdGlvbnMgaXMgdXNlZCBvbmx5IHdoZW4gKipudW1iZXJNYXNrKiogaXMgZGVmaW5lZCB8XG4gKiB8KipudW1iZXJEZWNpbWFsU2VwYXJhdG9yKiogfCAuIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yLiBUaGUgb3B0aW9ucyBpcyB1c2VkIG9ubHkgd2hlbiAqKm51bWJlck1hc2sqKiBpcyBkZWZpbmVkICB8XG4gKiB8KipudW1iZXJGb3JjZVRyYWlsaW5nWmVyb3MqKiB8IGZhbHNlIHwgQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIikgcmV0dXJucyAuMTAgaW5zdGVhZCBvZiAuMSAuIFRoZSBvcHRpb25zIGlzIHVzZWQgb25seSB3aGVuICoqbnVtYmVyTWFzayoqIGlzIGRlZmluZWR8XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgTnVtYmVyRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1pblZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKCdudW1iZXJNYXhWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBzdGVwID0gdGhpcy5nZXRPcHRpb24oJ251bWJlclN0ZXBWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1hc2snLCBwYXJhbXMpXG5cbiAgICBsZXQgc3RhcnRWYWx1ZVxuXG4gICAgdGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPSAxMTMpIHtcbiAgICAgICAgICAvL0YyXG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgLy8gbWFrZSBwYXJhbXMgaXQgYWNjZXNzaWJsZSBmcm9tIHRhbGwgbWV0aG9kc1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgLy8gY3JlYXRlIHRoZSBpbnB1dCB3cmFwcGVyXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnbnVtYmVyRWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBjcmVhdGUgdGhlIGlucHV0XG4gICAgdGhpcy5faW5wdXRHZW5lcmF0ZWRJZCA9IE1hdGgucmFuZG9tKClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zbGljZSgyLCAxMCkgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ251bWJlckVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0J1xuICAgIHRoaXMuX2lucHV0LmlkID0gYGVsLSR7dGhpcy5faW5wdXRHZW5lcmF0ZWRJZH1gXG4gICAgdGhpcy5faW5wdXQudHlwZSA9IG1hc2sgPyAndGV4dCcgOiAnbnVtYmVyJ1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgLy8gcGxhY2UgdGhlIGlucHV0IGluc2lkZSB0aGUgd3JhcHBlclxuICAgIHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctaW5wdXQtd3JhcHBlcicpLmFwcGVuZENoaWxkKHRoaXMuX2lucHV0KVxuXG4gICAgaWYgKG1pbiAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0Lm1pbiA9IG1pbikgOiAodGhpcy5faW5wdXQubWluID0gbWluKVxuICAgIH1cblxuICAgIGlmIChtYXggIT09IG51bGwpIHtcbiAgICAgIG1hc2sgPyAodGhpcy5faW5wdXQuZGF0YXNldC5tYXggPSBtYXgpIDogKHRoaXMuX2lucHV0Lm1heCA9IG1heClcbiAgICB9XG5cbiAgICBpZiAoc3RlcCAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0LnN0ZXAgPSBzdGVwKSA6ICh0aGlzLl9pbnB1dC5zdGVwID0gc3RlcClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIG1hc2sgdGhlbiB3ZSB1c2UgdGhlIGBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXRgXG4gICAgaWYgKG1hc2spIHtcbiAgICAgIGNvbnN0IGdyb3VwaW5nU2VwYXJhdG9yID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAgICdudW1iZXJHcm91cGluZ1NlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckdyb3VwU2VwJywgcGFyYW1zKVxuICAgICAgKVxuICAgICAgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgICAnbnVtYmVyRGVjaW1hbFNlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckRlY2ltYWxTZXAnLCBwYXJhbXMpXG4gICAgICApXG4gICAgICBjb25zdCBmb3JjZVRyYWlsaW5nWmVyb3MgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICAgJ251bWJlckZvcmNlVHJhaWxpbmdaZXJvcycsXG4gICAgICAgIHBhcmFtc1xuICAgICAgKVxuXG4gICAgICBpZiAoZ3JvdXBpbmdTZXBhcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQuZGVjaW1hbFNlcGFyYXRvciA9IGRlY2ltYWxTZXBhcmF0b3JcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmNlVHJhaWxpbmdaZXJvcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0LmZvcmNlVHJhaWxpbmdaZXJvcyA9IGZvcmNlVHJhaWxpbmdaZXJvc1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXG4gICAgICB0aGlzLl9udW1iZXJJbnB1dCA9IG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgLy8gZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25OdW1iZXJJbnB1dFVwZGF0ZSxcbiAgICAgICAgb25JbnZhbGlkOiB0aGlzLl9vbk51bWJlcklucHV0SW52YWxpZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbnVtYmVySW5wdXQuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKlxuICAgKiBNYWtlIHN1cmUgY29udGFpbmVyIGlzIGFsd2F5cyBmb2N1c2VkIHRvIGxpc3RlbiB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZUlucHV0KHRoaXMuX2lucHV0KVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IGNhc3RlZCA9IE51bWJlcih0aGlzLl9jdXJyZW50VmFsdWUpXG4gICAgY29uc3QgcmV0VmFsdWUgPSBpc05hTihjYXN0ZWQpID8gdGhpcy5fY3VycmVudFZhbHVlIDogY2FzdGVkXG4gICAgcmV0dXJuIHRoaXMuX19pc01hc2tlZF9fID8gcmV0VmFsdWUgOiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZShyZXRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgaXMgY2hhbmdlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IHZhbHVlIHdoZW4gdGhlIE51bWJlcklucHV0IGNvbXBvbmVudHMgZmlyZSB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk51bWJlcklucHV0VXBkYXRlKF9tYXNrZWQsIHVubWFza2VkKSB7XG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gdW5tYXNrZWRcbiAgICB0aGlzLmZvY3VzSW4oKVxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuICAvKipcbiAgICogT24gaW52YWxpZCBpbnB1dHMgLCB1cGRhdGUgdGhlIGlucHV0IHdpdGggYSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGVycm9yIHRoZSBlcnJvciBtZXNzYWdlIHJlcG9ydGVkIGJ5IE51bWJlcklucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25OdW1iZXJJbnB1dEludmFsaWQoZXJyb3IsIGlucHV0KSB7XG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgY2VsbFxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhbGwga2V5Ym9hcmQgZXZlbnRzIHRvIGFsbG93IHZhbHVlIHByb2Nlc3NpbmcgYnkgdGhlIE51bWJlcklucHV0IGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Db21wb25lbnRLZXlEb3duKGUpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPVxuICAgICAga2V5ID09PSAzNyB8fCAvLyBsZWZ0XG4gICAgICBrZXkgPT09IDM4IHx8IC8vIHVwXG4gICAgICBrZXkgPT09IDM5IHx8IC8vIHJpZ2h0XG4gICAgICBrZXkgPT09IDQwIHx8IC8vIGRvd25cbiAgICAgIGtleSA9PT0gMzMgfHwgLy8gcGFnZSB1cFxuICAgICAga2V5ID09PSAzNCB8fCAvLyBwYWdlIGRvd25cbiAgICAgIGtleSA9PT0gMzUgfHwgLy8gcGFnZSBob21lXG4gICAgICBrZXkgPT09IDM2IHx8IC8vIHBhZ2UgZW5kXG4gICAgICBrZXkgPT09IDEzIC8vIGVudGVyXG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjYXB0dXJlIGtleSBzbyBOdW1iZXJJbnB1dCBjYW4gcGFzcyBpdCBhZ2FpbiB0byB0aGUgZ3JpZC5cbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8ga2V5IGNoYW5nZXMgYW5kIHZhbGlkYXRlIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbklucHV0S2V5RG93blVwKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBpZiAoa2V5ID09IDM4IHx8IGtleSA9PSA0MCkge1xuICAgICAgLy8gdG9wIHwgZG93blxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChrZXkgPT0gMTMgfHwga2V5ID09PSA5KSB7XG4gICAgICAvLyBlbnRlclxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG5cbiAgICAvLyB3ZSBwYXNzIHRoZSBsYXN0IGNhcHR1cmVkIGV2ZW50IGJhY2sgdG8gdGhlIGdyaWQgdG8gaGFuZGxlIGl0IGludGVybmFsbHlcbiAgICBpZiAodGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5vbktleURvd24odGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdiYmotbWFzay1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdiYmotbWFzay1zdWNjZXNzJylcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5udW1iZXJFZGl0b3J7b3ZlcmZsb3c6aGlkZGVufS5udW1iZXJFZGl0b3IgLm51bWJlcklucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Lm51bWJlckVkaXRvciAuYmJqLW1hc2stZXJyb3J7Ym94LXNoYWRvdzowIC0ycHggMCAjZTkxZTYzIGluc2V0fS5udW1iZXJFZGl0b3IgLmJiai1tYXNrLXN1Y2Nlc3N7Ym94LXNoYWRvdzowIC0ycHggMCAjNGNhZjUwIGluc2V0fS5udW1iZXJFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLm51bWJlckVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5udW1iZXJFZGl0b3JfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9OdW1iZXJFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSAnLi9UZXh0RWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dEVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBUZXh0IEVkaXRvclxuICpcbiAqIEhhbmRsZSB0ZXh0IHZhbHVlcyBFZGl0aW5nXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKip0ZXh0UGF0dGVybioqICAgfCB1bmRlZmluZWQgICAgfCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSBpbnB1dCdzIHZhbHVlIG11c3QgbWF0Y2ggaW4gb3JkZXIgZm9yIHRoZSB2YWx1ZSB0byBwYXNzIGNvbnN0cmFpbnQgdmFsaWRhdGlvblxuICogfCAqKnRleHRSZXF1aXJlZCoqICAgfCB1bmRlZmluZWQgICAgfCBCb29sZWFuLiBBIHZhbHVlIGlzIHJlcXVpcmVkIHRvIGNvbnNpZGVyIHRoZSBpbnB1dCB2YWxpZFxuICogfCAqKnRleHRNYXNrKiogICB8IHVuZGVmaW5lZCAgICB8IEEgYmJqIHN0cmluZyBtYXNrIHRvIHZhbGlkYXRlIHRoZSB2YWx1ZVxuICogfCAqKnRleHRUaXRsZSoqICAgfCBudWxsICAgIHwgVGhlIGlucHV0IHRpdGxlICwgd2hlbiBudWxsIGFuZCB0aGUgKip0ZXh0TWFzayoqIG9wdGlvbnMgaXMgZGVmaW5lZCAsIHRoZW4gd2UgdXNlIHRoZSBtYXNrIGFzIHRpdGxlICwgd2hlbiBzZXQgdG8gYGRlZmF1bHRgIHdlIHRoZSBicm93c2VyJ3MgZGVmYXVsdCB0aXRsZSAsIG90aGVyd2lzZSB0aGUgdmFsdWUgZGVmaW5lZCBpbiB0aGlzIG9wdGlvblxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5nZXRPcHRpb24oJ3RleHRQYXR0ZXJuJywgcGFyYW1zKVxuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5nZXRPcHRpb24oJ3RleHRSZXF1aXJlZCcsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ3RleHRNYXNrJywgcGFyYW1zKVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRPcHRpb24oJ3RleHRUaXRsZScsIHBhcmFtcylcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICBzdGFydFZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcykge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICd0ZXh0RWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmNsYXNzTmFtZSA9XG4gICAgICAndGV4dEVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQuaWQgPSBgZWwtJHtNYXRoLnJhbmRvbSgpXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc2xpY2UoMiwgMTApfWAgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRpdGxlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSB0aXRsZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSBtYXNrXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBtYXNrIHRoZW4gd2UgdXNlIHRoZSBgQmFzaXMuSW5wdXRNYXNraW5nLlRleHRJbnB1dGBcbiAgICBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xuICAgICAgdGhpcy5fdGV4dElucHV0ID0gbmV3IEJhc2lzLklucHV0TWFza2luZy5UZXh0SW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25UZXh0SW5wdXRVcGRhdGUsXG4gICAgICAgIG9uSW52YWxpZDogdGhpcy5fb25UZXh0SW5wdXRJbnZhbGlkLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RleHRJbnB1dC5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodGhpcy5faW5wdXQpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHRoaXMuX2N1cnJlbnRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgdmFsdWUgd2hlbiB0aGUgVGV4dElucHV0IGNvbXBvbmVudCBmaXJlcyB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblRleHRJbnB1dFVwZGF0ZShfbWFza2VkLCB1bm1hc2tlZCwgaW5wdXQpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB1bm1hc2tlZFxuICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPbiBpbnZhbGlkIGlucHV0cyAsIHVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgdGhlIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgVGV4dElucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25UZXh0SW5wdXRJbnZhbGlkKGVycm9yLCBpbnB1dCkge1xuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGNlbGxcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9wYXJhbXMudmFsdWVcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYWxsIGtleWJvYXJkIGV2ZW50cyB0byBhbGxvdyB2YWx1ZSBwcm9jZXNzaW5nIGJ5IHRoZSBOdW1iZXJJbnB1dCBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ29tcG9uZW50S2V5RG93bihlKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID1cbiAgICAgIGtleSA9PT0gMzcgfHwgLy8gbGVmdFxuICAgICAga2V5ID09PSAzOCB8fCAvLyB1cFxuICAgICAga2V5ID09PSAzOSB8fCAvLyByaWdodFxuICAgICAga2V5ID09PSA0MCB8fCAvLyBkb3duXG4gICAgICBrZXkgPT09IDMzIHx8IC8vIHBhZ2UgdXBcbiAgICAgIGtleSA9PT0gMzQgfHwgLy8gcGFnZSBkb3duXG4gICAgICBrZXkgPT09IDM1IHx8IC8vIHBhZ2UgaG9tZVxuICAgICAga2V5ID09PSAzNiB8fCAvLyBwYWdlIGVuZFxuICAgICAga2V5ID09PSAxMyAvLyBlbnRlclxuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIC8vIHNhdmUgdGhlIGxhc3QgY2FwdHVyZSBrZXkgc28gTnVtYmVySW5wdXQgY2FuIHBhc3MgaXQgYWdhaW4gdG8gdGhlIGdyaWQuXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGtleSBjaGFuZ2VzIGFuZCB2YWxpZGF0ZSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25JbnB1dEtleURvd25VcChldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgaWYgKGtleSA9PSAxMyB8fCBrZXkgPT09IDkpIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cblxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgb24gdGhlIGlucHV0IHZhbHVlIGlzIGNoYW5nZWQgYW5kIGl0IGlzIHZhbGlkXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi50ZXh0RWRpdG9ye292ZXJmbG93OmhpZGRlbn0udGV4dEVkaXRvciAudGV4dElucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnRleHRFZGl0b3IgLmJiai1tYXNrLWVycm9ye2JveC1zaGFkb3c6MCAtMnB4IDAgI2U5MWU2MyBpbnNldH0udGV4dEVkaXRvciAuYmJqLW1hc2stc3VjY2Vzc3tib3gtc2hhZG93OjAgLTJweCAwICM0Y2FmNTAgaW5zZXR9LnRleHRFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0gLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0tZGFyayAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqcmVuZGVyVGVtcGxhdGUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbG9kYXNoIHRlbXBsYXRlXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgVGVtcGxhdGVSZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IFRlbXBsYXRlUmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIC8vIHdpbGwgdGhpcyBhZmZlY3QgQkJqIGJ1aSA/XG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ3RlbXBsYXRlUmVuZGVyZXIgYWctY2VsbC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcbiAgICB0aGlzLl9ndWkuc3R5bGUubGluZUhlaWdodCA9ICdub3JtYWwnXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMucmVmcmVzaChwYXJhbXMsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGNlbGwgbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgcmVmcmVzaChwYXJhbXMsIGlzSW5pdCkge1xuICAgIGlmIChpc0luaXQpIHtcbiAgICAgIHRoaXMuX2NvbXBpbGVkVGVtcGxhdGUgPSB0ZW1wbGF0ZShcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ3JlbmRlclRlbXBsYXRlJywgcGFyYW1zLCAnJylcbiAgICAgIClcbiAgICB9XG5cbiAgICBsZXQgY29udGVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jb21waWxlZFRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY29tcGlsZWRUZW1wbGF0ZSh7IHBhcmFtcyB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gcGFyYW1zLnZhbHVlRm9ybWF0dGVkID8gcGFyYW1zLnZhbHVlRm9ybWF0dGVkIDogcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IGNvbnRlbnRcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RlbXBsYXRlUmVuZGVyZXIvVGVtcGxhdGVSZW5kZXJlci5qcyIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGUuanMiLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gKiB9XG4gKlxuICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluV2l0aDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsImltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uc3RhbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2NvbnN0YW50LmpzIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcmd1bWVudHM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNFcnJvciBmcm9tICcuL2lzRXJyb3IuanMnO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICogfSwgJz5fPicpO1xuICpcbiAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gKiAgIGVsZW1lbnRzID0gW107XG4gKiB9XG4gKi9cbnZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXR0ZW1wdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXR0ZW1wdC5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduSW5gIHVzZSB0byBhc3NpZ24gcHJvcGVydGllc1xuICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgcmV0dXJuIHNyY1ZhbHVlO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJpbXBvcnQgZXNjYXBlSHRtbENoYXIgZnJvbSAnLi9fZXNjYXBlSHRtbENoYXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gKiBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VzY2FwZS5qcyIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZUh0bWxDaGFyLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlPZjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUVzY2FwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRlbXBsYXRlUmVuZGVyZXIgZnJvbSAnLi4vVGVtcGxhdGVSZW5kZXJlcidcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmltYWdlUmVuZGVyZXJXaWR0aCoqICAgfCAyOHB4ICAgIHwgaW1hZ2Ugd2lkdGhcbiAqIHwgKippbWFnZVJlbmRlcmVySGVpZ2h0KiogICB8IDI4cHggICAgfCBpbWFnZSBoZWlnaHRcbiAqIHwgKippbWFnZVJlbmRlcmVyTGlzdCoqICAgICAgIHwge30gIFx0fCBhIGxpc3Qgb2Ygd2hpY2ggbWFwcyBpbWFnZXMgd2l0aCBjZWxsIHZhbHVlcyBhcyBKU09OIG9yIHBsYWluIEpTIG9iamVjdFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKlxuICogQHNlZSBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjE1I3RlbXBsYXRlXG4gKi9cbmNsYXNzIEltYWdlUmVuZGVyZXIgZXh0ZW5kcyBUZW1wbGF0ZVJlbmRlcmVyIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICByZWZyZXNoKHBhcmFtcywgaXNJbml0KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJXaWR0aCcsIHBhcmFtcywgJzI4cHgnKVxuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJIZWlnaHQnLCBwYXJhbXMsICcyOHB4JylcbiAgICBsZXQgaW1hZ2VMaXN0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJMaXN0JywgcGFyYW1zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGltYWdlTGlzdCA9IEpTT04ucGFyc2UoaW1hZ2VMaXN0KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGltYWdlTGlzdCA9IGltYWdlTGlzdCB8fCB7fVxuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuICAgIGlmIChpbWFnZUxpc3QgJiYgaW1hZ2VMaXN0Lmhhc093blByb3BlcnR5KHZhbHVlKSkge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gLypodG1sKi8gYFxuICAgICAgICA8aW1nIFxuICAgICAgICAgIHNyYz1cIiR7aW1hZ2VMaXN0W3BhcmFtcy52YWx1ZV19XCIgXG4gICAgICAgICAgd2lkdGg9XCIke2ltYWdlV2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2ltYWdlSGVpZ2h0fVwiICBcbiAgICAgICAgLz5cbiAgICAgIGBcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucmVmcmVzaChwYXJhbXMsIGlzSW5pdClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvSW1hZ2VSZW5kZXJlci9JbWFnZVJlbmRlcmVyLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lRmlsdGVyIGZyb20gJy4vRGF0ZVRpbWVGaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUsIHJlYWRvbmx5IH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IHsgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi4vRXZlbnRzTWl4aW4nXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuLi9EYXRlVGltZUlucHV0J1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgVE9LRU5TID0ge1xuICBUT0tFTl9FUVVBTDogJ2VxdWFscycsXG4gIFRPS0VOX05PVF9FUVVBTDogJ25vdEVxdWFsJyxcbiAgVE9LRU5fTEVTUzogJ2xlc3NUaGFuJyxcbiAgVE9LRU5fR1JFQVRFUjogJ2dyZWF0ZXJUaGFuJyxcbiAgVE9LRU5fUkFOR0U6ICdpblJhbmdlJyxcbiAgVE9LRU5fQU5EOiAnQU5EJyxcbiAgVE9LRU5fT1I6ICdPUicsXG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIENvbmRpdGlvblBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgb3B0aW9uXG4gICAqIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0aWMgT05fQ09ORElUSU9OX0NIQU5HRUQgPSAnQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIHN0YXRlXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGUgPSB7XG4gICAgdHlwZTogVE9LRU5TLlRPS0VOX0VRVUFMLFxuICAgIGZpbHRlcjogbnVsbCxcbiAgICBmaWx0ZXJUbzogbnVsbCxcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7RGF0ZVRpbWVJbnB1dH1cbiAgICovXG4gIF9maWx0ZXJUaW1lSW5wdXQgPSBuZXcgRGF0ZVRpbWVJbnB1dCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dCA9IG5ldyBEYXRlVGltZUlucHV0KClcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZW5hYmxlZCBmaWx0ZXIgdHlwZXNcbiAgICpcbiAgICogQHR5cGUge0FycmF5fVxuICAgKi9cbiAgX2ZpbHRlck9wdGlvbnMgPSBbXVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBlbmFibGVkIGZpbHRlciB0eXBlXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBfZGVmYXVsdE9wdGlvbiA9IC0xXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuXG4gICAgdGhpcy5fZmlsdGVyT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKCdmaWx0ZXJPcHRpb25zJywgcGFyYW1zLCBbXG4gICAgICBUT0tFTlMuVE9LRU5fRVFVQUwsXG4gICAgICBUT0tFTlMuVE9LRU5fTk9UX0VRVUFMLFxuICAgICAgVE9LRU5TLlRPS0VOX0xFU1MsXG4gICAgICBUT0tFTlMuVE9LRU5fR1JFQVRFUixcbiAgICAgIFRPS0VOUy5UT0tFTl9SQU5HRSxcbiAgICBdKVxuXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RlZmF1bHRPcHRpb24nLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5pbmRleE9mKFRPS0VOUy5UT0tFTl9FUVVBTCkgPiAtMVxuICAgICAgICA/IFRPS0VOUy5UT0tFTl9FUVVBTFxuICAgICAgICA6IHRoaXMuX2ZpbHRlck9wdGlvbnNbMF1cbiAgICApXG5cbiAgICB0aGlzLnN0YXRlLnR5cGUgPSB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBvcHRpb25zVHJhbnNsYXRpb25zID0ge1xuICAgICAgW1RPS0VOUy5UT0tFTl9FUVVBTF06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fRVFVQUwsICdFcXVhbHMnKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fTk9UX0VRVUFMXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9FUVVBTCwgJ05vdCBlcXVhbCcpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9MRVNTXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9MRVNTLCAnTGVzcyB0aGFuJyksXG4gICAgICBbVE9LRU5TLlRPS0VOX0dSRUFURVJdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0dSRUFURVIsICdHcmVhdGVyIHRoYW4nKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fUkFOR0VdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX1JBTkdFLCAnSW4gcmFuZ2UnKSxcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnZGF0ZVRpbWVGaWx0ZXIgYWctZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiYWctZmlsdGVyLXNlbGVjdCBkYXRlVGltZUZpbHRlcl9fc2VsZWN0XCIgICR7XG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAxID8gJ2Rpc2FibGVkJyA6ICcnXG4gICAgICB9PlxuICAgICAgICAke3RoaXMuX2ZpbHRlck9wdGlvbnMubWFwKFxuICAgICAgICAgIG9wdGlvbiA9PiAvKiBodG1sICovIGBcbiAgICAgICAgICA8b3B0aW9uIFxuICAgICAgICAgICAgdmFsdWU9XCIke29wdGlvbn1cIiBcbiAgICAgICAgICAgICR7b3B0aW9uID09PSB0aGlzLl9kZWZhdWx0T3B0aW9uID8gJ3NlbGVjdGVkJyA6ICcnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtvcHRpb25zVHJhbnNsYXRpb25zW29wdGlvbl19XG4gICAgICAgICAgPC9vcHRpb24+YFxuICAgICAgICApfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1kYXRlLWZyb21cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItZGF0ZS10byBhZy1oaWRkZW5cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVGltZUlucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzZWxlY3RlZERhdGVcbiAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgIH0pXG5cbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0Lm9uKFxuICAgICAgRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsXG4gICAgICBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gc2VsZWN0ZWREYXRlXG4gICAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItZGF0ZS1mcm9tJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZ2V0R3VpKCkpXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG5cbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuX3N0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm9mZihDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRClcbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZGVzdHJveSgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LmRlc3Ryb3koKVxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlLmZpbHRlciA9IG51bGxcbiAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gbnVsbFxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5yZXNldCgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LnJlc2V0KClcblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKi9cbiAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICBzdGF0ZSA9IHN0YXRlIHx8IHt9XG4gICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzdGF0ZS5maWx0ZXIgfHwgbnVsbFxuICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBzdGF0ZS5maWx0ZXJUbyB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS50eXBlID0gc3RhdGUudHlwZSB8fCB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBndWkgPSB0aGlzLl9ndWlcbiAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gdGhpcy5fZmlsdGVyT3B0aW9uc1xuICAgIGNvbnN0IHNlbGVjdEVsID0gZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuX2ZpbHRlclRpbWVJbnB1dFxuICAgIGNvbnN0IGZpbHRlclRvSW5wdXQgPSB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXRcblxuICAgIHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggPSBmaWx0ZXJPcHRpb25zLmluZGV4T2YodGhpcy5zdGF0ZS50eXBlKVxuICAgIGZpbHRlcklucHV0LnNldERhdGUodGhpcy5zdGF0ZS5maWx0ZXIpXG4gICAgZmlsdGVyVG9JbnB1dC5zZXREYXRlKHRoaXMuc3RhdGUuZmlsdGVyVG8pXG5cbiAgICAvLyB3ZSBmaXJlIG9uIGNoYW5nZSBldmVudCBpbiBjYXNlIHRoZSBmaWx0ZXIgb3B0aW9ucyBjb250YWluXG4gICAgLy8gb25lIG9wdGlvbiB3aGljaCBpcyBpbiBSYW5nZSBcImluUmFuZ2VcIlxuICAgIGlmICgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSB7XG4gICAgICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpXG4gICAgICBldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCBmYWxzZSwgdHJ1ZSlcbiAgICAgIHNlbGVjdEVsLmRpc3BhdGNoRXZlbnQoZXZ0KVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RFbC5maXJlRXZlbnQoJ29uY2hhbmdlJylcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHN0YXRlIHdpdGggdGhlIHNlbGVjdGVkIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblR5cGVDaGFuZ2UoZSkge1xuICAgIGNvbnN0IGVsID0gZS50YXJnZXRcbiAgICBjb25zdCBmaWx0ZXJEYXRlVG8gPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcblxuICAgIHRoaXMuc3RhdGUudHlwZSA9IGVsLm9wdGlvbnNbZWwuc2VsZWN0ZWRJbmRleF0udmFsdWVcblxuICAgIGlmICh0aGlzLnN0YXRlLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgZmlsdGVyRGF0ZVRvLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlckRhdGVUby5jbGFzc0xpc3QuYWRkKCdhZy1oaWRkZW4nKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIEpvaW5Db25kaXRpb25QYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdGFudCB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IG5hbWUgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gdGhlIGpvaW5cbiAgICogc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRpYyBPTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEID1cbiAgICAnSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgam9pbiBzdGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRlID0ge1xuICAgIGNvbmRpdGlvbjE6IHt9LFxuICAgIGNvbmRpdGlvbjI6IHt9LFxuICAgIG9wZXJhdG9yOiBUT0tFTlMuVE9LRU5fT1IsXG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9maXJzdENvbmRpdGlvblBhbmVsID0gbmV3IENvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9zZWNvbmRDb25kaXRpb25QYW5lbCA9IG5ldyBDb25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vcGVyYXRvclBhbmVsID0gbnVsbFxuXG4gIC8qKlxuICAgKiBQYXJhbXMgcmVjZWl2ZWQgYWZ0ZXIgaW5pdFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IG51bGxcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25GaXJzdENvbmRpdGlvbkNoYW5nZWRcbiAgICApXG5cbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25TZWNvbmRDb25kaXRpb25DaGFuZ2VkXG4gICAgKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYWctZmlsdGVyLWJvZHktd3JhcHBlciBhZy1zaW1wbGUtZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQodGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcblxuICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgaWRPbmUgPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXG4gICAgICAgICAgaWRUd28gPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSlcblxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuY2xhc3NOYW1lID0gJ2FnLWZpbHRlci1jb25kaXRpb24gYWctaGlkZGVuJ1xuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1jb25kaXRpb24tb3BlcmF0b3IgYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvci1hbmQgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1yaWdodCBhZy1yYWRpby1idXR0b24gYWctaW5wdXQtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCIgZm9yPVwiJHtpZE9uZX1cIj4gICAgICAgXG4gICAgICAgICAgJHt0cmFuc2xhdGUoJ2FuZENvbmRpdGlvbicsICdBTkQnKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItYW5kIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlciBhZy1jaGVja2VkXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZE9uZX1cIiBjbGFzcz1cIkFORCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwib3JBbmRSYWRpb1wiIHZhbHVlPVwiJHtcbiAgICAgIFRPS0VOUy5UT0tFTl9BTkRcbiAgICB9XCIvPiAgICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PiBcbiAgICA8L2Rpdj4gICBcbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvciBhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yLWFuZCBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLXJpZ2h0IGFnLXJhZGlvLWJ1dHRvbiBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIiBmb3I9XCIke2lkVHdvfVwiPiAgICAgICBcbiAgICAgICAgICAke3RyYW5zbGF0ZSgnb3JDb25kaXRpb24nLCAnT1InKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItb3IgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZFR3b31cIiBjbGFzcz1cIk9SIGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvckFuZFJhZGlvXCIgdmFsdWU9XCIke1xuICAgICAgVE9LRU5TLlRPS0VOX09SXG4gICAgfVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICA8L2Rpdj4gICAgICAgICBcbiAgICA8L2Rpdj4gICBcbiAgICBgXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX29wZXJhdG9yUGFuZWwpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbk9wZXJhdG9yQ2hhbmdlZClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uT3BlcmF0b3JDaGFuZ2VkKVxuICAgIHRoaXMub2ZmKEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEKVxuICAgIHRoaXMucmVzZXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwucmVzZXQoKVxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIGpvaW4gc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHN0YXRlID0gc3RhdGUgfHwge31cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gc3RhdGUub3BlcmF0b3IgfHwgVE9LRU5TLlRPS0VOX09SXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24xID0gc3RhdGUuY29uZGl0aW9uMSB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24yID0gc3RhdGUuY29uZGl0aW9uMiB8fCBudWxsXG5cbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLnNldFN0YXRlKHRoaXMuc3RhdGUuY29uZGl0aW9uMSlcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5zZXRTdGF0ZSh0aGlzLnN0YXRlLmNvbmRpdGlvbjIpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYgKGlucHV0LmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnN0YXRlLm9wZXJhdG9yKSkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgc2VsZWN0ZWQgY29uZGl0aW9uIHRvIHRoZSBjb21wb25lbnQgc3RhdGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25PcGVyYXRvckNoYW5nZWQoZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0XG5cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnT1InKSkge1xuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItb3InKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1hbmQnKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZXJhdG9yUGFuZWxcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLW9yJylcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItYW5kJylcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSAgdGhlIG9wdGlvbiBzdGF0ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkZpcnN0Q29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMSA9IHN0YXRlXG5cbiAgICBjb25zdCBzdXBwcmVzc0FuZE9yQ29uZGl0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnc3VwcHJlc3NBbmRPckNvbmRpdGlvbicsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBmYWxzZVxuICAgIClcblxuICAgIGlmICghc3VwcHJlc3NBbmRPckNvbmRpdGlvbikge1xuICAgICAgY29uc3QgeyBmaWx0ZXIsIGZpbHRlclRvLCB0eXBlIH0gPSB0aGlzLnN0YXRlLmNvbmRpdGlvbjFcbiAgICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkd1aSA9IHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpXG4gICAgICBjb25zdCBvcGVyYXRvclBhbmVsR3VpID0gdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgdHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFID8gIWZpbHRlciB8fCAhZmlsdGVyVG8gOiAhZmlsdGVyXG5cbiAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgc2Vjb25kQ29uZGl0aW9uR3VpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG4gICAgICAgIG9wZXJhdG9yUGFuZWxHdWkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZENvbmRpdGlvbkd1aS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1oaWRkZW4nKVxuICAgICAgICBvcGVyYXRvclBhbmVsR3VpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlICB0aGUgb3B0aW9uIHN0YXRlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uU2Vjb25kQ29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMiA9IHN0YXRlXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRlVGltZSBGaWx0ZXJcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipkYXRlVGltZUVuYWJsZVRpbWUqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWVcbiAqIHwgKipkYXRlVGltZUVuYWJsZTI0SFIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWUgMjQgZm9ybWF0XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVTZWNvbmRzKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBzZWNvbmRzIG1hbmFnZW1lbnRcbiAqIHwgKipkYXRlVGltZUVuYWJsZUNhbGVuZGFyKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBDYWxlbmRhci5cbiAqIHwgKipkYXRlVGltZU1hc2sqKiAgIHwgZmFsc2UgICAgfCBUaGUgbWFzayB1c2VkIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWF4KiogICB8IHVuZGVmaW5lZCAgICB8ICBNYXggYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNaW4qKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1pbiBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZUZvcm1hdHRlcioqICAgfCB1bmRlZmluZWQgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICogfCAqKmZpbHRlck9wdGlvbnMqKiAgIHwgRXF1YWxzLCBHcmVhdGVyIFRoYW4sIExlc3MgVGhhbiwgTm90IEVxdWFscywgSW4gUmFuZ2UuICAgIHwgIFdoYXQgRmlsdGVyIE9wdGlvbnMgdG8gcHJlc2VudCB0byB0aGUgdXNlci5cbiAqIHwgKipkZWZhdWx0T3B0aW9uKiogICB8IEVxdWFscyAgICB8ICBUaGUgZGVmYXVsdCBGaWx0ZXIgT3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAqIHwgKipzdXBwcmVzc0FuZE9yQ29uZGl0aW9uKiogICB8IGZhbHNlICAgIHwgIElmIHRydWUsIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9mZmVyIENvbmRpdGlvbiAxLlxuICogfCAqKmluUmFuZ2VJbmNsdXNpdmUqKiAgIHwgZmFsc2UgICAgfCAgSWYgdHJ1ZSB0aGVuIGRvaW5nICdpblJhbmdlJyBmaWx0ZXIgb3B0aW9uIHdpbGwgaW5jbHVkZSB2YWx1ZXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJhbmdlLlxuICogfCAqKmNsZWFyQnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBDbGVhciBidXR0b24uIFRoZSBDbGVhciBidXR0b24gd2lsbCBjbGVhciB0aGUgKGZvcm0pIGRldGFpbHMgb2YgdGhlIGZpbHRlciB3aXRob3V0IHJlbW92aW5nIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGUgY29sdW1uLlxuICogfCAqKmFwcGx5QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYW4gQXBwbHkgYnV0dG9uLiBJZiB0aGUgQXBwbHkgYnV0dG9uIGlzIHByZXNlbnQsIHRoZW4gdGhlIGZpbHRlciBpcyBvbmx5IGFwcGxpZWQgYWZ0ZXIgdGhlIHVzZXIgaGl0cyB0aGUgQXBwbHkgYnV0dG9uLlxuICogfCAqKnJlc2V0QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBSZXNldCBidXR0b24uIFRoZSBSZXNldCBidXR0b24gd2lsbCBjbGVhciB0aGUgZGV0YWlscyBvZiB0aGUgZmlsdGVyIGFuZCBhbnkgYWN0aXZlIGZpbHRlcnMgb24gdGhhdCBjb2x1bW4uXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQHR5cGUge0pvaW59XG4gICAqL1xuICBfSm9pbkNvbmRpdGlvblBhbmVsID0gbmV3IEpvaW5Db25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEpvaW4gcGFuZWwgc3RhdGVcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9zdGF0ZSA9IHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwYXJhbXNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgb2YgYWxsIHRoZSByZXF1aXJlZCBvcHRpb25zIGNhY2hlZCBmb3IgZG9lc0ZpbHRlclBhc3MgbWV0aG9kXG4gICAqL1xuICBfZG9lc0ZpbHRlclBhc3NPcHRpb25zID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuICAgIGNvbnN0IGlzQ2xlYXJGaWx0ZXIgPSB0aGlzLmdldE9wdGlvbignY2xlYXJCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzUmVzZXRCdXR0b24gPSB0aGlzLmdldE9wdGlvbigncmVzZXRCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzQXBwbHlCdXR0b24gPSB0aGlzLmdldE9wdGlvbignYXBwbHlCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcblxuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwub24oXG4gICAgICBKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCxcbiAgICAgIHN0YXRlID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLl9vbkpvaW5Db25kaXRpb25QYW5lbFN0YXRlQ2hhbmdlZChzdGF0ZSwgaXNBcHBseUJ1dHRvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBhcHBseUZpbHRlclBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTmFtZSA9IGBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuXG4gICAgdGhpcy5fc3RhdGUgPSB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuc3RhdGVcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZVRpbWU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCB0aGlzLl9wYXJhbXMsIHRydWUpLFxuICAgICAgaW5SYW5nZUluY2x1c2l2ZTogdGhpcy5nZXRPcHRpb24oJ2luUmFuZ2VJbmNsdXNpdmUnLCB0aGlzLl9wYXJhbXMsIGZhbHNlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhbHVlR2V0dGVyOiB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXJcbiAgICAgICAgOiB0aGlzLl9wYXJhbXMudmFsdWVHZXR0ZXIsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzZWxlY3RlZCBmaWx0ZXIgbWF0Y2hlcyB0aGUgcGFzc2VkIGNlbGwgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBwYXNzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRvZXNGaWx0ZXJQYXNzKHBhcmFtcykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZG9lc0ZpbHRlclBhc3NPcHRpb25zLnZhbHVlR2V0dGVyKHBhcmFtcylcbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSB0aGlzLl9zdGF0ZVxuICAgIGNvbnN0IGRvZXNQYXNzRmlyc3RDb25kaXRpb24gPSB0aGlzLl9kb2VzUGFzc0NvbmRpdGlvbihjb25kaXRpb24xLCB2YWx1ZSlcbiAgICBjb25zdCBkb2VzUGFzc1NlY29uZENvbmRpdGlvbiA9IHRoaXMuX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbjIsIHZhbHVlKVxuXG4gICAgcmV0dXJuIG9wZXJhdG9yID09PSBUT0tFTlMuVE9LRU5fT1JcbiAgICAgID8gZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiB8fCBkb2VzUGFzc1NlY29uZENvbmRpdGlvblxuICAgICAgOiBkb2VzUGFzc0ZpcnN0Q29uZGl0aW9uICYmIGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFwcGx5aW5nIGFueSBmaWx0ZXIgb24gdGhlIGNvbHVtblxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKiovXG4gIGlzRmlsdGVyQWN0aXZlKCkge1xuICAgIGNvbnN0IHsgY29uZGl0aW9uMSB9ID0gdGhpcy5fc3RhdGVcblxuICAgIGlmIChjb25kaXRpb24xICYmIGNvbmRpdGlvbjEuZmlsdGVyKSB7XG4gICAgICBpZiAoY29uZGl0aW9uMS5maWx0ZXJUbyAmJiBjb25kaXRpb24xLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGwgJiYgY29uZGl0aW9uMS5maWx0ZXJUbyAhPT0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaWx0ZXIgc3RhdGUuIElmIGZpbHRlciBpcyBub3QgYWN0aXZlLCB0aGVuIHNob3VsZCByZXR1cm4gbnVsbC91bmRlZmluZWQuXG4gICAqIFRoZSBncmlkIGNhbGxzIGdldE1vZGVsKCkgb24gYWxsIGFjdGl2ZSBmaWx0ZXJzIHdoZW4gZ3JpZEFwaS5nZXRGaWx0ZXJNb2RlbCgpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiBPYmplY3QgfCBudWxsIHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIGdldE1vZGVsKCkge1xuICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9zdGF0ZSkpXG4gICAgO1tjbG9uZS5jb25kaXRpb24xLCBjbG9uZS5jb25kaXRpb24yXS5mb3JFYWNoKChjb25kaXRpb24sIGkpID0+IHtcbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXIgPSB0aGlzLl9zdGF0ZVtgY29uZGl0aW9uJHtpICsgMX1gXS5maWx0ZXIudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSB0aGlzLl9zdGF0ZVtcbiAgICAgICAgICBgY29uZGl0aW9uJHtpICsgMX1gXG4gICAgICAgIF0uZmlsdGVyVG8udG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjbG9uZS5maWx0ZXJUeXBlID0gJ2RhdGV0aW1lJ1xuICAgIGNsb25lLmNvbmRpdGlvbjEuZmlsdGVyVHlwZSA9ICdkYXRldGltZSdcbiAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclR5cGUgPSAnZGF0ZXRpbWUnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgcmV0dXJuIGNsb25lLmhhc093blByb3BlcnR5KCdjb25kaXRpb24yJykgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGNsb25lLmNvbmRpdGlvbjIuaGFzT3duUHJvcGVydHkoJ2ZpbHRlcicpICYmXG4gICAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclxuICAgICAgPyBjbG9uZVxuICAgICAgOiBjbG9uZS5jb25kaXRpb24xXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgaWYgKFxuICAgICAgbW9kZWwgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICFtb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZGl0aW9uMScpICYmXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAhbW9kZWwuaGFzT3duUHJvcGVydHkoJ2NvbmRpdGlvbjInKVxuICAgICkge1xuICAgICAgbW9kZWwgPSB7XG4gICAgICAgIGNvbmRpdGlvbjE6IG1vZGVsLFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSB0cnVlXG4gICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnNldFN0YXRlKG1vZGVsKVxuICAgIHRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IGZhbHNlXG5cbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5zdGF0ZVxuICAgIDtbdGhpcy5fc3RhdGUuY29uZGl0aW9uMSwgdGhpcy5fc3RhdGUuY29uZGl0aW9uMl0uZm9yRWFjaChjb25kaXRpb24gPT4ge1xuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlciA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXIpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXJUbylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsdGVyIG1vZGVsIGFzIHBsYWluIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBmbG9hdGluZyBmaWx0ZXIgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgZ2V0TW9kZWxBc1N0cmluZyhtb2RlbCkge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVUaW1lTWFzayA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RhdGVUaW1lTWFzaycsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICAvLyBAdG9kbyBGaW5kIGEgYmV0dGVyIHdheSBmb3IgdGhpc1xuICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLl9maXJzdENvbmRpdGlvblBhbmVsLl9maWx0ZXJUaW1lSW5wdXQucGlja2VyXG4gICAgICAgIC5jb25maWdbJ2RhdGVGb3JtYXQnXVxuICAgIClcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdkYXRlVGltZUxvY2FsZScsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcbiAgICApXG5cbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkobW9kZWwpXG4gICAgKVxuXG4gICAgO1tjb25kaXRpb24xLCBjb25kaXRpb24yXS5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlcikge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyID0gQkJqLk1hc2tzLkRhdGVNYXNrLm1hc2soXG4gICAgICAgICAgY29uZGl0aW9uLmZpbHRlcixcbiAgICAgICAgICBkYXRlVGltZU1hc2ssXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSBCQmouTWFza3MuRGF0ZU1hc2subWFzayhcbiAgICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8sXG4gICAgICAgICAgZGF0ZVRpbWVNYXNrLFxuICAgICAgICAgIGxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGZpcnN0Q29uZGl0aW9uQXNTdHJpbmcgPSBgJHtjb25kaXRpb24xLmZpbHRlciB8fCAnJ30gJHtcbiAgICAgIGNvbmRpdGlvbjEuZmlsdGVyVG8gPyAn4oaSICcgKyBjb25kaXRpb24xLmZpbHRlclRvIDogJydcbiAgICB9YFxuICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgfHwgJyd9ICR7XG4gICAgICBjb25kaXRpb24yLmZpbHRlclRvID8gJ+KGkiAnICsgY29uZGl0aW9uMi5maWx0ZXJUbyA6ICcnXG4gICAgfWBcbiAgICBjb25zdCBvcGVyYXRvckFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgJiYgb3BlcmF0b3IgPyBvcGVyYXRvciA6ICcnfWBcblxuICAgIHJldHVybiBgJHtmaXJzdENvbmRpdGlvbkFzU3RyaW5nfSAke29wZXJhdG9yQXNTdHJpbmd9ICR7c2Vjb25kQ29uZGl0aW9uQXNTdHJpbmd9YC50cmltKClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFsdWUgcGFzc2VzIHRoZSBmaWx0ZXIgZGVmaW5lZCBpbiB0aGUgcGFzc2VkIENvbmRpdGlvblBhbmVsJ3Mgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmRpdGlvbiBjb25kaXRpb24gcGFuZWwgc3RhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIGNlbGwgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHBhc3MsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbiwgdmFsdWUpIHtcbiAgICBpZiAoIWNvbmRpdGlvbi5maWx0ZXIgfHwgIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyVG8sIHR5cGUgfSA9IGNvbmRpdGlvblxuICAgIGNvbnN0IHRpbWV6b25lID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmdldFRpbWV6b25lT3JPZmZzZXQoKVxuICAgIGNvbnN0IGluUmFuZ2VJbmNsdXNpdmUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuaW5SYW5nZUluY2x1c2l2ZVxuICAgIGNvbnN0IGVuYWJsZVRpbWUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuZW5hYmxlVGltZVxuICAgIGxldCBwYXNzZWQgPSBmYWxzZVxuXG4gICAgaWYgKEJCai5NYXNrcy5VdGlscy5EYXRlcy5JU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgICAgO1tmaWx0ZXIsIGZpbHRlclRvXS5mb3JFYWNoKGRhdGUgPT4ge1xuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKDE5NzApXG4gICAgICAgICAgZGF0ZS5zZXRNb250aCgwKVxuICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQkJqLk1hc2tzLlV0aWxzLkRhdGVzLklTX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgdGhlIGRhdGV0aW1lIGZyb20gdXRjIHRvIGxvY2FsZVxuICAgIHZhbHVlID0gdXRjVG9ab25lZFRpbWUodmFsdWUsIHRpbWV6b25lKVxuICAgIC8vIGZpcnN0RGF0ZSA9IGZpcnN0RGF0ZSA/IHpvbmVkVGltZVRvVXRjKGZpcnN0RGF0ZSAsIHRpbWV6b25lKSA6IGZpcnN0RGF0ZVxuICAgIC8vIHNlY29uZERhdGUgPSBzZWNvbmREYXRlID8gem9uZWRUaW1lVG9VdGMoc2Vjb25kRGF0ZSAsIHRpbWV6b25lKSA6IHNlY29uZERhdGVcblxuICAgIGlmICghZW5hYmxlVGltZSkge1xuICAgICAgLy8gcmVtb3ZlIHRoZSB0aW1lIHBvcnRpb24gZnJvbSB0aGUgZGF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgIDtbdmFsdWUsIGZpbHRlciwgZmlsdGVyVG9dLmZvckVhY2goZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGUuc2V0SG91cnMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoMClcbiAgICAgICAgICBkYXRlLnNldFNlY29uZHMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcygwKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fRVFVQUwpIHtcbiAgICAgIHBhc3NlZCA9IGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX05PVF9FUVVBTCkge1xuICAgICAgcGFzc2VkID0gIShmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fR1JFQVRFUikge1xuICAgICAgcGFzc2VkID0gZmlsdGVyIDwgdmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9MRVNTKSB7XG4gICAgICBwYXNzZWQgPSBmaWx0ZXIgPiB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFICYmIGZpbHRlclRvKSB7XG4gICAgICBpZiAoaW5SYW5nZUluY2x1c2l2ZSkge1xuICAgICAgICBwYXNzZWQgPVxuICAgICAgICAgICgoZmlsdGVyIDwgdmFsdWUgfHxcbiAgICAgICAgICAgIChmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpKSAmJlxuICAgICAgICAgICAgZmlsdGVyVG8gPiB2YWx1ZSkgfHxcbiAgICAgICAgICAoZmlsdGVyVG8gPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyVG8gPCB2YWx1ZSA9PSBmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3NlZCA9IGZpbHRlciA8IHZhbHVlICYmIGZpbHRlclRvID4gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFzc2VkXG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byBjbGljayBidXR0b24gZXZlbnQgb24gdGhlIGZpbHRlciBwYW5lbCBhbmQgZXhlY3V0ZSB0aGVcbiAgICogcmlnaHQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNldCcpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICAgIHRoaXMuX3BhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbGVhcicpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZmlsdGVyIHN0YXRlIGFuZCBBcHBseSB0aGUgZmlsdGVyIGRlcGVuZGluZyBvblxuICAgKiB3aGV0aGVyIHRoZSBgaXNBcHBseUJ1dHRvbkFjdGl2ZWAgaXMgdHJ1ZSBvciBmYWxzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0FwcGx5QnV0dG9uQWN0aXZlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uSm9pbkNvbmRpdGlvblBhbmVsU3RhdGVDaGFuZ2VkKHN0YXRlLCBpc0FwcGx5QnV0dG9uQWN0aXZlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZVxuICAgIGlmIChmYWxzZSA9PT0gaXNBcHBseUJ1dHRvbkFjdGl2ZSkge1xuICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvRGF0ZVRpbWVGaWx0ZXIuanMiLCIvKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lWm9uZSkge1xuICB2YXIgZHRmID0gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpXG4gIHJldHVybiBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpXG59XG5cbnZhciB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGhvdXI6IDMsXG4gIG1pbnV0ZTogNCxcbiAgc2Vjb25kOiA1XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSlcbiAgdmFyIGZpbGxlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBvcyA9IHR5cGVUb1Bvc1tmb3JtYXR0ZWRbaV0udHlwZV1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludChmb3JtYXR0ZWRbaV0udmFsdWUsIDEwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkXG59XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csICcnKVxuICB2YXIgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZClcbiAgLy8gdmFyIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZFxuICAvLyByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXVxuICByZXR1cm4gW3BhcnNlZFszXSwgcGFyc2VkWzFdLCBwYXJzZWRbMl0sIHBhcnNlZFs0XSwgcGFyc2VkWzVdLCBwYXJzZWRbNl1dXG59XG5cbi8vIEdldCBhIGNhY2hlZCBJbnRsLkRhdGVUaW1lRm9ybWF0IGluc3RhbmNlIGZvciB0aGUgSUFOQSBgdGltZVpvbmVgLiBUaGlzIGNhbiBiZSB1c2VkXG4vLyB0byBnZXQgZGV0ZXJtaW5pc3RpYyBsb2NhbCBkYXRlL3RpbWUgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgYGVuLVVTYCBsb2NhbGUgd2hpY2hcbi8vIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgbG9jYWwgdGltZSBwYXJ0cyBhcyBuZWNlc3NhcnkuXG52YXIgZHRmQ2FjaGUgPSB7fVxuZnVuY3Rpb24gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAvLyBOZXcgYnJvd3NlcnMgdXNlIGBob3VyQ3ljbGVgLCBJRSBhbmQgQ2hyb21lIDw3MyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB1c2VzIGBob3VyMTJgXG4gICAgdmFyIHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSkuZm9ybWF0KG5ldyBEYXRlKCcyMDE0LTA2LTI1VDA0OjAwOjAwLjEyM1onKSlcbiAgICB2YXIgaG91ckN5Y2xlU3VwcG9ydGVkID1cbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJ+KAjjA24oCOL+KAjjI14oCOL+KAjjIwMTTigI4g4oCOMDDigI464oCOMDDigI464oCOMDAnXG5cbiAgICBkdGZDYWNoZVt0aW1lWm9uZV0gPSBob3VyQ3ljbGVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3RpbWVab25lXVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qcyc7XG5pbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gJy4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyc7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanMnO1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUvaW5kZXguanMnO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdC5pby9manVsZVwiKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vdG9EYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICdkYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMnXG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzJ1xuaW1wb3J0IHR6UGFyc2VUaW1lem9uZSBmcm9tICcuLi9fbGliL3R6UGFyc2VUaW1lem9uZSdcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxudmFyIERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgPSAyXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWV0ZXI6IC9bVCBdLyxcbiAgcGxhaW5UaW1lOiAvOi8sXG4gIHRpbWVab25lRGVsaW1ldGVyOiAvW1ogXS9pLFxuXG4gIC8vIHllYXIgdG9rZW5zXG4gIFlZOiAvXihcXGR7Mn0pJC8sXG4gIFlZWTogW1xuICAgIC9eKFsrLV1cXGR7Mn0pJC8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezN9KSQvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezR9KSQvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcbiAgWVlZWTogL14oXFxkezR9KS8sXG4gIFlZWVlZOiBbXG4gICAgL14oWystXVxcZHs0fSkvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHs1fSkvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezZ9KS8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuXG4gIC8vIGRhdGUgdG9rZW5zXG4gIE1NOiAvXi0oXFxkezJ9KSQvLFxuICBEREQ6IC9eLT8oXFxkezN9KSQvLFxuICBNTUREOiAvXi0/KFxcZHsyfSktPyhcXGR7Mn0pJC8sXG4gIFd3dzogL14tP1coXFxkezJ9KSQvLFxuICBXd3dEOiAvXi0/VyhcXGR7Mn0pLT8oXFxkezF9KSQvLFxuXG4gIEhIOiAvXihcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTTogL14oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NU1M6IC9eKFxcZHsyfSk6PyhcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG5cbiAgLy8gdGltZXpvbmUgdG9rZW5zICh0byBpZGVudGlmeSB0aGUgcHJlc2VuY2Ugb2YgYSB0eilcbiAgdGltZXpvbmU6IC8oW1orLV0uKnwgVVRDfCg/OlthLXpBLVpdK1xcL1thLXpBLVpfXSsoPzpcXC9bYS16QS1aX10rKT8pKSQvXG59XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIGFuIGFyZ3VtZW50IGlzIGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gcGFyc2UgaXQuXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKiBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3IgdGhlIHZhbHVlcyBhcmUgaW52YWxpZCwgaXQgcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKiBBbGwgKmRhdGUtZm5zKiBmdW5jdGlvbnMgd2lsbCB0aHJvdyBgUmFuZ2VFcnJvcmAgaWYgYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgaXMgbm90IDAsIDEsIDIgb3IgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRpbWVab25lPScnXSAtIHVzZWQgdG8gc3BlY2lmeSB0aGUgSUFOQSB0aW1lIHpvbmUgb2Zmc2V0IG9mIGEgZGF0ZSBTdHJpbmcuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnKzAyMDE0MTAxJywge2FkZGl0aW9uYWxEaWdpdHM6IDF9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBkaXJ0eU9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgcHJlc2VudCdcbiAgICApXG4gIH1cblxuICBpZiAoYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge31cblxuICB2YXIgYWRkaXRpb25hbERpZ2l0cyA9XG4gICAgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzID09IG51bGxcbiAgICAgID8gREVGQVVMVF9BRERJVElPTkFMX0RJR0lUU1xuICAgICAgOiB0b0ludGVnZXIob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gdHpQYXJzZVRpbWV6b25lKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICAgIG9mZnNldCA9IHR6UGFyc2VUaW1lem9uZShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKVxuICAgICAgb2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9XG4gIHZhciBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWV0ZXIpXG4gIHZhciB0aW1lU3RyaW5nXG5cbiAgaWYgKHBhdHRlcm5zLnBsYWluVGltZS50ZXN0KGFycmF5WzBdKSkge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBudWxsXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdXG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdXG4gICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSBhcnJheVsyXVxuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlcilbMF1cbiAgICAgIHRpbWVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cihkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCwgZGF0ZVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJylcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3Ncbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgdmFyIHBhdHRlcm5ZWVkgPSBwYXR0ZXJucy5ZWVlbYWRkaXRpb25hbERpZ2l0c11cbiAgdmFyIHBhdHRlcm5ZWVlZWSA9IHBhdHRlcm5zLllZWVlZW2FkZGl0aW9uYWxEaWdpdHNdXG5cbiAgdmFyIHRva2VuXG5cbiAgLy8gWVlZWSBvciDCsVlZWVlZXG4gIHRva2VuID0gcGF0dGVybnMuWVlZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVlZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciB5ZWFyU3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoeWVhclN0cmluZywgMTApLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoeWVhclN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gWVkgb3IgwrFZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVkuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB2YXIgY2VudHVyeVN0cmluZyA9IHRva2VuWzFdXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXI6IHBhcnNlSW50KGNlbnR1cnlTdHJpbmcsIDEwKSAqIDEwMCxcbiAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKGNlbnR1cnlTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIHJldHVybiB7XG4gICAgeWVhcjogbnVsbFxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhciB0b2tlblxuICB2YXIgZGF0ZVxuICB2YXIgbW9udGhcbiAgdmFyIHdlZWtcblxuICAvLyBZWVlZXG4gIGlmIChkYXRlU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1NTVxuICB0b2tlbiA9IHBhdHRlcm5zLk1NLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktREREIG9yIFlZWVlERERcbiAgdG9rZW4gPSBwYXR0ZXJucy5EREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICB2YXIgZGF5T2ZZZWFyID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGRheU9mWWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8geXl5eS1NTS1kZCBvciBZWVlZTU1ERFxuICB0b2tlbiA9IHBhdHRlcm5zLk1NREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheSA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXkpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIGRheSlcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1Xd3cgb3IgWVlZWVd3d1xuICB0b2tlbiA9IHBhdHRlcm5zLld3dy5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWspXG4gIH1cblxuICAvLyBZWVlZLVd3dy1EIG9yIFlZWVlXd3dEXG4gIHRva2VuID0gcGF0dGVybnMuV3d3RC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuICAgIHZhciBkYXlPZldlZWsgPSBwYXJzZUludCh0b2tlblsyXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheU9mV2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIGRhdGVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWVTdHJpbmcpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBob3Vyc1xuICB2YXIgbWludXRlc1xuXG4gIC8vIGhoXG4gIHRva2VuID0gcGF0dGVybnMuSEguZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlRmxvYXQodG9rZW5bMV0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgfVxuXG4gIC8vIGhoOm1tIG9yIGhobW1cbiAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlRmxvYXQodG9rZW5bMl0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIClcbiAgfVxuXG4gIC8vIGhoOm1tOnNzIG9yIGhobW1zc1xuICB0b2tlbiA9IHBhdHRlcm5zLkhITU1TUy5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuICAgIG1pbnV0ZXMgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG4gICAgdmFyIHNlY29uZHMgPSBwYXJzZUZsb2F0KHRva2VuWzNdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICtcbiAgICAgIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICtcbiAgICAgIHNlY29uZHMgKiAxMDAwXG4gICAgKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHdlZWsgPSB3ZWVrIHx8IDBcbiAgZGF5ID0gZGF5IHx8IDBcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KVxuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3XG4gIHZhciBkaWZmID0gd2VlayAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpXG4gIHJldHVybiBkYXRlXG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbnZhciBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG52YXIgREFZU19JTl9NT05USF9MRUFQX1lFQVIgPSBbMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkge1xuICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gICAgaWYgKGlzTGVhcFllYXIgJiYgZGF0ZSA+IERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmICghaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USFttb250aF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgaWYgKGRheU9mWWVhciA8IDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gIGlmIChpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2Nikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5KSB7XG4gIGlmICh3ZWVrIDwgMCB8fCB3ZWVrID4gNTIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXkgIT0gbnVsbCAmJiAoZGF5IDwgMCB8fCBkYXkgPiA2KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyAhPSBudWxsICYmIChob3VycyA8IDAgfHwgaG91cnMgPj0gMjUpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHNlY29uZHMgIT0gbnVsbCAmJiAoc2Vjb25kcyA8IDAgfHwgc2Vjb25kcyA+PSA2MCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3RvRGF0ZS9pbmRleC5qcyIsInZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDA7XG5cbmZ1bmN0aW9uIGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURTtcbn1cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgaGFzTmVnYXRpdmVVVENPZmZzZXQgPSBiYXNlVGltZXpvbmVPZmZzZXQgPiAwO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBoYXNOZWdhdGl2ZVVUQ09mZnNldCA/IChNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURSA6IGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogRXZlbnRzIE1peGluXG4gKlxuICogQWxsb3cgY2xhc3NlcyB0byBoYXZlIHRoZWlyIG93biBldmVudHMgbWFuYWdlclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jb25zdCBFdmVudHNNaXhpbiA9IHN1cGVyQ2xhc3MgPT5cbiAgY2xhc3MgZXh0ZW5kcyBzdXBlckNsYXNzIHtcbiAgICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcmVnaXN0ZXJzIGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIF9faGFuZGxlcnMgPSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgaGFuZGxlciBmdW5jdGlvblxuICAgICAqL1xuICAgIG9uKG5hbWUsIGhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX19oYW5kbGVyc1tuYW1lXSA9IHRoaXMuX19oYW5kbGVyc1tuYW1lXSB8fCBbXVxuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogKipOb3RlIDoqKiBpZiBoYW5kbGVyIGlzIG5vdCBwcm92aWRlZCB0aGVuIGFsbCByZWdpc3RlcmVkIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBldmVudCB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIGhhbmRsZXIgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBvZmYobmFtZSwgaGFuZGxlcikge1xuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdID0gdGhpcy5fX2hhbmRsZXJzW25hbWVdIHx8IFtdXG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX19oYW5kbGVyc1tuYW1lXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCByZWdpc3RlcmVkSGFuZGxlciBpbiB0aGlzLl9faGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnMuaGFzT3duUHJvcGVydHkocmVnaXN0ZXJlZEhhbmRsZXIpICYmXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnNbcmVnaXN0ZXJlZEhhbmRsZXJdID09PSBoYW5kbGVyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fX2hhbmRsZXJzW25hbWVdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZ5IGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBldmVudCBuYW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHBheWxvYWRcbiAgICAgKi9cbiAgICBub3RpZnkobmFtZSwgcGF5bG9hZCkge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNbbmFtZV0gfHwgW11cbiAgICAgIGhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgIGhhbmRsZXIocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbi8qKlxuICogQW4gZXZlbnRzIG1peGluIGRlY29yYXRvclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAc2VlIHtFdmVudHNNaXhpbn1cbiAqL1xuZnVuY3Rpb24gd2l0aEV2ZW50c01peGluKHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIEV2ZW50c01peGluKHN1cGVyQ2xhc3MpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50c01peGluXG5leHBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FdmVudHNNaXhpbi9FdmVudHNNaXhpbi5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSwgcmVhZG9ubHkgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuLi9FdmVudHNNaXhpbidcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0ICcuL3N0eWxlLnNjc3MnXG5cbi8qKlxuICogRGF0ZVRpbWVJbnB1dFxuICpcbiAqIFNpbXBsZSBEYXRlVGltZUlucHV0IGNvbXBvbmVudCB3aGljaCBpbnRlZ3JhdGVzIHRoZSBmbGF0cGlja3JcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5Ad2l0aEV2ZW50c01peGluXG5jbGFzcyBEYXRlVGltZUlucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBhIGRhdGVcbiAgICogaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGRhdGUgcGlja2VyXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGljIE9OX0RBVEVfQ0hBTkdFRCA9ICdEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRCdcblxuICAvKipcbiAgICogVGhlIGRhdGUgcGlja2VyIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlIHtGbGF0cGlja3JGbn1cbiAgICovXG4gIHBpY2tlciA9IG51bGxcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZXxudWxsfVxuICAgKi9cbiAgc2VsZWN0ZWREYXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHJlY2VpdmVkIHBhcmFtcyB3aGVuIGluaXQgaXMgY2FsbGVkXG4gICAqc1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IHt9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgRGF0ZVRpbWVJbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzRWRpdG9yIHdoZW4gdHJ1ZSAsIHRoZSBpbnB1dCB3aWxsIHN0eWxlZCB0byBmaXQgYXMgYSBjZWxsIGVkaXRvclxuICAgKi9cbiAgY29uc3RydWN0b3IoaXNFZGl0b3IgPSBmYWxzZSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0ICR7XG4gICAgICAgIGlzRWRpdG9yID8gJ2RhdGV0aW1lX19pbnB1dC0tZWRpdG9yICcgOiAnJ1xuICAgICAgfSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0X19pbnB1dCAke1xuICAgICAgICAgICAgaXNFZGl0b3IgPyAnYWctY2VsbC1lZGl0LWlucHV0ICcgOiAnJ1xuICAgICAgICAgIH0gYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1pbnB1dD5cbiAgICAgICAgICA8YSBjbGFzcz1cImRhdGV0aW1lX19pbnB1dF9fY2xlYXJcIiBkYXRhLWNsZWFyPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJkYXRldGltZV9faW5wdXRfX2NsZWFyX19pY29uIGFnLWljb24gYWctaWNvbi1jcm9zc1wiPjwvaT5cbiAgICAgICAgICA8L2E+ICAgIFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgY29uc3QgZW5hYmxlVGltZSA9IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCBwYXJhbXMsIHRydWUpXG4gICAgY29uc3QgdGltZV8yNGhyID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlMjRIUicsIHBhcmFtcywgdHJ1ZSlcbiAgICBjb25zdCBlbmFibGVTZWNvbmRzID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlU2Vjb25kcycsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3Qgbm9DYWxlbmRhciA9ICF0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVDYWxlbmRhcicsIHBhcmFtcywgdHJ1ZSlcblxuICAgIGxldCBkYXRlRm9ybWF0ID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWFzaycsIHBhcmFtcylcblxuICAgIC8vIHRyeSB0byBnZW5lcmF0ZSBhIGRlZmF1bHQgZGF0ZSBmb3JtYXQgYmFzZWQgb24gdGhlIG9wdGlvbnNcbiAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgIGRhdGVGb3JtYXQgPSBub0NhbGVuZGFyID8gJycgOiAnJVkvJU16LyVEeidcbiAgICAgIGlmIChlbmFibGVUaW1lKSB7XG4gICAgICAgIGRhdGVGb3JtYXQgKz0gdGltZV8yNGhyID8gJyAlSHo6JW16JyA6ICcgJWh6OiVteidcblxuICAgICAgICBpZiAoZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgIGRhdGVGb3JtYXQgKz0gJzolc3onXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50cmltKClcblxuICAgIC8vIGluaXQgdGhlIGRhdGUgcGlja2VyXG4gICAgdGhpcy5waWNrZXIgPSBmbGF0cGlja3IodGhpcy5fZ3VpLCB7XG4gICAgICB3cmFwOiB0cnVlLFxuICAgICAgLy8gYWxsb3cgZW50ZXJpbmcgdGhlIGRhdGUgbWFudWFsbHkgcmVxdWlyZXMgZGF0ZSBwYXJzaW5nIGZyb20gc3RyaW5nXG4gICAgICAvLyB0aGlzIGlzIGEgdG91Z2ggdGhpbmcgYW5kIHJlcXVpcmVzIGxpYnMgbGlrZSBtb21lbnRcbiAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMuX29uRGF0ZUNoYW5nZWQsXG4gICAgICBmb3JtYXREYXRlOiB0aGlzLmZvcm1hdERhdGUsXG4gICAgICBtYXhEYXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNYXgnLCBwYXJhbXMsIG51bGwpLFxuICAgICAgbWluRGF0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWluJywgcGFyYW1zLCBudWxsKSxcbiAgICAgIGRlZmF1bHRIb3VyOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEZWZhdWx0SG91cicsIHBhcmFtcywgMTIpLFxuICAgICAgZGVmYXVsdE1pbnV0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRGVmYXVsdE1pbnV0ZScsIHBhcmFtcywgMCksXG4gICAgICBkaXNhYmxlTW9iaWxlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEaXNhYmxlTW9iaWxlJywgcGFyYW1zLCBmYWxzZSksXG4gICAgICB3ZWVrTnVtYmVyczogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlV2Vla051bWJlcicsIHBhcmFtcywgZmFsc2UpLFxuICAgICAgbG9jYWxlOiB0aGlzLl9nZXRQaWNrZXJMb2NhbGUoKSxcbiAgICAgIG5vQ2FsZW5kYXIsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgZW5hYmxlVGltZSxcbiAgICAgIGVuYWJsZVNlY29uZHMsXG4gICAgICB0aW1lXzI0aHIsXG4gICAgfSlcblxuICAgIC8vIGZvcmNlIGRpYWxvZyBvdmVyZmxvd1xuICAgIHRoaXMucGlja2VyLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2FnLWN1c3RvbS1jb21wb25lbnQtcG9wdXAnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnBpY2tlci5kZXN0cm95KClcbiAgICB0aGlzLm9mZihEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBpY2tlciBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd9IHZhbHVlIHRoZSBkYXRlIHZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0RGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMucGlja2VyLnNldERhdGUodmFsdWUsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBQaWNrZXJcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5waWNrZXIub3BlbigpXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHBpY2tlclxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5waWNrZXIuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBwaWNrZXJcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIC8qKiB0aGlzIGNoZWNrIGJlY2F1c2UgdGhlIHRlc3RzIGZhaWwgaGVyZSBmb3Igc29tZSByZWFzb25zICAqL1xuICAgIGlmICh0aGlzLnBpY2tlci5jb25maWcpIHtcbiAgICAgIHRoaXMucGlja2VyLmNsZWFyKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBkYXRlIHVzaW5nIGBCQmouTWFza3MuVHlwZXMuZGF0ZWBcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IEJCaiBkYXRlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGZvcm1hdHRlZCBkYXRlIGFzIHN0cmluZ1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIGZvcm1hdERhdGUoZGF0ZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVGb3JtYXR0ZXInLCB0aGlzLl9wYXJhbXMpXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGF0ZVRpbWVMb2NhbGUnLFxuICAgICAgdGhpcy5fcGFyYW1zLFxuICAgICAgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG4gICAgKVxuXG4gICAgaWYgKGRhdGVUaW1lRm9ybWF0dGVyKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGVUaW1lRm9ybWF0dGVyXG4gICAgICBsZXQgZXhwcmVzc2lvbiA9IGRhdGVUaW1lRm9ybWF0dGVyXG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGlmICghKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcbiAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICdmb3JtYXQnLFxuICAgICAgICAgICAgJ2xvY2FsZScsXG4gICAgICAgICAgICAnRGF0ZU1hc2snLFxuICAgICAgICAgICAgZXhwcmVzc2lvblxuICAgICAgICAgICkoZGF0ZSwgZm9ybWF0LCBsb2NhbGUsIEJCai5NYXNrcy5EYXRlTWFzaylcblxuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0dGVyKGRhdGUsIGZvcm1hdCwgbG9jYWxlLCBCQmouTWFza3MuRGF0ZU1hc2spXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgZGF0ZVRpbWVGb3JtYXR0ZXIgZGVmaW5lZCBmb3IgY29sdW1uIFwiJHt0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkfVwiLiBUaGUgZm9ybWF0dGVyIHNob3VsZCBiZSBhbiBleHByZXNzaW9uIG9yIHBsYWluIGZ1bmN0aW9uYFxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtYXQgfHwgKGZvcm1hdCAmJiBmb3JtYXQuaW5kZXhPZignJScpIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCQmouTWFza3MuRGF0ZU1hc2subWFzayhkYXRlLCBmb3JtYXQsIGxvY2FsZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGRhdGUgcGlja2VyIGNoYW5nZXMgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZERhdGVzICBhcnJheSBvZiBzZWxlY3RlZCBkYXRlc1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkRhdGVDaGFuZ2VkKHNlbGVjdGVkRGF0ZXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHNlbGVjdGVkRGF0ZXNbMF0gfHwgbnVsbFxuICAgIHRoaXMubm90aWZ5KERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGlja2VyIGdsb2JhbCBsb2NhbGl6YXRpb24gd2hpY2ggd2lsbCB3b3JrIHdpdGggYW55IGxvY2FsZVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0cGlja3IvZmxhdHBpY2tyL2Jsb2IvbWFzdGVyL3NyYy9sMTBuL2RlZmF1bHQudHNcbiAgICovXG4gIF9nZXRQaWNrZXJMb2NhbGUoKSB7XG4gICAgY29uc3QgbG9jYWxlID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG5cbiAgICBjb25zdCB3ZWVrRGF5c1Nob3J0ID0gW11cbiAgICBjb25zdCB3ZWVrRGF5c0xvbmcgPSBbXVxuXG4gICAgZm9yIChsZXQgZGF5ID0gNDsgZGF5IDwgMTE7IGRheSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMTk3MCwgMSAtIDEsIGRheSlcblxuICAgICAgd2Vla0RheXNTaG9ydC5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ3Nob3J0JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zcGxpdCgnLCcpWzBdIC8vIHRoZSBkYXRlLXRpbWUtZm9ybWF0LXRpbWV6b25lIHBvbHlmaWxsIGF0dGFjaCB0aGUgZGF0ZSBhbHNvXG4gICAgICApXG5cbiAgICAgIHdlZWtEYXlzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNwbGl0KCcsJylbMF0gLy8gdGhlIGRhdGUtdGltZS1mb3JtYXQtdGltZXpvbmUgcG9seWZpbGwgYXR0YWNoIHRoZSBkYXRlIGFsc29cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtb250aHNTaG9ydCA9IFtdXG4gICAgY29uc3QgbW9udGhzTG9uZyA9IFtdXG5cbiAgICBmb3IgKGxldCBtb250aCA9IDA7IG1vbnRoIDwgMTI7IG1vbnRoKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCBtb250aCwgNClcblxuICAgICAgbW9udGhzU2hvcnQucHVzaChcbiAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgbW9udGhzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIHNob3J0aGFuZDogd2Vla0RheXNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IHdlZWtEYXlzTG9uZyxcbiAgICAgIH0sXG4gICAgICBtb250aHM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiBtb250aHNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IG1vbnRoc0xvbmcsXG4gICAgICB9LFxuICAgICAgZGF5c0luTW9udGg6IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgb3JkaW5hbDogbnVtYmVyID0+ICcnLFxuICAgICAgcmFuZ2VTZXBhcmF0b3I6ICcgICcsXG4gICAgICB3ZWVrQWJicmV2aWF0aW9uOiAnJyxcbiAgICAgIHNjcm9sbFRpdGxlOiAnJyxcbiAgICAgIHRvZ2dsZVRpdGxlOiAnJyxcbiAgICAgIGFtUE06IFsnQU0nLCAnUE0nXSxcbiAgICAgIHllYXJBcmlhTGFiZWw6ICcnLFxuICAgICAgaG91ckFyaWFMYWJlbDogJycsXG4gICAgICBtaW51dGVBcmlhTGFiZWw6ICcnLFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUlucHV0XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGV0aW1lX19pbnB1dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjNweH0uZGF0ZXRpbWVfX2lucHV0OmZvY3VzLC5kYXRldGltZV9faW5wdXQ6YWN0aXZlLC5kYXRldGltZV9faW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFnLWlucHV0LWZvY3VzLWJvcmRlci1jb2xvciwgcmdiYSgzMywxNTAsMjQzLDAuNCkpfS5kYXRldGltZV9faW5wdXRfX2lucHV0e2ZsZXg6MTtwYWRkaW5nOjZweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5kYXRldGltZV9faW5wdXRfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9LmRhdGV0aW1lX19pbnB1dF9fY2xlYXJ7bWFyZ2luLWxlZnQ6MXB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6NnB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0fS5kYXRldGltZV9faW5wdXQtLWVkaXRvcntib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGV0aW1lX19pbnB1dC0tZWRpdG9yIC5kYXRldGltZV9faW5wdXRfX2lucHV0e3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5kYXRlVGltZUZpbHRlciBzZWxlY3R7bWFyZ2luLWJvdHRvbTo5cHg7cGFkZGluZzo2cHg7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2NvbG9yOmluaGVyaXR9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdDpmb2N1cywuZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdCBvcHRpb257dGV4dC1pbmRlbnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gMTI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IERhdGVUaW1lSW5wdXQgZnJvbSAnLi4vRGF0ZVRpbWVJbnB1dCdcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuXG4vKipcbiAqIERhdGVUaW1lSW5wdXRcbiAqXG4gKiBTaW1wbGUgRGF0ZVRpbWVJbnB1dCBjb21wb25lbnQgd2hpY2ggaW50ZWdyYXRlcyB0aGUgZmxhdHBpY2tyXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVUaW1lKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lXG4gKiB8ICoqZGF0ZVRpbWVFbmFibGUyNEhSKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lIDI0IGZvcm1hdFxuICogfCAqKmRhdGVUaW1lRW5hYmxlU2Vjb25kcyoqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgc2Vjb25kcyBtYW5hZ2VtZW50XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVDYWxlbmRhcioqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgQ2FsZW5kYXIuXG4gKiB8ICoqZGF0ZVRpbWVNYXNrKiogICB8IGZhbHNlICAgIHwgVGhlIG1hc2sgdXNlZCB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGVcbiAqIHwgKipkYXRlVGltZU1heCoqICAgfCB1bmRlZmluZWQgICAgfCAgTWF4IGFsbG93ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWluKiogICB8IHVuZGVmaW5lZCAgICB8ICBNaW4gYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVGb3JtYXR0ZXIqKiAgIHwgZmFsc2UgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIERhdGVUaW1lRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2lucHV0ID0gbmV3IERhdGVUaW1lSW5wdXQodHJ1ZSlcblxuICAvKipcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIF92YWx1ZSA9IG51bGxcblxuICAvKipcbiAgICogUGFyYW1zIHJlY2VpdmVkIGluIGluaXRcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSBudWxsXG5cbiAgLyoqXG4gICAqIFRha2VzIGluY29tcGxldGUgaXNvIHN0cmluZyBhbmQgcmV0dXJuIGEgY29tcGxldGUgb25lXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGNvbXBsZXRlIGlzbyBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBmaXhTaG9ydElTTyh2YWx1ZSkge1xuICAgIHJldHVybiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IERhdGVUaW1lRWRpdG9yLmZpeFNob3J0SVNPKHRoaXMuX3ZhbHVlKVxuICAgIHRoaXMuX2lucHV0LmluaXQocGFyYW1zKVxuICAgIHRoaXMuX2lucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLl9vbkRhdGVDaGFuZ2UpXG5cbiAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldERhdGUoXG4gICAgICAgIHV0Y1RvWm9uZWRUaW1lKHRoaXMuX3ZhbHVlLCBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0VGltZXpvbmVPck9mZnNldCgpKVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuX2d1aSA9IHRoaXMuX2lucHV0LmdldEd1aSgpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2lucHV0LmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICogTWFrZSBzdXJlIHRoZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgYW5kIGxpc3RlbmluZyB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgdmFsdWUgdG8gdGhlIGdyaWQsIHRoZSByZXN1bHQgb2YgdGhlIGVkaXRpbmdcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZSh0aGlzLl92YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0Lm9wZW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIG91dCBvZiB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzT3V0KCkge1xuICAgIHRoaXMuX2lucHV0LmNsb3NlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGVkaXRvciB2YWx1ZSB3aXRoIHNlbGVjdGVkIGRhdGUgZnJvbSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25EYXRlQ2hhbmdlKGRhdGUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogJydcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL0RhdGVUaW1lRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L0N1c3RvbUV2ZW50ICAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbjsoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy9JZiBub3QgSUVcblxuICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHsgYnViYmxlczogZmFsc2UsIGNhbmNlbGFibGU6IGZhbHNlLCBkZXRhaWw6IHVuZGVmaW5lZCB9XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKVxuICAgIHJldHVybiBldnRcbiAgfVxuXG4gIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGVcblxuICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudFxufSkoKVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5pdC5qcydcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1ucy5qcydcbmV4cG9ydCAqIGZyb20gJy4vcm93cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vY2VsbHMuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi90b29scGFuZWwuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXR1c2Jhci5qcydcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheXMuanMnXG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQuanMnXG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vanNzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMuanMnXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMgfSBmcm9tICcuL2NvbHVtbnMnXG5pbXBvcnQgeyBnd19uYXZpZ2F0ZVRvTmV4dFJvdywgZ3dfZ2V0Um93Tm9kZUlkIH0gZnJvbSAnLi9yb3dzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q29udGV4dE1lbnUgfSBmcm9tICcuL21lbnVzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMgfSBmcm9tICcuL2NoYXJ0cydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50LCBnd19nZXRXaW5kb3csIGd3X2FkZEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIGd3X29uUm93Q2xpY2tlZCxcbiAgZ3dfb25Sb3dEb3VibGVDbGlja2VkLFxuICBnd19vblNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vbkNlbGxFZGl0aW5nRXZlbnQsXG4gIGd3X29uUm93RWRpdGluZ0V2ZW50LFxuICBnd19vblJlYWR5RXZlbnQsXG4gIGd3X2RlYm91bmNlLFxufSBmcm9tICdldmVudHMnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuaW1wb3J0IEhUTUxUb29sdGlwIGZyb20gJy4uL2NvbXBvbmVudHMvSFRNTFRvb2x0aXAuanMnXG5pbXBvcnQgU3VnZ2VzdGlvbkVkaXRvciBmcm9tICcuLi9jb21wb25lbnRzL1N1Z2dlc3Rpb25FZGl0b3IuanMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2luaXQob3B0aW9ucywgbGljZW5zZSwgZGF0YSkge1xuICBpZiAoYWdHcmlkLkxpY2Vuc2VNYW5hZ2VyICYmIGxpY2Vuc2UpIHtcbiAgICBhZ0dyaWQuTGljZW5zZU1hbmFnZXIuc2V0TGljZW5zZUtleShsaWNlbnNlKVxuICB9XG5cbiAgY29uc3QgaWQgPSBvcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgY29udGFpbmVyID0gZ3dfZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChpZClcbiAgLy8gd2UgbWFrZSB0aGUgZ3JpZCBvcHRpb25zIGF2YWlsYWJsZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gIGNvbnN0IGdyaWQgPSBnd19hZGRHcmlkKGlkLCB7XG4gICAgY29udGFpbmVyLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gVE9ETzogdXNlIGFnIGdyaWQgZGVzdHJveVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJydcblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpXG4gIHBhcnNlZE9wdGlvbnMucm93RGF0YSA9IGRhdGFcblxuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBhZ0dyaWQuR3JpZChjb250YWluZXIsIHBhcnNlZE9wdGlvbnMpXG4gIGdyaWQuaW5zdGFuY2UgPSBpbnN0YW5jZVxuICBncmlkLm9wdGlvbnMgPSBwYXJzZWRPcHRpb25zXG5cbiAgY29uc29sZS5sb2coXG4gICAgYCVjIEdyaWQgWyR7aWR9XSBzZXR0aW5ncyA6IGAsXG4gICAgJ2JhY2tncm91bmQ6ICMyMjI7IGNvbG9yOiAjYmFkYTU1JyxcbiAgICBwYXJzZWRPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBQYXJzZSBPcHRpb25zXG4gKlxuICogUGFyc2UgdGhlIGdyaWQgb3B0aW9ucyBhbmQgcmV0dXJuXG4gKiBhbiBvYmplY3Qgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEdyaWQgb3B0aW9ucyBhcyBKc29uIE9iamVjdFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gb3B0aW9ucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgZGVlcFBhcnNlZE9wdGlvbnMgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxuICBjb25zdCBpZCA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgZ2V0RGF0YVBhdGhUZW1wbGF0ZSA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuZ2V0RGF0YVBhdGggfHwgJydcbiAgLy8gVE9ETzogZG8gd2UgbmVlZCB0byBjb250cm9sIHRoaXMgc2V0dGluZyBmcm9tIEJCaiA/XG4gIGNvbnN0IGRlYm91bmNlRHVyYXRpb24gPSAyNTBcbiAgY29uc3QgZmluYWxPcHRpb25zID0ge1xuICAgIC4uLmRlZXBQYXJzZWRPcHRpb25zLFxuICAgIC4uLntcbiAgICAgIGdldERvY3VtZW50OiAoKSA9PiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgb25DZWxsRWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsVmFsdWVDaGFuZ2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvblJvd1ZhbHVlQ2hhbmdlZDogZSA9PiB7XG4gICAgICAgIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkdyaWRSZWFkeTogZSA9PiB7XG4gICAgICAgIGd3X29uUmVhZHlFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBnZXRSb3dOb2RlSWQ6IGRhdGEgPT4gZ3dfZ2V0Um93Tm9kZUlkKGlkLCBkYXRhKSxcbiAgICAgIGdldENvbnRleHRNZW51SXRlbXM6IHBhcmFtcyA9PiBnd19nZXRDb250ZXh0TWVudShpZCwgcGFyYW1zKSxcbiAgICAgIGdldENoYXJ0VG9vbGJhckl0ZW1zOiBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyxcbiAgICAgIHBvcHVwUGFyZW50OiBnd19nZXREb2N1bWVudCgpLmJvZHksXG4gICAgICBvblJvd0RvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93RG91YmxlQ2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblJvd0NsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93Q2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvbkNlbGxDbGlja2VkOiBnd19kZWJvdW5jZShnd19vbkNlbGxDbGlja0V2ZW50LCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uQ2VsbERvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uQ2VsbENsaWNrRXZlbnQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2VkOiBnd19kZWJvdW5jZShnd19vblNlbGVjdGlvbkNoYW5nZWQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQ6IGd3X2RlYm91bmNlKFxuICAgICAgICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbiAgICAgICAgZGVib3VuY2VEdXJhdGlvblxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQm9vbGVhbkZpbHRlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5Cb29sZWFuRmlsdGVyLFxuICAgICAgICBCb29sZWFuUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuQm9vbGVhblJlbmRlcmVyLFxuICAgICAgICBCb29sZWFuRWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkJvb2xlYW5FZGl0b3IsXG4gICAgICAgIE51bWJlckVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5OdW1iZXJFZGl0b3IsXG4gICAgICAgIFRleHRFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuVGV4dEVkaXRvcixcbiAgICAgICAgRGF0ZVRpbWVFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuRGF0ZVRpbWVFZGl0b3IsXG4gICAgICAgIERhdGVUaW1lRmlsdGVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkRhdGVUaW1lRmlsdGVyLFxuICAgICAgICBJbWFnZVJlbmRlcmVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkltYWdlUmVuZGVyZXIsXG4gICAgICAgIFRlbXBsYXRlUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuVGVtcGxhdGVSZW5kZXJlcixcbiAgICAgICAgSFRNTFRvb2x0aXA6IEhUTUxUb29sdGlwLFxuICAgICAgICBTdWdnZXN0aW9uRWRpdG9yOiBTdWdnZXN0aW9uRWRpdG9yLFxuICAgICAgfSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgLi4uZGVlcFBhcnNlZE9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGRvY3VtZW50OiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgICAgIHdpbmRvdzogZ3dfZ2V0V2luZG93KCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH1cblxuICBpZiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGZpbmFsT3B0aW9ucy5jb250ZXh0Lmhhc093blByb3BlcnR5KCduYXZpZ2F0ZVRvTmV4dENlbGwnKSAmJlxuICAgIGZpbmFsT3B0aW9ucy5jb250ZXh0Lm5hdmlnYXRlVG9OZXh0Q2VsbFxuICApIHtcbiAgICBmaW5hbE9wdGlvbnMubmF2aWdhdGVUb05leHRDZWxsID0gcGFyYW1zID0+IHtcbiAgICAgIHJldHVybiBnd19uYXZpZ2F0ZVRvTmV4dFJvdyhpZCwgcGFyYW1zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChnZXREYXRhUGF0aFRlbXBsYXRlICYmIGZpbmFsT3B0aW9ucy50cmVlRGF0YSkge1xuICAgIGNvbnN0IGdldERhdGFQYXRoVGVtcGxhdGVDb21wbGllZCA9IHRlbXBsYXRlKGdldERhdGFQYXRoVGVtcGxhdGUpXG4gICAgZmluYWxPcHRpb25zLmdldERhdGFQYXRoID0gZGF0YSA9PlxuICAgICAgZ2V0RGF0YVBhdGhUZW1wbGF0ZUNvbXBsaWVkKHsgZGF0YTogZGF0YSB9KVxuICB9XG5cbiAgLy8gZXh0ZW5kIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZmluYWxPcHRpb25zLmNvbHVtbkRlZnMpXG5cbiAgcmV0dXJuIGZpbmFsT3B0aW9uc1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGVGcm9tRXZlbnQsIGd3X3NlbmRFdmVudCB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRDb250ZXh0TWVudShncmlkSWQsIHBhcmFtcykge1xuICBjb25zdCBidWlsZENvbnRleHRNZW51QWN0aW9uID0gKHBhcmFtcywgaWQpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChwYXJhbXMpXG4gICAgICBjb25zdCBjb2xJZCA9IHBhcmFtcy5jb2x1bW4uY29sSWRcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zLnZhbHVlXG5cbiAgICAgIGd3X3NlbmRFdmVudChcbiAgICAgICAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdndy5jb250ZXh0bWVudScsXG4gICAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7IHI6IG5vZGUsIGM6IGNvbElkLCB2OiB2YWx1ZSwgaTogaWQgfSksXG4gICAgICAgIH0sXG4gICAgICAgIGlkXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VNZW51ID0gbWVudSA9PiB7XG4gICAgbWVudS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaXRlbVsnYWN0aW9uJ10gPSBidWlsZENvbnRleHRNZW51QWN0aW9uKHBhcmFtcywgaXRlbS5pZClcblxuICAgICAgaWYgKGl0ZW1bJ2Nzc0NsYXNzZXMnXSAmJiAhQXJyYXkuaXNBcnJheShpdGVtWydjc3NDbGFzc2VzJ10pKSB7XG4gICAgICAgIGl0ZW1bJ2Nzc0NsYXNzZXMnXSA9IGl0ZW1bJ2Nzc0NsYXNzZXMnXS5zcGxpdCgnICcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWydzdWJNZW51J10pIHtcbiAgICAgICAgaXRlbVsnc3ViTWVudSddID0gcGFyc2VNZW51KGl0ZW1bJ3N1Yk1lbnUnXSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG1lbnVcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1lbnUoZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuY29udGV4dC5jb250ZXh0TWVudSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25DZWxsQ2xpY2tFdmVudCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG59IGZyb20gJy4vc2VsZWN0aW9ucydcblxuaW1wb3J0IHsgZ3dfb25DZWxsRWRpdGluZ0V2ZW50LCBnd19vblJvd0VkaXRpbmdFdmVudCB9IGZyb20gJy4vZWRpdGluZydcblxuaW1wb3J0IHsgZ3dfb25SZWFkeUV2ZW50IH0gZnJvbSAnLi9yZWFkeSdcblxuaW1wb3J0IHsgZ3dfZGVib3VuY2UgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uQ2VsbENsaWNrRXZlbnQsXG4gIGd3X29uQ2VsbEVkaXRpbmdFdmVudCxcbiAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQsXG4gIGd3X29uUmVhZHlFdmVudCxcbiAgZ3dfZGVib3VuY2UsXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCwgZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19lc2NhcGUsIGd3X2dldEdyaWQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgR1dfRVZFTlRfUk9XX0NMSUNLLFxuICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLLFxuICBHV19FVkVOVF9ST1dfU0VMRUNULFxuICBHV19FVkVOVF9DRUxMX0NMSUNLLFxuICBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyxcbiAgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAgPSB7XG4gIGNlbGxDbGlja2VkOiBHV19FVkVOVF9DRUxMX0NMSUNLLFxuICBjZWxsRG91YmxlQ2xpY2tlZDogR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0ssXG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJvd0RvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgc2VuZCBhIGJiaiBldmVudCB3aXRoIGBHV19OT0RFYCBhcyBwYXlsb2FkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGUgVGhlIGV2ZW50J3MgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dEb3VibGVDbGlja2VkXG4gKiBAZmlyZXMgZ3cucm93RG91YmxlQ2xpY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUm93RG91YmxlQ2xpY2tlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuXG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yb3dEb3VibGVDbGljaycsXG4gICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgazogZ3dfZ2V0R3JpZChjb250ZXh0LmlkKS5rZXlzLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLXG4gIClcbn1cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93Q2xpY2tlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93Q2xpY2tlZFxuICogQGZpcmVzIGd3LnJvd0NsaWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0NsaWNrZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcblxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucm93Q2xpY2snLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGs6IGd3X2dldEdyaWQoY29udGV4dC5pZCkua2V5cyxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX0NMSUNLXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBzZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zZWxlY3Rpb25DaGFuZ2VkXG4gKiBAZmlyZXMgZ3cucm93U2VsZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblNlbGVjdGlvbkNoYW5nZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd1NlbGVjdCcsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX1NFTEVDVFxuICApXG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcmFuZ2VTZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJhbmdlU2VsZWN0aW9uQ2hhbmdlZFxuICogQGZpcmVzIGd3LnJhbmdlU2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucmFuZ2VTZWxlY3Rpb24nLFxuICAgICAgZGV0YWlsOiAnJyxcbiAgICB9LFxuICAgIEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VEXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBjZWxsQ2xpY2tFdmVudGAgJiBgY2VsbERvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsQ2xpY2tFdmVudFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxEb3VibGVDbGlja2VkXG4gKlxuICogQGZpcmVzIGd3LmNlbGxDbGlja2VkXG4gKiBAZmlyZXMgZ3cuY2VsbERvdWJsZUNsaWNrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uQ2VsbENsaWNrRXZlbnQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgY29uc3QgaWQgPSBjb250ZXh0LmlkXG4gIGNvbnN0IHBhcnNlZCA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChlKVxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBjb25zdCB0eXBlID0gZS50eXBlXG4gICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7ZS50eXBlfWAsXG4gICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHI6IHBhcnNlZCwgLy8gcm93XG4gICAgICAgICAgdjogZ3dfZXNjYXBlKGUudmFsdWUpLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBnd19lc2NhcGUoZS52YWx1ZSksIC8vIG9kbCB2YWx1ZVxuICAgICAgICAgIGM6IGUuY29sdW1uLmNvbElkLCAvLyBjb2x1bW5zXG4gICAgICAgICAgazogZ3dfZ2V0R3JpZChpZCkua2V5cyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgQ0VMTF9DTElDS0lOR19FVkVOVFNfTUFQW3R5cGVdXG4gICAgKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50LCBnd19wYXJzZU5vZGVGcm9tRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2VzY2FwZSwgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCxcbiAgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUT1BQRUQsXG4gIEdXX0VWRU5UX0NFTExfVkFMVUVfQ0hBTkdFRCxcbiAgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCxcbiAgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RPUFBFRCxcbiAgR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBDRUxMX0VESVRJTkdfRVZFTlRTX01BUCA9IHtcbiAgY2VsbEVkaXRpbmdTdGFydGVkOiBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCxcbiAgY2VsbEVkaXRpbmdTdG9wcGVkOiBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCxcbiAgY2VsbFZhbHVlQ2hhbmdlZDogR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VELFxufVxuXG5jb25zdCBST1dfRURJVElOR19FVkVOVFNfTUFQID0ge1xuICByb3dFZGl0aW5nU3RhcnRlZDogR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCxcbiAgcm93RWRpdGluZ1N0b3BwZWQ6IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQsXG4gIHJvd1ZhbHVlQ2hhbmdlZDogR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQsXG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYGNlbGxFZGl0aW5nU3RhcnRlZGAgLCBgY2VsbEVkaXRpbmdTdG9wcGVkYCBhbmRcbiAqIGBjZWxsVmFsdWVDaGFuZ2VkYCBldmVudHNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxFZGl0aW5nU3RhcnRlZFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxFZGl0aW5nU3RvcHBlZFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxWYWx1ZUNoYW5nZWRcbiAqXG4gKiBAZmlyZXMgZ3cuY2VsbEVkaXRpbmdTdGFydGVkXG4gKiBAZmlyZXMgZ3cuY2VsbEVkaXRpbmdTdG9wcGVkXG4gKiBAZmlyZXMgZ3cuY2VsbFZhbHVlQ2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKSB7XG4gIGNvbnN0IHZhbHVlID0gZS5oYXNPd25Qcm9wZXJ0eSgnbmV3VmFsdWUnKVxuICAgID8gZ3dfZXNjYXBlKGUubmV3VmFsdWUpXG4gICAgOiBnd19lc2NhcGUoZS52YWx1ZSlcbiAgY29uc3Qgb2xkVmFsdWUgPSBlLmhhc093blByb3BlcnR5KCdvbGRWYWx1ZScpXG4gICAgPyBnd19lc2NhcGUoZS5vbGRWYWx1ZSlcbiAgICA6IGUuaGFzT3duUHJvcGVydHkoJ25ld1ZhbHVlJylcbiAgICA/IGd3X2VzY2FwZShlLm5ld1ZhbHVlKVxuICAgIDogZ3dfZXNjYXBlKGUudmFsdWUpXG5cbiAgaWYgKHZhbHVlID09IG9sZFZhbHVlICYmIGUudHlwZSA9PT0gJ2NlbGxWYWx1ZUNoYW5nZWQnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSlcbiAgY29uc3QgdHlwZSA9IGUudHlwZVxuICBjb25zdCBjb2xJZCA9IGUuY29sdW1uLmNvbElkXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGd3X3NlbmRFdmVudChcbiAgICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7dHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICByOiB7IC4uLnBhcnNlZCwgLi4ueyBjcjogZS5kYXRhIH0gfSwgLy8gcm93ICh3ZSBhbHdheXMgaW5jbHVkZSB0aGUgY2xpZW50IHJvdyBkYXRhKVxuICAgICAgICAgIHY6IHZhbHVlLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBvbGRWYWx1ZSwgLy8gb2xkIHZhbHVlXG4gICAgICAgICAgYzogY29sSWQsIC8vIGNvbHVtblxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBDRUxMX0VESVRJTkdfRVZFTlRTX01BUFt0eXBlXVxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGByb3dFZGl0aW5nU3RhcnRlZGAgLCBgcm93RWRpdGluZ1N0b3BwZWRgIGFuZCBgcm93VmFsdWVDaGFuZ2VkYCBldmVudHNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0VkaXRpbmdTdGFydGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RWRpdGluZ1N0b3BwZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dWYWx1ZUNoYW5nZWRcbiAqXG4gKiBAZmlyZXMgZ3cucm93RWRpdGluZ1N0YXJ0ZWRcbiAqIEBmaXJlcyBndy5yb3dFZGl0aW5nU3RvcHBlZFxuICogQGZpcmVzIGd3LnJvd1ZhbHVlQ2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25Sb3dFZGl0aW5nRXZlbnQoaWQsIGUpIHtcbiAgY29uc3QgcGFyc2VkID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IHR5cGUgPSBlLnR5cGVcbiAgICBnd19zZW5kRXZlbnQoXG4gICAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke2UudHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHsgLi4ucGFyc2VkLCAuLi57IGNyOiBlLmRhdGEgfSB9KSwgLy8gcm93ICh3ZSBhbHdheXMgaW5jbHVkZSB0aGUgY2xpZW50IHJvdyBkYXRhKVxuICAgICAgfSxcbiAgICAgIFJPV19FRElUSU5HX0VWRU5UU19NQVBbdHlwZV1cbiAgICApXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZGVib3VuY2UgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X29uU3RhdGVDaGFuZ2VkIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IGd3X29uS2V5ZG93biB9IGZyb20gJy4va2V5Ym9hcmQnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBPbiBSZWFkeSBFdmVudFxuICpcbiAqIFRoZSBtZXRob2Qgd2lsbCBpZ25vcmUgZmlyc3QgcmVhZHkgZXZlbnQgYW5kIHRoZW4gcmVnaXN0ZXIgYSBkZWJvdW5jZWQgc3RhdGVcbiAqIGNhbGxiYWNrIHRvIHNlbmQgc3RhdGUgZXZlbnRzIHRvIEJCalxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25SZWFkeUV2ZW50KGlkLCBfZSkge1xuICBjb25zdCBncmlkID0gZ3dfZ2V0R3JpZChpZClcblxuICAvLyByZWdpc3RlciBzdGF0ZSBkZWJvdW5jZSBtb25pdG9yXG4gIGNvbnN0IHN0YXRlRGVib3VuY2UgPSBnd19kZWJvdW5jZShjaGFuZ2VFdmVudCA9PiB7XG4gICAgZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIGNoYW5nZUV2ZW50KVxuICB9LCA1MDApXG5cbiAgO1tcbiAgICAnc29ydENoYW5nZWQnLFxuICAgICdmaWx0ZXJDaGFuZ2VkJyxcbiAgICAnY29sdW1uVmlzaWJsZScsXG4gICAgJ2NvbHVtblBpbm5lZCcsXG4gICAgJ2NvbHVtblJlc2l6ZWQnLFxuICAgICdjb2x1bW5Nb3ZlZCcsXG4gICAgJ25ld0NvbHVtbnNMb2FkZWQnLFxuICAgICdncmlkQ29sdW1uc0NoYW5nZWQnLFxuICAgICdkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ3ZpcnR1YWxDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ2NvbHVtbkV2ZXJ5dGhpbmdDaGFuZ2VkJyxcbiAgICAvLydncmlkU2l6ZUNoYW5nZWQnLFxuICAgICdleHBhbmRPckNvbGxhcHNlQWxsJyxcbiAgICAvLyd0b29sUGFuZWxWaXNpYmxlQ2hhbmdlZCdcbiAgXS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICBncmlkLm9wdGlvbnMuYXBpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHN0YXRlRGVib3VuY2UpXG4gIH0pXG5cbiAgLy8gY29sbGVjdCBrZXkgZG93bnMgaW5mb3JtYXRpb24gdG8gYmUgcmVwb3J0ZWQgd2l0aCBvdGhlciBldmVudHNcbiAgZ3JpZC5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25FdmVudCA9PiB7XG4gICAgZ3JpZC5rZXlzID0ge1xuICAgICAgYzoga2V5ZG93bkV2ZW50LmtleSxcbiAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgIGFrOiBrZXlkb3duRXZlbnQuYWx0S2V5LFxuICAgICAgc2s6IGtleWRvd25FdmVudC5zaGlmdEtleSxcbiAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICB9XG4gIH0pXG5cbiAgLy8gY2xlYXIgY29sbGVjdCBrZXlkb3duIGluZm9ybWF0aW9uXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2tleXVwJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBnd19kZWJvdW5jZShfZSA9PiB7XG4gICAgICBncmlkLmtleXMgPSBudWxsXG4gICAgfSwgMjUwKVxuICApXG5cbiAgLy8gcmVnaXN0ZXIga2V5Ym9hcmQgZGVib3VuY2UgbW9uaXRvclxuXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2tleWRvd24nLFxuICAgIGd3X2RlYm91bmNlKGtleWRvd25FdmVudCA9PiB7XG4gICAgICBnd19vbktleWRvd24oaWQsIGtleWRvd25FdmVudClcbiAgICB9LCA1MDApXG4gIClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHN0YXRlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zdGF0ZUNoYW5nZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RvcHBlZFxuICpcbiAqIEBmaXJlcyBndy5zdGF0ZUNoYW5nZWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIF9lKSB7XG4gIGd3X3NlbmRFdmVudChcbiAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnN0YXRlQ2hhbmdlZCcsXG4gICAgICBkZXRhaWw6IFtdLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0VcbiAgKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0tFWVBSRVNTIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBDb21wb3NlIGEgbW9kZWwgb2YgdGhlIGtleWRvd24gZXZlbnQgYW5kIHNlbmQgaXQgdG8gQkJqXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0V2ZW50fSBrZXlkb3duRXZlbnQga2V5ZG93biBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25LZXlkb3duKGlkLCBrZXlkb3duRXZlbnQpIHtcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiBgZ3cua2V5cHJlc3NgLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGM6IGtleWRvd25FdmVudC5rZXksXG4gICAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgICAgYWs6IGtleWRvd25FdmVudC5hbHRLZXksXG4gICAgICAgIHNrOiBrZXlkb3duRXZlbnQuc2hpZnRLZXksXG4gICAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfS0VZUFJFU1NcbiAgKVxufVxuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGV4dGVuZFdpdGhcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAqXG4gKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25JbldpdGg7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weU9iamVjdDtcbiIsImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduVmFsdWU7XG4iLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VmFsdWU7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsImltcG9ydCBiYXNlU2V0VG9TdHJpbmcgZnJvbSAnLi9fYmFzZVNldFRvU3RyaW5nLmpzJztcbmltcG9ydCBzaG9ydE91dCBmcm9tICcuL19zaG9ydE91dC5qcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvU3RyaW5nO1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hvcnRPdXQ7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAqIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzXG4gKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIChlcShvYmpWYWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbURlZmF1bHRzQXNzaWduSW47XG4iLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsImltcG9ydCBlc2NhcGUgZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHJlRXNjYXBlIGZyb20gJy4vX3JlRXNjYXBlLmpzJztcbmltcG9ydCByZUV2YWx1YXRlIGZyb20gJy4vX3JlRXZhbHVhdGUuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVtcGxhdGVTZXR0aW5ncztcbiIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcbiIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5T2Y7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFc2NhcGU7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUV2YWx1YXRlO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIEFuIGltcHJvdmVkIHRvb2x0aXAgY29tcG9uZW50IHdoaWNoIHN1cHBvcnRzIEhUTUwgYW5kIGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aCBHVUkgYW5kIEJVSVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlclxuICovXG5jbGFzcyBIVE1MVG9vbHRpcCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIHRoZSB0b29sdGlwIGNvbXBvbmVudCBwYXJhbXNcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgZUd1aSA9ICh0aGlzLmVHdWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICBjb25zdCB0b29sdGlwVmFsdWVHZXR0ZXIgPSBwYXJhbXMuY29sRGVmLnRvb2x0aXBWYWx1ZUdldHRlclxuICAgIGNvbnN0IGlzSGVhZGVyID0gcGFyYW1zLnJvd0luZGV4ID09PSB1bmRlZmluZWRcbiAgICBjb25zdCBpc0dyb3VwZWRIZWFkZXIgPSBpc0hlYWRlciAmJiAhIXBhcmFtcy5jb2xEZWYuY2hpbGRyZW5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAhaXNIZWFkZXIgJiYgIWlzR3JvdXBlZEhlYWRlclxuICAgICAgICA/IHBhcmFtcy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChwYXJhbXMucm93SW5kZXgpLmRhdGFcbiAgICAgICAgOiBudWxsXG4gICAgY29uc3QgdGhlbWUgPSBwYXJhbXMuYXBpLmdyaWRDb3JlLmVHcmlkRGl2LmNsYXNzTmFtZS5lbmRzV2l0aCgnZGFyaycpXG4gICAgICA/ICdndy10b29sdGlwLWRhcmsnXG4gICAgICA6ICdndy10b29sdGlwLWxpZ2h0J1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZCA9IHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkXG4gICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkKVxuICAgICAgICA/IGRhdGFbcGFyYW1zLmNvbERlZi50b29sdGlwRmllbGRdXG4gICAgICAgIDogbnVsbFxuICAgICAgOiBudWxsXG5cbiAgICBjb25zdCBwYXNzZWRQYXJhbXMgPSB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi57IGRhdGEgfSxcbiAgICAgIC4uLnsgaXNIZWFkZXIsIGlzR3JvdXBlZEhlYWRlciwgdG9vbHRpcEZpZWxkIH0sXG4gICAgfVxuXG4gICAgZUd1aS5jbGFzc0xpc3QuYWRkKCdndy10b29sdGlwJywgdGhlbWUpXG4gICAgZUd1aS5pbm5lckhUTUwgPVxuICAgICAgaXNIZWFkZXIgfHwgaXNHcm91cGVkSGVhZGVyXG4gICAgICAgID8gcGFyYW1zLnZhbHVlXG4gICAgICAgIDogdG9vbHRpcEZpZWxkXG4gICAgICAgID8gdG9vbHRpcEZpZWxkXG4gICAgICAgIDogdG9vbHRpcFZhbHVlR2V0dGVyXG4gICAgICAgID8gdG9vbHRpcFZhbHVlR2V0dGVyKHBhc3NlZFBhcmFtcylcbiAgICAgICAgOiBwYXJhbXMudmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGd1aSBJbnN0YW5jZVxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5lR3VpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSFRNTFRvb2x0aXBcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IGF1dG9jb21wbGV0ZSBmcm9tICdhdXRvY29tcGxldGVyJ1xuaW1wb3J0IHRlbXBsYXRlIGZyb20gJ2xvZGFzaC1lcy90ZW1wbGF0ZSdcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG4vKipcbiAqIEFuIGF1dG9jb21wbGV0ZSBjZWxsIGVkaXRvciB3cml0dGVuIHNwZWNpZmljYWxseSB0byBCQmpHcmlkRXhXaWRnZXRcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXJcbiAqL1xuY2xhc3MgU3VnZ2VzdGlvbkVkaXRvciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IHBhcmFtcy50ZXh0UGF0dGVybiB8fCBudWxsXG4gICAgY29uc3QgcmVxdWlyZWQgPSBwYXJhbXMudGV4dFJlcXVpcmVkIHx8IGZhbHNlXG4gICAgY29uc3QgdGl0bGUgPSBwYXJhbXMudGV4dFRpdGxlIHx8IG51bGxcbiAgICBjb25zdCBkZWJvdW5jZVdhaXRNcyA9IHBhcmFtcy5kZWJvdW5jZVdhaXRNcyB8fCAyNTBcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgY29uc3Qga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2F1dG9jb21wbGV0ZUlucHV0V3JhcHBlciBhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAnMCdcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXRleHQtZmllbGQtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuXG4gICAgLy8gaW5wdXRcbiAgICB0aGlzLl9pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPVxuICAgICAgJ2F1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCAmJiB0aXRsZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IHRpdGxlXG4gICAgfVxuXG4gICAgdGhpcy5fb25DaGFuZ2UgPSB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuXG4gICAgLy8gc2V0dXAgdGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnRcbiAgICB0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUgPSB0aGlzLl9wYXJhbXMuaXRlbVRlbXBsYXRlXG4gICAgICA/IHRlbXBsYXRlKHRoaXMuX3BhcmFtcy5pdGVtVGVtcGxhdGUpXG4gICAgICA6ICcnXG4gICAgdGhpcy5fcmVuZGVyR3JvdXBUZW1wbGF0ZSA9IHRoaXMuX3BhcmFtcy5ncm91cFRlbXBsYXRlXG4gICAgICA/IHRlbXBsYXRlKHRoaXMuX3BhcmFtcy5ncm91cFRlbXBsYXRlKVxuICAgICAgOiAnJ1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IGF1dG9jb21wbGV0ZSh7XG4gICAgICBpbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICBkZWJvdW5jZVdhaXRNczogZGVib3VuY2VXYWl0TXMsXG4gICAgICAvLyB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQgLCB0aGUgbGlzdCB3b250IGJlIGNsb3NlZCBpbiBHVUlcbiAgICAgIHByZXZlbnRTdWJtaXQ6IHRydWUsXG4gICAgICBmZXRjaDogdGhpcy5fb25BdXRvY29tcGxldGVGZXRjaC5iaW5kKHRoaXMpLFxuICAgICAgb25TZWxlY3Q6IHRoaXMuX29uQXV0b2NvbXBsZXRlU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICByZW5kZXJHcm91cDogdGhpcy5fb25BdXRvY29tcGxldGVSZW5kZXJHcm91cC5iaW5kKHRoaXMpLFxuICAgICAgcmVuZGVyOiB0aGlzLl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0uYmluZCh0aGlzKSxcbiAgICAgIGN1c3RvbWl6ZTogdGhpcy5fb25BdXRvY29tcGxldGVDdXN0b21pemUuYmluZCh0aGlzKSxcbiAgICAgIGVtcHR5TXNnOiB0aGlzLl9wYXJhbXMuZW1wdHlNZXNzYWdlIHx8IG51bGwsXG4gICAgICBtaW5MZW5ndGg6IHRoaXMuX3BhcmFtcy5taW5MZW5ndGggfHwgMixcbiAgICAgIHNob3dPbkZvY3VzOiB0aGlzLl9wYXJhbXMuc2hvd09uRm9jdXMgfHwgZmFsc2UsXG4gICAgICBjbGFzc05hbWU6IHBhcmFtcy5hcGkuZ3JpZENvcmUuZUdyaWREaXYuY2xhc3NOYW1lLmVuZHNXaXRoKCdkYXJrJylcbiAgICAgICAgPyAnZGFyaydcbiAgICAgICAgOiAnbGlnaHQnLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBET00gZWxlbWVudCBvZiB0aGUgY29tcG9uZW50LCB0aGlzIGlzIHdoYXQgdGhlIGdyaWQgcHV0cyBpbnRvIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dC52YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIHdoZW4gZWRpdGluZyBpcyBmaW5pc2hlZCAoZWcgaWYgZW50ZXIgaXMgcHJlc3NlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHJlc3VsdCBvZiB0aGUgZWRpdCB3aWxsIGJlIGlnbm9yZWQuIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNDYW5jZWxBZnRlckVuZCgpIHtcbiAgICBjb25zdCBhbGxvd0N1c3RvbVZhbHVlcyA9IHRoaXMuX3BhcmFtcy5hbGxvd0N1c3RvbVZhbHVlcyB8fCBmYWxzZVxuICAgIGxldCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChpc1ZhbGlkICYmIGFsbG93Q3VzdG9tVmFsdWVzID09PSBmYWxzZSAmJiB0aGlzLl9sYXN0RmV0Y2hlZERhdGEpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLl9sYXN0RmV0Y2hlZERhdGEuZmlsdGVyKFxuICAgICAgICB4ID0+IHgudmFsdWUgPT09IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgICApXG4gICAgICBpc1ZhbGlkID0gZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDFcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzVmFsaWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKlxuICAgKiBDbGVhciB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMgYW5kIGRlc3Ryb3kgdGhlIGF1dG9jb21wbGV0ZVxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZS5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB0byBwcmVwYXJlIHN1Z2dlc3Rpb25zIGFuZCB0aGVuIHBhc3MgdGhlbSB0byBhdXRvY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IGluIHRoZSBpbnB1dCBmaWVsZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHN1Z2dlc3Rpb25zIGFyZSBwcmVwYXJlZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gZmFsc2Ugd2hlbiB0aGUgcmVxdWVzdCBpcyBpZ25vcmVkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfb25BdXRvY29tcGxldGVGZXRjaCh0ZXh0LCB1cGRhdGUpIHtcbiAgICBjb25zdCBzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCA9XG4gICAgICB0aGlzLl9wYXJhbXMuc3VwcHJlc3NTdWdnZXN0aW9uT25JbnZhbGlkSW5wdXQgfHwgZmFsc2VcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCAmJiAhaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9wYXJhbXMuZXZlbnRJZFxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihpZCwgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fbGFzdEZldGNoZWREYXRhID0gZXZlbnQuZGV0YWlsXG4gICAgICB1cGRhdGUoZXZlbnQuZGV0YWlsKVxuICAgIH0pXG5cbiAgICB3aW5kb3cuYmFzaXNEaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMuX3BhcmFtcy5lR3JpZENlbGwsIHtcbiAgICAgIHR5cGU6ICdndy5zdWdnZXN0aW9uJyxcbiAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgY29sdW1uOiB0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkLFxuICAgICAgICByb3c6IGd3X3BhcnNlTm9kZShcbiAgICAgICAgICB0aGlzLl9wYXJhbXMubm9kZSxcbiAgICAgICAgICB0aGlzLl9wYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHVzZXIgY2hvb3NlIGFuIGl0ZW0gaW4gYXV0b2NvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBUaGUgc2VsZWN0ZWQgaXRlbVxuICAgKi9cbiAgX29uQXV0b2NvbXBsZXRlU2VsZWN0KGl0ZW0pIHtcbiAgICB0aGlzLl9pbnB1dC52YWx1ZSA9IGl0ZW0udmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIG9mIGF1dG9jb21wbGV0ZSBpdGVtcy5cbiAgICpcbiAgICogSXQgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggc3VnZ2VzdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBzdWdnZXN0aW9uIG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IGlucHV0IGZpZWxkIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0oaXRlbSwgY3VycmVudFZhbHVlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBkaXYuY2xhc3NOYW1lID0gJ3N1Z2dlc3Rpb24taXRlbSdcblxuICAgIGlmICh0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUpIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUoe1xuICAgICAgICBpdGVtLFxuICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaXRlbS5sYWJlbFxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIG9mIGF1dG9jb21wbGV0ZSBncm91cHMuXG4gICAqXG4gICAqIEl0IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBncm91cE5hbWUgVGhlIGdyb3VwIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IGN1cnJlbnRWYWx1ZSBUaGUgY3VycmVudCBpbnB1dCBmaWVsZCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cChncm91cE5hbWUsIGN1cnJlbnRWYWx1ZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgZGl2LmNsYXNzTmFtZSA9ICdzdWdnZXN0aW9uLWdyb3VwJ1xuXG4gICAgaWYgKHRoaXMuX3JlbmRlckdyb3VwVGVtcGxhdGUpIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLl9yZW5kZXJHcm91cFRlbXBsYXRlKHsgZ3JvdXBOYW1lLCBjdXJyZW50VmFsdWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZGl2LmlubmVySFRNTCA9IGdyb3VwTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rIG9uIHRoZSBhdXRvY29tcGxldGUgY29udGFpbmVyIHJlbmRlciBhbmQgY2hhbmdlIHRoZSB3aWR0aCBhbmQgdGhlXG4gICAqIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRSZWN0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWF4SGVpZ2h0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQXV0b2NvbXBsZXRlQ3VzdG9taXplKGlucHV0LCBpbnB1dFJlY3QsIGNvbnRhaW5lciwgbWF4SGVpZ2h0KSB7XG4gICAgaWYgKHRoaXMuX3BhcmFtcy53aWR0aCkge1xuICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7dGhpcy5fcGFyYW1zLndpZHRofXB4YFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXJhbXMuaGVpZ2h0KSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5fcGFyYW1zLmhlaWdodH1weGBcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byB0aGUgaW5wdXQgY2hhbmdlcyBhbmQgdmFsaWRhdGUgaXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gVGhlIGV2ZW50IG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogRG8gdmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2F1dG9jb21wbGV0ZS1pbnB1dC1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdhdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2F1dG9jb21wbGV0ZS1pbnB1dC1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdhdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdWdnZXN0aW9uRWRpdG9yXG4iLCIgLypcclxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmFhZGVuL2F1dG9jb21wbGV0ZVxyXG4gICogQ29weXJpZ2h0IChjKSAyMDE2IERlbnlzIEtyYXNub3NoY2hva1xyXG4gICogTUlUIExpY2Vuc2VcclxuICAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gRXZlbnRUcmlnZ2VyIHtcclxuICAgIEtleWJvYXJkID0gMCxcclxuICAgIEZvY3VzID0gMVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZUl0ZW0ge1xyXG4gICAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTZXR0aW5nczxUIGV4dGVuZHMgQXV0b2NvbXBsZXRlSXRlbT4ge1xyXG4gICAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICByZW5kZXI/OiAoaXRlbTogVCwgY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgcmVuZGVyR3JvdXA/OiAobmFtZTogc3RyaW5nLCBjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgICBlbXB0eU1zZz86IHN0cmluZztcclxuICAgIG9uU2VsZWN0OiAoaXRlbTogVCwgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpID0+IHZvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYXV0b2NvbXBsZXRlIG9uIGZvY3VzIGV2ZW50LiBGb2N1cyBldmVudCB3aWxsIGlnbm9yZSB0aGUgYG1pbkxlbmd0aGAgcHJvcGVydHkgYW5kIHdpbGwgYWx3YXlzIGNhbGwgYGZldGNoYC5cclxuICAgICAqL1xyXG4gICAgc2hvd09uRm9jdXM/OiBib29sZWFuO1xyXG4gICAgZmV0Y2g6ICh0ZXh0OiBzdHJpbmcsIHVwZGF0ZTogKGl0ZW1zOiBUW10gfCBmYWxzZSkgPT4gdm9pZCwgdHJpZ2dlcjogRXZlbnRUcmlnZ2VyKSA9PiB2b2lkO1xyXG4gICAgZGVib3VuY2VXYWl0TXM/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZvciBhZGRpdGlvbmFsIGF1dG9jb21wbGV0ZSBjdXN0b21pemF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IC0gaW5wdXQgYm94IGFzc29jaWF0ZWQgd2l0aCBhdXRvY29tcGxldGVcclxuICAgICAqIEBwYXJhbSB7Q2xpZW50UmVjdCB8IERPTVJlY3R9IGlucHV0UmVjdCAtIHNpemUgb2YgdGhlIGlucHV0IGJveCBhbmQgaXRzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydFxyXG4gICAgICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudH0gY29udGFpbmVyIC0gY29udGFpbmVyIHdpdGggc3VnZ2VzdGlvbnNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhIZWlnaHQgLSBtYXggaGVpZ2h0IHRoYXQgY2FuIGJlIHVzZWQgYnkgYXV0b2NvbXBsZXRlXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbWl6ZT86IChpbnB1dDogSFRNTElucHV0RWxlbWVudCwgaW5wdXRSZWN0OiBDbGllbnRSZWN0IHwgRE9NUmVjdCwgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCwgbWF4SGVpZ2h0OiBudW1iZXIpID0+IHZvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIFByZXZlbnRzIGF1dG9tYXRpYyBmb3JtIHN1Ym1pdCB3aGVuIEVOVEVSIGlzIHByZXNzZWRcclxuICAgICAqL1xyXG4gICAgcHJldmVudFN1Ym1pdD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlUmVzdWx0IHtcclxuICAgIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmNvbnN0IGVudW0gS2V5cyB7XHJcbiAgICBFbnRlciA9IDEzLFxyXG4gICAgRXNjID0gMjcsXHJcbiAgICBVcCA9IDM4LFxyXG4gICAgRG93biA9IDQwLFxyXG4gICAgTGVmdCA9IDM3LFxyXG4gICAgUmlnaHQgPSAzOSxcclxuICAgIFNoaWZ0ID0gMTYsXHJcbiAgICBDdHJsID0gMTcsXHJcbiAgICBBbHQgPSAxOCxcclxuICAgIENhcHNMb2NrID0gMjAsXHJcbiAgICBXaW5kb3dzS2V5ID0gOTEsXHJcbiAgICBUYWIgPSA5LFxyXG4gICAgRjEgPSAxMTIsXHJcbiAgICBGMTIgPSAxMjNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2NvbXBsZXRlPFQgZXh0ZW5kcyBBdXRvY29tcGxldGVJdGVtPihzZXR0aW5nczogQXV0b2NvbXBsZXRlU2V0dGluZ3M8VD4pOiBBdXRvY29tcGxldGVSZXN1bHQge1xyXG5cclxuICAgIC8vIGp1c3QgYW4gYWxpYXMgdG8gbWluaW1pemUgSlMgZmlsZSBzaXplXHJcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudDtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IGNvbnRhaW5lci5zdHlsZTtcclxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICBjb25zdCBtb2JpbGVGaXJlZm94ID0gdXNlckFnZW50LmluZGV4T2YoXCJGaXJlZm94XCIpICE9PSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZihcIk1vYmlsZVwiKSAhPT0gLTE7XHJcbiAgICBjb25zdCBkZWJvdW5jZVdhaXRNcyA9IHNldHRpbmdzLmRlYm91bmNlV2FpdE1zIHx8IDA7XHJcbiAgICBjb25zdCBwcmV2ZW50U3VibWl0ID0gc2V0dGluZ3MucHJldmVudFN1Ym1pdCB8fCBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gJ2tleXVwJyBldmVudCB3aWxsIG5vdCBiZSBmaXJlZCBvbiBNb2JpbGUgRmlyZWZveCwgc28gd2UgaGF2ZSB0byB1c2UgJ2lucHV0JyBldmVudCBpbnN0ZWFkXHJcbiAgICBjb25zdCBrZXlVcEV2ZW50TmFtZSA9IG1vYmlsZUZpcmVmb3ggPyBcImlucHV0XCIgOiBcImtleXVwXCI7XHJcbiAgICBcclxuICAgIGxldCBpdGVtczogVFtdID0gW107XHJcbiAgICBsZXQgaW5wdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICBsZXQgbWluTGVuID0gMjtcclxuICAgIGNvbnN0IHNob3dPbkZvY3VzID0gc2V0dGluZ3Muc2hvd09uRm9jdXM7XHJcbiAgICBsZXQgc2VsZWN0ZWQ6IFQgfCB1bmRlZmluZWQ7XHJcbiAgICBsZXQga2V5cHJlc3NDb3VudGVyID0gMDtcclxuICAgIGxldCBkZWJvdW5jZVRpbWVyIDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChzZXR0aW5ncy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIG1pbkxlbiA9IHNldHRpbmdzLm1pbkxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNldHRpbmdzLmlucHV0KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXQgdW5kZWZpbmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gc2V0dGluZ3MuaW5wdXQ7XHJcblxyXG4gICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiYXV0b2NvbXBsZXRlIFwiICsgKHNldHRpbmdzLmNsYXNzTmFtZSB8fCBcIlwiKTtcclxuXHJcbiAgICAvLyBJT1MgaW1wbGVtZW50YXRpb24gZm9yIGZpeGVkIHBvc2l0aW9uaW5nIGhhcyBtYW55IGJ1Z3MsIHNvIHdlIHdpbGwgdXNlIGFic29sdXRlIHBvc2l0aW9uaW5nXHJcbiAgICBjb250YWluZXJTdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCB0aGUgY29udGFpbmVyIGZyb20gRE9NXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGRldGFjaCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGRlYm91bmNpbmcgdGltZXIgaWYgYXNzaWduZWRcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xlYXJEZWJvdW5jZVRpbWVyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBjb250YWluZXIgdG8gRE9NXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGF0dGFjaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lci5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgY29udGFpbmVyIGZvciBhdXRvY29tcGxldGUgaXMgZGlzcGxheWVkXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGNvbnRhaW5lckRpc3BsYXllZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGF1dG9jb21wbGV0ZSBzdGF0ZSBhbmQgaGlkZSBjb250YWluZXJcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gcHJldmVudCB0aGUgdXBkYXRlIGNhbGwgaWYgdGhlcmUgYXJlIHBlbmRpbmcgQUpBWCByZXF1ZXN0c1xyXG4gICAgICAgIGtleXByZXNzQ291bnRlcisrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGl0ZW1zID0gW107XHJcbiAgICAgICAgaW5wdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYXV0b2NvbXBsZXRlIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyRGlzcGxheWVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyU3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgICAgY29udGFpbmVyU3R5bGUud2lkdGggPSBpbnB1dC5vZmZzZXRXaWR0aCArIFwicHhcIjtcclxuXHJcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XHJcbiAgICAgICAgbGV0IGlucHV0UmVjdDogQ2xpZW50UmVjdCB8IERPTVJlY3QgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNhbGMoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY0VsID0gZG9jLmRvY3VtZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGRvYy5ib2R5LmNsaWVudFRvcCB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBjbGllbnRMZWZ0ID0gZG9jRWwuY2xpZW50TGVmdCB8fCBkb2MuYm9keS5jbGllbnRMZWZ0IHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2NFbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsTGVmdDtcclxuXHJcbiAgICAgICAgICAgIGlucHV0UmVjdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBpbnB1dFJlY3QudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0ICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaW5wdXRSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdDtcclxuICAgIFxyXG4gICAgICAgICAgICBjb250YWluZXJTdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xyXG4gICAgXHJcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIChpbnB1dFJlY3QudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAobWF4SGVpZ2h0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUuYm90dG9tID0gXCJcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLm1heEhlaWdodCA9IG1heEhlaWdodCArIFwicHhcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoZSBjYWxjIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB0d2ljZSwgb3RoZXJ3aXNlIHRoZSBjYWxjdWxhdGlvbiBtYXkgYmUgd3Jvbmcgb24gcmVzaXplIGV2ZW50IChjaHJvbWUgYnJvd3NlcilcclxuICAgICAgICBjYWxjKCk7XHJcbiAgICAgICAgY2FsYygpO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3MuY3VzdG9taXplICYmIGlucHV0UmVjdCkge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5jdXN0b21pemUoaW5wdXQsIGlucHV0UmVjdCwgY29udGFpbmVyLCBtYXhIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZHJhdyB0aGUgYXV0b2NvbXBsZXRlIGRpdiBlbGVtZW50IHdpdGggc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gZnJvbSBhdXRvY29tcGxldGUgRE9NIGNvbnRhaW5lclxyXG4gICAgICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZnVuY3Rpb24gZm9yIHJlbmRlcmluZyBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnNcclxuICAgICAgICBsZXQgcmVuZGVyID0gZnVuY3Rpb24oaXRlbTogVCwgY3VycmVudFZhbHVlOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50LnRleHRDb250ZW50ID0gaXRlbS5sYWJlbCB8fCBcIlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbUVsZW1lbnQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2V0dGluZ3MucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHJlbmRlciA9IHNldHRpbmdzLnJlbmRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIHJlbmRlciBhdXRvY29tcGxldGUgZ3JvdXBzXHJcbiAgICAgICAgbGV0IHJlbmRlckdyb3VwID0gZnVuY3Rpb24oZ3JvdXBOYW1lOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogc3RyaW5nKTogSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgICAgICBncm91cERpdi50ZXh0Q29udGVudCA9IGdyb3VwTmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwRGl2O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLnJlbmRlckdyb3VwKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckdyb3VwID0gc2V0dGluZ3MucmVuZGVyR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgbGV0IHByZXZHcm91cCA9IFwiIzk/JFwiO1xyXG5cclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW06IFQpOiB2b2lkIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uZ3JvdXAgJiYgaXRlbS5ncm91cCAhPT0gcHJldkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2R3JvdXAgPSBpdGVtLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBEaXYgPSByZW5kZXJHcm91cChpdGVtLmdyb3VwLCBpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cERpdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRGl2LmNsYXNzTmFtZSArPSBcIiBncm91cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGdyb3VwRGl2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkaXYgPSByZW5kZXIoaXRlbSwgaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChkaXYpIHtcclxuICAgICAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXY6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5vblNlbGVjdChpdGVtLCBpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lICs9IFwiIHNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuZW1wdHlNc2cpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBlbXB0eS5jbGFzc05hbWUgPSBcImVtcHR5XCI7XHJcbiAgICAgICAgICAgICAgICBlbXB0eS50ZXh0Q29udGVudCA9IHNldHRpbmdzLmVtcHR5TXNnO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVtcHR5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dGFjaCgpO1xyXG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgIHVwZGF0ZVNjcm9sbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlmRGlzcGxheWVkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250YWluZXJEaXNwbGF5ZWQoKSkge1xyXG4gICAgICAgICAgICB1cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVzaXplRXZlbnRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHVwZGF0ZUlmRGlzcGxheWVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2Nyb2xsRXZlbnRIYW5kbGVyKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgdXBkYXRlSWZEaXNwbGF5ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGtleXVwRXZlbnRIYW5kbGVyKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2LndoaWNoIHx8IGV2LmtleUNvZGUgfHwgMDtcclxuXHJcbiAgICAgICAgY29uc3QgaWdub3JlID0gW0tleXMuVXAsIEtleXMuRW50ZXIsIEtleXMuRXNjLCBLZXlzLlJpZ2h0LCBLZXlzLkxlZnQsIEtleXMuU2hpZnQsIEtleXMuQ3RybCwgS2V5cy5BbHQsIEtleXMuQ2Fwc0xvY2ssIEtleXMuV2luZG93c0tleSwgS2V5cy5UYWJdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGlnbm9yZSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlDb2RlID49IEtleXMuRjEgJiYga2V5Q29kZSA8PSBLZXlzLkYxMikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGUgZG93biBrZXkgaXMgdXNlZCB0byBvcGVuIGF1dG9jb21wbGV0ZVxyXG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkRvd24gJiYgY29udGFpbmVyRGlzcGxheWVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRGZXRjaChFdmVudFRyaWdnZXIuS2V5Ym9hcmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXV0b21hdGljYWxseSBtb3ZlIHNjcm9sbCBiYXIgaWYgc2VsZWN0ZWQgaXRlbSBpcyBub3QgdmlzaWJsZVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVTY3JvbGwoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZWxlbWVudHNbMF0gYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBtYWtlIGdyb3VwIHZpc2libGVcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy5jbGFzc05hbWUuaW5kZXhPZihcImdyb3VwXCIpICE9PSAtMSAmJiAhcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHByZXZpb3VzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5vZmZzZXRUb3AgPCBjb250YWluZXIuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RCb3R0b20gPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQm90dG9tID0gY29udGFpbmVyLnNjcm9sbFRvcCArIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0Qm90dG9tID4gY29udGFpbmVyQm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCArPSBzZWxlY3RCb3R0b20gLSBjb250YWluZXJCb3R0b207XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWxlY3QgdGhlIHByZXZpb3VzIGl0ZW0gaW4gc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2VsZWN0UHJldigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zW2ldIHx8IGkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBpdGVtc1tpIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCB0aGUgbmV4dCBpdGVtIGluIHN1Z2dlc3Rpb25zXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHNlbGVjdE5leHQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VsZWN0ZWQgfHwgc2VsZWN0ZWQgPT09IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkID0gaXRlbXNbMF07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoaXRlbXMubGVuZ3RoIC0gMSk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGtleWRvd25FdmVudEhhbmRsZXIoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXYud2hpY2ggfHwgZXYua2V5Q29kZSB8fCAwO1xyXG5cclxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5VcCB8fCBrZXlDb2RlID09PSBLZXlzLkRvd24gfHwga2V5Q29kZSA9PT0gS2V5cy5Fc2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySXNEaXNwbGF5ZWQgPSBjb250YWluZXJEaXNwbGF5ZWQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkVzYykge1xyXG4gICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVyRGlzcGxheWVkIHx8IGl0ZW1zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXlDb2RlID09PSBLZXlzLlVwXHJcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxlY3RQcmV2KClcclxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdE5leHQoKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVySXNEaXNwbGF5ZWQpIHtcclxuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm9uU2VsZWN0KHNlbGVjdGVkLCBpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHByZXZlbnRTdWJtaXQpIHtcclxuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9jdXNFdmVudEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHNob3dPbkZvY3VzKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0RmV0Y2goRXZlbnRUcmlnZ2VyLkZvY3VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnRGZXRjaCh0cmlnZ2VyOiBFdmVudFRyaWdnZXIpIHtcclxuICAgICAgICAvLyBpZiBtdWx0aXBsZSBrZXlzIHdlcmUgcHJlc3NlZCwgYmVmb3JlIHdlIGdldCB1cGRhdGUgZnJvbSBzZXJ2ZXIsXHJcbiAgICAgICAgLy8gdGhpcyBtYXkgY2F1c2UgcmVkcmF3aW5nIG91ciBhdXRvY29tcGxldGUgbXVsdGlwbGUgdGltZXMgYWZ0ZXIgdGhlIGxhc3Qga2V5IHByZXNzLlxyXG4gICAgICAgIC8vIHRvIGF2b2lkIHRoaXMsIHRoZSBudW1iZXIgb2YgdGltZXMga2V5Ym9hcmQgd2FzIHByZXNzZWQgd2lsbCBiZVxyXG4gICAgICAgIC8vIHNhdmVkIGFuZCBjaGVja2VkIGJlZm9yZSByZWRyYXcgb3VyIGF1dG9jb21wbGV0ZSBib3guXHJcbiAgICAgICAgY29uc3Qgc2F2ZWRLZXlwcmVzc0NvdW50ZXIgPSArK2tleXByZXNzQ291bnRlcjtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsID0gaW5wdXQudmFsdWU7XHJcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPj0gbWluTGVuIHx8IHRyaWdnZXIgPT09IEV2ZW50VHJpZ2dlci5Gb2N1cykge1xyXG4gICAgICAgICAgICBjbGVhckRlYm91bmNlVGltZXIoKTtcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuZmV0Y2godmFsLCBmdW5jdGlvbihlbGVtZW50czogVFtdIHwgZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cHJlc3NDb3VudGVyID09PSBzYXZlZEtleXByZXNzQ291bnRlciAmJiBlbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1swXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgRXZlbnRUcmlnZ2VyLktleWJvYXJkKTtcclxuICAgICAgICAgICAgfSwgdHJpZ2dlciA9PT0gRXZlbnRUcmlnZ2VyLktleWJvYXJkID8gZGVib3VuY2VXYWl0TXMgOiAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBibHVyRXZlbnRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZGVsYXkgY2xlYXIsIGJlY2F1c2Ugd2hlbiB3ZSBjbGljayBvbiBhbiBpdGVtLCBibHVyIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBjbGljayBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gRE9NXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAhPT0gaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRml4ZXMgIzI2OiBvbiBsb25nIGNsaWNrcyBmb2N1cyB3aWxsIGJlIGxvc3QgYW5kIG9uU2VsZWN0IG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZXZ0OiBFdmVudCkge1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRml4ZXMgIzMwOiBhdXRvY29tcGxldGUgY2xvc2VzIHdoZW4gc2Nyb2xsYmFyIGlzIGNsaWNrZWQgaW4gSUVcclxuICAgICAqIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzkyMTAyNjcvMTMxNzIzNDlcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoKSA9PiBpbnB1dC5mb2N1cygpKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUgRE9NIGVsZW1lbnRzIGFuZCBjbGVhciBldmVudCBoYW5kbGVyc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwga2V5ZG93bkV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXlVcEV2ZW50TmFtZSwga2V5dXBFdmVudEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCk7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgYmx1ckV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxFdmVudEhhbmRsZXIsIHRydWUpO1xyXG4gICAgICAgIGNsZWFyRGVib3VuY2VUaW1lcigpO1xyXG4gICAgICAgIGNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dXAgZXZlbnQgaGFuZGxlcnNcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGtleWRvd25FdmVudEhhbmRsZXIpO1xyXG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihrZXlVcEV2ZW50TmFtZSwga2V5dXBFdmVudEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCk7XHJcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyRXZlbnRIYW5kbGVyKTtcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVFdmVudEhhbmRsZXIpO1xyXG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsRXZlbnRIYW5kbGVyLCB0cnVlKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlc3Ryb3lcclxuICAgIH07XHJcbn1cclxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdGF0ZShpZCwgc3RhdGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICB0cnkge1xuICAgIG9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtblN0YXRlKHN0YXRlLmNvbHVtbnMpXG4gICAgb3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uR3JvdXBTdGF0ZShzdGF0ZS5ncm91cHMpXG4gICAgb3B0aW9ucy5hcGkuc2V0U29ydE1vZGVsKHN0YXRlLnNvcnQpXG4gICAgb3B0aW9ucy5hcGkuc2V0RmlsdGVyTW9kZWwoc3RhdGUuZmlsdGVycylcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIGdyaWQgc3RhdGUgZnJvbSBKU09OJywgZSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0U3RhdGUoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgY29sdW1ucyA9IG9wdGlvbnMuY29sdW1uQXBpLmdldENvbHVtblN0YXRlKClcbiAgY29uc3QgZ3JvdXBzID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0Q29sdW1uR3JvdXBTdGF0ZSgpXG4gIGNvbnN0IHNvcnQgPSBvcHRpb25zLmFwaS5nZXRTb3J0TW9kZWwoKVxuICBjb25zdCBmaWx0ZXJzID0gb3B0aW9ucy5hcGkuZ2V0RmlsdGVyTW9kZWwoKVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBncm91cHMsXG4gICAgICBzb3J0LFxuICAgICAgZmlsdGVycyxcbiAgICB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gY29udmVydCB0aGUgZ3JpZCBzdGF0ZSB0byBqc29uJywgZSlcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTaWRlQmFyVmlzaWJsZShpZCwgdmFsdWUpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2V0U2lkZUJhclZpc2libGUoQm9vbGVhbih2YWx1ZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19vcGVuVG9vbHBhbmVsKGdyaWRJZCwgdG9vbHBhbmVsSWQpIHtcbiAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuYXBpLm9wZW5Ub29sUGFuZWwodG9vbHBhbmVsSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19jbG9zZVRvb2xwYW5lbChncmlkSWQsIHRvb2xwYW5lbElkKSB7XG4gIGd3X2dldEdyaWQoZ3JpZElkKS5vcHRpb25zLmFwaS5jbG9zZVRvb2xQYW5lbCh0b29scGFuZWxJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldEZ1bmN0aW9uc1JlYWRPbmx5KGlkLCByZWFkb25seSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGdW5jdGlvbnNSZWFkT25seShCb29sZWFuKHJlYWRvbmx5KSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eShpZCwga2V5LCB2aXNpYmlsaXR5KSB7XG4gIGd3X2dldEdyaWQoaWQpXG4gICAgLm9wdGlvbnMuYXBpLmdldFN0YXR1c1BhbmVsKGtleSlcbiAgICAuc2V0VmlzaWJsZShCb29sZWFuKHZpc2liaWxpdHkpKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogU2hvdyBsb2FkaW5nIG92ZXJsYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3Nob3dMb2FkaW5nT3ZlcmxheShpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKVxufVxuXG4vKipcbiAqIFNob3cgJ25vIHJvd3MnIG92ZXJsYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3Nob3dOb1Jvd3NPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KClcbn1cblxuLyoqXG4gKiBDbGVhciBhbGwgb3ZlcmxheXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2hpZGVPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmhpZGVPdmVybGF5KClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG4vKipcbiAqIFVwZGF0ZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGNvbnRleHQncyBrZXkgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgIFRoZSBuZXcgY29udGV4dCdzIHZhbHVlXG4gKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBnd19sZWdhY3lVcGRhdGVDb250ZXh0KGlkLCBrZXksIHZhbHVlKSB7XG4vLyBcdGd3X2dldEdyaWQoaWQpXG4vLyBcdFx0Lm9wdGlvbnNcbi8vIFx0XHQuY29udGV4dFtrZXldID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4vLyB9XG5cbi8qKlxuICogVXBkYXRlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgVGhlIG5ldyBjb250ZXh0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdXBkYXRlQ29udGV4dChpZCwgY29udGV4dCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQgPSBjb250ZXh0XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9qc3MhanNzL2pzcy5qcydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogQWRkIG5ldyBzdHlsZVxuICpcbiAqIEFkZCBuZXcgc3R5bGUgdG8gdGhlIGRvY3VtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGNzcyBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVzIEpzb24gc3RyaW5nIGZvciBhbiBhcnJheSBvZiBydWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3R5bGUoc2VsZWN0b3IsIHJ1bGVzKSB7XG4gIGpzcy5mb3JEb2N1bWVudChnd19nZXREb2N1bWVudCgpKS5zZXQoc2VsZWN0b3IsIEpTT04ucGFyc2UocnVsZXMpKVxufVxuXG4vKipcbiAqIFJlbW92ZSBzdHlsZVxuICpcbiAqIFJlbW92ZSBhZGRlZCBzdHlsZSBmcm9tIHRoZXMgZG9jdW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgY3NzIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVTdHlsZShzZWxlY3Rvcikge1xuICBqc3MuZm9yRG9jdW1lbnQoZ3dfZ2V0RG9jdW1lbnQoKSkucmVtb3ZlKHNlbGVjdG9yKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxbXCJqc3NcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcanNzLmpzXCIpOyIsIi8qXG4gKiBKU1MgdjAuNiAtIEphdmFTY3JpcHQgU3R5bGVzaGVldHNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Cb3g5L2pzc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMSwgRGF2aWQgVGFuZ1xuICogTUlUIExpY2Vuc2VkIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqL1xudmFyIGpzcyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgYWRqU2VsQXR0clJlZ2V4ID0gLygoPzpcXC58IylbXlxcLlxccyNdKykoKD86XFwufCMpW15cXC5cXHMjXSspL2c7XG4gICAgdmFyIGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleCA9IC8oOjopKGJlZm9yZXxhZnRlcnxmaXJzdC1saW5lfGZpcnN0LWxldHRlcnxzZWxlY3Rpb24pLztcbiAgICB2YXIgc2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4ID0gLyhbXjpdKSg6KShiZWZvcmV8YWZ0ZXJ8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8c2VsZWN0aW9uKS87XG4gICAgdmFyIHNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHM7IC8vIGZsYWcgZm9yIG9sZGVyIGJyb3dzZXJzXG5cbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnNBbmRSdWxlcyhzaGVldCkge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gT2xkZXIgYnJvd3NlcnMgYW5kIEZGIHJlcG9ydCBwc2V1ZG8gZWxlbWVudCBzZWxlY3RvcnMgaW4gYW4gb3V0ZGF0ZWQgZm9ybWF0XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHNbc2VsZWN0b3JUZXh0XSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbc2VsZWN0b3JUZXh0XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0c1tzZWxlY3RvclRleHRdLnB1c2goe1xuICAgICAgICAgICAgICAgIHNoZWV0OiBzaGVldCxcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICBzdHlsZTogcnVsZXNbaV0uc3R5bGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJ1bGVzKHNoZWV0LCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgLy8gQnJvd3NlcnMgcmVwb3J0IHNlbGVjdG9ycyBpbiBsb3dlcmNhc2VcbiAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gcnVsZXNbaV0uc2VsZWN0b3JUZXh0O1xuICAgICAgICAgICAgLy8gTm90ZSAtIGNlcnRhaW4gcnVsZXMgKGUuZy4gQHJ1bGVzKSBkb24ndCBoYXZlIHNlbGVjdG9yVGV4dFxuICAgICAgICAgICAgaWYgKHNlbGVjdG9yVGV4dCAmJiAoc2VsZWN0b3JUZXh0ID09IHNlbGVjdG9yIHx8IHNlbGVjdG9yVGV4dCA9PSBzd2FwQWRqU2VsQXR0cihzZWxlY3RvcikgfHwgc2VsZWN0b3JUZXh0ID09IHN3YXBQc2V1ZG9FbFN5bnRheChzZWxlY3RvcikpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2ldLnN0eWxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkUnVsZShzaGVldCwgc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gc2hlZXQuY3NzUnVsZXMgfHwgc2hlZXQucnVsZXMgfHwgW107XG4gICAgICAgIHZhciBpbmRleCA9IHJ1bGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHBzZXVkb0VsZW1lbnRSdWxlID0gYWRkUHNldWRvRWxlbWVudFJ1bGUoc2hlZXQsIHNlbGVjdG9yLCBydWxlcywgaW5kZXgpO1xuXG4gICAgICAgIGlmICghcHNldWRvRWxlbWVudFJ1bGUpIHtcbiAgICAgICAgICAgIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBzZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2luZGV4XS5zdHlsZVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhZGRSdWxlVG9TaGVldChzaGVldCwgc2VsZWN0b3IsIGluZGV4KSB7XG4gICAgICAgIGlmIChzaGVldC5pbnNlcnRSdWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9yICsgJyB7IH0nLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaGVldC5hZGRSdWxlKHNlbGVjdG9yLCBudWxsLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHNpbmdsZSBjb2xvbiBzeW50YXggZm9yIG9sZGVyIGJyb3dzZXJzIGFuZCBidWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ5NjUxXG4gICAgZnVuY3Rpb24gYWRkUHNldWRvRWxlbWVudFJ1bGUoc2hlZXQsIHNlbGVjdG9yLCBydWxlcywgaW5kZXgpIHtcbiAgICAgICAgdmFyIGRvdWJsZUNvbG9uU2VsZWN0b3I7XG4gICAgICAgIHZhciBzaW5nbGVDb2xvblNlbGVjdG9yO1xuXG4gICAgICAgIGlmIChkb3VibGVDb2xvblBzZXVkb0VsUmVnZXguZXhlYyhzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGRvdWJsZUNvbG9uU2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgICAgIHNpbmdsZUNvbG9uU2VsZWN0b3IgPSB0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbmdsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgZG91YmxlQ29sb25TZWxlY3RvciA9IHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgICAgICBzaW5nbGVDb2xvblNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBkZWFsaW5nIHdpdGggYSBwc2V1ZG8gZWxlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWUgbW9kZXJuIGJyb3dzZXIgYW5kIHRoZW4gY2hlY2sgaWYgc3VjY2Vzc2Z1bFxuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIGRvdWJsZUNvbG9uU2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIHNpbmdsZUNvbG9uU2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVwbGFjZShzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgc3VibWF0Y2gxLCBzdWJtYXRjaDIsIHN1Ym1hdGNoMykge1xuICAgICAgICAgICAgcmV0dXJuIHN1Ym1hdGNoMSArICc6OicgKyBzdWJtYXRjaDM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVwbGFjZShkb3VibGVDb2xvblBzZXVkb0VsUmVnZXgsIGZ1bmN0aW9uKG1hdGNoLCBzdWJtYXRjaDEsIHN1Ym1hdGNoMikge1xuICAgICAgICAgICAgcmV0dXJuICc6JyArIHN1Ym1hdGNoMjtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVSdWxlKHJ1bGUpIHtcbiAgICAgICAgdmFyIHNoZWV0ID0gcnVsZS5zaGVldDtcbiAgICAgICAgaWYgKHNoZWV0LmRlbGV0ZVJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0LmRlbGV0ZVJ1bGUocnVsZS5pbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hlZXQucmVtb3ZlUnVsZSkge1xuICAgICAgICAgICAgc2hlZXQucmVtb3ZlUnVsZShydWxlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICAgICAgaWYgKCFzcmMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGRlc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZVN0eWxlcyhydWxlcykge1xuICAgICAgICB2YXIgYWdncmVnYXRlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGV4dGVuZChhZ2dyZWdhdGUsIGRlY2xhcmVkUHJvcGVydGllcyhydWxlc1tpXS5zdHlsZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjbGFyZWRQcm9wZXJ0aWVzKHN0eWxlKSB7XG4gICAgICAgIHZhciBkZWNsYXJlZCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWNsYXJlZFtzdHlsZVtpXV0gPSBzdHlsZVt0b0NhbWVsQ2FzZShzdHlsZVtpXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNsYXJlZDtcbiAgICB9XG5cbiAgICAvLyBJRTkgc3RvcmVzIHJ1bGVzIHdpdGggYXR0cmlidXRlcyAoY2xhc3NlcyBvciBJRCdzKSBhZGphY2VudCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIgYXMgZGVmaW5lZFxuICAgIC8vIGNhdXNpbmcgdGhlbSB0byBub3QgYmUgZm91bmQsIHNvIHRoaXMgbWV0aG9kIHN3YXBzIFsjfC5dc2VsMVsjfC5dc2VsMiB0byBiZWNvbWUgWyN8Ll1zZWwyWyN8Ll1zZWwxXG4gICAgZnVuY3Rpb24gc3dhcEFkalNlbEF0dHIoc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHN3YXAgPSAnJztcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IGFkalNlbEF0dHJSZWdleC5leGVjKHNlbGVjdG9yKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09PSAnJylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHIobWF0Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgsIG1hdGNoWzJdLmxlbmd0aCk7XG4gICAgICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cihtYXRjaC5pbmRleCwgbWF0Y2hbMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyKGxhc3RJbmRleCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc3dhcDtcbiAgICB9O1xuXG4gICAgLy8gRkYgYW5kIG9sZGVyIGJyb3dzZXJzIHN0b3JlIHJ1bGVzIHdpdGggcHNldWRvIGVsZW1lbnRzIHVzaW5nIHNpbmdsZS1jb2xvbiBzeW50YXhcbiAgICBmdW5jdGlvbiBzd2FwUHNldWRvRWxTeW50YXgoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFN0eWxlUHJvcGVydGllcyhydWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB2YXIgaW1wb3J0YW50SW5kZXggPSB2YWx1ZS5pbmRleE9mKCcgIWltcG9ydGFudCcpO1xuXG4gICAgICAgICAgICAvLyBNb2Rlcm4gYnJvd3NlcnMgc2VlbSB0byBoYW5kbGUgb3ZlcnJpZGVzIGZpbmUsIGJ1dCBJRTkgZG9lc24ndFxuICAgICAgICAgICAgcnVsZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpOyBcbiAgICAgICAgICAgIGlmIChpbXBvcnRhbnRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBydWxlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUuc3Vic3RyKDAsIGltcG9ydGFudEluZGV4KSwgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBydWxlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24gKG1hdGNoLCBzdWJtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1Ym1hdGNoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUNhbWVsQ2FzZWRQcm9wZXJ0eU5hbWVzKG9sZFByb3BzKSB7XG4gICAgICAgIHZhciBuZXdQcm9wcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgICAgICAgIG5ld1Byb3BzW3VuQ2FtZWxDYXNlKGtleSldID0gb2xkUHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5DYW1lbENhc2Uoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFtBLVpdKS9nLCBmdW5jdGlvbihtYXRjaCwgc3VibWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiAnLScgKyBzdWJtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgSnNzID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLmRvYy5oZWFkIHx8IHRoaXMuZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgIHRoaXMuc2hlZXRzID0gdGhpcy5kb2Muc3R5bGVTaGVldHMgfHwgW107XG4gICAgfTtcblxuICAgIEpzcy5wcm90b3R5cGUgPSB7XG4gICAgICAgIC8vIFJldHVybnMgSlNTIHJ1bGVzIChzZWxlY3RvciBpcyBvcHRpb25hbClcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVTdHlsZXMoZ2V0UnVsZXModGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRTZWxlY3RvcnNBbmRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCk7XG4gICAgICAgICAgICBmb3IgKHNlbGVjdG9yIGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgcnVsZXNbc2VsZWN0b3JdID0gYWdncmVnYXRlU3R5bGVzKHJ1bGVzW3NlbGVjdG9yXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJldHVybnMgYWxsIHJ1bGVzIChzZWxlY3RvciBpcyByZXF1aXJlZClcbiAgICAgICAgZ2V0QWxsOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBleHRlbmQocHJvcGVydGllcywgYWdncmVnYXRlU3R5bGVzKGdldFJ1bGVzKHRoaXMuc2hlZXRzW2ldLCBzZWxlY3RvcikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBZGRzIEpTUyBydWxlcyBmb3IgdGhlIHNlbGVjdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBwcm9wZXJ0aWVzXG4gICAgICAgIHNldDogZnVuY3Rpb24oc2VsZWN0b3IsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2hlZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTaGVldCA9IHRoaXMuX2NyZWF0ZVNoZWV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gdHJhbnNmb3JtQ2FtZWxDYXNlZFByb3BlcnR5TmFtZXMocHJvcGVydGllcyk7XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFydWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBydWxlcyA9IFthZGRSdWxlKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3RvcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNldFN0eWxlUHJvcGVydGllcyhydWxlc1tpXSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJlbW92ZXMgSlNTIHJ1bGVzIChzZWxlY3RvciBpcyBvcHRpb25hbClcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU2hlZXQodGhpcy5kZWZhdWx0U2hlZXQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRlZmF1bHRTaGVldDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGUocnVsZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgX2NyZWF0ZVNoZWV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZU5vZGUgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgc3R5bGVOb2RlLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgc3R5bGVOb2RlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgICAgIHRoaXMuaGVhZC5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlTm9kZS5zaGVldDtcbiAgICAgICAgfSxcbiAgICAgICAgX3JlbW92ZVNoZWV0OiBmdW5jdGlvbihzaGVldCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBzaGVldC5vd25lck5vZGU7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGV4cG9ydHMgPSBuZXcgSnNzKGRvY3VtZW50KTtcbiAgICBleHBvcnRzLmZvckRvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHJldHVybiBuZXcgSnNzKGRvYyk7XG4gICAgfTtcbiAgICByZXR1cm4gZXhwb3J0cztcbn0pKCk7XG5cbnR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzICYmIChtb2R1bGUuZXhwb3J0cyA9IGpzcyk7IC8vIENvbW1vbkpTIHN1cHBvcnQiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIm1vZHVsZS5leHBvcnRzID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgb3BhY2l0eTogMDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwYWRkaW5nOiAwO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbiAgYm9yZGVyOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xcbiAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaW5saW5lIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBtYXgtaGVpZ2h0OiA2NDBweDtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIub3BlbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB6LWluZGV4OiA5OTk5OTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hbmltYXRlLm9wZW4ge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZwRmFkZUluRG93biAzMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICAgICAgICAgIGFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IDJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5zdGF0aWMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiBjYWxjKDEwMCUgKyAycHgpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnN0YXRpYy5vcGVuIHtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMSkgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rNykge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5tdWx0aU1vbnRoIC5mbGF0cGlja3ItZGF5cyAuZGF5Q29udGFpbmVyOm50aC1jaGlsZChuKzIpIC5mbGF0cGlja3ItZGF5LmluUmFuZ2U6bnRoLWNoaWxkKDduKzEpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTJweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzVGltZSAuZGF5Q29udGFpbmVyIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaGFzVGltZSAuZmxhdHBpY2tyLXRpbWUge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubm9DYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb250ZW50OiAnJztcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgbGVmdDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dSaWdodDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YWZ0ZXIsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1JpZ2h0OmFmdGVyIHtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjphZnRlciB7XFxuICBsZWZ0OiA1MCU7XFxuICByaWdodDogNTAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmJlZm9yZSB7XFxuICBib3JkZXItd2lkdGg6IDVweDtcXG4gIG1hcmdpbjogMCAtNXB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmFmdGVyIHtcXG4gIGJvcmRlci13aWR0aDogNHB4O1xcbiAgbWFyZ2luOiAwIC00cHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xcbiAgYm90dG9tOiAxMDAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmJlZm9yZSB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YWZ0ZXIge1xcbiAgdG9wOiAxMDAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmJlZm9yZSB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmZsYXRwaWNrci13cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLmZsYXRwaWNrci1tb250aHMge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbW9udGgge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAtd2Via2l0LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGgge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIHotaW5kZXg6IDM7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIGksXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLXByZXYtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoIHtcXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbiAgbGVmdDogMDtcXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG59XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG4gIHJpZ2h0OiAwO1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbn1cXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoOmhvdmVyIHtcXG4gIGNvbG9yOiAjOTU5ZWE5O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIgc3ZnLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciBzdmcge1xcbiAgZmlsbDogI2Y2NDc0NztcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2ZyxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggc3ZnIHBhdGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2ZyBwYXRoIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgZmlsbDogaW5oZXJpdDtcXG59XFxuLm51bUlucHV0V3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQsXFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LW1zLWNsZWFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgcGFkZGluZzogMCA0cHggMCAycHg7XFxuICBoZWlnaHQ6IDUwJTtcXG4gIGxpbmUtaGVpZ2h0OiA1MCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjE1KTtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcCB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiA0cHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjYpO1xcbiAgdG9wOiAyNiU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd24ge1xcbiAgdG9wOiA1MCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC42KTtcXG4gIHRvcDogNDAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHtcXG4gIHdpZHRoOiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHBhdGgge1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjUpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIgc3BhbiB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGgge1xcbiAgZm9udC1zaXplOiAxMzUlO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNzUlO1xcbiAgbGVmdDogMTIuNSU7XFxuICBwYWRkaW5nOiA3LjQ4cHggMCAwIDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGhlaWdodDogMzRweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWNoO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHdpZHRoOiA2Y2g7XFxuICB3aWR0aDogN2NoXFxcXDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHRleHQ7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcltkaXNhYmxlZF0sXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXTpob3ZlciB7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjUpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMge1xcbiAgYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIG1hcmdpbjogLTFweCAwIDAgMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6Zm9jdXMsXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdlZWtkYXlzIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla2RheXMgLmZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuc3Bhbi5mbGF0cGlja3Itd2Vla2RheSB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmb250LXNpemU6IDkwJTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIG1hcmdpbjogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcbi5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci13ZWVrcyB7XFxuICBwYWRkaW5nOiAxcHggMCAwIDA7XFxufVxcbi5mbGF0cGlja3ItZGF5cyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XFxuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheXM6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmRheUNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgb3V0bGluZTogMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgbWluLXdpZHRoOiAzMDcuODc1cHg7XFxuICBtYXgtd2lkdGg6IDMwNy44NzVweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZGF5Q29udGFpbmVyICsgLmRheUNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5IHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDE1MHB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgd2lkdGg6IDE0LjI4NTcxNDMlO1xcbiAgLXdlYmtpdC1mbGV4LWJhc2lzOiAxNC4yODU3MTQzJTtcXG4gICAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTQuMjg1NzE0MyU7XFxuICAgICAgICAgIGZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xcbiAgbWF4LXdpZHRoOiAzOXB4O1xcbiAgaGVpZ2h0OiAzOXB4O1xcbiAgbGluZS1oZWlnaHQ6IDM5cHg7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5OmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6Zm9jdXMge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIGJhY2tncm91bmQ6ICNlNmU2ZTY7XFxuICBib3JkZXItY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LnRvZGF5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OWVhOTtcXG59XFxuLmZsYXRwaWNrci1kYXkudG9kYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkudG9kYXk6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xcbiAgYmFja2dyb3VuZDogIzk1OWVhOTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZCxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQ6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLm5leHRNb250aERheSB7XFxuICBiYWNrZ3JvdW5kOiAjNTY5ZmY3O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItY29sb3I6ICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweCAwIDAgNTBweDtcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5lbmRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiAwIDUwcHggNTBweCAwO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTEwcHggMCAwICM1NjlmZjc7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xMHB4IDAgMCAjNTY5ZmY3O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwcHg7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQubmV4dE1vbnRoRGF5IHtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMyk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMSk7XFxufVxcbi5mbGF0cGlja3ItZGF5LndlZWsuc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgIzU2OWZmNywgNXB4IDAgMCAjNTY5ZmY3O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjNTY5ZmY3LCA1cHggMCAwICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LmhpZGRlbiB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5yYW5nZU1vZGUgLmZsYXRwaWNrci1kYXkge1xcbiAgbWFyZ2luLXRvcDogMXB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla3Mge1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciAuZmxhdHBpY2tyLXdlZWtkYXkge1xcbiAgZmxvYXQ6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheSxcXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheTpob3ZlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uZmxhdHBpY2tyLXJDb250YWluZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZsYXRwaWNrci10aW1lIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG91dGxpbmU6IDA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgbWF4LWhlaWdodDogNDBweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci10aW1lOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogdGFibGU7XFxuICBjbGVhcjogYm90aDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIHdpZHRoOiA0MCU7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZS5oYXNTZWNvbmRzIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDI2JTtcXG59XFxuLmZsYXRwaWNrci10aW1lLnRpbWUyNGhyIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDQ5JTtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0IHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1ob3VyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLW1pbnV0ZSxcXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLXNlY29uZCB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJvcmRlcjogMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItdGltZS1zZXBhcmF0b3IsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG0ge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB3aWR0aDogMiU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtIHtcXG4gIG91dGxpbmU6IDA7XFxuICB3aWR0aDogMTglO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1cyxcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbn1cXG4uZmxhdHBpY2tyLWlucHV0W3JlYWRvbmx5XSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmcEZhZGVJbkRvd24ge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICB9XFxufVxcblwiIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG4iLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2NsYXNzZXMuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLypcXG4qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxcbiogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxcbipcXG4qIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXFxuKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cXG4qL1xcblxcbi5ndy1hbGlnbm1lbnQtY2VsbC1yaWdodCxcXG4uZ3ctYWxpZ25tZW50LWNlbGwtcmlnaHQgLmFnLWNlbGwtdmFsdWUsXFxuLmd3LWFsaWdubWVudC1jZWxsLXJpZ2h0IC50ZW1wbGF0ZVJlbmRlcmVyIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtY2VsbC1jZW50ZXIsXFxuLmd3LWFsaWdubWVudC1jZWxsLWNlbnRlciAuYWctY2VsbC12YWx1ZSxcXG4uZ3ctYWxpZ25tZW50LWNlbGwtY2VudGVyIC50ZW1wbGF0ZVJlbmRlcmVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItcmlnaHQgLmFnLWhlYWRlci1jZWxsLWxhYmVsIHtcXG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLWNlbnRlciAuYWctaGVhZGVyLWNlbGwtbGFiZWwge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1oZWFkZXItY2VsbC10ZXh0IHtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1yaWdodCAuYWctY2VsbC1sYWJlbC1jb250YWluZXIsXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1jZWxsLWxhYmVsLWNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XFxuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLmd3LXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDFzO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcztcXG4gIGJvcmRlci1yYWRpdXM6IDMuMXB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAyNjBtcztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjYwbXM7XFxufVxcblxcbi5ndy10b29sdGlwLWxpZ2h0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmd3LXRvb2x0aXAtZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWMxZjIwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICM1YzVjNWM7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggIzVjNWM1YztcXG4gIGNvbG9yOiB3aGl0ZTtcXG59XFxuXCIiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9zdWdnZXN0aW9uLWVkaXRvci5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLmF1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQge1xcbiAgcGFkZGluZy1sZWZ0OiA2cHg7XFxuICBib3JkZXI6IHRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0MywgMC40KSk7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmFnLXRoZW1lLWFscGluZSAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCxcXG4uYWctdGhlbWUtYmFsaGFtIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1tYXRlcmlhbCAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcXG59XFxuXFxuLmFnLXRoZW1lLWFscGluZS1kYXJrIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1iYWxoYW0tZGFyayAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcXG4gIHotaW5kZXg6IDEwMDA7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXI6IHRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0MywgMC40KSk7XFxuICBib3JkZXItdG9wOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAzcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAzcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi5hdXRvY29tcGxldGUuZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KTtcXG4gIGNvbG9yOiB2YXIoLS1hZy1kYXRhLWNvbG9yLCB2YXIoLS1hZy1mb3JlZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XFxufVxcblxcbi5hdXRvY29tcGxldGUgLnN1Z2dlc3Rpb24tZ3JvdXAge1xcbiAgYmFja2dyb3VuZDogI2VlZTtcXG4gIHBhZGRpbmc6IDVweCA2cHg7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS5kYXJrIC5zdWdnZXN0aW9uLWdyb3VwIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMxODFkMWYpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW0ge1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuc3VnZ2VzdGlvbi1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLXJvdy1ob3Zlci1jb2xvciwgcmdiYSgzMywgMTUwLCAyNDQsIDAuMSkpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW0uc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKFxcbiAgICAtLWFnLXNlbGVjdGVkLXJvdy1iYWNrZ3JvdW5kLWNvbG9yLFxcbiAgICByZ2JhKDMzLCAxNTAsIDI0MywgMC4zKVxcbiAgKTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuZW1wdHkge1xcbiAgcGFkZGluZzogOHB4IDZweDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS1pbnB1dC1lcnJvciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgLTJweCAwICNlOTFlNjMgaW5zZXQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCAwICNlOTFlNjMgaW5zZXQ7XFxufVxcblxcbi5hdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcyB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgLTJweCAwICM0Y2FmNTAgaW5zZXQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCAwICM0Y2FmNTAgaW5zZXQ7XFxufVxcblwiIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/client/dist/bbj-grid-widget.min.js b/client/dist/bbj-grid-widget.min.js index 685b0330..c35f71da 100644 --- a/client/dist/bbj-grid-widget.min.js +++ b/client/dist/bbj-grid-widget.min.js @@ -14,4 +14,4 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ -var e=function(){return(e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},o={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},a=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},u=function(e){return!0===e?1:0};function c(e,t,n){var r;return void 0===n&&(n=!1),function(){var o=this,i=arguments;null!==r&&clearTimeout(r),r=window.setTimeout(function(){r=null,n||e.apply(o,i)},t),n&&!r&&e.apply(o,i)}}var l=function(e){return e instanceof Array?e:[e]};function s(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function d(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function f(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function p(e,t){var n=d("div","numInputWrapper"),r=d("input","numInput "+e),o=d("span","arrowUp"),i=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var a in t)r.setAttribute(a,t[a]);return n.appendChild(r),n.appendChild(o),n.appendChild(i),n}function h(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}var g=function(){},b=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},y={D:g,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*u(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),o=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return o.setDate(o.getDate()-o.getDay()+n.firstDayOfWeek),o},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:g,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:g,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},m={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},v={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[v.w(e,t,n)]},F:function(e,t,n){return b(v.n(e,t,n)-1,!1,t)},G:function(e,t,n){return a(v.h(e,t,n))},H:function(e){return a(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[u(e.getHours()>11)]},M:function(e,t){return b(e.getMonth(),!0,t)},S:function(e){return a(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return a(e.getFullYear(),4)},d:function(e){return a(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return a(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return a(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},_=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i,u=e.isMobile,c=void 0!==u&&u;return function(e,t,r){var o=r||a;return void 0===n.formatDate||c?t.split("").map(function(t,r,i){return v[t]&&"\\"!==i[r-1]?v[t](e,o,n):"\\"!==t?t:""}).join(""):n.formatDate(e,t,o)}},w=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i;return function(e,t,o,i){if(0===e||e){var u,c=i||a,l=e;if(e instanceof Date)u=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)u=new Date(e);else if("string"==typeof e){var s=t||(n||r).dateFormat,d=String(e).trim();if("today"===d)u=new Date,o=!0;else if(/Z$/.test(d)||/GMT$/.test(d))u=new Date(e);else if(n&&n.parseDate)u=n.parseDate(e,s);else{u=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,p=[],h=0,g=0,b="";hMath.min(t,n)&&ei&&(d=r===v.hourElement?d-i-u(!v.amPM):o,p&&G(void 0,1,v.hourElement)),v.amPM&&f&&(1===c?d+l===23:Math.abs(d-l)>c)&&(v.amPM.textContent=v.l10n.amPM[u(v.amPM.textContent===v.l10n.amPM[0])]),r.value=a(d)}}(e);var c=v._input.value;M(),ke(),v._input.value!==c&&v._debouncedChange()}function M(){if(void 0!==v.hourElement&&void 0!==v.minuteElement){var e=(parseInt(v.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(v.minuteElement.value,10)||0)%60,n=void 0!==v.secondElement?(parseInt(v.secondElement.value,10)||0)%60:0;void 0!==v.amPM&&(e=function(e,t){return e%12+12*u(t===v.l10n.amPM[1])}(e,v.amPM.textContent));var r=void 0!==v.config.minTime||v.config.minDate&&v.minDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.minDate,!0);if(void 0!==v.config.maxTime||v.config.maxDate&&v.maxDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.maxDate,!0)){var o=void 0!==v.config.maxTime?v.config.maxTime:v.config.maxDate;(e=Math.min(e,o.getHours()))===o.getHours()&&(t=Math.min(t,o.getMinutes())),t===o.getMinutes()&&(n=Math.min(n,o.getSeconds()))}if(r){var i=void 0!==v.config.minTime?v.config.minTime:v.config.minDate;(e=Math.max(e,i.getHours()))===i.getHours()&&(t=Math.max(t,i.getMinutes())),t===i.getMinutes()&&(n=Math.max(n,i.getSeconds()))}I(e,t,n)}}function P(e){var t=e||v.latestSelectedDateObj;t&&I(t.getHours(),t.getMinutes(),t.getSeconds())}function T(){var e=v.config.defaultHour,t=v.config.defaultMinute,n=v.config.defaultSeconds;if(void 0!==v.config.minDate){var r=v.config.minDate.getHours(),o=v.config.minDate.getMinutes();(e=Math.max(e,r))===r&&(t=Math.max(o,t)),e===r&&t===o&&(n=v.config.minDate.getSeconds())}if(void 0!==v.config.maxDate){var i=v.config.maxDate.getHours(),a=v.config.maxDate.getMinutes();(e=Math.min(e,i))===i&&(t=Math.min(a,t)),e===i&&t===a&&(n=v.config.maxDate.getSeconds())}return{hours:e,minutes:t,seconds:n}}function I(e,t,n){void 0!==v.latestSelectedDateObj&&v.latestSelectedDateObj.setHours(e%24,t,n||0,0),v.hourElement&&v.minuteElement&&!v.isMobile&&(v.hourElement.value=a(v.config.time_24hr?e:(12+e)%12+12*u(e%12==0)),v.minuteElement.value=a(t),void 0!==v.amPM&&(v.amPM.textContent=v.l10n.amPM[u(e>=12)]),void 0!==v.secondElement&&(v.secondElement.value=a(n)))}function N(e){var t=h(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&ee(n)}function A(e,t,n,r){return t instanceof Array?t.forEach(function(t){return A(e,t,n,r)}):e instanceof Array?e.forEach(function(e){return A(e,t,n,r)}):(e.addEventListener(t,n,r),void v._handlers.push({element:e,event:t,handler:n,options:r}))}function R(){ye("onChange")}function L(e,t){var n=void 0!==e?v.parseDate(e):v.latestSelectedDateObj||(v.config.minDate&&v.config.minDate>v.now?v.config.minDate:v.config.maxDate&&v.config.maxDate=0&&k(e,v.selectedDates[1])<=0}(t)&&!ve(t)&&i.classList.add("inRange"),v.weekNumbers&&1===v.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&v.weekNumbers.insertAdjacentHTML("beforeend",""+v.config.getWeek(t)+""),ye("onDayCreate",i),i}function U(e){e.focus(),"range"===v.config.mode&&ie(e)}function W(e){for(var t=e>0?0:v.config.showMonths-1,n=e>0?v.config.showMonths:-1,r=t;r!=n;r+=e)for(var o=v.daysContainer.children[r],i=e>0?0:o.children.length-1,a=e>0?o.children.length:-1,u=i;u!=a;u+=e){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&te(c.dateObj))return c}}function z(e,t){var n=ne(document.activeElement||document.body),r=void 0!==e?e:n?document.activeElement:void 0!==v.selectedDateElem&&ne(v.selectedDateElem)?v.selectedDateElem:void 0!==v.todayDateElem&&ne(v.todayDateElem)?v.todayDateElem:W(t>0?1:-1);void 0===r?v._input.focus():n?function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():v.currentMonth,r=t>0?v.config.showMonths:-1,o=t>0?1:-1,i=n-v.currentMonth;i!=r;i+=o)for(var a=v.daysContainer.children[i],u=n-v.currentMonth===i?e.$i+t:t<0?a.children.length-1:0,c=a.children.length,l=u;l>=0&&l0?c:-1);l+=o){var s=a.children[l];if(-1===s.className.indexOf("hidden")&&te(s.dateObj)&&Math.abs(e.$i-l)>=Math.abs(t))return U(s)}v.changeMonth(o),z(W(o),0)}(r,t):U(r)}function B(e,t){for(var n=(new Date(e,t,1).getDay()-v.l10n.firstDayOfWeek+7)%7,r=v.utils.getDaysInMonth((t-1+12)%12,e),o=v.utils.getDaysInMonth(t,e),i=window.document.createDocumentFragment(),a=v.config.showMonths>1,u=a?"prevMonthDay hidden":"prevMonthDay",c=a?"nextMonthDay hidden":"nextMonthDay",l=r+1-n,s=0;l<=r;l++,s++)i.appendChild(H(u,new Date(e,t-1,l),l,s));for(l=1;l<=o;l++,s++)i.appendChild(H("",new Date(e,t,l),l,s));for(var f=o+1;f<=42-n&&(1===v.config.showMonths||s%7!=0);f++,s++)i.appendChild(H(c,new Date(e,t+1,f%o),f,s));var p=d("div","dayContainer");return p.appendChild(i),p}function Y(){if(void 0!==v.daysContainer){f(v.daysContainer),v.weekNumbers&&f(v.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==v.config.monthSelectorType)){var e=function(e){return!(void 0!==v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&ev.config.maxDate.getMonth())};v.monthsDropdownContainer.tabIndex=-1,v.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=d("option","flatpickr-monthDropdown-month");n.value=new Date(v.currentYear,t).getMonth().toString(),n.textContent=b(t,v.config.shorthandCurrentMonth,v.l10n),n.tabIndex=-1,v.currentMonth===t&&(n.selected=!0),v.monthsDropdownContainer.appendChild(n)}}}function K(){var e,t=d("div","flatpickr-month"),n=window.document.createDocumentFragment();v.config.showMonths>1||"static"===v.config.monthSelectorType?e=d("span","cur-month"):(v.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),v.monthsDropdownContainer.setAttribute("aria-label",v.l10n.monthAriaLabel),A(v.monthsDropdownContainer,"change",function(e){var t=h(e),n=parseInt(t.value,10);v.changeMonth(n-v.currentMonth),ye("onMonthChange")}),V(),e=v.monthsDropdownContainer);var r=p("cur-year",{tabindex:"-1"}),o=r.getElementsByTagName("input")[0];o.setAttribute("aria-label",v.l10n.yearAriaLabel),v.config.minDate&&o.setAttribute("min",v.config.minDate.getFullYear().toString()),v.config.maxDate&&(o.setAttribute("max",v.config.maxDate.getFullYear().toString()),o.disabled=!!v.config.minDate&&v.config.minDate.getFullYear()===v.config.maxDate.getFullYear());var i=d("div","flatpickr-current-month");return i.appendChild(e),i.appendChild(r),n.appendChild(i),t.appendChild(n),{container:t,yearElement:o,monthElement:e}}function $(){f(v.monthNav),v.monthNav.appendChild(v.prevMonthNav),v.config.showMonths&&(v.yearElements=[],v.monthElements=[]);for(var e=v.config.showMonths;e--;){var t=K();v.yearElements.push(t.yearElement),v.monthElements.push(t.monthElement),v.monthNav.appendChild(t.container)}v.monthNav.appendChild(v.nextMonthNav)}function q(){v.weekdayContainer?f(v.weekdayContainer):v.weekdayContainer=d("div","flatpickr-weekdays");for(var e=v.config.showMonths;e--;){var t=d("div","flatpickr-weekdaycontainer");v.weekdayContainer.appendChild(t)}return J(),v.weekdayContainer}function J(){if(v.weekdayContainer){var e=v.l10n.firstDayOfWeek,n=t(v.l10n.weekdays.shorthand);e>0&&e\n "+n.join("")+"\n \n "}}function Z(e,t){void 0===t&&(t=!0);var n=t?e:e-v.currentMonth;n<0&&!0===v._hidePrevMonthArrow||n>0&&!0===v._hideNextMonthArrow||(v.currentMonth+=n,(v.currentMonth<0||v.currentMonth>11)&&(v.currentYear+=v.currentMonth>11?1:-1,v.currentMonth=(v.currentMonth+12)%12,ye("onYearChange"),V()),Y(),ye("onMonthChange"),_e())}function X(e){return!(!v.config.appendTo||!v.config.appendTo.contains(e))||v.calendarContainer.contains(e)}function Q(e){if(v.isOpen&&!v.config.inline){var t=h(e),n=X(t),r=t===v.input||t===v.altInput||v.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(v.input)||~e.path.indexOf(v.altInput)),o="blur"===e.type?r&&e.relatedTarget&&!X(e.relatedTarget):!r&&!n&&!X(e.relatedTarget),i=!v.config.ignoredFocusElements.some(function(e){return e.contains(t)});o&&i&&(void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&""!==v.input.value&&void 0!==v.input.value&&j(),v.close(),v.config&&"range"===v.config.mode&&1===v.selectedDates.length&&(v.clear(!1),v.redraw()))}}function ee(e){if(!(!e||v.config.minDate&&ev.config.maxDate.getFullYear())){var t=e,n=v.currentYear!==t;v.currentYear=t||v.currentYear,v.config.maxDate&&v.currentYear===v.config.maxDate.getFullYear()?v.currentMonth=Math.min(v.config.maxDate.getMonth(),v.currentMonth):v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&(v.currentMonth=Math.max(v.config.minDate.getMonth(),v.currentMonth)),n&&(v.redraw(),ye("onYearChange"),V())}}function te(e,t){void 0===t&&(t=!0);var n=v.parseDate(e,void 0,t);if(v.config.minDate&&n&&k(n,v.config.minDate,void 0!==t?t:!v.minDateHasTime)<0||v.config.maxDate&&n&&k(n,v.config.maxDate,void 0!==t?t:!v.maxDateHasTime)>0)return!1;if(0===v.config.enable.length&&0===v.config.disable.length)return!0;if(void 0===n)return!1;for(var r=v.config.enable.length>0,o=r?v.config.enable:v.config.disable,a=0,u=void 0;a=u.from.getTime()&&n.getTime()<=u.to.getTime())return r}return!r}function ne(e){return void 0!==v.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&v.daysContainer.contains(e))}function re(e){!(e.target===v._input)||e.relatedTarget&&X(e.relatedTarget)||v.setDate(v._input.value,!0,e.target===v.altInput?v.config.altFormat:v.config.dateFormat)}function oe(e){var t=h(e),n=v.config.wrap?g.contains(t):t===v._input,r=v.config.allowInput,o=v.isOpen&&(!r||!n),i=v.config.inline&&n&&!r;if(13===e.keyCode&&n){if(r)return v.setDate(v._input.value,!0,t===v.altInput?v.config.altFormat:v.config.dateFormat),t.blur();v.open()}else if(X(t)||o||i){var a=!!v.timeContainer&&v.timeContainer.contains(t);switch(e.keyCode){case 13:a?(e.preventDefault(),j(),fe()):pe(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:n&&!v.config.allowInput&&(e.preventDefault(),v.clear());break;case 37:case 39:if(a||n)v.hourElement&&v.hourElement.focus();else if(e.preventDefault(),void 0!==v.daysContainer&&(!1===r||document.activeElement&&ne(document.activeElement))){var u=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(u),z(W(1),0)):z(void 0,u)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;v.daysContainer&&void 0!==t.$i||t===v.input||t===v.altInput?e.ctrlKey?(e.stopPropagation(),ee(v.currentYear-c),z(W(1),0)):a||z(void 0,7*c):t===v.currentYearElement?ee(v.currentYear-c):v.config.enableTime&&(!a&&v.hourElement&&v.hourElement.focus(),j(e),v._debouncedChange());break;case 9:if(a){var l=[v.hourElement,v.minuteElement,v.secondElement,v.amPM].concat(v.pluginElements).filter(function(e){return e}),s=l.indexOf(t);if(-1!==s){var d=l[s+(e.shiftKey?-1:1)];e.preventDefault(),(d||v._input).focus()}}else!v.config.noCalendar&&v.daysContainer&&v.daysContainer.contains(t)&&e.shiftKey&&(e.preventDefault(),v._input.focus())}}if(void 0!==v.amPM&&t===v.amPM)switch(e.key){case v.l10n.amPM[0].charAt(0):case v.l10n.amPM[0].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[0],M(),ke();break;case v.l10n.amPM[1].charAt(0):case v.l10n.amPM[1].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[1],M(),ke()}(n||X(t))&&ye("onKeyDown",e)}function ie(e){if(1===v.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():v.days.firstElementChild.dateObj.getTime(),n=v.parseDate(v.selectedDates[0],void 0,!0).getTime(),r=Math.min(t,v.selectedDates[0].getTime()),o=Math.max(t,v.selectedDates[0].getTime()),i=!1,a=0,u=0,c=r;cr&&ca)?a=c:c>n&&(!u||c0&&l0&&l>u;return d?(c.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){c.classList.remove(e)}),"continue"):i&&!d?"continue":(["startRange","inRange","endRange","notAllowed"].forEach(function(e){c.classList.remove(e)}),void(void 0!==e&&(e.classList.add(t<=v.selectedDates[0].getTime()?"startRange":"endRange"),nt&&l===n&&c.classList.add("endRange"),l>=a&&(0===u||l<=u)&&O(l,n,t)&&c.classList.add("inRange"))))},f=0,p=s.children.length;f0||n.getMinutes()>0||n.getSeconds()>0),v.selectedDates&&(v.selectedDates=v.selectedDates.filter(function(e){return te(e)}),v.selectedDates.length||"min"!==e||P(n),ke()),v.daysContainer&&(de(),void 0!==n?v.currentYearElement[e]=n.getFullYear().toString():v.currentYearElement.removeAttribute(e),v.currentYearElement.disabled=!!r&&void 0!==n&&r.getFullYear()===n.getFullYear())}}function ce(){return v.config.wrap?g.querySelector("[data-input]"):g}function le(){"object"!==i(v.config.locale)&&void 0===S.l10ns[v.config.locale]&&v.config.errorHandler(new Error("flatpickr: invalid locale "+v.config.locale)),v.l10n=e(e({},S.l10ns.default),"object"===i(v.config.locale)?v.config.locale:"default"!==v.config.locale?S.l10ns[v.config.locale]:void 0),m.K="("+v.l10n.amPM[0]+"|"+v.l10n.amPM[1]+"|"+v.l10n.amPM[0].toLowerCase()+"|"+v.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},y),JSON.parse(JSON.stringify(g.dataset||{}))).time_24hr&&void 0===S.defaultConfig.time_24hr&&(v.config.time_24hr=v.l10n.time_24hr),v.formatDate=_(v),v.parseDate=w({config:v.config,l10n:v.l10n})}function se(e){if(void 0!==v.calendarContainer){ye("onPreCalendarPosition");var t=e||v._positionElement,n=Array.prototype.reduce.call(v.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),r=v.calendarContainer.offsetWidth,o=v.config.position.split(" "),i=o[0],a=o.length>1?o[1]:null,u=t.getBoundingClientRect(),c=window.innerHeight-u.bottom,l="above"===i||"below"!==i&&cn,d=window.pageYOffset+u.top+(l?-n-2:t.offsetHeight+2);if(s(v.calendarContainer,"arrowTop",!l),s(v.calendarContainer,"arrowBottom",l),!v.config.inline){var f=window.pageXOffset+u.left,p=!1,h=!1;"center"===a?(f-=(r-u.width)/2,p=!0):"right"===a&&(f-=r-u.width,h=!0),s(v.calendarContainer,"arrowLeft",!p&&!h),s(v.calendarContainer,"arrowCenter",p),s(v.calendarContainer,"arrowRight",h);var g=window.document.body.offsetWidth-(window.pageXOffset+u.right),b=f+r>window.document.body.offsetWidth,y=g+r>window.document.body.offsetWidth;if(s(v.calendarContainer,"rightMost",b),!v.config.static)if(v.calendarContainer.style.top=d+"px",b)if(y){var m=function(){for(var e=null,t=0;tv.currentMonth+v.config.showMonths-1)&&"range"!==v.config.mode;if(v.selectedDateElem=n,"single"===v.config.mode)v.selectedDates=[r];else if("multiple"===v.config.mode){var i=ve(r);i?v.selectedDates.splice(parseInt(i),1):v.selectedDates.push(r)}else"range"===v.config.mode&&(2===v.selectedDates.length&&v.clear(!1,!1),v.latestSelectedDateObj=r,v.selectedDates.push(r),0!==k(r,v.selectedDates[0],!0)&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(M(),o){var a=v.currentYear!==r.getFullYear();v.currentYear=r.getFullYear(),v.currentMonth=r.getMonth(),a&&(ye("onYearChange"),V()),ye("onMonthChange")}if(_e(),Y(),ke(),o||"range"===v.config.mode||1!==v.config.showMonths?void 0!==v.selectedDateElem&&void 0===v.hourElement&&v.selectedDateElem&&v.selectedDateElem.focus():U(n),void 0!==v.hourElement&&void 0!==v.hourElement&&v.hourElement.focus(),v.config.closeOnSelect){var u="single"===v.config.mode&&!v.config.enableTime,c="range"===v.config.mode&&2===v.selectedDates.length&&!v.config.enableTime;(u||c)&&fe()}R()}}v.parseDate=w({config:v.config,l10n:v.l10n}),v._handlers=[],v.pluginElements=[],v.loadedPlugins=[],v._bind=A,v._setHoursFromDate=P,v._positionCalendar=se,v.changeMonth=Z,v.changeYear=ee,v.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);v.input.value="",void 0!==v.altInput&&(v.altInput.value="");void 0!==v.mobileInput&&(v.mobileInput.value="");v.selectedDates=[],v.latestSelectedDateObj=void 0,!0===t&&(v.currentYear=v._initialDate.getFullYear(),v.currentMonth=v._initialDate.getMonth());if(!0===v.config.enableTime){var n=T(),r=n.hours,o=n.minutes,i=n.seconds;I(r,o,i)}v.redraw(),e&&ye("onChange")},v.close=function(){v.isOpen=!1,v.isMobile||(void 0!==v.calendarContainer&&v.calendarContainer.classList.remove("open"),void 0!==v._input&&v._input.classList.remove("active"));ye("onClose")},v._createElement=d,v.destroy=function(){void 0!==v.config&&ye("onDestroy");for(var e=v._handlers.length;e--;){var t=v._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(v._handlers=[],v.mobileInput)v.mobileInput.parentNode&&v.mobileInput.parentNode.removeChild(v.mobileInput),v.mobileInput=void 0;else if(v.calendarContainer&&v.calendarContainer.parentNode)if(v.config.static&&v.calendarContainer.parentNode){var n=v.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else v.calendarContainer.parentNode.removeChild(v.calendarContainer);v.altInput&&(v.input.type="text",v.altInput.parentNode&&v.altInput.parentNode.removeChild(v.altInput),delete v.altInput);v.input&&(v.input.type=v.input._type,v.input.classList.remove("flatpickr-input"),v.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete v[e]}catch(e){}})},v.isEnabled=te,v.jumpToDate=L,v.open=function(e,t){void 0===t&&(t=v._positionElement);if(!0===v.isMobile){if(e){e.preventDefault();var n=h(e);n&&n.blur()}return void 0!==v.mobileInput&&(v.mobileInput.focus(),v.mobileInput.click()),void ye("onOpen")}if(v._input.disabled||v.config.inline)return;var r=v.isOpen;v.isOpen=!0,r||(v.calendarContainer.classList.add("open"),v._input.classList.add("active"),ye("onOpen"),se(t));!0===v.config.enableTime&&!0===v.config.noCalendar&&(!1!==v.config.allowInput||void 0!==e&&v.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return v.hourElement.select()},50))},v.redraw=de,v.set=function(e,t){if(null!==e&&"object"===i(e))for(var r in Object.assign(v.config,e),e)void 0!==he[r]&&he[r].forEach(function(e){return e()});else v.config[e]=t,void 0!==he[e]?he[e].forEach(function(e){return e()}):n.indexOf(e)>-1&&(v.config[e]=l(t));v.redraw(),ke(!0)},v.setDate=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=v.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return v.clear(t);ge(e,n),v.latestSelectedDateObj=v.selectedDates[v.selectedDates.length-1],v.redraw(),L(void 0,t),P(),0===v.selectedDates.length&&v.clear(!1);ke(t),t&&ye("onChange")},v.toggle=function(e){if(!0===v.isOpen)return v.close();v.open(e)};var he={locale:[le,J],showMonths:[$,E,q],minDate:[L],maxDate:[L]};function ge(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return v.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[v.parseDate(e,t)];else if("string"==typeof e)switch(v.config.mode){case"single":case"time":n=[v.parseDate(e,t)];break;case"multiple":n=e.split(v.config.conjunction).map(function(e){return v.parseDate(e,t)});break;case"range":n=e.split(v.l10n.rangeSeparator).map(function(e){return v.parseDate(e,t)})}else v.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));v.selectedDates=v.config.allowInvalidPreload?n:n.filter(function(e){return e instanceof Date&&te(e,!1)}),"range"===v.config.mode&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function be(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?v.parseDate(e,void 0,!0):e&&"object"===i(e)&&e.from&&e.to?{from:v.parseDate(e.from,void 0),to:v.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function ye(e,t){if(void 0!==v.config){var n=v.config[e];if(void 0!==n&&n.length>0)for(var r=0;n[r]&&r1||"static"===v.config.monthSelectorType?v.monthElements[t].textContent=b(n.getMonth(),v.config.shorthandCurrentMonth,v.l10n)+" ":v.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),v._hidePrevMonthArrow=void 0!==v.config.minDate&&(v.currentYear===v.config.minDate.getFullYear()?v.currentMonth<=v.config.minDate.getMonth():v.currentYearv.config.maxDate.getMonth():v.currentYear>v.config.maxDate.getFullYear()))}function we(e){return v.selectedDates.map(function(t){return v.formatDate(t,e)}).filter(function(e,t,n){return"range"!==v.config.mode||v.config.enableTime||n.indexOf(e)===t}).join("range"!==v.config.mode?v.config.conjunction:v.l10n.rangeSeparator)}function ke(e){void 0===e&&(e=!0),void 0!==v.mobileInput&&v.mobileFormatStr&&(v.mobileInput.value=void 0!==v.latestSelectedDateObj?v.formatDate(v.latestSelectedDateObj,v.mobileFormatStr):""),v.input.value=we(v.config.dateFormat),void 0!==v.altInput&&(v.altInput.value=we(v.config.altFormat)),!1!==e&&ye("onValueUpdate")}function Oe(e){var t=h(e),n=v.prevMonthNav.contains(t),r=v.nextMonthNav.contains(t);n||r?Z(n?-1:1):v.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?v.changeYear(v.currentYear+1):t.classList.contains("arrowDown")&&v.changeYear(v.currentYear-1)}return function(){v.element=v.input=g,v.isOpen=!1,function(){var t=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=e(e({},JSON.parse(JSON.stringify(g.dataset||{}))),y),i={};v.config.parseDate=o.parseDate,v.config.formatDate=o.formatDate,Object.defineProperty(v.config,"enable",{get:function(){return v.config._enable},set:function(e){v.config._enable=be(e)}}),Object.defineProperty(v.config,"disable",{get:function(){return v.config._disable},set:function(e){v.config._disable=be(e)}});var a="time"===o.mode;if(!o.dateFormat&&(o.enableTime||a)){var u=S.defaultConfig.dateFormat||r.dateFormat;i.dateFormat=o.noCalendar||a?"H:i"+(o.enableSeconds?":S":""):u+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||a)&&!o.altFormat){var c=S.defaultConfig.altFormat||r.altFormat;i.altFormat=o.noCalendar||a?"h:i"+(o.enableSeconds?":S K":" K"):c+" h:i"+(o.enableSeconds?":S":"")+" K"}Object.defineProperty(v.config,"minDate",{get:function(){return v.config._minDate},set:ue("min")}),Object.defineProperty(v.config,"maxDate",{get:function(){return v.config._maxDate},set:ue("max")});var s=function(e){return function(t){v.config["min"===e?"_minTime":"_maxTime"]=v.parseDate(t,"H:i:S")}};Object.defineProperty(v.config,"minTime",{get:function(){return v.config._minTime},set:s("min")}),Object.defineProperty(v.config,"maxTime",{get:function(){return v.config._maxTime},set:s("max")}),"time"===o.mode&&(v.config.noCalendar=!0,v.config.enableTime=!0),Object.assign(v.config,i,o);for(var d=0;d-1?v.config[p]=l(f[p]).map(D).concat(v.config[p]):void 0===o[p]&&(v.config[p]=f[p])}o.altInputClass||(v.config.altInputClass=ce().className+" "+v.config.altInputClass),ye("onParseConfig")}(),le(),v.input=ce(),v.input?(v.input._type=v.input.type,v.input.type="text",v.input.classList.add("flatpickr-input"),v._input=v.input,v.config.altInput&&(v.altInput=d(v.input.nodeName,v.config.altInputClass),v._input=v.altInput,v.altInput.placeholder=v.input.placeholder,v.altInput.disabled=v.input.disabled,v.altInput.required=v.input.required,v.altInput.tabIndex=v.input.tabIndex,v.altInput.type="text",v.input.setAttribute("type","hidden"),!v.config.static&&v.input.parentNode&&v.input.parentNode.insertBefore(v.altInput,v.input.nextSibling)),v.config.allowInput||v._input.setAttribute("readonly","readonly"),v._positionElement=v.config.positionElement||v._input):v.config.errorHandler(new Error("Invalid input element specified")),function(){v.selectedDates=[],v.now=v.parseDate(v.config.now)||new Date;var e=v.config.defaultDate||("INPUT"!==v.input.nodeName&&"TEXTAREA"!==v.input.nodeName||!v.input.placeholder||v.input.value!==v.input.placeholder?v.input.value:null);e&&ge(e,v.config.dateFormat),v._initialDate=v.selectedDates.length>0?v.selectedDates[0]:v.config.minDate&&v.config.minDate.getTime()>v.now.getTime()?v.config.minDate:v.config.maxDate&&v.config.maxDate.getTime()0&&(v.latestSelectedDateObj=v.selectedDates[0]),void 0!==v.config.minTime&&(v.config.minTime=v.parseDate(v.config.minTime,"H:i")),void 0!==v.config.maxTime&&(v.config.maxTime=v.parseDate(v.config.maxTime,"H:i")),v.minDateHasTime=!!v.config.minDate&&(v.config.minDate.getHours()>0||v.config.minDate.getMinutes()>0||v.config.minDate.getSeconds()>0),v.maxDateHasTime=!!v.config.maxDate&&(v.config.maxDate.getHours()>0||v.config.maxDate.getMinutes()>0||v.config.maxDate.getSeconds()>0)}(),v.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=v.currentMonth),void 0===t&&(t=v.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:v.l10n.daysInMonth[e]}},v.isMobile||function(){var e=window.document.createDocumentFragment();if(v.calendarContainer=d("div","flatpickr-calendar"),v.calendarContainer.tabIndex=-1,!v.config.noCalendar){if(e.appendChild((v.monthNav=d("div","flatpickr-months"),v.yearElements=[],v.monthElements=[],v.prevMonthNav=d("span","flatpickr-prev-month"),v.prevMonthNav.innerHTML=v.config.prevArrow,v.nextMonthNav=d("span","flatpickr-next-month"),v.nextMonthNav.innerHTML=v.config.nextArrow,$(),Object.defineProperty(v,"_hidePrevMonthArrow",{get:function(){return v.__hidePrevMonthArrow},set:function(e){v.__hidePrevMonthArrow!==e&&(s(v.prevMonthNav,"flatpickr-disabled",e),v.__hidePrevMonthArrow=e)}}),Object.defineProperty(v,"_hideNextMonthArrow",{get:function(){return v.__hideNextMonthArrow},set:function(e){v.__hideNextMonthArrow!==e&&(s(v.nextMonthNav,"flatpickr-disabled",e),v.__hideNextMonthArrow=e)}}),v.currentYearElement=v.yearElements[0],_e(),v.monthNav)),v.innerContainer=d("div","flatpickr-innerContainer"),v.config.weekNumbers){var t=function(){v.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",v.l10n.weekAbbreviation));var t=d("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,r=t.weekNumbers;v.innerContainer.appendChild(n),v.weekNumbers=r,v.weekWrapper=n}v.rContainer=d("div","flatpickr-rContainer"),v.rContainer.appendChild(q()),v.daysContainer||(v.daysContainer=d("div","flatpickr-days"),v.daysContainer.tabIndex=-1),Y(),v.rContainer.appendChild(v.daysContainer),v.innerContainer.appendChild(v.rContainer),e.appendChild(v.innerContainer)}v.config.enableTime&&e.appendChild(function(){v.calendarContainer.classList.add("hasTime"),v.config.noCalendar&&v.calendarContainer.classList.add("noCalendar"),v.timeContainer=d("div","flatpickr-time"),v.timeContainer.tabIndex=-1;var e=d("span","flatpickr-time-separator",":"),t=p("flatpickr-hour",{"aria-label":v.l10n.hourAriaLabel});v.hourElement=t.getElementsByTagName("input")[0];var n=p("flatpickr-minute",{"aria-label":v.l10n.minuteAriaLabel});if(v.minuteElement=n.getElementsByTagName("input")[0],v.hourElement.tabIndex=v.minuteElement.tabIndex=-1,v.hourElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getHours():v.config.time_24hr?v.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(v.config.defaultHour)),v.minuteElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getMinutes():v.config.defaultMinute),v.hourElement.setAttribute("step",v.config.hourIncrement.toString()),v.minuteElement.setAttribute("step",v.config.minuteIncrement.toString()),v.hourElement.setAttribute("min",v.config.time_24hr?"0":"1"),v.hourElement.setAttribute("max",v.config.time_24hr?"23":"12"),v.minuteElement.setAttribute("min","0"),v.minuteElement.setAttribute("max","59"),v.timeContainer.appendChild(t),v.timeContainer.appendChild(e),v.timeContainer.appendChild(n),v.config.time_24hr&&v.timeContainer.classList.add("time24hr"),v.config.enableSeconds){v.timeContainer.classList.add("hasSeconds");var r=p("flatpickr-second");v.secondElement=r.getElementsByTagName("input")[0],v.secondElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getSeconds():v.config.defaultSeconds),v.secondElement.setAttribute("step",v.minuteElement.getAttribute("step")),v.secondElement.setAttribute("min","0"),v.secondElement.setAttribute("max","59"),v.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),v.timeContainer.appendChild(r)}return v.config.time_24hr||(v.amPM=d("span","flatpickr-am-pm",v.l10n.amPM[u((v.latestSelectedDateObj?v.hourElement.value:v.config.defaultHour)>11)]),v.amPM.title=v.l10n.toggleTitle,v.amPM.tabIndex=-1,v.timeContainer.appendChild(v.amPM)),v.timeContainer}()),s(v.calendarContainer,"rangeMode","range"===v.config.mode),s(v.calendarContainer,"animate",!0===v.config.animate),s(v.calendarContainer,"multiMonth",v.config.showMonths>1),v.calendarContainer.appendChild(e);var o=void 0!==v.config.appendTo&&void 0!==v.config.appendTo.nodeType;if((v.config.inline||v.config.static)&&(v.calendarContainer.classList.add(v.config.inline?"inline":"static"),v.config.inline&&(!o&&v.element.parentNode?v.element.parentNode.insertBefore(v.calendarContainer,v._input.nextSibling):void 0!==v.config.appendTo&&v.config.appendTo.appendChild(v.calendarContainer)),v.config.static)){var i=d("div","flatpickr-wrapper");v.element.parentNode&&v.element.parentNode.insertBefore(i,v.element),i.appendChild(v.element),v.altInput&&i.appendChild(v.altInput),i.appendChild(v.calendarContainer)}v.config.static||v.config.inline||(void 0!==v.config.appendTo?v.config.appendTo:window.document.body).appendChild(v.calendarContainer)}(),function(){if(v.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(v.element.querySelectorAll("[data-"+e+"]"),function(t){return A(t,"click",v[e])})}),v.isMobile)!function(){var e=v.config.enableTime?v.config.noCalendar?"time":"datetime-local":"date";v.mobileInput=d("input",v.input.className+" flatpickr-mobile"),v.mobileInput.tabIndex=1,v.mobileInput.type=e,v.mobileInput.disabled=v.input.disabled,v.mobileInput.required=v.input.required,v.mobileInput.placeholder=v.input.placeholder,v.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",v.selectedDates.length>0&&(v.mobileInput.defaultValue=v.mobileInput.value=v.formatDate(v.selectedDates[0],v.mobileFormatStr)),v.config.minDate&&(v.mobileInput.min=v.formatDate(v.config.minDate,"Y-m-d")),v.config.maxDate&&(v.mobileInput.max=v.formatDate(v.config.maxDate,"Y-m-d")),v.input.getAttribute("step")&&(v.mobileInput.step=String(v.input.getAttribute("step"))),v.input.type="hidden",void 0!==v.altInput&&(v.altInput.type="hidden");try{v.input.parentNode&&v.input.parentNode.insertBefore(v.mobileInput,v.input.nextSibling)}catch(e){}A(v.mobileInput,"change",function(e){v.setDate(h(e).value,!1,v.mobileFormatStr),ye("onChange"),ye("onClose")})}();else{var e=c(ae,50);v._debouncedChange=c(R,x),v.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(v.daysContainer,"mouseover",function(e){"range"===v.config.mode&&ie(h(e))}),A(window.document.body,"keydown",oe),v.config.inline||v.config.static||A(window,"resize",e),void 0!==window.ontouchstart?A(window.document,"touchstart",Q):A(window.document,"click",Q),A(window.document,"focus",Q,{capture:!0}),!0===v.config.clickOpens&&(A(v._input,"focus",v.open),A(v._input,"click",v.open)),void 0!==v.daysContainer&&(A(v.monthNav,"click",Oe),A(v.monthNav,["keyup","increment"],N),A(v.daysContainer,"click",pe)),void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&(A(v.timeContainer,["increment"],j),A(v.timeContainer,"blur",j,{capture:!0}),A(v.timeContainer,"click",F),A([v.hourElement,v.minuteElement],["focus","click"],function(e){return h(e).select()}),void 0!==v.secondElement&&A(v.secondElement,"focus",function(){return v.secondElement&&v.secondElement.select()}),void 0!==v.amPM&&A(v.amPM,"click",function(e){j(e),R()})),v.config.allowInput&&A(v._input,"blur",re)}}(),(v.selectedDates.length||v.config.noCalendar)&&(v.config.enableTime&&P(v.config.noCalendar?v.latestSelectedDateObj||v.config.minDate:void 0),ke(!1)),E();var t=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!v.isMobile&&t&&se(),ye("onReady")}(),v}function E(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),r=[],o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:t.key)+(arguments.length>2?arguments[2]:void 0)})}},{key:"key",get:function(){return this.childDescriptor.key}},{key:"parentNotation",get:function(){return"".concat(this.parentKlass.constructor.name,"#").concat(this.parentPropertySignature)}},{key:"childNotation",get:function(){return"".concat(this.childKlass.constructor.name,"#").concat(this.childPropertySignature)}},{key:"parentTopic",get:function(){return this._getTopic(this.parentDescriptor)}},{key:"childTopic",get:function(){return this._getTopic(this.childDescriptor)}},{key:"parentPropertySignature",get:function(){return this._extractTopicSignature(this.parentTopic)}},{key:"childPropertySignature",get:function(){return this._extractTopicSignature(this.childTopic)}}]),a(e,[{key:"assert",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";!0!==e&&this.error("{child} does not properly override {parent}"+t)}},{key:"error",value:function(e){var t=this;throw e=e.replace("{parent}",function(e){return t.parentNotation}).replace("{child}",function(e){return t.childNotation}),new SyntaxError(e)}}]),e}();function l(e){return e.hasOwnProperty("value")?"data":e.hasOwnProperty("get")||e.hasOwnProperty("set")?"accessor":"data"}function s(e,t,n){n.assert(e.length===t.length)}function d(e,t,n){var r=l(e),i=l(t);switch(r!==i&&n.error('descriptor types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"data":!function(e,t,n){var r=o(e.value),i=o(t.value);switch("undefined"===r&&"undefined"===i&&n.error("descriptor values are both undefined. (class properties are are not currently supported)'"),r!==i&&("function"===i&&void 0===r||void 0!==r)&&n.error('value types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"function":s(e.value,t.value,n);break;default:n.error('Unexpected error. Please file a bug with: {parent} is "'.concat(r,'", {child} is "').concat(i,'"'))}}(e,t,n);break;case"accessor":!function(e,t,n){var r="function"==typeof e.get,o="function"==typeof t.get,i="function"==typeof e.set,a="function"==typeof t.set;(r||o)&&(!r&&i&&n.error("{parent} is setter but {child} is getter"),!o&&a&&n.error("{parent} is getter but {child} is setter"),s(e.get,t.get,n)),(i||a)&&(!i&&r&&n.error("{parent} is getter but {child} is setter"),!a&&o&&n.error("{parent} is setter but {child} is getter"),s(e.set,t.set,n))}(e,t,n)}}var f=[function(e){return e.toLowerCase()},function(e){return e.toUpperCase()},function(e){return e+"s"},function(e){return e.slice(0,-1)},function(e){return e.slice(1,e.length)}];function p(e,t,n){n.key=t;var r=Object.getPrototypeOf(e),o=Object.getOwnPropertyDescriptor(r,t),i=new c(r,e,o,n);if(void 0===o){var a=function(e,t){for(var n=0,r=f.length;n=0&&l.splice(t,1)}function g(e){var t=document.createElement("style");return e.attrs.type="text/css",b(t,e.attrs),p(e,t),t}function b(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=c++;n=u||(u=g(t)),r=v.bind(null,n,a,!1),o=v.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",b(t,e.attrs),p(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=s(r));o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){h(n),n.href&&URL.revokeObjectURL(n.href)}):(n=g(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){h(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!==("undefined"==typeof document?"undefined":i(document)))throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"===i(t.attrs)?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=f(e,t);return d(n,t),function(e){for(var o=[],i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?"s":"")+" required, but only "+t.length+" present")}},function(e,t,n){var r=n(46);t.a=r.a},function(e,t,n){var r=n(65);t.a=r.a},function(e,t,n){var r=n(18);t.a=function(e,t,n){"__proto__"==t&&r.a?Object(r.a)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(70),o=function(){try{var e=Object(r.a)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.a=o},function(e,t,n){var r=n(5),o=n(8),i="[object AsyncFunction]",a="[object Function]",u="[object GeneratorFunction]",c="[object Proxy]";t.a=function(e){if(!Object(o.a)(e))return!1;var t=Object(r.a)(e);return t==a||t==u||t==i||t==c}},function(e,t,n){(function(e){function n(e){"@babel/helpers - typeof";return(n="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)}var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.a=r}).call(t,n(21))},function(e,t){function n(e){"@babel/helpers - typeof";return(n="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)}var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){var r=n(23),o=n(79),i=n(80);t.a=function(e,t){return Object(i.a)(Object(o.a)(e,t,r.a),e+"")}},function(e,t,n){t.a=function(e){return e}},function(e,t,n){t.a=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(11),o=n(12),i=n(27),a=n(8);function u(e){"@babel/helpers - typeof";return(u="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)}t.a=function(e,t,n){if(!Object(a.a)(n))return!1;var c=u(t);return!!("number"==c?Object(o.a)(n)&&Object(i.a)(t,n.length):"string"==c&&t in n)&&Object(r.a)(n[t],e)}},function(e,t,n){var r=9007199254740991;t.a=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="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)}var o=9007199254740991,i=/^(?:0|[1-9]\d*)$/;t.a=function(e,t){var n=r(e);return!!(t=null==t?o:t)&&("number"==n||"symbol"!=n&&i.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){var r=n(109);t.a=function(e){return null==e?"":Object(r.a)(e)}},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n59)}},function(e,t,n){var r=n(123);n.d(t,"a",function(){return r.b});r.a},function(e,t,n){var r=n(124);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),o=n(51),i=n(53),a=n(57),u=n(61),c=n(16),l=n(113),s=n(115),d=n(129);n.d(t,"BooleanEditor",function(){return r.a}),n.d(t,"BooleanRenderer",function(){return o.a}),n.d(t,"BooleanFilter",function(){return i.a}),n.d(t,"NumberEditor",function(){return a.a}),n.d(t,"TextEditor",function(){return u.a}),n.d(t,"TemplateRenderer",function(){return c.a}),n.d(t,"ImageRenderer",function(){return l.a}),n.d(t,"DateTimeFilter",function(){return s.a}),n.d(t,"DateTimeEditor",function(){return d.a})},function(e,t,n){var r=n(44);t.a=r.a},function(e,t,n){var r=n(0),o=n(15);function i(e){"@babel/helpers - typeof";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,t){for(var n=0;n-1||!(n.indexOf(r)>-1)&&e}}]),n}();t.a=s},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(t&&t.hasOwnProperty(e)&&null!==t[e])n=t[e];else if(t.hasOwnProperty("colDef")&&t.colDef.hasOwnProperty(e)&&null!==t.colDef[e])n=t.colDef[e];else{var o=null;if(t.hasOwnProperty("context")&&(o=t.context.AGridComponentsMetaConfig||t.context.meta),o&&o.hasOwnProperty(t.column.colId)&&o[t.column.colId].hasOwnProperty(e)&&null!==o[t.column.colId][e])n=o[t.column.colId][e];else if(o&&o.hasOwnProperty(e)&&null!==o[e])n=o[e];else{var i=t.context;n=i&&i.hasOwnProperty(e)&&null!==i[e]?i[e]:r}}return void 0!==n?n:r}},{key:"getWin",value:function(e){var t=this.getOption("window",e)||window||null;if(!t)throw new Error("Current environment does not support window");return t}},{key:"getDoc",value:function(e){var t=this.getOption("document",e)||document||null;if(!t)throw new Error("Current environment does not support document");return t}}]),e}();t.a=o},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(48);n.n(u);function c(e){"@babel/helpers - typeof";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)}function l(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).setChecked(r),e.setListener(o),e.setDisabled(!1),e}return function(e,t,n){t&&l(e.prototype,t),n&&l(e,n)}(n,[{key:"init",value:function(e){this._params=e,this._onClick=this._onClick.bind(this),this._onKeydown=this._onKeydown.bind(this),this._gui=this.getDoc(e).createElement("div"),this._gui.className="boolSwitch__wrapper",this._gui.tabIndex=-1,this.render()}},{key:"render",value:function(){var e=this.getDoc(this._params),t=document.createElement("div");t.className="boolSwitch",this._input=e.createElement("input"),this._input.id="el-".concat(Math.random()),this._input.name="checkbox",this._input.className="boolSwitch__checkbox",this._input.type="checkbox",this._input.checked=this.isChecked(),this._input.disabled=this.isDisabled(),this._input.tabIndex="0";var n=document.createElement("label");n.className="boolSwitch__label",n.for=this._input.id,n.innerHTML='\n \n \n ',t.appendChild(this._input),t.appendChild(n),t.addEventListener("click",this._onClick),this._gui.addEventListener("keydown",this._onKeydown),this._gui.appendChild(t)}},{key:"destroy",value:function(){this._gui.querySelector(".boolSwitch").removeEventListener("click",this._onClick),this._gui.removeEventListener("keydown",this._onKeydown)}},{key:"focus",value:function(){this._gui.focus(),this._input.focus()}},{key:"setListener",value:function(e){this._listener=e}},{key:"getListener",value:function(){return this._listener}},{key:"setChecked",value:function(e){this._checked=e,this._input&&(this._input.checked=e)}},{key:"isChecked",value:function(){return this._checked}},{key:"toggle",value:function(){this.setChecked(!this.isChecked())}},{key:"setDisabled",value:function(e){this._disabled=e,this._input&&(this._input.disabled=e)}},{key:"isDisabled",value:function(){return this._disabled}},{key:"_onClick",value:function(e){if(this._disabled)return!1;this.toggle(),this._listener&&this._listener(this)}},{key:"_onKeydown",value:function(e){if(this._disabled)return!1;var t=e.which||e.keyCode;32==t?(this.toggle(),this._listener&&this._listener(this),e.stopPropagation()):39==t?(this.setChecked(!0),this._listener&&this._listener(this),e.stopPropagation()):37==t&&(this.setChecked(!1),this._listener&&this._listener(this),e.stopPropagation())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_onClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onClick"),r.prototype),p(r.prototype,"_onKeydown",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onKeydown"),r.prototype),r);t.a=h},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n-1)if(r.length&&"switch"!==r)this._gui.innerHTML=r;else{var u=this._getSwitcher(e);u.setChecked(!0),this._gui.innerHTML="",this._gui.appendChild(u.getGui())}else if(a.indexOf(n)>-1)if(o.length&&"switch"!==o)this._gui.innerHTML=o;else{var c=this._getSwitcher(e);c.setChecked(!1),this._gui.innerHTML="",this._gui.appendChild(c.getGui())}else this._gui.innerHTML=n}return!0}},{key:"_getSwitcher",value:function(e){return this._switcher||(this._switcher=new o.a,this._switcher.setDisabled(!0),this._switcher.init(e)),this._switcher}}]),n}();t.a=s},function(e,t,n){var r=n(54);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(55);n.n(u);function c(e){"@babel/helpers - typeof";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)}function l(e,t){for(var n=0;n\n \n\n\n \n \n ").concat(r?"":'\n \n ")," \n \n "),i.addEventListener("change",this._onRadioChange),this._gui.appendChild(i);var a=document.createElement("div");a.className="booleanFilter__body__applyPanel ag-filter-apply-panel ag-hidden",a.innerHTML='\n \n \n \n "),(n||r||o)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a)}},{key:"destroy",value:function(){this._gui.querySelector(".booleanFilter__body__labels").removeEventListener("change",this._onRadioChange),this._gui.querySelector(".booleanFilter__body__applyPanel").removeEventListener("click",this._ApplyFilterPanelButtonClick)}},{key:"doesFilterPass",value:function(e){var t=String(this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter(e):this._params.valueGetter(e));return"true"===this._filterText?this._trueValue.indexOf(t)>-1:this._falseValue.indexOf(t)>-1}},{key:"isFilterActive",value:function(){return null!==this._filterText&&void 0!==this._filterText&&""!==this._filterText}},{key:"getModel",value:function(){return this.isFilterActive()?{value:this._filterText,filterType:"boolean"}:null}},{key:"setModel",value:function(e){this._filterText=e&&e.hasOwnProperty("value")?e.value:"";var t=String(this._filterText);this._gui.querySelector(".booleanFilter__body").querySelectorAll('input[type="radio"]').forEach(function(e){e.value==t?e.checked=!0:e.checked=!1})}},{key:"getModelAsString",value:function(e){return e?function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}("true"===e.value?this._booleanFilterTranslation.true:this._booleanFilterTranslation.false):""}},{key:"reset",value:function(){var e=this._gui.querySelector(".booleanFilter__body");e.querySelectorAll('input[type="radio"]').forEach(function(e){e.checked=!1}),e.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),e.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{e.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(e){}this._filterText=null}},{key:"_onRadioChange",value:function(e,t){var n=t.target;this._filterText=n.value;var r=this._gui.querySelector(".booleanFilter__body");if(r)if(n.classList.contains("true-input")){r.querySelector(".ag-wrapper-true").classList.add("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else if(n.classList.contains("false-input")){r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.add("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else{r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.add("ag-checked")}catch(t){}}!1===e&&this._params.filterChangedCallback()}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_ApplyFilterPanelButtonClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_ApplyFilterPanelButtonClick"),r.prototype),r);t.a=g},function(e,t,n){var r=n(56);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".booleanFilter__body__labels label{display:block;padding:6px}.booleanFilter__body__labels label{display:block;padding:6px 0}.booleanFilter__body__labels label span{padding-left:6px}\n",""])},function(e,t,n){var r=n(58);t.a=r.a},function(e,t,n){var r,o=n(0),i=n(1),a=n(2),u=n(59);n.n(u);function c(e){"@babel/helpers - typeof";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)}function l(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&Object(o.a)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(28),o=n(94),i=n(12);t.a=function(e){return Object(i.a)(e)?Object(r.a)(e,!0):Object(o.a)(e)}},function(e,t,n){t.a=function(e,t){for(var n=-1,r=Array(e);++n"']/g,a=RegExp(i.source);t.a=function(e){return(e=Object(o.a)(e))&&a.test(e)?e.replace(i,r.a):e}},function(e,t,n){var r=n(108),o=Object(r.a)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.a=o},function(e,t,n){t.a=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){var r=n(9),o=n(34),i=n(29),a=n(110),u=1/0,c=r.a?r.a.prototype:void 0,l=c?c.toString:void 0;t.a=function e(t){if("string"==typeof t)return t;if(Object(i.a)(t))return Object(o.a)(t,e)+"";if(Object(a.a)(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-u?"-0":n}},function(e,t,n){var r=n(5),o=n(6);function i(e){"@babel/helpers - typeof";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)}var a="[object Symbol]";t.a=function(e){return"symbol"==i(e)||Object(o.a)(e)&&Object(r.a)(e)==a}},function(e,t,n){t.a=/<%-([\s\S]+?)%>/g},function(e,t,n){t.a=/<%([\s\S]+?)%>/g},function(e,t,n){var r=n(114);t.a=r.a},function(e,t,n){var r=n(16);function o(e){"@babel/helpers - typeof";return(o="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 i(e,t){for(var n=0;n\n '):e.renderTemplate=r,a(l(n.prototype),"refresh",this).call(this,e,t)}}]),n}();t.a=s},function(e,t,n){var r=n(116);t.a=r.a},function(e,t,n){var r,o,i,a,u,c,l,s,d,f,p,h,g,b=n(1),y=n(2),m=n(37),v=n(38),_=n(40),w=n(41),k=n(0),O=n(127);n.n(O);function C(e){"@babel/helpers - typeof";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)}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var n=0;n-1?R:this._filterOptions[0]),this.state.type=this._defaultOption;var i=(x(t={},R,o(R,"Equals")),x(t,L,o(R,"Not equal")),x(t,F,o(F,"Less than")),x(t,G,o(G,"Greater than")),x(t,H,o(H,"In range")),t);this._gui=document.createElement("div"),this._gui.className="dateTimeFilter ag-filter-body-wrapper",this._gui.innerHTML='\n \n
\n
\n
\n
\n
\n
\n '),this._filterTimeInput.init(e),this._filterTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filter=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._filterToDateTimeInput.init(e),this._filterToDateTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filterTo=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._gui.querySelector(".ag-filter-date-from").appendChild(this._filterTimeInput.getGui()),this._gui.querySelector(".ag-filter-date-to").appendChild(this._filterToDateTimeInput.getGui()),this._gui.querySelector(".ag-filter-select").addEventListener("change",this._onTypeChange),this.setState(this._state)}},{key:"destroy",value:function(){this.off(n.ON_CONDITION_CHANGED),this._filterTimeInput.destroy(),this._filterToDateTimeInput.destroy(),this._gui.querySelector(".ag-filter-select").removeEventListener("change",this._onTypeChange),this.reset()}},{key:"reset",value:function(){this.state.filter=null,this.state.filterTo=null,this._filterTimeInput.reset(),this._filterToDateTimeInput.reset(),this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){e=e||{},this.state.filter=e.filter||null,this.state.filterTo=e.filterTo||null,this.state.type=e.type||this._defaultOption;var t=this._gui,r=this._filterOptions,o=t.querySelector(".ag-filter-select"),i=this._filterTimeInput,a=this._filterToDateTimeInput;if(o.selectedIndex=r.indexOf(this.state.type),i.setDate(this.state.filter),a.setDate(this.state.filterTo),"createEvent"in document){var u=document.createEvent("HTMLEvents");u.initEvent("change",!1,!0),o.dispatchEvent(u)}else o.fireEvent("onchange");this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"_onTypeChange",value:function(e){var t=e.target,r=this._gui.querySelector(".ag-filter-date-to");this.state.type=t.options[t.selectedIndex].value,this.state.type===H?r.classList.remove("ag-hidden"):r.classList.add("ag-hidden"),this.notify(n.ON_CONDITION_CHANGED,this.state)}}]),n}(),u.ON_CONDITION_CHANGED="ConditionPanel.ON_CONDITION_CHANGED",A(o=c,"ON_CONDITION_CHANGED",[m.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_CONDITION_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),a=A(o.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{type:R,filter:null,filterTo:null}}}),A(o.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),A(o.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),A(o.prototype,"_onTypeChange",[b.a],Object.getOwnPropertyDescriptor(o.prototype,"_onTypeChange"),o.prototype),r=o))||r,B=Object(_.a)((h=p=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i \n ').concat(t("andCondition","AND"),'\n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n '),this._gui.appendChild(this._operatorPanel),this._operatorPanel.addEventListener("change",this._onOperatorChanged),this._gui.appendChild(this._secondConditionPanel.getGui())}},{key:"destroy",value:function(){this._firstConditionPanel.destroy(),this._secondConditionPanel.destroy(),this._operatorPanel.removeEventListener("change",this._onOperatorChanged),this.off(n.ON_JOIN_CONDITION_CHANGED),this.reset()}},{key:"reset",value:function(){this._firstConditionPanel.reset(),this._secondConditionPanel.reset(),this.notify(z.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){var t=this;e=e||{},this.state.operator=e.operator||W,this.state.condition1=e.condition1||null,this.state.condition2=e.condition2||null,this._firstConditionPanel.setState(this.state.condition1),this._secondConditionPanel.setState(this.state.condition2),this._operatorPanel.querySelectorAll("input").forEach(function(e){e.classList.contains(t.state.operator)?e.checked=!0:e.checked=!1}),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onOperatorChanged",value:function(e){var t=e.target;this.state.operator=t.value,t.classList.contains("OR")?(this._operatorPanel.querySelector(".ag-wrapper-or").classList.add("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.remove("ag-checked")):(this._operatorPanel.querySelector(".ag-wrapper-or").classList.remove("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.add("ag-checked")),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onFirstConditionChanged",value:function(e){if(this.state.condition1=e,!this.getOption("suppressAndOrCondition",this._params,!1)){var t=this.state.condition1,r=t.filter,o=t.filterTo,i=t.type,a=this._secondConditionPanel.getGui(),u=this._operatorPanel;(i===H?!r||!o:!r)?(a.classList.add("ag-hidden"),u.classList.add("ag-hidden")):(a.classList.remove("ag-hidden"),u.classList.remove("ag-hidden"))}this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onSecondConditionChanged",value:function(e){this.state.condition2=e,this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}}]),n}(),p.ON_JOIN_CONDITION_CHANGED="JoinConditionPanel.ON_JOIN_CONDITION_CHANGED",A(s=h,"ON_JOIN_CONDITION_CHANGED",[m.a],(d=(d=Object.getOwnPropertyDescriptor(s,"ON_JOIN_CONDITION_CHANGED"))?d.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return d}}),s),f=A(s.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{condition1:{},condition2:{},operator:W}}}),A(s.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"init"),s.prototype),A(s.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"destroy"),s.prototype),A(s.prototype,"_onOperatorChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onOperatorChanged"),s.prototype),A(s.prototype,"_onFirstConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onFirstConditionChanged"),s.prototype),A(s.prototype,"_onSecondConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onSecondConditionChanged"),s.prototype),l=s))||l,Y=(A((g=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i').concat(n("clearFilter","Clear Filter"),'\n \n \n "),(r||o||i)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a),this._state=this._JoinConditionPanel.state,this._params=e,this._doesFilterPassOptions={enableTime:this.getOption("dateTimeEnableTime",this._params,!0),inRangeInclusive:this.getOption("inRangeInclusive",this._params,!1),valueGetter:this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter:this._params.valueGetter}}},{key:"destroy",value:function(){this._JoinConditionPanel.destroy()}},{key:"doesFilterPass",value:function(e){var t=this._doesFilterPassOptions.valueGetter(e),n=this._state,r=n.condition1,o=n.condition2,i=n.operator,a=this._doesPassCondition(r,t),u=this._doesPassCondition(o,t);return i===W?a||u:a&&u}},{key:"isFilterActive",value:function(){var e=this._state.condition1;return!(!e||!e.filter)&&(e.filterTo&&e.type===H?null!==e.filter&&null!==e.filterTo:null!==e.filter)}},{key:"getModel",value:function(){var e=this,t=JSON.parse(JSON.stringify(this._state));return[t.condition1,t.condition2].forEach(function(t,n){t.filter&&(t.filter=e._state["condition".concat(n+1)].filter.toISOString()),t.filterTo&&(t.filterTo=e._state["condition".concat(n+1)].filterTo.toISOString())}),t.filterType="datetime",t.condition1.filterType="datetime",t.condition2.filterType="datetime",t.hasOwnProperty("condition2")&&t.condition2.hasOwnProperty("filter")&&t.condition2.filter?t:t.condition1}},{key:"setModel",value:function(e){!e||e.hasOwnProperty("condition1")||e.hasOwnProperty("condition2")||(e={condition1:e}),this.__disableStateChangeListener=!0,this._JoinConditionPanel.setState(e),this.__disableStateChangeListener=!1,this._state=this._JoinConditionPanel.state,[this._state.condition1,this._state.condition2].forEach(function(e){e.filter&&(e.filter=new Date(e.filter)),e.filterTo&&(e.filterTo=new Date(e.filterTo))})}},{key:"getModelAsString",value:function(e){if(!e)return"";var t=this.getOption("dateTimeMask",this._params,this._JoinConditionPanel._firstConditionPanel._filterTimeInput.picker.config.dateFormat),n=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US"),r=JSON.parse(JSON.stringify(e)),o=r.condition1,i=r.condition2,a=r.operator;[o,i].forEach(function(e){e.filter&&(e.filter=BBj.Masks.DateMask.mask(e.filter,t,n)),e.filterTo&&(e.filterTo=BBj.Masks.DateMask.mask(e.filterTo,t,n))});var u="".concat(o.filter||""," ").concat(o.filterTo?"→ "+o.filterTo:""),c="".concat(i.filter||""," ").concat(i.filterTo?"→ "+i.filterTo:""),l="".concat(i.filter&&a?a:"");return"".concat(u," ").concat(l," ").concat(c).trim()}},{key:"_doesPassCondition",value:function(e,t){if(!e.filter||!t)return!1;var n=e.filter,r=e.filterTo,o=e.type,i=BBj.Masks.Utils.Dates.getTimezoneOrOffset(),a=this._doesFilterPassOptions.inRangeInclusive,u=this._doesFilterPassOptions.enableTime,c=!1;return BBj.Masks.Utils.Dates.IS_TIME_REGEX.test(t)?(t=t=BBj.Masks.Utils.Dates.fixShortISO(t),[n,r].forEach(function(e){e instanceof Date&&(e.setFullYear(1970),e.setMonth(0),e.setDate(1))})):BBj.Masks.Utils.Dates.IS_DATE_REGEX.test(t)&&(t=BBj.Masks.Utils.Dates.fixShortISO(t)),t=Object(v.a)(t,i),u||[t,n,r].forEach(function(e){e instanceof Date&&(e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0))}),o===R?c=n>t==!1&&nt==!1&&nt:o===H&&r&&(c=a?(nt==!1&&nt||r>t==!1&&rt),c}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this._JoinConditionPanel.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this._JoinConditionPanel.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}},{key:"_onJoinConditionPanelStateChanged",value:function(e,t){this._state=e,!1===t&&this._params.filterChangedCallback()}}]),n}()).prototype,"init",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"init"),g.prototype),A(g.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"destroy"),g.prototype),A(g.prototype,"_ApplyFilterPanelButtonClick",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_ApplyFilterPanelButtonClick"),g.prototype),A(g.prototype,"_onJoinConditionPanelStateChanged",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_onJoinConditionPanelStateChanged"),g.prototype),g);t.a=Y},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5};var o={}},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(13),o=n(119),i=n(14)},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(o.a)(e).getTime(),a=Object(r.a)(t);return new Date(n+a)};var r=n(13),o=n(120),i=n(14)},function(e,t,n){t.a=function(e){Object(r.a)(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===o(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))};var r=n(14);function o(e){"@babel/helpers - typeof";return(o="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(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length)));if(t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),m=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=m.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),o=parseInt(n[1],10)-1,g(t,o)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return i=parseInt(n[1],10)-1,b(t,i)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(t,i,c)?d(t,i,c):new Date(NaN)}return null}(m.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,k=_.getTime(),O=0;if(p.time&&(O=function(e){var t,n,r;if(t=s.HH.exec(e))return y(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),y(n,r)?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return y(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(O)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O)),isNaN(w))return new Date(NaN);if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O+w)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(k+O)),w=Object(o.a)(new Date(k+O+w));return new Date(k+O+w)}return new Date(NaN)};var r=n(13),o=n(122),i=n(39);function a(e){"@babel/helpers - typeof";return(a="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)}var u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function y(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var i=n>0?(r+o(t))%r:o(t);return n*r+i};var r=6e4;function o(e){return e.getTime()%r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="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 o(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).picker=null,e.selectedDate=null,e._params={},e._gui=document.createElement("div"),e._gui.className="ag-cell-edit-wrapper",e._gui.innerHTML='\n
\n
\n \n \n \n \n
\n
\n '),e}return function(e,t,n){t&&g(e.prototype,t),n&&g(e,n)}(n,[{key:"init",value:function(e){this._params=e;var t=this.getOption("dateTimeEnableTime",e,!0),n=this.getOption("dateTimeEnable24HR",e,!0),r=this.getOption("dateTimeEnableSeconds",e,!1),o=!this.getOption("dateTimeEnableCalendar",e,!0),i=this.getOption("dateTimeMask",e);i||(i=o?"":"%Y/%Mz/%Dz",t&&(i+=n?" %Hz:%mz":" %hz:%mz",r&&(i+=":%sz"))),i=i.trim(),this.picker=flatpickr(this._gui,{wrap:!0,allowInput:!1,onChange:this._onDateChanged,formatDate:this.formatDate,maxDate:this.getOption("dateTimeMax",e,null),minDate:this.getOption("dateTimeMin",e,null),defaultHour:this.getOption("dateTimeDefaultHour",e,12),defaultMinute:this.getOption("dateTimeDefaultMinute",e,0),disableMobile:this.getOption("dateTimeDisableMobile",e,!1),weekNumbers:this.getOption("dateTimeEnableWeekNumber",e,!1),locale:this._getPickerLocale(),noCalendar:o,dateFormat:i,enableTime:t,enableSeconds:r,time_24hr:n}),this.picker.calendarContainer.classList.add("ag-custom-component-popup")}},{key:"destroy",value:function(){this.picker.destroy(),this.off(n.ON_DATE_CHANGED)}},{key:"setDate",value:function(e){this.picker.setDate(e,!0)}},{key:"open",value:function(){this.picker.open(),this._gui.querySelector("input").focus()}},{key:"close",value:function(){this.picker.close()}},{key:"reset",value:function(){this.picker.config&&this.picker.clear()}},{key:"formatDate",value:function(e,t){var n=this.getOption("dateTimeFormatter",this._params),r=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US");if(!n){if(!t||t&&t.indexOf("%")<0)return;return BBj.Masks.DateMask.mask(e,t,r)}var o=n;switch(h(n)){case"string":return o.indexOf("return")>=0||(o="return "+o+";"),new Function("date","format","locale","DateMask",o)(e,t,r,BBj.Masks.DateMask);case"function":return n(e,t,r,BBj.Masks.DateMask);default:throw new Error('Invalid dateTimeFormatter defined for column "'.concat(this._params.colDef.field,'". The formatter should be an expression or plain function'))}}},{key:"_onDateChanged",value:function(e){this.selectedDate=e[0]||null,this.notify(n.ON_DATE_CHANGED,this.selectedDate)}},{key:"_getPickerLocale",value:function(){for(var e=Intl.DateTimeFormat().resolvedOptions().locale||"en-US",t=[],n=[],r=4;r<11;r++){var o=new Date(1970,0,r);t.push(o.toLocaleString(e,{weekday:"short"}).split(",")[0]),n.push(o.toLocaleString(e,{weekday:"long"}).split(",")[0])}for(var i=[],a=[],u=0;u<12;u++){var c=new Date(1970,u,4);i.push(c.toLocaleString(e,{month:"short"})),a.push(c.toLocaleString(e,{month:"long"}))}return{weekdays:{shorthand:t,longhand:n},months:{shorthand:i,longhand:a},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:BBj.Masks.Utils.Dates.getWeekStartByLocale(e),ordinal:function(e){return""},rangeSeparator:" ",weekAbbreviation:"",scrollTitle:"",toggleTitle:"",amPM:["AM","PM"],yearAriaLabel:"",hourAriaLabel:"",minuteAriaLabel:""}}}]),n}(),a.ON_DATE_CHANGED="DateTimeInput.ON_DATE_CHANGED",v(o=u,"ON_DATE_CHANGED",[s.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_DATE_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),v(o.prototype,"init",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),v(o.prototype,"destroy",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),v(o.prototype,"formatDate",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"formatDate"),o.prototype),v(o.prototype,"_onDateChanged",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"_onDateChanged"),o.prototype),r=o))||r;t.a=_},function(e,t,n){var r=n(126);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".datetime__input{display:flex;align-items:center;width:100%;height:100%;overflow:hidden;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));border-radius:3px}.datetime__input:focus,.datetime__input:active,.datetime__input:hover{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input__input{flex:1;padding:6px;border:none;outline:none;background-color:var(--ag-background-color);color:inherit}.ag-theme-alpine .datetime__input__input,.ag-theme-balham .datetime__input__input,.ag-theme-material .datetime__input__input{background-color:var(--ag-background-color, #fff)}.ag-theme-alpine-dark .datetime__input__input,.ag-theme-balham-dark .datetime__input__input{background-color:var(--ag-background-color, #2d3436)}.datetime__input__clear{margin-left:1px;margin-top:1px;padding:6px;text-align:center;border:none;outline:none;cursor:pointer;color:inherit}.datetime__input--editor{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input--editor .datetime__input__input{padding:0;padding-left:6px}\n",""])},function(e,t,n){var r=n(128);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".dateTimeFilter select{margin-bottom:9px;padding:6px;border-radius:3px;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));color:inherit}.dateTimeFilter select:focus,.dateTimeFilter select:active{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.dateTimeFilter select option{text-indent:6px}\n",""])},function(e,t,n){var r=n(130);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(38),u=n(41),c=n(0);function l(e){"@babel/helpers - typeof";return(l="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 s(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&(0,o.default)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(32)),o=a(n(89)),i=a(n(12));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e){return(0,i.default)(e)?(0,r.default)(e,!0):(0,o.default)(e)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){for(var n=-1,r=Array(e);++n"']/g,u=RegExp(a.source);var c=function(e){return(e=(0,o.default)(e))&&u.test(e)?e.replace(a,r.default):e};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=(0,function(e){return e&&e.__esModule?e:{default:e}}(n(103)).default)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return function(t){return null==e?void 0:e[t]}};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(9)),o=u(n(37)),i=u(n(33)),a=u(n(105));function u(e){return e&&e.__esModule?e:{default:e}}var c=1/0,l=r.default?r.default.prototype:void 0,s=l?l.toString:void 0;var d=function e(t){if("string"==typeof t)return t;if((0,i.default)(t))return(0,o.default)(t,e)+"";if((0,a.default)(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-c?"-0":n};t.default=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(4));function i(e){return e&&e.__esModule?e:{default:e}}function a(e){"@babel/helpers - typeof";return(a="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)}var u="[object Symbol]";var c=function(e){return"symbol"==a(e)||(0,o.default)(e)&&(0,r.default)(e)==u};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%-([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t0){var t=e[0],n=t.previousElementSibling;if(n&&-1!==n.className.indexOf("group")&&!n.previousElementSibling&&(t=n),t.offsetTopi&&(o.scrollTop+=r-i)}}}()}function w(){m()&&_()}function k(){w()}function O(e){e.target!==o?w():e.preventDefault()}function C(e){for(var t=e.which||e.keyCode||0,n=0,r=[38,13,27,39,37,16,17,18,20,91,9];n=112&&t<=123||40===t&&m()||E(0)}function x(n){var r=n.which||n.keyCode||0;if(38===r||40===r||27===r){var o=m();if(27===r)v();else{if(!m||d.length<1)return;38===r?function(){if(d.length<1)t=void 0;else if(t===d[0])t=d[d.length-1];else for(var e=d.length-1;e>0;e--)if(t===d[e]||1===e){t=d[e-1];break}}():function(){if(d.length<1&&(t=void 0),t&&t!==d[d.length-1]){for(var e=0;e=p||1===r?(y(),n=window.setTimeout(function(){e.fetch(i,function(e){g===o&&e&&(f=i,t=(d=e).length>0?d[0]:void 0,_())},0)},0===r?c:0)):v()}function S(){setTimeout(function(){r.activeElement!==b&&v()},200)}return o.className="autocomplete "+(e.className||""),i.position="absolute",o.addEventListener("mousedown",function(e){e.stopPropagation(),e.preventDefault()}),o.addEventListener("focus",function(){return b.focus()}),b.addEventListener("keydown",x),b.addEventListener(s,C),b.addEventListener("blur",S),b.addEventListener("focus",D),window.addEventListener("resize",k),r.addEventListener("scroll",O,!0),{destroy:function(){b.removeEventListener("focus",D),b.removeEventListener("keydown",x),b.removeEventListener(s,C),b.removeEventListener("blur",S),window.removeEventListener("resize",k),r.removeEventListener("scroll",O,!0),y(),v()}}}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setState=function(e,t){var n=(0,r.gw_getGrid)(e).options;try{n.columnApi.setColumnState(t.columns),n.columnApi.setColumnGroupState(t.groups),n.api.setSortModel(t.sort),n.api.setFilterModel(t.filters)}catch(e){console.warn("Failed to parse grid state from JSON",e)}},t.gw_getState=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.columnApi.getColumnState(),o=t.columnApi.getColumnGroupState(),i=t.api.getSortModel(),a=t.api.getFilterModel();try{return JSON.stringify({columns:n,groups:o,sort:i,filters:a})}catch(e){console.warn("Failed to convert the grid state to json",e)}};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setSideBarVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.setSideBarVisible(Boolean(t))},t.gw_openToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.openToolPanel(t)},t.gw_closeToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.closeToolPanel(t)},t.gw_setFunctionsReadOnly=function(e,t){(0,r.gw_getGrid)(e).options.api.setFunctionsReadOnly(Boolean(t))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStatusbarComponentVisibility=function(e,t,n){(0,r.gw_getGrid)(e).options.api.getStatusPanel(t).setVisible(Boolean(n))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_showLoadingOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showLoadingOverlay()},t.gw_showNoRowsOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showNoRowsOverlay()},t.gw_hideOverlay=function(e){(0,r.gw_getGrid)(e).options.api.hideOverlay()};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_updateContext=function(e,t){(0,r.gw_getGrid)(e).options.context=t};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStyle=function(e,t){jss.forDocument((0,r.gw_getDocument)()).set(e,JSON.parse(t))},t.gw_removeStyle=function(e){jss.forDocument((0,r.gw_getDocument)()).remove(e)},n(117);var r=n(0)},function(e,t,n){(function(t){e.exports=t.jss=n(118)}).call(this,n(2))},function(e,t,n){"use strict";var r=function(){var e,t=/((?:\.|#)[^\.\s#]+)((?:\.|#)[^\.\s#]+)/g,n=/(::)(before|after|first-line|first-letter|selection)/,r=/([^:])(:)(before|after|first-line|first-letter|selection)/;function o(e,t){var n=e.cssRules||e.rules||[],r=[];t=t.toLowerCase();for(var o=0;o0?e.style.setProperty(n,r.substr(0,o),"important"):e.style.setProperty(n,r)}}function b(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}function y(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var m=function(e){this.doc=e,this.head=this.doc.head||this.doc.getElementsByTagName("head")[0],this.sheets=this.doc.styleSheets||[]};m.prototype={get:function(e){if(!this.defaultSheet)return{};if(e)return d(o(this.defaultSheet,e));var t=function(e){for(var t=e.cssRules||e.rules||[],n={},r=0;r\n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n"},function(e,t,n){var r=n(125);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(13)(r,o);r.locals&&(e.exports=r.locals)},function(e,t){e.exports=".autocompleteInputWrapper__input {\n padding-left: 6px;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-radius: 3px;\n background-color: var(--ag-background-color);\n color: inherit;\n outline: none;\n}\n\n.ag-theme-alpine .autocompleteInputWrapper__input,\n.ag-theme-balham .autocompleteInputWrapper__input,\n.ag-theme-material .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #fff);\n}\n\n.ag-theme-alpine-dark .autocompleteInputWrapper__input,\n.ag-theme-balham-dark .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #2d3436);\n}\n\n.autocomplete {\n background-color: var(--ag-background-color, #fff);\n z-index: 1000;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-top: 0;\n border-radius: 3px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n overflow: auto;\n -webkit-box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n}\n\n.autocomplete.dark {\n background-color: var(--ag-background-color, #2d3436);\n color: var(--ag-data-color, var(--ag-foreground-color, #fff));\n}\n\n.autocomplete .suggestion-group {\n background: #eee;\n padding: 5px 6px;\n font-weight: bold;\n}\n\n.autocomplete.dark .suggestion-group {\n background: var(--ag-background-color, #181d1f);\n}\n\n.autocomplete .suggestion-item {\n padding: 10px;\n cursor: pointer;\n}\n\n.autocomplete .suggestion-item:hover {\n background-color: var(--ag-row-hover-color, rgba(33, 150, 244, 0.1));\n}\n\n.autocomplete .suggestion-item.selected {\n background-color: var(\n --ag-selected-row-background-color,\n rgba(33, 150, 243, 0.3)\n );\n}\n\n.autocomplete .empty {\n padding: 8px 6px;\n}\n\n.autocomplete-input-error {\n -webkit-box-shadow: 0 -2px 0 #e91e63 inset;\n box-shadow: 0 -2px 0 #e91e63 inset;\n}\n\n.autocomplete-input-success {\n -webkit-box-shadow: 0 -2px 0 #4caf50 inset;\n box-shadow: 0 -2px 0 #4caf50 inset;\n}\n"}])); \ No newline at end of file +var e=function(){return(e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},o={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},a=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},u=function(e){return!0===e?1:0};function c(e,t,n){var r;return void 0===n&&(n=!1),function(){var o=this,i=arguments;null!==r&&clearTimeout(r),r=window.setTimeout(function(){r=null,n||e.apply(o,i)},t),n&&!r&&e.apply(o,i)}}var l=function(e){return e instanceof Array?e:[e]};function s(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function d(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function f(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function p(e,t){var n=d("div","numInputWrapper"),r=d("input","numInput "+e),o=d("span","arrowUp"),i=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var a in t)r.setAttribute(a,t[a]);return n.appendChild(r),n.appendChild(o),n.appendChild(i),n}function h(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}var g=function(){},b=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},y={D:g,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*u(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),o=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return o.setDate(o.getDate()-o.getDay()+n.firstDayOfWeek),o},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:g,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:g,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},m={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},v={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[v.w(e,t,n)]},F:function(e,t,n){return b(v.n(e,t,n)-1,!1,t)},G:function(e,t,n){return a(v.h(e,t,n))},H:function(e){return a(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[u(e.getHours()>11)]},M:function(e,t){return b(e.getMonth(),!0,t)},S:function(e){return a(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return a(e.getFullYear(),4)},d:function(e){return a(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return a(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return a(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},_=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i,u=e.isMobile,c=void 0!==u&&u;return function(e,t,r){var o=r||a;return void 0===n.formatDate||c?t.split("").map(function(t,r,i){return v[t]&&"\\"!==i[r-1]?v[t](e,o,n):"\\"!==t?t:""}).join(""):n.formatDate(e,t,o)}},w=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i;return function(e,t,o,i){if(0===e||e){var u,c=i||a,l=e;if(e instanceof Date)u=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)u=new Date(e);else if("string"==typeof e){var s=t||(n||r).dateFormat,d=String(e).trim();if("today"===d)u=new Date,o=!0;else if(/Z$/.test(d)||/GMT$/.test(d))u=new Date(e);else if(n&&n.parseDate)u=n.parseDate(e,s);else{u=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,p=[],h=0,g=0,b="";hMath.min(t,n)&&ei&&(d=r===v.hourElement?d-i-u(!v.amPM):o,p&&G(void 0,1,v.hourElement)),v.amPM&&f&&(1===c?d+l===23:Math.abs(d-l)>c)&&(v.amPM.textContent=v.l10n.amPM[u(v.amPM.textContent===v.l10n.amPM[0])]),r.value=a(d)}}(e);var c=v._input.value;M(),ke(),v._input.value!==c&&v._debouncedChange()}function M(){if(void 0!==v.hourElement&&void 0!==v.minuteElement){var e=(parseInt(v.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(v.minuteElement.value,10)||0)%60,n=void 0!==v.secondElement?(parseInt(v.secondElement.value,10)||0)%60:0;void 0!==v.amPM&&(e=function(e,t){return e%12+12*u(t===v.l10n.amPM[1])}(e,v.amPM.textContent));var r=void 0!==v.config.minTime||v.config.minDate&&v.minDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.minDate,!0);if(void 0!==v.config.maxTime||v.config.maxDate&&v.maxDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.maxDate,!0)){var o=void 0!==v.config.maxTime?v.config.maxTime:v.config.maxDate;(e=Math.min(e,o.getHours()))===o.getHours()&&(t=Math.min(t,o.getMinutes())),t===o.getMinutes()&&(n=Math.min(n,o.getSeconds()))}if(r){var i=void 0!==v.config.minTime?v.config.minTime:v.config.minDate;(e=Math.max(e,i.getHours()))===i.getHours()&&(t=Math.max(t,i.getMinutes())),t===i.getMinutes()&&(n=Math.max(n,i.getSeconds()))}I(e,t,n)}}function P(e){var t=e||v.latestSelectedDateObj;t&&I(t.getHours(),t.getMinutes(),t.getSeconds())}function T(){var e=v.config.defaultHour,t=v.config.defaultMinute,n=v.config.defaultSeconds;if(void 0!==v.config.minDate){var r=v.config.minDate.getHours(),o=v.config.minDate.getMinutes();(e=Math.max(e,r))===r&&(t=Math.max(o,t)),e===r&&t===o&&(n=v.config.minDate.getSeconds())}if(void 0!==v.config.maxDate){var i=v.config.maxDate.getHours(),a=v.config.maxDate.getMinutes();(e=Math.min(e,i))===i&&(t=Math.min(a,t)),e===i&&t===a&&(n=v.config.maxDate.getSeconds())}return{hours:e,minutes:t,seconds:n}}function I(e,t,n){void 0!==v.latestSelectedDateObj&&v.latestSelectedDateObj.setHours(e%24,t,n||0,0),v.hourElement&&v.minuteElement&&!v.isMobile&&(v.hourElement.value=a(v.config.time_24hr?e:(12+e)%12+12*u(e%12==0)),v.minuteElement.value=a(t),void 0!==v.amPM&&(v.amPM.textContent=v.l10n.amPM[u(e>=12)]),void 0!==v.secondElement&&(v.secondElement.value=a(n)))}function N(e){var t=h(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&ee(n)}function A(e,t,n,r){return t instanceof Array?t.forEach(function(t){return A(e,t,n,r)}):e instanceof Array?e.forEach(function(e){return A(e,t,n,r)}):(e.addEventListener(t,n,r),void v._handlers.push({element:e,event:t,handler:n,options:r}))}function R(){ye("onChange")}function L(e,t){var n=void 0!==e?v.parseDate(e):v.latestSelectedDateObj||(v.config.minDate&&v.config.minDate>v.now?v.config.minDate:v.config.maxDate&&v.config.maxDate=0&&k(e,v.selectedDates[1])<=0}(t)&&!ve(t)&&i.classList.add("inRange"),v.weekNumbers&&1===v.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&v.weekNumbers.insertAdjacentHTML("beforeend",""+v.config.getWeek(t)+""),ye("onDayCreate",i),i}function U(e){e.focus(),"range"===v.config.mode&&ie(e)}function W(e){for(var t=e>0?0:v.config.showMonths-1,n=e>0?v.config.showMonths:-1,r=t;r!=n;r+=e)for(var o=v.daysContainer.children[r],i=e>0?0:o.children.length-1,a=e>0?o.children.length:-1,u=i;u!=a;u+=e){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&te(c.dateObj))return c}}function z(e,t){var n=ne(document.activeElement||document.body),r=void 0!==e?e:n?document.activeElement:void 0!==v.selectedDateElem&&ne(v.selectedDateElem)?v.selectedDateElem:void 0!==v.todayDateElem&&ne(v.todayDateElem)?v.todayDateElem:W(t>0?1:-1);void 0===r?v._input.focus():n?function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():v.currentMonth,r=t>0?v.config.showMonths:-1,o=t>0?1:-1,i=n-v.currentMonth;i!=r;i+=o)for(var a=v.daysContainer.children[i],u=n-v.currentMonth===i?e.$i+t:t<0?a.children.length-1:0,c=a.children.length,l=u;l>=0&&l0?c:-1);l+=o){var s=a.children[l];if(-1===s.className.indexOf("hidden")&&te(s.dateObj)&&Math.abs(e.$i-l)>=Math.abs(t))return U(s)}v.changeMonth(o),z(W(o),0)}(r,t):U(r)}function B(e,t){for(var n=(new Date(e,t,1).getDay()-v.l10n.firstDayOfWeek+7)%7,r=v.utils.getDaysInMonth((t-1+12)%12,e),o=v.utils.getDaysInMonth(t,e),i=window.document.createDocumentFragment(),a=v.config.showMonths>1,u=a?"prevMonthDay hidden":"prevMonthDay",c=a?"nextMonthDay hidden":"nextMonthDay",l=r+1-n,s=0;l<=r;l++,s++)i.appendChild(H(u,new Date(e,t-1,l),l,s));for(l=1;l<=o;l++,s++)i.appendChild(H("",new Date(e,t,l),l,s));for(var f=o+1;f<=42-n&&(1===v.config.showMonths||s%7!=0);f++,s++)i.appendChild(H(c,new Date(e,t+1,f%o),f,s));var p=d("div","dayContainer");return p.appendChild(i),p}function Y(){if(void 0!==v.daysContainer){f(v.daysContainer),v.weekNumbers&&f(v.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==v.config.monthSelectorType)){var e=function(e){return!(void 0!==v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&ev.config.maxDate.getMonth())};v.monthsDropdownContainer.tabIndex=-1,v.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=d("option","flatpickr-monthDropdown-month");n.value=new Date(v.currentYear,t).getMonth().toString(),n.textContent=b(t,v.config.shorthandCurrentMonth,v.l10n),n.tabIndex=-1,v.currentMonth===t&&(n.selected=!0),v.monthsDropdownContainer.appendChild(n)}}}function K(){var e,t=d("div","flatpickr-month"),n=window.document.createDocumentFragment();v.config.showMonths>1||"static"===v.config.monthSelectorType?e=d("span","cur-month"):(v.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),v.monthsDropdownContainer.setAttribute("aria-label",v.l10n.monthAriaLabel),A(v.monthsDropdownContainer,"change",function(e){var t=h(e),n=parseInt(t.value,10);v.changeMonth(n-v.currentMonth),ye("onMonthChange")}),V(),e=v.monthsDropdownContainer);var r=p("cur-year",{tabindex:"-1"}),o=r.getElementsByTagName("input")[0];o.setAttribute("aria-label",v.l10n.yearAriaLabel),v.config.minDate&&o.setAttribute("min",v.config.minDate.getFullYear().toString()),v.config.maxDate&&(o.setAttribute("max",v.config.maxDate.getFullYear().toString()),o.disabled=!!v.config.minDate&&v.config.minDate.getFullYear()===v.config.maxDate.getFullYear());var i=d("div","flatpickr-current-month");return i.appendChild(e),i.appendChild(r),n.appendChild(i),t.appendChild(n),{container:t,yearElement:o,monthElement:e}}function $(){f(v.monthNav),v.monthNav.appendChild(v.prevMonthNav),v.config.showMonths&&(v.yearElements=[],v.monthElements=[]);for(var e=v.config.showMonths;e--;){var t=K();v.yearElements.push(t.yearElement),v.monthElements.push(t.monthElement),v.monthNav.appendChild(t.container)}v.monthNav.appendChild(v.nextMonthNav)}function q(){v.weekdayContainer?f(v.weekdayContainer):v.weekdayContainer=d("div","flatpickr-weekdays");for(var e=v.config.showMonths;e--;){var t=d("div","flatpickr-weekdaycontainer");v.weekdayContainer.appendChild(t)}return J(),v.weekdayContainer}function J(){if(v.weekdayContainer){var e=v.l10n.firstDayOfWeek,n=t(v.l10n.weekdays.shorthand);e>0&&e\n "+n.join("")+"\n \n "}}function Z(e,t){void 0===t&&(t=!0);var n=t?e:e-v.currentMonth;n<0&&!0===v._hidePrevMonthArrow||n>0&&!0===v._hideNextMonthArrow||(v.currentMonth+=n,(v.currentMonth<0||v.currentMonth>11)&&(v.currentYear+=v.currentMonth>11?1:-1,v.currentMonth=(v.currentMonth+12)%12,ye("onYearChange"),V()),Y(),ye("onMonthChange"),_e())}function X(e){return!(!v.config.appendTo||!v.config.appendTo.contains(e))||v.calendarContainer.contains(e)}function Q(e){if(v.isOpen&&!v.config.inline){var t=h(e),n=X(t),r=t===v.input||t===v.altInput||v.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(v.input)||~e.path.indexOf(v.altInput)),o="blur"===e.type?r&&e.relatedTarget&&!X(e.relatedTarget):!r&&!n&&!X(e.relatedTarget),i=!v.config.ignoredFocusElements.some(function(e){return e.contains(t)});o&&i&&(void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&""!==v.input.value&&void 0!==v.input.value&&j(),v.close(),v.config&&"range"===v.config.mode&&1===v.selectedDates.length&&(v.clear(!1),v.redraw()))}}function ee(e){if(!(!e||v.config.minDate&&ev.config.maxDate.getFullYear())){var t=e,n=v.currentYear!==t;v.currentYear=t||v.currentYear,v.config.maxDate&&v.currentYear===v.config.maxDate.getFullYear()?v.currentMonth=Math.min(v.config.maxDate.getMonth(),v.currentMonth):v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&(v.currentMonth=Math.max(v.config.minDate.getMonth(),v.currentMonth)),n&&(v.redraw(),ye("onYearChange"),V())}}function te(e,t){void 0===t&&(t=!0);var n=v.parseDate(e,void 0,t);if(v.config.minDate&&n&&k(n,v.config.minDate,void 0!==t?t:!v.minDateHasTime)<0||v.config.maxDate&&n&&k(n,v.config.maxDate,void 0!==t?t:!v.maxDateHasTime)>0)return!1;if(0===v.config.enable.length&&0===v.config.disable.length)return!0;if(void 0===n)return!1;for(var r=v.config.enable.length>0,o=r?v.config.enable:v.config.disable,a=0,u=void 0;a=u.from.getTime()&&n.getTime()<=u.to.getTime())return r}return!r}function ne(e){return void 0!==v.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&v.daysContainer.contains(e))}function re(e){!(e.target===v._input)||e.relatedTarget&&X(e.relatedTarget)||v.setDate(v._input.value,!0,e.target===v.altInput?v.config.altFormat:v.config.dateFormat)}function oe(e){var t=h(e),n=v.config.wrap?g.contains(t):t===v._input,r=v.config.allowInput,o=v.isOpen&&(!r||!n),i=v.config.inline&&n&&!r;if(13===e.keyCode&&n){if(r)return v.setDate(v._input.value,!0,t===v.altInput?v.config.altFormat:v.config.dateFormat),t.blur();v.open()}else if(X(t)||o||i){var a=!!v.timeContainer&&v.timeContainer.contains(t);switch(e.keyCode){case 13:a?(e.preventDefault(),j(),fe()):pe(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:n&&!v.config.allowInput&&(e.preventDefault(),v.clear());break;case 37:case 39:if(a||n)v.hourElement&&v.hourElement.focus();else if(e.preventDefault(),void 0!==v.daysContainer&&(!1===r||document.activeElement&&ne(document.activeElement))){var u=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(u),z(W(1),0)):z(void 0,u)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;v.daysContainer&&void 0!==t.$i||t===v.input||t===v.altInput?e.ctrlKey?(e.stopPropagation(),ee(v.currentYear-c),z(W(1),0)):a||z(void 0,7*c):t===v.currentYearElement?ee(v.currentYear-c):v.config.enableTime&&(!a&&v.hourElement&&v.hourElement.focus(),j(e),v._debouncedChange());break;case 9:if(a){var l=[v.hourElement,v.minuteElement,v.secondElement,v.amPM].concat(v.pluginElements).filter(function(e){return e}),s=l.indexOf(t);if(-1!==s){var d=l[s+(e.shiftKey?-1:1)];e.preventDefault(),(d||v._input).focus()}}else!v.config.noCalendar&&v.daysContainer&&v.daysContainer.contains(t)&&e.shiftKey&&(e.preventDefault(),v._input.focus())}}if(void 0!==v.amPM&&t===v.amPM)switch(e.key){case v.l10n.amPM[0].charAt(0):case v.l10n.amPM[0].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[0],M(),ke();break;case v.l10n.amPM[1].charAt(0):case v.l10n.amPM[1].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[1],M(),ke()}(n||X(t))&&ye("onKeyDown",e)}function ie(e){if(1===v.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():v.days.firstElementChild.dateObj.getTime(),n=v.parseDate(v.selectedDates[0],void 0,!0).getTime(),r=Math.min(t,v.selectedDates[0].getTime()),o=Math.max(t,v.selectedDates[0].getTime()),i=!1,a=0,u=0,c=r;cr&&ca)?a=c:c>n&&(!u||c0&&l0&&l>u;return d?(c.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){c.classList.remove(e)}),"continue"):i&&!d?"continue":(["startRange","inRange","endRange","notAllowed"].forEach(function(e){c.classList.remove(e)}),void(void 0!==e&&(e.classList.add(t<=v.selectedDates[0].getTime()?"startRange":"endRange"),nt&&l===n&&c.classList.add("endRange"),l>=a&&(0===u||l<=u)&&O(l,n,t)&&c.classList.add("inRange"))))},f=0,p=s.children.length;f0||n.getMinutes()>0||n.getSeconds()>0),v.selectedDates&&(v.selectedDates=v.selectedDates.filter(function(e){return te(e)}),v.selectedDates.length||"min"!==e||P(n),ke()),v.daysContainer&&(de(),void 0!==n?v.currentYearElement[e]=n.getFullYear().toString():v.currentYearElement.removeAttribute(e),v.currentYearElement.disabled=!!r&&void 0!==n&&r.getFullYear()===n.getFullYear())}}function ce(){return v.config.wrap?g.querySelector("[data-input]"):g}function le(){"object"!==i(v.config.locale)&&void 0===S.l10ns[v.config.locale]&&v.config.errorHandler(new Error("flatpickr: invalid locale "+v.config.locale)),v.l10n=e(e({},S.l10ns.default),"object"===i(v.config.locale)?v.config.locale:"default"!==v.config.locale?S.l10ns[v.config.locale]:void 0),m.K="("+v.l10n.amPM[0]+"|"+v.l10n.amPM[1]+"|"+v.l10n.amPM[0].toLowerCase()+"|"+v.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},y),JSON.parse(JSON.stringify(g.dataset||{}))).time_24hr&&void 0===S.defaultConfig.time_24hr&&(v.config.time_24hr=v.l10n.time_24hr),v.formatDate=_(v),v.parseDate=w({config:v.config,l10n:v.l10n})}function se(e){if(void 0!==v.calendarContainer){ye("onPreCalendarPosition");var t=e||v._positionElement,n=Array.prototype.reduce.call(v.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),r=v.calendarContainer.offsetWidth,o=v.config.position.split(" "),i=o[0],a=o.length>1?o[1]:null,u=t.getBoundingClientRect(),c=window.innerHeight-u.bottom,l="above"===i||"below"!==i&&cn,d=window.pageYOffset+u.top+(l?-n-2:t.offsetHeight+2);if(s(v.calendarContainer,"arrowTop",!l),s(v.calendarContainer,"arrowBottom",l),!v.config.inline){var f=window.pageXOffset+u.left,p=!1,h=!1;"center"===a?(f-=(r-u.width)/2,p=!0):"right"===a&&(f-=r-u.width,h=!0),s(v.calendarContainer,"arrowLeft",!p&&!h),s(v.calendarContainer,"arrowCenter",p),s(v.calendarContainer,"arrowRight",h);var g=window.document.body.offsetWidth-(window.pageXOffset+u.right),b=f+r>window.document.body.offsetWidth,y=g+r>window.document.body.offsetWidth;if(s(v.calendarContainer,"rightMost",b),!v.config.static)if(v.calendarContainer.style.top=d+"px",b)if(y){var m=function(){for(var e=null,t=0;tv.currentMonth+v.config.showMonths-1)&&"range"!==v.config.mode;if(v.selectedDateElem=n,"single"===v.config.mode)v.selectedDates=[r];else if("multiple"===v.config.mode){var i=ve(r);i?v.selectedDates.splice(parseInt(i),1):v.selectedDates.push(r)}else"range"===v.config.mode&&(2===v.selectedDates.length&&v.clear(!1,!1),v.latestSelectedDateObj=r,v.selectedDates.push(r),0!==k(r,v.selectedDates[0],!0)&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(M(),o){var a=v.currentYear!==r.getFullYear();v.currentYear=r.getFullYear(),v.currentMonth=r.getMonth(),a&&(ye("onYearChange"),V()),ye("onMonthChange")}if(_e(),Y(),ke(),o||"range"===v.config.mode||1!==v.config.showMonths?void 0!==v.selectedDateElem&&void 0===v.hourElement&&v.selectedDateElem&&v.selectedDateElem.focus():U(n),void 0!==v.hourElement&&void 0!==v.hourElement&&v.hourElement.focus(),v.config.closeOnSelect){var u="single"===v.config.mode&&!v.config.enableTime,c="range"===v.config.mode&&2===v.selectedDates.length&&!v.config.enableTime;(u||c)&&fe()}R()}}v.parseDate=w({config:v.config,l10n:v.l10n}),v._handlers=[],v.pluginElements=[],v.loadedPlugins=[],v._bind=A,v._setHoursFromDate=P,v._positionCalendar=se,v.changeMonth=Z,v.changeYear=ee,v.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);v.input.value="",void 0!==v.altInput&&(v.altInput.value="");void 0!==v.mobileInput&&(v.mobileInput.value="");v.selectedDates=[],v.latestSelectedDateObj=void 0,!0===t&&(v.currentYear=v._initialDate.getFullYear(),v.currentMonth=v._initialDate.getMonth());if(!0===v.config.enableTime){var n=T(),r=n.hours,o=n.minutes,i=n.seconds;I(r,o,i)}v.redraw(),e&&ye("onChange")},v.close=function(){v.isOpen=!1,v.isMobile||(void 0!==v.calendarContainer&&v.calendarContainer.classList.remove("open"),void 0!==v._input&&v._input.classList.remove("active"));ye("onClose")},v._createElement=d,v.destroy=function(){void 0!==v.config&&ye("onDestroy");for(var e=v._handlers.length;e--;){var t=v._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(v._handlers=[],v.mobileInput)v.mobileInput.parentNode&&v.mobileInput.parentNode.removeChild(v.mobileInput),v.mobileInput=void 0;else if(v.calendarContainer&&v.calendarContainer.parentNode)if(v.config.static&&v.calendarContainer.parentNode){var n=v.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else v.calendarContainer.parentNode.removeChild(v.calendarContainer);v.altInput&&(v.input.type="text",v.altInput.parentNode&&v.altInput.parentNode.removeChild(v.altInput),delete v.altInput);v.input&&(v.input.type=v.input._type,v.input.classList.remove("flatpickr-input"),v.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete v[e]}catch(e){}})},v.isEnabled=te,v.jumpToDate=L,v.open=function(e,t){void 0===t&&(t=v._positionElement);if(!0===v.isMobile){if(e){e.preventDefault();var n=h(e);n&&n.blur()}return void 0!==v.mobileInput&&(v.mobileInput.focus(),v.mobileInput.click()),void ye("onOpen")}if(v._input.disabled||v.config.inline)return;var r=v.isOpen;v.isOpen=!0,r||(v.calendarContainer.classList.add("open"),v._input.classList.add("active"),ye("onOpen"),se(t));!0===v.config.enableTime&&!0===v.config.noCalendar&&(!1!==v.config.allowInput||void 0!==e&&v.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return v.hourElement.select()},50))},v.redraw=de,v.set=function(e,t){if(null!==e&&"object"===i(e))for(var r in Object.assign(v.config,e),e)void 0!==he[r]&&he[r].forEach(function(e){return e()});else v.config[e]=t,void 0!==he[e]?he[e].forEach(function(e){return e()}):n.indexOf(e)>-1&&(v.config[e]=l(t));v.redraw(),ke(!0)},v.setDate=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=v.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return v.clear(t);ge(e,n),v.latestSelectedDateObj=v.selectedDates[v.selectedDates.length-1],v.redraw(),L(void 0,t),P(),0===v.selectedDates.length&&v.clear(!1);ke(t),t&&ye("onChange")},v.toggle=function(e){if(!0===v.isOpen)return v.close();v.open(e)};var he={locale:[le,J],showMonths:[$,E,q],minDate:[L],maxDate:[L]};function ge(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return v.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[v.parseDate(e,t)];else if("string"==typeof e)switch(v.config.mode){case"single":case"time":n=[v.parseDate(e,t)];break;case"multiple":n=e.split(v.config.conjunction).map(function(e){return v.parseDate(e,t)});break;case"range":n=e.split(v.l10n.rangeSeparator).map(function(e){return v.parseDate(e,t)})}else v.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));v.selectedDates=v.config.allowInvalidPreload?n:n.filter(function(e){return e instanceof Date&&te(e,!1)}),"range"===v.config.mode&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function be(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?v.parseDate(e,void 0,!0):e&&"object"===i(e)&&e.from&&e.to?{from:v.parseDate(e.from,void 0),to:v.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function ye(e,t){if(void 0!==v.config){var n=v.config[e];if(void 0!==n&&n.length>0)for(var r=0;n[r]&&r1||"static"===v.config.monthSelectorType?v.monthElements[t].textContent=b(n.getMonth(),v.config.shorthandCurrentMonth,v.l10n)+" ":v.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),v._hidePrevMonthArrow=void 0!==v.config.minDate&&(v.currentYear===v.config.minDate.getFullYear()?v.currentMonth<=v.config.minDate.getMonth():v.currentYearv.config.maxDate.getMonth():v.currentYear>v.config.maxDate.getFullYear()))}function we(e){return v.selectedDates.map(function(t){return v.formatDate(t,e)}).filter(function(e,t,n){return"range"!==v.config.mode||v.config.enableTime||n.indexOf(e)===t}).join("range"!==v.config.mode?v.config.conjunction:v.l10n.rangeSeparator)}function ke(e){void 0===e&&(e=!0),void 0!==v.mobileInput&&v.mobileFormatStr&&(v.mobileInput.value=void 0!==v.latestSelectedDateObj?v.formatDate(v.latestSelectedDateObj,v.mobileFormatStr):""),v.input.value=we(v.config.dateFormat),void 0!==v.altInput&&(v.altInput.value=we(v.config.altFormat)),!1!==e&&ye("onValueUpdate")}function Oe(e){var t=h(e),n=v.prevMonthNav.contains(t),r=v.nextMonthNav.contains(t);n||r?Z(n?-1:1):v.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?v.changeYear(v.currentYear+1):t.classList.contains("arrowDown")&&v.changeYear(v.currentYear-1)}return function(){v.element=v.input=g,v.isOpen=!1,function(){var t=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=e(e({},JSON.parse(JSON.stringify(g.dataset||{}))),y),i={};v.config.parseDate=o.parseDate,v.config.formatDate=o.formatDate,Object.defineProperty(v.config,"enable",{get:function(){return v.config._enable},set:function(e){v.config._enable=be(e)}}),Object.defineProperty(v.config,"disable",{get:function(){return v.config._disable},set:function(e){v.config._disable=be(e)}});var a="time"===o.mode;if(!o.dateFormat&&(o.enableTime||a)){var u=S.defaultConfig.dateFormat||r.dateFormat;i.dateFormat=o.noCalendar||a?"H:i"+(o.enableSeconds?":S":""):u+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||a)&&!o.altFormat){var c=S.defaultConfig.altFormat||r.altFormat;i.altFormat=o.noCalendar||a?"h:i"+(o.enableSeconds?":S K":" K"):c+" h:i"+(o.enableSeconds?":S":"")+" K"}Object.defineProperty(v.config,"minDate",{get:function(){return v.config._minDate},set:ue("min")}),Object.defineProperty(v.config,"maxDate",{get:function(){return v.config._maxDate},set:ue("max")});var s=function(e){return function(t){v.config["min"===e?"_minTime":"_maxTime"]=v.parseDate(t,"H:i:S")}};Object.defineProperty(v.config,"minTime",{get:function(){return v.config._minTime},set:s("min")}),Object.defineProperty(v.config,"maxTime",{get:function(){return v.config._maxTime},set:s("max")}),"time"===o.mode&&(v.config.noCalendar=!0,v.config.enableTime=!0),Object.assign(v.config,i,o);for(var d=0;d-1?v.config[p]=l(f[p]).map(D).concat(v.config[p]):void 0===o[p]&&(v.config[p]=f[p])}o.altInputClass||(v.config.altInputClass=ce().className+" "+v.config.altInputClass),ye("onParseConfig")}(),le(),v.input=ce(),v.input?(v.input._type=v.input.type,v.input.type="text",v.input.classList.add("flatpickr-input"),v._input=v.input,v.config.altInput&&(v.altInput=d(v.input.nodeName,v.config.altInputClass),v._input=v.altInput,v.altInput.placeholder=v.input.placeholder,v.altInput.disabled=v.input.disabled,v.altInput.required=v.input.required,v.altInput.tabIndex=v.input.tabIndex,v.altInput.type="text",v.input.setAttribute("type","hidden"),!v.config.static&&v.input.parentNode&&v.input.parentNode.insertBefore(v.altInput,v.input.nextSibling)),v.config.allowInput||v._input.setAttribute("readonly","readonly"),v._positionElement=v.config.positionElement||v._input):v.config.errorHandler(new Error("Invalid input element specified")),function(){v.selectedDates=[],v.now=v.parseDate(v.config.now)||new Date;var e=v.config.defaultDate||("INPUT"!==v.input.nodeName&&"TEXTAREA"!==v.input.nodeName||!v.input.placeholder||v.input.value!==v.input.placeholder?v.input.value:null);e&&ge(e,v.config.dateFormat),v._initialDate=v.selectedDates.length>0?v.selectedDates[0]:v.config.minDate&&v.config.minDate.getTime()>v.now.getTime()?v.config.minDate:v.config.maxDate&&v.config.maxDate.getTime()0&&(v.latestSelectedDateObj=v.selectedDates[0]),void 0!==v.config.minTime&&(v.config.minTime=v.parseDate(v.config.minTime,"H:i")),void 0!==v.config.maxTime&&(v.config.maxTime=v.parseDate(v.config.maxTime,"H:i")),v.minDateHasTime=!!v.config.minDate&&(v.config.minDate.getHours()>0||v.config.minDate.getMinutes()>0||v.config.minDate.getSeconds()>0),v.maxDateHasTime=!!v.config.maxDate&&(v.config.maxDate.getHours()>0||v.config.maxDate.getMinutes()>0||v.config.maxDate.getSeconds()>0)}(),v.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=v.currentMonth),void 0===t&&(t=v.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:v.l10n.daysInMonth[e]}},v.isMobile||function(){var e=window.document.createDocumentFragment();if(v.calendarContainer=d("div","flatpickr-calendar"),v.calendarContainer.tabIndex=-1,!v.config.noCalendar){if(e.appendChild((v.monthNav=d("div","flatpickr-months"),v.yearElements=[],v.monthElements=[],v.prevMonthNav=d("span","flatpickr-prev-month"),v.prevMonthNav.innerHTML=v.config.prevArrow,v.nextMonthNav=d("span","flatpickr-next-month"),v.nextMonthNav.innerHTML=v.config.nextArrow,$(),Object.defineProperty(v,"_hidePrevMonthArrow",{get:function(){return v.__hidePrevMonthArrow},set:function(e){v.__hidePrevMonthArrow!==e&&(s(v.prevMonthNav,"flatpickr-disabled",e),v.__hidePrevMonthArrow=e)}}),Object.defineProperty(v,"_hideNextMonthArrow",{get:function(){return v.__hideNextMonthArrow},set:function(e){v.__hideNextMonthArrow!==e&&(s(v.nextMonthNav,"flatpickr-disabled",e),v.__hideNextMonthArrow=e)}}),v.currentYearElement=v.yearElements[0],_e(),v.monthNav)),v.innerContainer=d("div","flatpickr-innerContainer"),v.config.weekNumbers){var t=function(){v.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",v.l10n.weekAbbreviation));var t=d("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,r=t.weekNumbers;v.innerContainer.appendChild(n),v.weekNumbers=r,v.weekWrapper=n}v.rContainer=d("div","flatpickr-rContainer"),v.rContainer.appendChild(q()),v.daysContainer||(v.daysContainer=d("div","flatpickr-days"),v.daysContainer.tabIndex=-1),Y(),v.rContainer.appendChild(v.daysContainer),v.innerContainer.appendChild(v.rContainer),e.appendChild(v.innerContainer)}v.config.enableTime&&e.appendChild(function(){v.calendarContainer.classList.add("hasTime"),v.config.noCalendar&&v.calendarContainer.classList.add("noCalendar"),v.timeContainer=d("div","flatpickr-time"),v.timeContainer.tabIndex=-1;var e=d("span","flatpickr-time-separator",":"),t=p("flatpickr-hour",{"aria-label":v.l10n.hourAriaLabel});v.hourElement=t.getElementsByTagName("input")[0];var n=p("flatpickr-minute",{"aria-label":v.l10n.minuteAriaLabel});if(v.minuteElement=n.getElementsByTagName("input")[0],v.hourElement.tabIndex=v.minuteElement.tabIndex=-1,v.hourElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getHours():v.config.time_24hr?v.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(v.config.defaultHour)),v.minuteElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getMinutes():v.config.defaultMinute),v.hourElement.setAttribute("step",v.config.hourIncrement.toString()),v.minuteElement.setAttribute("step",v.config.minuteIncrement.toString()),v.hourElement.setAttribute("min",v.config.time_24hr?"0":"1"),v.hourElement.setAttribute("max",v.config.time_24hr?"23":"12"),v.minuteElement.setAttribute("min","0"),v.minuteElement.setAttribute("max","59"),v.timeContainer.appendChild(t),v.timeContainer.appendChild(e),v.timeContainer.appendChild(n),v.config.time_24hr&&v.timeContainer.classList.add("time24hr"),v.config.enableSeconds){v.timeContainer.classList.add("hasSeconds");var r=p("flatpickr-second");v.secondElement=r.getElementsByTagName("input")[0],v.secondElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getSeconds():v.config.defaultSeconds),v.secondElement.setAttribute("step",v.minuteElement.getAttribute("step")),v.secondElement.setAttribute("min","0"),v.secondElement.setAttribute("max","59"),v.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),v.timeContainer.appendChild(r)}return v.config.time_24hr||(v.amPM=d("span","flatpickr-am-pm",v.l10n.amPM[u((v.latestSelectedDateObj?v.hourElement.value:v.config.defaultHour)>11)]),v.amPM.title=v.l10n.toggleTitle,v.amPM.tabIndex=-1,v.timeContainer.appendChild(v.amPM)),v.timeContainer}()),s(v.calendarContainer,"rangeMode","range"===v.config.mode),s(v.calendarContainer,"animate",!0===v.config.animate),s(v.calendarContainer,"multiMonth",v.config.showMonths>1),v.calendarContainer.appendChild(e);var o=void 0!==v.config.appendTo&&void 0!==v.config.appendTo.nodeType;if((v.config.inline||v.config.static)&&(v.calendarContainer.classList.add(v.config.inline?"inline":"static"),v.config.inline&&(!o&&v.element.parentNode?v.element.parentNode.insertBefore(v.calendarContainer,v._input.nextSibling):void 0!==v.config.appendTo&&v.config.appendTo.appendChild(v.calendarContainer)),v.config.static)){var i=d("div","flatpickr-wrapper");v.element.parentNode&&v.element.parentNode.insertBefore(i,v.element),i.appendChild(v.element),v.altInput&&i.appendChild(v.altInput),i.appendChild(v.calendarContainer)}v.config.static||v.config.inline||(void 0!==v.config.appendTo?v.config.appendTo:window.document.body).appendChild(v.calendarContainer)}(),function(){if(v.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(v.element.querySelectorAll("[data-"+e+"]"),function(t){return A(t,"click",v[e])})}),v.isMobile)!function(){var e=v.config.enableTime?v.config.noCalendar?"time":"datetime-local":"date";v.mobileInput=d("input",v.input.className+" flatpickr-mobile"),v.mobileInput.tabIndex=1,v.mobileInput.type=e,v.mobileInput.disabled=v.input.disabled,v.mobileInput.required=v.input.required,v.mobileInput.placeholder=v.input.placeholder,v.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",v.selectedDates.length>0&&(v.mobileInput.defaultValue=v.mobileInput.value=v.formatDate(v.selectedDates[0],v.mobileFormatStr)),v.config.minDate&&(v.mobileInput.min=v.formatDate(v.config.minDate,"Y-m-d")),v.config.maxDate&&(v.mobileInput.max=v.formatDate(v.config.maxDate,"Y-m-d")),v.input.getAttribute("step")&&(v.mobileInput.step=String(v.input.getAttribute("step"))),v.input.type="hidden",void 0!==v.altInput&&(v.altInput.type="hidden");try{v.input.parentNode&&v.input.parentNode.insertBefore(v.mobileInput,v.input.nextSibling)}catch(e){}A(v.mobileInput,"change",function(e){v.setDate(h(e).value,!1,v.mobileFormatStr),ye("onChange"),ye("onClose")})}();else{var e=c(ae,50);v._debouncedChange=c(R,x),v.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(v.daysContainer,"mouseover",function(e){"range"===v.config.mode&&ie(h(e))}),A(window.document.body,"keydown",oe),v.config.inline||v.config.static||A(window,"resize",e),void 0!==window.ontouchstart?A(window.document,"touchstart",Q):A(window.document,"click",Q),A(window.document,"focus",Q,{capture:!0}),!0===v.config.clickOpens&&(A(v._input,"focus",v.open),A(v._input,"click",v.open)),void 0!==v.daysContainer&&(A(v.monthNav,"click",Oe),A(v.monthNav,["keyup","increment"],N),A(v.daysContainer,"click",pe)),void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&(A(v.timeContainer,["increment"],j),A(v.timeContainer,"blur",j,{capture:!0}),A(v.timeContainer,"click",F),A([v.hourElement,v.minuteElement],["focus","click"],function(e){return h(e).select()}),void 0!==v.secondElement&&A(v.secondElement,"focus",function(){return v.secondElement&&v.secondElement.select()}),void 0!==v.amPM&&A(v.amPM,"click",function(e){j(e),R()})),v.config.allowInput&&A(v._input,"blur",re)}}(),(v.selectedDates.length||v.config.noCalendar)&&(v.config.enableTime&&P(v.config.noCalendar?v.latestSelectedDateObj||v.config.minDate:void 0),ke(!1)),E();var t=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!v.isMobile&&t&&se(),ye("onReady")}(),v}function E(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),r=[],o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:t.key)+(arguments.length>2?arguments[2]:void 0)})}},{key:"key",get:function(){return this.childDescriptor.key}},{key:"parentNotation",get:function(){return"".concat(this.parentKlass.constructor.name,"#").concat(this.parentPropertySignature)}},{key:"childNotation",get:function(){return"".concat(this.childKlass.constructor.name,"#").concat(this.childPropertySignature)}},{key:"parentTopic",get:function(){return this._getTopic(this.parentDescriptor)}},{key:"childTopic",get:function(){return this._getTopic(this.childDescriptor)}},{key:"parentPropertySignature",get:function(){return this._extractTopicSignature(this.parentTopic)}},{key:"childPropertySignature",get:function(){return this._extractTopicSignature(this.childTopic)}}]),a(e,[{key:"assert",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";!0!==e&&this.error("{child} does not properly override {parent}"+t)}},{key:"error",value:function(e){var t=this;throw e=e.replace("{parent}",function(e){return t.parentNotation}).replace("{child}",function(e){return t.childNotation}),new SyntaxError(e)}}]),e}();function l(e){return e.hasOwnProperty("value")?"data":e.hasOwnProperty("get")||e.hasOwnProperty("set")?"accessor":"data"}function s(e,t,n){n.assert(e.length===t.length)}function d(e,t,n){var r=l(e),i=l(t);switch(r!==i&&n.error('descriptor types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"data":!function(e,t,n){var r=o(e.value),i=o(t.value);switch("undefined"===r&&"undefined"===i&&n.error("descriptor values are both undefined. (class properties are are not currently supported)'"),r!==i&&("function"===i&&void 0===r||void 0!==r)&&n.error('value types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"function":s(e.value,t.value,n);break;default:n.error('Unexpected error. Please file a bug with: {parent} is "'.concat(r,'", {child} is "').concat(i,'"'))}}(e,t,n);break;case"accessor":!function(e,t,n){var r="function"==typeof e.get,o="function"==typeof t.get,i="function"==typeof e.set,a="function"==typeof t.set;(r||o)&&(!r&&i&&n.error("{parent} is setter but {child} is getter"),!o&&a&&n.error("{parent} is getter but {child} is setter"),s(e.get,t.get,n)),(i||a)&&(!i&&r&&n.error("{parent} is getter but {child} is setter"),!a&&o&&n.error("{parent} is setter but {child} is getter"),s(e.set,t.set,n))}(e,t,n)}}var f=[function(e){return e.toLowerCase()},function(e){return e.toUpperCase()},function(e){return e+"s"},function(e){return e.slice(0,-1)},function(e){return e.slice(1,e.length)}];function p(e,t,n){n.key=t;var r=Object.getPrototypeOf(e),o=Object.getOwnPropertyDescriptor(r,t),i=new c(r,e,o,n);if(void 0===o){var a=function(e,t){for(var n=0,r=f.length;n=0&&l.splice(t,1)}function g(e){var t=document.createElement("style");return e.attrs.type="text/css",b(t,e.attrs),p(e,t),t}function b(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=c++;n=u||(u=g(t)),r=v.bind(null,n,a,!1),o=v.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",b(t,e.attrs),p(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=s(r));o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){h(n),n.href&&URL.revokeObjectURL(n.href)}):(n=g(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){h(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!==("undefined"==typeof document?"undefined":i(document)))throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"===i(t.attrs)?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=f(e,t);return d(n,t),function(e){for(var o=[],i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?"s":"")+" required, but only "+t.length+" present")}},function(e,t,n){var r=n(46);t.a=r.a},function(e,t,n){var r=n(65);t.a=r.a},function(e,t,n){var r=n(18);t.a=function(e,t,n){"__proto__"==t&&r.a?Object(r.a)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(70),o=function(){try{var e=Object(r.a)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.a=o},function(e,t,n){var r=n(5),o=n(8),i="[object AsyncFunction]",a="[object Function]",u="[object GeneratorFunction]",c="[object Proxy]";t.a=function(e){if(!Object(o.a)(e))return!1;var t=Object(r.a)(e);return t==a||t==u||t==i||t==c}},function(e,t,n){(function(e){function n(e){"@babel/helpers - typeof";return(n="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)}var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.a=r}).call(t,n(21))},function(e,t){function n(e){"@babel/helpers - typeof";return(n="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)}var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){var r=n(23),o=n(79),i=n(80);t.a=function(e,t){return Object(i.a)(Object(o.a)(e,t,r.a),e+"")}},function(e,t,n){t.a=function(e){return e}},function(e,t,n){t.a=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(11),o=n(12),i=n(27),a=n(8);function u(e){"@babel/helpers - typeof";return(u="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)}t.a=function(e,t,n){if(!Object(a.a)(n))return!1;var c=u(t);return!!("number"==c?Object(o.a)(n)&&Object(i.a)(t,n.length):"string"==c&&t in n)&&Object(r.a)(n[t],e)}},function(e,t,n){var r=9007199254740991;t.a=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="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)}var o=9007199254740991,i=/^(?:0|[1-9]\d*)$/;t.a=function(e,t){var n=r(e);return!!(t=null==t?o:t)&&("number"==n||"symbol"!=n&&i.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){var r=n(109);t.a=function(e){return null==e?"":Object(r.a)(e)}},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n59)}},function(e,t,n){var r=n(123);n.d(t,"a",function(){return r.b});r.a},function(e,t,n){var r=n(124);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),o=n(51),i=n(53),a=n(57),u=n(61),c=n(16),l=n(113),s=n(115),d=n(129);n.d(t,"BooleanEditor",function(){return r.a}),n.d(t,"BooleanRenderer",function(){return o.a}),n.d(t,"BooleanFilter",function(){return i.a}),n.d(t,"NumberEditor",function(){return a.a}),n.d(t,"TextEditor",function(){return u.a}),n.d(t,"TemplateRenderer",function(){return c.a}),n.d(t,"ImageRenderer",function(){return l.a}),n.d(t,"DateTimeFilter",function(){return s.a}),n.d(t,"DateTimeEditor",function(){return d.a})},function(e,t,n){var r=n(44);t.a=r.a},function(e,t,n){var r=n(0),o=n(15);function i(e){"@babel/helpers - typeof";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,t){for(var n=0;n-1||!(n.indexOf(r)>-1)&&e}}]),n}();t.a=s},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(t&&t.hasOwnProperty(e)&&null!==t[e])n=t[e];else if(t.hasOwnProperty("colDef")&&t.colDef.hasOwnProperty(e)&&null!==t.colDef[e])n=t.colDef[e];else{var o=null;if(t.hasOwnProperty("context")&&(o=t.context.AGridComponentsMetaConfig||t.context.meta),o&&o.hasOwnProperty(t.column.colId)&&o[t.column.colId].hasOwnProperty(e)&&null!==o[t.column.colId][e])n=o[t.column.colId][e];else if(o&&o.hasOwnProperty(e)&&null!==o[e])n=o[e];else{var i=t.context;n=i&&i.hasOwnProperty(e)&&null!==i[e]?i[e]:r}}return void 0!==n?n:r}},{key:"getWin",value:function(e){var t=this.getOption("window",e)||window||null;if(!t)throw new Error("Current environment does not support window");return t}},{key:"getDoc",value:function(e){var t=this.getOption("document",e)||document||null;if(!t)throw new Error("Current environment does not support document");return t}}]),e}();t.a=o},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(48);n.n(u);function c(e){"@babel/helpers - typeof";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)}function l(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).setChecked(r),e.setListener(o),e.setDisabled(!1),e}return function(e,t,n){t&&l(e.prototype,t),n&&l(e,n)}(n,[{key:"init",value:function(e){this._params=e,this._onClick=this._onClick.bind(this),this._onKeydown=this._onKeydown.bind(this),this._gui=this.getDoc(e).createElement("div"),this._gui.className="boolSwitch__wrapper",this._gui.tabIndex=-1,this.render()}},{key:"render",value:function(){var e=this.getDoc(this._params),t=document.createElement("div");t.className="boolSwitch",this._input=e.createElement("input"),this._input.id="el-".concat(Math.random()),this._input.name="checkbox",this._input.className="boolSwitch__checkbox",this._input.type="checkbox",this._input.checked=this.isChecked(),this._input.disabled=this.isDisabled(),this._input.tabIndex="0";var n=document.createElement("label");n.className="boolSwitch__label",n.for=this._input.id,n.innerHTML='\n \n \n ',t.appendChild(this._input),t.appendChild(n),t.addEventListener("click",this._onClick),this._gui.addEventListener("keydown",this._onKeydown),this._gui.appendChild(t)}},{key:"destroy",value:function(){this._gui.querySelector(".boolSwitch").removeEventListener("click",this._onClick),this._gui.removeEventListener("keydown",this._onKeydown)}},{key:"focus",value:function(){this._gui.focus(),this._input.focus()}},{key:"setListener",value:function(e){this._listener=e}},{key:"getListener",value:function(){return this._listener}},{key:"setChecked",value:function(e){this._checked=e,this._input&&(this._input.checked=e)}},{key:"isChecked",value:function(){return this._checked}},{key:"toggle",value:function(){this.setChecked(!this.isChecked())}},{key:"setDisabled",value:function(e){this._disabled=e,this._input&&(this._input.disabled=e)}},{key:"isDisabled",value:function(){return this._disabled}},{key:"_onClick",value:function(e){if(this._disabled)return!1;this.toggle(),this._listener&&this._listener(this)}},{key:"_onKeydown",value:function(e){if(this._disabled)return!1;var t=e.which||e.keyCode;32==t?(this.toggle(),this._listener&&this._listener(this),e.stopPropagation()):39==t?(this.setChecked(!0),this._listener&&this._listener(this),e.stopPropagation()):37==t&&(this.setChecked(!1),this._listener&&this._listener(this),e.stopPropagation())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_onClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onClick"),r.prototype),p(r.prototype,"_onKeydown",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onKeydown"),r.prototype),r);t.a=h},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n-1)if(r.length&&"switch"!==r)this._gui.innerHTML=r;else{var u=this._getSwitcher(e);u.setChecked(!0),this._gui.innerHTML="",this._gui.appendChild(u.getGui())}else if(a.indexOf(n)>-1)if(o.length&&"switch"!==o)this._gui.innerHTML=o;else{var c=this._getSwitcher(e);c.setChecked(!1),this._gui.innerHTML="",this._gui.appendChild(c.getGui())}else this._gui.innerHTML=n}return!0}},{key:"_getSwitcher",value:function(e){return this._switcher||(this._switcher=new o.a,this._switcher.setDisabled(!0),this._switcher.init(e)),this._switcher}}]),n}();t.a=s},function(e,t,n){var r=n(54);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(55);n.n(u);function c(e){"@babel/helpers - typeof";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)}function l(e,t){for(var n=0;n\n \n\n\n \n \n ").concat(r?"":'\n \n ")," \n \n "),i.addEventListener("change",this._onRadioChange),this._gui.appendChild(i);var a=document.createElement("div");a.className="booleanFilter__body__applyPanel ag-filter-apply-panel ag-hidden",a.innerHTML='\n \n \n \n "),(n||r||o)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a)}},{key:"destroy",value:function(){this._gui.querySelector(".booleanFilter__body__labels").removeEventListener("change",this._onRadioChange),this._gui.querySelector(".booleanFilter__body__applyPanel").removeEventListener("click",this._ApplyFilterPanelButtonClick)}},{key:"doesFilterPass",value:function(e){var t=String(this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter(e):this._params.valueGetter(e));return"true"===this._filterText?this._trueValue.indexOf(t)>-1:this._falseValue.indexOf(t)>-1}},{key:"isFilterActive",value:function(){return null!==this._filterText&&void 0!==this._filterText&&""!==this._filterText}},{key:"getModel",value:function(){return this.isFilterActive()?{value:this._filterText,filterType:"boolean"}:null}},{key:"setModel",value:function(e){this._filterText=e&&e.hasOwnProperty("value")?e.value:"";var t=String(this._filterText);this._gui.querySelector(".booleanFilter__body").querySelectorAll('input[type="radio"]').forEach(function(e){e.value==t?e.checked=!0:e.checked=!1})}},{key:"getModelAsString",value:function(e){return e?function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}("true"===e.value?this._booleanFilterTranslation.true:this._booleanFilterTranslation.false):""}},{key:"reset",value:function(){var e=this._gui.querySelector(".booleanFilter__body");e.querySelectorAll('input[type="radio"]').forEach(function(e){e.checked=!1}),e.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),e.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{e.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(e){}this._filterText=null}},{key:"_onRadioChange",value:function(e,t){var n=t.target;this._filterText=n.value;var r=this._gui.querySelector(".booleanFilter__body");if(r)if(n.classList.contains("true-input")){r.querySelector(".ag-wrapper-true").classList.add("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else if(n.classList.contains("false-input")){r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.add("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else{r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.add("ag-checked")}catch(t){}}!1===e&&this._params.filterChangedCallback()}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_ApplyFilterPanelButtonClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_ApplyFilterPanelButtonClick"),r.prototype),r);t.a=g},function(e,t,n){var r=n(56);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".booleanFilter__body__labels label{display:block;padding:6px}.booleanFilter__body__labels label{display:block;padding:6px 0}.booleanFilter__body__labels label span{padding-left:6px}\n",""])},function(e,t,n){var r=n(58);t.a=r.a},function(e,t,n){var r,o=n(0),i=n(1),a=n(2),u=n(59);n.n(u);function c(e){"@babel/helpers - typeof";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)}function l(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&Object(o.a)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(28),o=n(94),i=n(12);t.a=function(e){return Object(i.a)(e)?Object(r.a)(e,!0):Object(o.a)(e)}},function(e,t,n){t.a=function(e,t){for(var n=-1,r=Array(e);++n"']/g,a=RegExp(i.source);t.a=function(e){return(e=Object(o.a)(e))&&a.test(e)?e.replace(i,r.a):e}},function(e,t,n){var r=n(108),o=Object(r.a)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.a=o},function(e,t,n){t.a=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){var r=n(9),o=n(34),i=n(29),a=n(110),u=1/0,c=r.a?r.a.prototype:void 0,l=c?c.toString:void 0;t.a=function e(t){if("string"==typeof t)return t;if(Object(i.a)(t))return Object(o.a)(t,e)+"";if(Object(a.a)(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-u?"-0":n}},function(e,t,n){var r=n(5),o=n(6);function i(e){"@babel/helpers - typeof";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)}var a="[object Symbol]";t.a=function(e){return"symbol"==i(e)||Object(o.a)(e)&&Object(r.a)(e)==a}},function(e,t,n){t.a=/<%-([\s\S]+?)%>/g},function(e,t,n){t.a=/<%([\s\S]+?)%>/g},function(e,t,n){var r=n(114);t.a=r.a},function(e,t,n){var r=n(16);function o(e){"@babel/helpers - typeof";return(o="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 i(e,t){for(var n=0;n\n '):e.renderTemplate=r,a(l(n.prototype),"refresh",this).call(this,e,t)}}]),n}();t.a=s},function(e,t,n){var r=n(116);t.a=r.a},function(e,t,n){var r,o,i,a,u,c,l,s,d,f,p,h,g,b=n(1),y=n(2),m=n(37),v=n(38),_=n(40),w=n(41),k=n(0),O=n(127);n.n(O);function C(e){"@babel/helpers - typeof";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)}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var n=0;n-1?R:this._filterOptions[0]),this.state.type=this._defaultOption;var i=(x(t={},R,o(R,"Equals")),x(t,L,o(R,"Not equal")),x(t,F,o(F,"Less than")),x(t,G,o(G,"Greater than")),x(t,H,o(H,"In range")),t);this._gui=document.createElement("div"),this._gui.className="dateTimeFilter ag-filter-body-wrapper",this._gui.innerHTML='\n \n
\n
\n
\n
\n
\n
\n '),this._filterTimeInput.init(e),this._filterTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filter=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._filterToDateTimeInput.init(e),this._filterToDateTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filterTo=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._gui.querySelector(".ag-filter-date-from").appendChild(this._filterTimeInput.getGui()),this._gui.querySelector(".ag-filter-date-to").appendChild(this._filterToDateTimeInput.getGui()),this._gui.querySelector(".ag-filter-select").addEventListener("change",this._onTypeChange),this.setState(this._state)}},{key:"destroy",value:function(){this.off(n.ON_CONDITION_CHANGED),this._filterTimeInput.destroy(),this._filterToDateTimeInput.destroy(),this._gui.querySelector(".ag-filter-select").removeEventListener("change",this._onTypeChange),this.reset()}},{key:"reset",value:function(){this.state.filter=null,this.state.filterTo=null,this._filterTimeInput.reset(),this._filterToDateTimeInput.reset(),this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){e=e||{},this.state.filter=e.filter||null,this.state.filterTo=e.filterTo||null,this.state.type=e.type||this._defaultOption;var t=this._gui,r=this._filterOptions,o=t.querySelector(".ag-filter-select"),i=this._filterTimeInput,a=this._filterToDateTimeInput;if(o.selectedIndex=r.indexOf(this.state.type),i.setDate(this.state.filter),a.setDate(this.state.filterTo),"createEvent"in document){var u=document.createEvent("HTMLEvents");u.initEvent("change",!1,!0),o.dispatchEvent(u)}else o.fireEvent("onchange");this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"_onTypeChange",value:function(e){var t=e.target,r=this._gui.querySelector(".ag-filter-date-to");this.state.type=t.options[t.selectedIndex].value,this.state.type===H?r.classList.remove("ag-hidden"):r.classList.add("ag-hidden"),this.notify(n.ON_CONDITION_CHANGED,this.state)}}]),n}(),u.ON_CONDITION_CHANGED="ConditionPanel.ON_CONDITION_CHANGED",A(o=c,"ON_CONDITION_CHANGED",[m.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_CONDITION_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),a=A(o.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{type:R,filter:null,filterTo:null}}}),A(o.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),A(o.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),A(o.prototype,"_onTypeChange",[b.a],Object.getOwnPropertyDescriptor(o.prototype,"_onTypeChange"),o.prototype),r=o))||r,B=Object(_.a)((h=p=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i \n ').concat(t("andCondition","AND"),'\n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n '),this._gui.appendChild(this._operatorPanel),this._operatorPanel.addEventListener("change",this._onOperatorChanged),this._gui.appendChild(this._secondConditionPanel.getGui())}},{key:"destroy",value:function(){this._firstConditionPanel.destroy(),this._secondConditionPanel.destroy(),this._operatorPanel.removeEventListener("change",this._onOperatorChanged),this.off(n.ON_JOIN_CONDITION_CHANGED),this.reset()}},{key:"reset",value:function(){this._firstConditionPanel.reset(),this._secondConditionPanel.reset(),this.notify(z.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){var t=this;e=e||{},this.state.operator=e.operator||W,this.state.condition1=e.condition1||null,this.state.condition2=e.condition2||null,this._firstConditionPanel.setState(this.state.condition1),this._secondConditionPanel.setState(this.state.condition2),this._operatorPanel.querySelectorAll("input").forEach(function(e){e.classList.contains(t.state.operator)?e.checked=!0:e.checked=!1}),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onOperatorChanged",value:function(e){var t=e.target;this.state.operator=t.value,t.classList.contains("OR")?(this._operatorPanel.querySelector(".ag-wrapper-or").classList.add("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.remove("ag-checked")):(this._operatorPanel.querySelector(".ag-wrapper-or").classList.remove("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.add("ag-checked")),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onFirstConditionChanged",value:function(e){if(this.state.condition1=e,!this.getOption("suppressAndOrCondition",this._params,!1)){var t=this.state.condition1,r=t.filter,o=t.filterTo,i=t.type,a=this._secondConditionPanel.getGui(),u=this._operatorPanel;(i===H?!r||!o:!r)?(a.classList.add("ag-hidden"),u.classList.add("ag-hidden")):(a.classList.remove("ag-hidden"),u.classList.remove("ag-hidden"))}this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onSecondConditionChanged",value:function(e){this.state.condition2=e,this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}}]),n}(),p.ON_JOIN_CONDITION_CHANGED="JoinConditionPanel.ON_JOIN_CONDITION_CHANGED",A(s=h,"ON_JOIN_CONDITION_CHANGED",[m.a],(d=(d=Object.getOwnPropertyDescriptor(s,"ON_JOIN_CONDITION_CHANGED"))?d.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return d}}),s),f=A(s.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{condition1:{},condition2:{},operator:W}}}),A(s.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"init"),s.prototype),A(s.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"destroy"),s.prototype),A(s.prototype,"_onOperatorChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onOperatorChanged"),s.prototype),A(s.prototype,"_onFirstConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onFirstConditionChanged"),s.prototype),A(s.prototype,"_onSecondConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onSecondConditionChanged"),s.prototype),l=s))||l,Y=(A((g=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i').concat(n("clearFilter","Clear Filter"),'\n \n \n "),(r||o||i)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a),this._state=this._JoinConditionPanel.state,this._params=e,this._doesFilterPassOptions={enableTime:this.getOption("dateTimeEnableTime",this._params,!0),inRangeInclusive:this.getOption("inRangeInclusive",this._params,!1),valueGetter:this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter:this._params.valueGetter}}},{key:"destroy",value:function(){this._JoinConditionPanel.destroy()}},{key:"doesFilterPass",value:function(e){var t=this._doesFilterPassOptions.valueGetter(e),n=this._state,r=n.condition1,o=n.condition2,i=n.operator,a=this._doesPassCondition(r,t),u=this._doesPassCondition(o,t);return i===W?a||u:a&&u}},{key:"isFilterActive",value:function(){var e=this._state.condition1;return!(!e||!e.filter)&&(e.filterTo&&e.type===H?null!==e.filter&&null!==e.filterTo:null!==e.filter)}},{key:"getModel",value:function(){var e=this,t=JSON.parse(JSON.stringify(this._state));return[t.condition1,t.condition2].forEach(function(t,n){t.filter&&(t.filter=e._state["condition".concat(n+1)].filter.toISOString()),t.filterTo&&(t.filterTo=e._state["condition".concat(n+1)].filterTo.toISOString())}),t.filterType="datetime",t.condition1.filterType="datetime",t.condition2.filterType="datetime",t.hasOwnProperty("condition2")&&t.condition2.hasOwnProperty("filter")&&t.condition2.filter?t:t.condition1}},{key:"setModel",value:function(e){!e||e.hasOwnProperty("condition1")||e.hasOwnProperty("condition2")||(e={condition1:e}),this.__disableStateChangeListener=!0,this._JoinConditionPanel.setState(e),this.__disableStateChangeListener=!1,this._state=this._JoinConditionPanel.state,[this._state.condition1,this._state.condition2].forEach(function(e){e.filter&&(e.filter=new Date(e.filter)),e.filterTo&&(e.filterTo=new Date(e.filterTo))})}},{key:"getModelAsString",value:function(e){if(!e)return"";var t=this.getOption("dateTimeMask",this._params,this._JoinConditionPanel._firstConditionPanel._filterTimeInput.picker.config.dateFormat),n=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US"),r=JSON.parse(JSON.stringify(e)),o=r.condition1,i=r.condition2,a=r.operator;[o,i].forEach(function(e){e.filter&&(e.filter=BBj.Masks.DateMask.mask(e.filter,t,n)),e.filterTo&&(e.filterTo=BBj.Masks.DateMask.mask(e.filterTo,t,n))});var u="".concat(o.filter||""," ").concat(o.filterTo?"→ "+o.filterTo:""),c="".concat(i.filter||""," ").concat(i.filterTo?"→ "+i.filterTo:""),l="".concat(i.filter&&a?a:"");return"".concat(u," ").concat(l," ").concat(c).trim()}},{key:"_doesPassCondition",value:function(e,t){if(!e.filter||!t)return!1;var n=e.filter,r=e.filterTo,o=e.type,i=BBj.Masks.Utils.Dates.getTimezoneOrOffset(),a=this._doesFilterPassOptions.inRangeInclusive,u=this._doesFilterPassOptions.enableTime,c=!1;return BBj.Masks.Utils.Dates.IS_TIME_REGEX.test(t)?(t=t=BBj.Masks.Utils.Dates.fixShortISO(t),[n,r].forEach(function(e){e instanceof Date&&(e.setFullYear(1970),e.setMonth(0),e.setDate(1))})):BBj.Masks.Utils.Dates.IS_DATE_REGEX.test(t)&&(t=BBj.Masks.Utils.Dates.fixShortISO(t)),t=Object(v.a)(t,i),u||[t,n,r].forEach(function(e){e instanceof Date&&(e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0))}),o===R?c=n>t==!1&&nt==!1&&nt:o===H&&r&&(c=a?(nt==!1&&nt||r>t==!1&&rt),c}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this._JoinConditionPanel.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this._JoinConditionPanel.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}},{key:"_onJoinConditionPanelStateChanged",value:function(e,t){this._state=e,!1===t&&this._params.filterChangedCallback()}}]),n}()).prototype,"init",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"init"),g.prototype),A(g.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"destroy"),g.prototype),A(g.prototype,"_ApplyFilterPanelButtonClick",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_ApplyFilterPanelButtonClick"),g.prototype),A(g.prototype,"_onJoinConditionPanelStateChanged",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_onJoinConditionPanelStateChanged"),g.prototype),g);t.a=Y},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5};var o={}},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(13),o=n(119),i=n(14)},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(o.a)(e).getTime(),a=Object(r.a)(t);return new Date(n+a)};var r=n(13),o=n(120),i=n(14)},function(e,t,n){t.a=function(e){Object(r.a)(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===o(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))};var r=n(14);function o(e){"@babel/helpers - typeof";return(o="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(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length)));if(t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),m=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=m.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),o=parseInt(n[1],10)-1,g(t,o)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return i=parseInt(n[1],10)-1,b(t,i)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(t,i,c)?d(t,i,c):new Date(NaN)}return null}(m.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,k=_.getTime(),O=0;if(p.time&&(O=function(e){var t,n,r;if(t=s.HH.exec(e))return y(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),y(n,r)?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return y(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(O)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O)),isNaN(w))return new Date(NaN);if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O+w)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(k+O)),w=Object(o.a)(new Date(k+O+w));return new Date(k+O+w)}return new Date(NaN)};var r=n(13),o=n(122),i=n(39);function a(e){"@babel/helpers - typeof";return(a="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)}var u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function y(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var i=n>0?(r+o(t))%r:o(t);return n*r+i};var r=6e4;function o(e){return e.getTime()%r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="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 o(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).picker=null,e.selectedDate=null,e._params={},e._gui=document.createElement("div"),e._gui.className="ag-cell-edit-wrapper",e._gui.innerHTML='\n
\n
\n \n \n \n \n
\n
\n '),e}return function(e,t,n){t&&g(e.prototype,t),n&&g(e,n)}(n,[{key:"init",value:function(e){this._params=e;var t=this.getOption("dateTimeEnableTime",e,!0),n=this.getOption("dateTimeEnable24HR",e,!0),r=this.getOption("dateTimeEnableSeconds",e,!1),o=!this.getOption("dateTimeEnableCalendar",e,!0),i=this.getOption("dateTimeMask",e);i||(i=o?"":"%Y/%Mz/%Dz",t&&(i+=n?" %Hz:%mz":" %hz:%mz",r&&(i+=":%sz"))),i=i.trim(),this.picker=flatpickr(this._gui,{wrap:!0,allowInput:!1,onChange:this._onDateChanged,formatDate:this.formatDate,maxDate:this.getOption("dateTimeMax",e,null),minDate:this.getOption("dateTimeMin",e,null),defaultHour:this.getOption("dateTimeDefaultHour",e,12),defaultMinute:this.getOption("dateTimeDefaultMinute",e,0),disableMobile:this.getOption("dateTimeDisableMobile",e,!1),weekNumbers:this.getOption("dateTimeEnableWeekNumber",e,!1),locale:this._getPickerLocale(),noCalendar:o,dateFormat:i,enableTime:t,enableSeconds:r,time_24hr:n}),this.picker.calendarContainer.classList.add("ag-custom-component-popup")}},{key:"destroy",value:function(){this.picker.destroy(),this.off(n.ON_DATE_CHANGED)}},{key:"setDate",value:function(e){this.picker.setDate(e,!0)}},{key:"open",value:function(){this.picker.open(),this._gui.querySelector("input").focus()}},{key:"close",value:function(){this.picker.close()}},{key:"reset",value:function(){this.picker.config&&this.picker.clear()}},{key:"formatDate",value:function(e,t){var n=this.getOption("dateTimeFormatter",this._params),r=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US");if(!n){if(!t||t&&t.indexOf("%")<0)return;return BBj.Masks.DateMask.mask(e,t,r)}var o=n;switch(h(n)){case"string":return o.indexOf("return")>=0||(o="return "+o+";"),new Function("date","format","locale","DateMask",o)(e,t,r,BBj.Masks.DateMask);case"function":return n(e,t,r,BBj.Masks.DateMask);default:throw new Error('Invalid dateTimeFormatter defined for column "'.concat(this._params.colDef.field,'". The formatter should be an expression or plain function'))}}},{key:"_onDateChanged",value:function(e){this.selectedDate=e[0]||null,this.notify(n.ON_DATE_CHANGED,this.selectedDate)}},{key:"_getPickerLocale",value:function(){for(var e=Intl.DateTimeFormat().resolvedOptions().locale||"en-US",t=[],n=[],r=4;r<11;r++){var o=new Date(1970,0,r);t.push(o.toLocaleString(e,{weekday:"short"}).split(",")[0]),n.push(o.toLocaleString(e,{weekday:"long"}).split(",")[0])}for(var i=[],a=[],u=0;u<12;u++){var c=new Date(1970,u,4);i.push(c.toLocaleString(e,{month:"short"})),a.push(c.toLocaleString(e,{month:"long"}))}return{weekdays:{shorthand:t,longhand:n},months:{shorthand:i,longhand:a},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:BBj.Masks.Utils.Dates.getWeekStartByLocale(e),ordinal:function(e){return""},rangeSeparator:" ",weekAbbreviation:"",scrollTitle:"",toggleTitle:"",amPM:["AM","PM"],yearAriaLabel:"",hourAriaLabel:"",minuteAriaLabel:""}}}]),n}(),a.ON_DATE_CHANGED="DateTimeInput.ON_DATE_CHANGED",v(o=u,"ON_DATE_CHANGED",[s.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_DATE_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),v(o.prototype,"init",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),v(o.prototype,"destroy",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),v(o.prototype,"formatDate",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"formatDate"),o.prototype),v(o.prototype,"_onDateChanged",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"_onDateChanged"),o.prototype),r=o))||r;t.a=_},function(e,t,n){var r=n(126);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".datetime__input{display:flex;align-items:center;width:100%;height:100%;overflow:hidden;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));border-radius:3px}.datetime__input:focus,.datetime__input:active,.datetime__input:hover{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input__input{flex:1;padding:6px;border:none;outline:none;background-color:var(--ag-background-color);color:inherit}.ag-theme-alpine .datetime__input__input,.ag-theme-balham .datetime__input__input,.ag-theme-material .datetime__input__input{background-color:var(--ag-background-color, #fff)}.ag-theme-alpine-dark .datetime__input__input,.ag-theme-balham-dark .datetime__input__input{background-color:var(--ag-background-color, #2d3436)}.datetime__input__clear{margin-left:1px;margin-top:1px;padding:6px;text-align:center;border:none;outline:none;cursor:pointer;color:inherit}.datetime__input--editor{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input--editor .datetime__input__input{padding:0;padding-left:6px}\n",""])},function(e,t,n){var r=n(128);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".dateTimeFilter select{margin-bottom:9px;padding:6px;border-radius:3px;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));color:inherit}.dateTimeFilter select:focus,.dateTimeFilter select:active{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.dateTimeFilter select option{text-indent:6px}\n",""])},function(e,t,n){var r=n(130);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(38),u=n(41),c=n(0);function l(e){"@babel/helpers - typeof";return(l="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 s(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&(0,o.default)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(32)),o=a(n(89)),i=a(n(12));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e){return(0,i.default)(e)?(0,r.default)(e,!0):(0,o.default)(e)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){for(var n=-1,r=Array(e);++n"']/g,u=RegExp(a.source);var c=function(e){return(e=(0,o.default)(e))&&u.test(e)?e.replace(a,r.default):e};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=(0,function(e){return e&&e.__esModule?e:{default:e}}(n(103)).default)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return function(t){return null==e?void 0:e[t]}};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(9)),o=u(n(37)),i=u(n(33)),a=u(n(105));function u(e){return e&&e.__esModule?e:{default:e}}var c=1/0,l=r.default?r.default.prototype:void 0,s=l?l.toString:void 0;var d=function e(t){if("string"==typeof t)return t;if((0,i.default)(t))return(0,o.default)(t,e)+"";if((0,a.default)(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-c?"-0":n};t.default=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(4));function i(e){return e&&e.__esModule?e:{default:e}}function a(e){"@babel/helpers - typeof";return(a="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)}var u="[object Symbol]";var c=function(e){return"symbol"==a(e)||(0,o.default)(e)&&(0,r.default)(e)==u};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%-([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t0){var t=e[0],n=t.previousElementSibling;if(n&&-1!==n.className.indexOf("group")&&!n.previousElementSibling&&(t=n),t.offsetTopi&&(o.scrollTop+=r-i)}}}()}function w(){m()&&_()}function k(){w()}function O(e){e.target!==o?w():e.preventDefault()}function C(e){for(var t=e.which||e.keyCode||0,n=0,r=[38,13,27,39,37,16,17,18,20,91,9];n=112&&t<=123||40===t&&m()||E(0)}function x(n){var r=n.which||n.keyCode||0;if(38===r||40===r||27===r){var o=m();if(27===r)v();else{if(!m||d.length<1)return;38===r?function(){if(d.length<1)t=void 0;else if(t===d[0])t=d[d.length-1];else for(var e=d.length-1;e>0;e--)if(t===d[e]||1===e){t=d[e-1];break}}():function(){if(d.length<1&&(t=void 0),t&&t!==d[d.length-1]){for(var e=0;e=p||1===r?(y(),n=window.setTimeout(function(){e.fetch(i,function(e){g===o&&e&&(f=i,t=(d=e).length>0?d[0]:void 0,_())},0)},0===r?c:0)):v()}function S(){setTimeout(function(){r.activeElement!==b&&v()},200)}return o.className="autocomplete "+(e.className||""),i.position="absolute",o.addEventListener("mousedown",function(e){e.stopPropagation(),e.preventDefault()}),o.addEventListener("focus",function(){return b.focus()}),b.addEventListener("keydown",x),b.addEventListener(s,C),b.addEventListener("blur",S),b.addEventListener("focus",D),window.addEventListener("resize",k),r.addEventListener("scroll",O,!0),{destroy:function(){b.removeEventListener("focus",D),b.removeEventListener("keydown",x),b.removeEventListener(s,C),b.removeEventListener("blur",S),window.removeEventListener("resize",k),r.removeEventListener("scroll",O,!0),y(),v()}}}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setState=function(e,t){var n=(0,r.gw_getGrid)(e).options;try{n.columnApi.setColumnState(t.columns),n.columnApi.setColumnGroupState(t.groups),n.api.setSortModel(t.sort),n.api.setFilterModel(t.filters)}catch(e){console.warn("Failed to parse grid state from JSON",e)}},t.gw_getState=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.columnApi.getColumnState(),o=t.columnApi.getColumnGroupState(),i=t.api.getSortModel(),a=t.api.getFilterModel();try{return JSON.stringify({columns:n,groups:o,sort:i,filters:a})}catch(e){console.warn("Failed to convert the grid state to json",e)}};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setSideBarVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.setSideBarVisible(Boolean(t))},t.gw_openToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.openToolPanel(t)},t.gw_closeToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.closeToolPanel(t)},t.gw_setFunctionsReadOnly=function(e,t){(0,r.gw_getGrid)(e).options.api.setFunctionsReadOnly(Boolean(t))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStatusbarComponentVisibility=function(e,t,n){(0,r.gw_getGrid)(e).options.api.getStatusPanel(t).setVisible(Boolean(n))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_showLoadingOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showLoadingOverlay()},t.gw_showNoRowsOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showNoRowsOverlay()},t.gw_hideOverlay=function(e){(0,r.gw_getGrid)(e).options.api.hideOverlay()};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_updateContext=function(e,t){(0,r.gw_getGrid)(e).options.context=t};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStyle=function(e,t){jss.forDocument((0,r.gw_getDocument)()).set(e,JSON.parse(t))},t.gw_removeStyle=function(e){jss.forDocument((0,r.gw_getDocument)()).remove(e)},n(117);var r=n(0)},function(e,t,n){(function(t){e.exports=t.jss=n(118)}).call(this,n(2))},function(e,t,n){"use strict";var r=function(){var e,t=/((?:\.|#)[^\.\s#]+)((?:\.|#)[^\.\s#]+)/g,n=/(::)(before|after|first-line|first-letter|selection)/,r=/([^:])(:)(before|after|first-line|first-letter|selection)/;function o(e,t){var n=e.cssRules||e.rules||[],r=[];t=t.toLowerCase();for(var o=0;o0?e.style.setProperty(n,r.substr(0,o),"important"):e.style.setProperty(n,r)}}function b(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}function y(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var m=function(e){this.doc=e,this.head=this.doc.head||this.doc.getElementsByTagName("head")[0],this.sheets=this.doc.styleSheets||[]};m.prototype={get:function(e){if(!this.defaultSheet)return{};if(e)return d(o(this.defaultSheet,e));var t=function(e){for(var t=e.cssRules||e.rules||[],n={},r=0;r\n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value,\n.gw-alignment-cell-right .templateRenderer {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value,\n.gw-alignment-cell-center .templateRenderer {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.gw-alignment-header-center .ag-header-cell-text {\n margin-left: -16px !important;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n"},function(e,t,n){var r=n(125);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(13)(r,o);r.locals&&(e.exports=r.locals)},function(e,t){e.exports=".autocompleteInputWrapper__input {\n padding-left: 6px;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-radius: 3px;\n background-color: var(--ag-background-color);\n color: inherit;\n outline: none;\n}\n\n.ag-theme-alpine .autocompleteInputWrapper__input,\n.ag-theme-balham .autocompleteInputWrapper__input,\n.ag-theme-material .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #fff);\n}\n\n.ag-theme-alpine-dark .autocompleteInputWrapper__input,\n.ag-theme-balham-dark .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #2d3436);\n}\n\n.autocomplete {\n background-color: var(--ag-background-color, #fff);\n z-index: 1000;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-top: 0;\n border-radius: 3px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n overflow: auto;\n -webkit-box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n}\n\n.autocomplete.dark {\n background-color: var(--ag-background-color, #2d3436);\n color: var(--ag-data-color, var(--ag-foreground-color, #fff));\n}\n\n.autocomplete .suggestion-group {\n background: #eee;\n padding: 5px 6px;\n font-weight: bold;\n}\n\n.autocomplete.dark .suggestion-group {\n background: var(--ag-background-color, #181d1f);\n}\n\n.autocomplete .suggestion-item {\n padding: 10px;\n cursor: pointer;\n}\n\n.autocomplete .suggestion-item:hover {\n background-color: var(--ag-row-hover-color, rgba(33, 150, 244, 0.1));\n}\n\n.autocomplete .suggestion-item.selected {\n background-color: var(\n --ag-selected-row-background-color,\n rgba(33, 150, 243, 0.3)\n );\n}\n\n.autocomplete .empty {\n padding: 8px 6px;\n}\n\n.autocomplete-input-error {\n -webkit-box-shadow: 0 -2px 0 #e91e63 inset;\n box-shadow: 0 -2px 0 #e91e63 inset;\n}\n\n.autocomplete-input-success {\n -webkit-box-shadow: 0 -2px 0 #4caf50 inset;\n box-shadow: 0 -2px 0 #4caf50 inset;\n}\n"}])); \ No newline at end of file diff --git a/client/dist/report.html b/client/dist/report.html index 1ce0949b..fb0ce009 100644 --- a/client/dist/report.html +++ b/client/dist/report.html @@ -3,7 +3,7 @@ - bbj-grid-widget [22 Oct 2020 at 14:19] + bbj-grid-widget [17 Nov 2020 at 11:20] diff --git a/client/src/style/classes.css b/client/src/style/classes.css index 3f6c04bc..027be918 100644 --- a/client/src/style/classes.css +++ b/client/src/style/classes.css @@ -7,14 +7,16 @@ */ .gw-alignment-cell-right, -.gw-alignment-cell-right .ag-cell-value { +.gw-alignment-cell-right .ag-cell-value, +.gw-alignment-cell-right .templateRenderer { text-align: right; justify-content: flex-end; flex: 1; } .gw-alignment-cell-center, -.gw-alignment-cell-center .ag-cell-value { +.gw-alignment-cell-center .ag-cell-value, +.gw-alignment-cell-center .templateRenderer { text-align: center; justify-content: center; flex: 1; @@ -25,8 +27,12 @@ } .gw-alignment-header-center .ag-header-cell-label { - flex-direction: column; - align-self: center; + display: flex; + justify-content: center; +} + +.gw-alignment-header-center .ag-header-cell-text { + margin-left: -16px !important; } .gw-alignment-header-right .ag-cell-label-container,