dmencu 0.1.39 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/unlogged/bypass-formulario.js +5 -1
- package/dist/server/server/table-tareas_tem.js +10 -9
- package/dist/unlogged/unlogged/bypass-formulario.js +5 -1
- package/install/xcalcular_resultado_trg.sql +28 -0
- package/package.json +1 -1
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-192.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-192_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-192_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-32.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-32_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-32_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-48.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-48_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-48_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-512.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-512_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-512_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-64.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-64_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-64_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-72.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-72_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-72_test.png +0 -0
- package/dist/client/unlogged/img/_login-logo-icon.png +0 -0
- package/dist/client/unlogged/img/_logo-128.png +0 -0
- package/dist/client/unlogged/img/_logo.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-192.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-192_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-192_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-32.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-32_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-32_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-48.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-48_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-48_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-512.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-512_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-512_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-64.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-64_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-64_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-72.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-72_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-72_test.png +0 -0
- package/dist/unlogged/unlogged/img/_login-logo-icon.png +0 -0
- package/dist/unlogged/unlogged/img/_logo-128.png +0 -0
- package/dist/unlogged/unlogged/img/_logo.png +0 -0
|
@@ -478,6 +478,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
478
478
|
//faltaria validar que no sea una fecha futura y que sea una fecha en el rango del operativo
|
|
479
479
|
return formato_valido && conversionOk;
|
|
480
480
|
},
|
|
481
|
+
mesanio_valido(x) {
|
|
482
|
+
var formato_valido = /^([1-9]|0[1-9]|1[012])\/(19|20)\d\d$/.test(x);
|
|
483
|
+
return formato_valido;
|
|
484
|
+
},
|
|
481
485
|
informado(x) {
|
|
482
486
|
return x !== undefined && x !== null && (!(x instanceof Array) || x.length !== 0)
|
|
483
487
|
&& (!(x instanceof Object) || Object.keys(x).length !== 0);
|
|
@@ -1126,4 +1130,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
1126
1130
|
}
|
|
1127
1131
|
exports.calcularResumenVivienda = calcularResumenVivienda;
|
|
1128
1132
|
});
|
|
1129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZWlCO0lBRWpCLElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBbUU7UUFDcEcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFGRCxvREFFQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQUZELDRGQUVDO0lBU0QsSUFBSSxXQUFXLEdBQUcsRUFBaUIsQ0FBQTtJQUVuQyw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWMsSUFBa0IsQ0FBQztJQUUvQyxJQUFJLDJCQUEyQixHQUFnRCxHQUFFLEVBQUU7UUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFtRDtRQUN2RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxTQUFlLG9CQUFvQixDQUFDLElBQTRCOztZQUM1RCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLGdCQUErRjtRQUUvRixhQUFhLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUpELDRDQUlD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RixJQUFJLGFBQTJCLENBQUM7UUFDaEMsSUFBSSxnQkFBOEIsQ0FBQztRQUNuQyxJQUFHLEtBQUssSUFBRSxNQUFNLEVBQUM7WUFDYixnQkFBZ0IsR0FBRyxVQUFVLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsVUFBVSxDQUFBO1lBQ2pELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7U0FDbkM7YUFBSTtZQUNELGFBQWEsR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFBLFFBQVEsQ0FBQSxDQUFDLENBQUEsVUFBVSxDQUFBO1NBQzlDO1FBQ0QsSUFBSSxTQUFTLEdBQW9CO1lBQzdCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDO0lBMUVELDBEQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmljdCBhcyBsaWtlQXIsIGJlaW5nQXJyYXkgfSBmcm9tIFwibGlrZS1hclwiO1xyXG5cclxuaW1wb3J0IHsgZ2V0Um93VmFsaWRhdG9yLCBGb3JtU3RydWN0dXJlU3RhdGUsIE9wY2lvbmVzUm93VmFsaWRhdG9yLCBGZWVkYmFjayB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQgeyBkYXRlLCBjb21wYXJlRm9yT3JkZXIsIGNvYWxlc2NlIH0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEVzdHJ1Y3R1cmEsIFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsIFxyXG4gICAgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIEluZm9Gb3JtdWxhcmlvLCBcclxuICAgIFBsYWluRm9yUGssIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YXNSYWl6LCBSZXN1bWVuRXN0YWRvLFxyXG4gICAgVmFsb3IsIFZpc2l0YSwgXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm9cclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5cclxudmFyIGVzcGVjaWFsZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlcz86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQazpGb3JQayk9PnZvaWRcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzKGNhbGN1bGFyVmFyaWFibGVzOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyA9IGNhbGN1bGFyVmFyaWFibGVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm86KHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LGZvclBrOkZvclBrKT0+dm9pZCl7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8gPSBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvXHJcbn1cclxuXHJcbnR5cGUgRGF0b3NCeVBhc3MgPSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgIC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH1cclxuICAgIGRpcnR5OmJvb2xlYW5cclxufTtcclxuXHJcbnZhciBkYXRvc0J5UGFzcyA9IHt9IGFzIERhdG9zQnlQYXNzXHJcblxyXG4vL0B0cy1pZ25vcmUgYXJyYW5jYSBlbiBibGFuY29cclxudmFyIGVzdHJ1Y3R1cmE6RXN0cnVjdHVyYSA9IG51bGwgYXMgRXN0cnVjdHVyYTtcclxuXHJcbmxldCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm86KGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpPT5Qcm9taXNlPGFueT4gPSAoKT0+e1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwZXJzaXN0aXJEYXRvc0J5UGFzcyBTSU4gREVGSU5JUicpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRQZXJzaXN0aXJEYXRvc0J5UGFzcyhwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjp0eXBlb2YgcGVyc2lzdGlyRGF0b3NCeVBhc3Mpe1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vID0gcGVyc2lzdGlyRGF0b3NCeVBhc3NGdW47XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpe1xyXG4gICAgYXdhaXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46KHRva2VuOnN0cmluZ3x1bmRlZmluZWQsIGZvclBrUmFpejpGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXMpPT52b2lkXHJcbil7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDoodG9rZW46c3RyaW5nfHVuZGVmaW5lZCwgZm9yUGtSYWl6OkZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhcyk9PnZvaWQgPSAoKT0+e1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU0lOIEVTUEVDSUZJQ0FSIGVuY29sYXJCYWNrdXBcIilcclxufVxyXG5cclxuZXhwb3J0IHZhciBpbnRlbnRhckJhY2t1cCA9IChmb3JQazpGb3JQayk9PntcclxuICAgIHZhciB7cmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmKHRva2VuKXtcclxuICAgICAgICBlbmNvbGFyQmFja3VwKHRva2VuLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOkVzdHJ1Y3R1cmEpe1xyXG4gICAgZXN0cnVjdHVyYSA9IGVzdHJ1Y3R1cmFBQ2FyZ2FyO1xyXG4gICAgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQodWE9PiEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZj0+KHtoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFub30pKS5wbGFpbigpXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmVUEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykubWFwKCh1YURlZiwgdWEpPT4oe1xyXG4gICAgICAgIHBrOnVhRGVmLnBrX2FncmVnYWRhIGFzIElkVmFyaWFibGUsIFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGY9PmYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhOyBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdG9zQnlQYXNzKGRicHA6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7ZGlydHk/OmJvb2xlYW59KXtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OmZhbHNlLFxyXG4gICAgICAgIC4uLmRicHAsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86b2JqZWN0KXtcclxuICAgIGZvcih2YXIgayBpbiBvKXtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCl7XHJcbiAgICBpZighZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKXtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlydHkoKXtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpe1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnR8SFRNTEJ1dHRvbkVsZW1lbnR8SFRNTElucHV0RWxlbWVudDtcclxuXHJcbnR5cGUgRGlyZWN0RnVuY3Rpb248VCwgUmVzdWx0PiA9IChyZXNwdWVzdGFzQXVtZW50YWRhczpSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLFZhbG9yLElkRmluPiwgZWxlbWVudG86VCxcclxuICAgIGZlZWRiYWNrQWxsOntcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFcclxuKSA9PiBSZXN1bHRcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHtcclxuICAgIGlkOiBzdHJpbmcsIFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+XHJcbn0gJiAoe1xyXG4gICAgcHJvcDprZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+XHJcbn18e1xyXG4gICAgYXR0cjpzdHJpbmdcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPlxyXG59fHtcclxuICAgIHN0eWxlOmtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25cclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPlxyXG59fHtcclxuICAgIGRpcmVjdDp0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+XHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6c3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHtlbGVtZW50bz86VH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOlJlZ2lzdHJvRWxlbWVudG88VD4pe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOlJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0ge3Jlc3B1ZXN0YXM6UmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejpGb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOlVuaWRhZEFuYWxpc2lzfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQayk6UmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhczp0cnVlLCBhZ3JlZ2FyU2lGYWx0YT86Ym9vbGVhbik6UmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7cmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3Rhc31cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazpGb3JQaywgY29uQXVtZW50YWRhcz86Ym9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzPzpSZXNwdWVzdGFzfSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsbyBxdWUgc29icmFyIGRlIHJlc3B1ZXN0YXMgbm8gbWUgaW1wb3J0YS4uLlxyXG4gICAgdmFyIHJlc3B1ZXN0YXMgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzIGFzIFJlc3B1ZXN0YXM7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6OyBcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrOyBcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTpbdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXMsIHVhRGVmOlVuaWRhZEFuYWxpc2lzLCBmb3JQazpGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUodW5pZGFkX2FuYWxpc2lzKXtcclxuICAgICAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGE9ey4uLmZvclBrQXBpbGFkYX07XHJcbiAgICAgICAgZGVsZXRlIGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV1cclxuICAgICAgICB1bmlkYWRfYW5hbGlzaXM9dWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlKHBpbGEubGVuZ3RoKXtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWx0YSB1biB2YWxvciBwYXJhICR7SlNPTi5zdHJpbmdpZnkodWFEZWYucGtfYWdyZWdhZGEpfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3I9cmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheT92YWxvclBrT1Bvc2ljaW9uIC0gMTp2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYocmVzcHVlc3RhcyA9PSBudWxsKXtcclxuICAgICAgICAgICAgaWYoYWdyZWdhclNpRmFsdGEpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBbnRlcmlvclt1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXSA9IHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmKGNvbkF1bWVudGFkYXMpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTp2YWxvclBrT1Bvc2ljaW9ufVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgU8OpIHF1ZSBsYSBwaWxhIHRpZW5lIGFsIG1lbm9zIHVuIGVsZW1lbnRvIHBvciBsbyB0YW50byBlc3RvIGVzdMOhIGxsZW5vIHNlZ3Vyby4gXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IHVhRGVmXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUmFpejpGb3JQa1JhaXope1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzQXVtZW50YWRhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgZm9yKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcyl7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZihkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICBpZighZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKXtcclxuICAgICAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFkZWYuZWxlbWVudG8pe1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZigncHJvcCcgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5wcm9wLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ2F0dHInIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoJ3N0eWxlJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihyb3dWYWxpZGF0b3IuYWN0dWFsKXtcclxuICAgICAgICB2YXIge3RvcCwgYm90dG9tfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZih0b3AgIT0gbnVsbCAmJiBib3R0b20gIT1udWxsKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmluKXtcclxuICAgIHZhciBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlPT0nZmluJz9gYm90b24tdm9sdmVyLTJgOmB2YXItJHtpZFZhcmlhYmxlfWApXHJcbiAgICAgICAgfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvLSR7aWRWYXJpYWJsZX1gKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0KjAuNyAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICB2YXIgZWxlbWVudG9FbnRlcm86SFRNTEVsZW1lbnR8bnVsbCA9IGVsZW1lbnRvOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBlbnRhciBlbnRlcm8gZW4gcGFudGFsbGEsIGRlZmluZSBlbCBib3R0b21cclxuICAgIHZhciByZWN0RWxlbWVudG9FbnRlcm86UmV0dXJuVHlwZTx0eXBlb2YgbXlPd24uZ2V0UmVjdD58bnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjpIVE1MRWxlbWVudHxudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6UmV0dXJuVHlwZTx0eXBlb2YgbXlPd24uZ2V0UmVjdD58bnVsbCA9IG51bGw7XHJcbiAgICB3aGlsZShlbGVtZW50byAhPSBudWxsKXtcclxuICAgICAgICBpZihlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ZhcmlhYmxlJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvbmp1bnRvcHJlZ3VudGFzJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8nKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uZm9ybXVsYXJpbycpIFxyXG4gICAgICAgICl7XHJcbiAgICAgICAgICAgIGlmKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCAmJiBlbGVtZW50by5jbGllbnRIZWlnaHQgPCBhbHRvUGFudGFsbGEpe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gbXlPd24uZ2V0UmVjdChlbGVtZW50b0VudGVybyEpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0RWxlbWVudG9FbnRlcm87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IG15T3duLmdldFJlY3QoZWxlbWVudG8pO1xyXG4gICAgICAgICAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgLSByZWN0LnRvcCA8IGFsdG9QYW50YWxsYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdDtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50byA9IGVsZW1lbnRvPy5wYXJlbnRFbGVtZW50ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwpe1xyXG4gICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVybztcclxuICAgIH1cclxuICAgIHZhciByZXN1bHQ6e1xyXG4gICAgICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT86SFRNTEVsZW1lbnR8bnVsbFxyXG4gICAgICAgIHRvcD86bnVtYmVyfG51bGxcclxuICAgICAgICBib3R0b20/Om51bWJlcnxudWxsXHJcbiAgICAgICAgZW5mb2NhZG8/OmJvb2xlYW58bnVsbFxyXG4gICAgICAgIGRlc2VuZm9xdWU/OnN0cmluZ3xudWxsXHJcbiAgICB9ID0ge307XHJcbiAgICBpZihlbGVtZW50b0VudGVybyAhPSBudWxsKXtcclxuICAgICAgICBpZihyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5lbGVtZW50b0lucHV0VmFyaWFibGUgPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICAgICAgdmFyIHRvcCA9IChyZWN0RWxlbWVudG9TdXBlcmlvcj8/cmVjdEVsZW1lbnRvRW50ZXJvKS50b3AgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgICAgIHJlc3VsdC50b3AgPSB0b3A7XHJcbiAgICAgICAgcmVzdWx0LmJvdHRvbSA9IHJlY3RFbGVtZW50b0VudGVyby50b3ArcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodDtcclxuICAgICAgICBpZih0b3A8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCl7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlPSdhcnJpYmEnO1xyXG4gICAgICAgIH1lbHNlIGlmKHJlY3RFbGVtZW50b0VudGVyby50b3ArcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBhbHRvUGFudGFsbGEpe1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZT0nYWJham8nO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXN1bHQuZW5mb2NhZG89dHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyRGlzdGludG88TiBleHRlbmRzIHN0cmluZz4oXHJcbiAgICBvYmpldG86e3NldEF0dHJpYnV0ZToobmFtZTpOLCB2YWxvcjpzdHJpbmcpPT52b2lkLCBnZXRBdHRyaWJ1dGU6KG5hbWU6Tik9PnN0cmluZ3xudWxsfSxcclxuICAgIG5hbWU6TixcclxuICAgIHZhbG9yOnN0cmluZ1xyXG4pe1xyXG4gICAgaWYob2JqZXRvICYmIG9iamV0by5nZXRBdHRyaWJ1dGUobmFtZSkgIT0gdmFsb3Ipe1xyXG4gICAgICAgIG9iamV0by5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsb3IpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsb3JEaXN0aW50bzxUIGV4dGVuZHMge30sIE4gZXh0ZW5kcyBrZXlvZiBUPihcclxuICAgIG9iamV0bzpULFxyXG4gICAgbmFtZTpOLFxyXG4gICAgdmFsb3I6VFtOXVxyXG4pe1xyXG4gICAgaWYob2JqZXRvW25hbWVdICE9IHZhbG9yKXtcclxuICAgICAgICBvYmpldG9bbmFtZV0gPSB2YWxvcjtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oX2ZvclBrOkZvclBrKXtcclxuICAgIFxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25faWRfcHJlZ3VudGEoX3BheWxvYWQ6e3ByZWd1bnRhOiBJZFByZWd1bnRhLCBmb3JQazogRm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPSBTeW1ib2woJ05PX0NBTUJJQVJfU09MT19UUkFFUl9TVEFUVVMnKVxyXG5leHBvcnQgY29uc3QgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPJylcclxuXHJcbmZ1bmN0aW9uIHJlZnJlc2Nhck1hcmNhRGlydHkoKXtcclxuICAgIHZhciBib3RvbkdyYWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1idXR0b25cIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBpZihib3RvbkdyYWJhcil7XHJcbiAgICAgICAgaWYoYm90b25HcmFiYXIuZGlzYWJsZWQgIT09ICFkYXRvc0J5UGFzcy5kaXJ0eSl7XHJcbiAgICAgICAgICAgIGJvdG9uR3JhYmFyLmRpc2FibGVkID0gIWRhdG9zQnlQYXNzLmRpcnR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhKHBheWxvYWQ6e1xyXG4gICAgZm9yUGs6Rm9yUGssIFxyXG4gICAgdmFyaWFibGU6SWRWYXJpYWJsZXx0eXBlb2YgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIFxyXG4gICAgcmVzcHVlc3RhOlZhbG9yfHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPXHJcbn0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgdG9rZW4gPSAnQVZFUklHVUFSIFRPRE8nXHJcbiAgICBsZXQgeyBmb3JQaywgcmVzcHVlc3RhLCB2YXJpYWJsZSB9ID0gcGF5bG9hZDtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpen0gID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXMgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dO1xyXG4gICAgdmFyIHJlY2VudE1vZGlmaWVkID0gZmFsc2U7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID8gcmVzcHVlc3Rhc1t2YXJpYWJsZV0gOiBudWxsO1xyXG4gICAgaWYocmVzcHVlc3RhICE9PSBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTKXtcclxuICAgICAgICBpZihyZXNwdWVzdGEgPT09ICcnKXtcclxuICAgICAgICAgICAgcmVzcHVlc3RhID0gbnVsbDtcclxuICAgICAgICB9ZWxzZSBpZihlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXS50aXBvPT0nbnVtZXJvJyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YSA9IE51bWJlcihyZXNwdWVzdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNpIGVzIHVuIGZhbHN5ICgwID09IGZhbHNlKSB0ZW5nbyBxdWUgY29tcGFyYXIgY29uICE9PVxyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzcHVlc3RhID8gdmFsb3JBbnRlcmlvciAhPSByZXNwdWVzdGEgOiB2YWxvckFudGVyaW9yICE9PSByZXNwdWVzdGFcclxuICAgICAgICBpZihyZWNlbnRNb2RpZmllZCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTpJZFZhcmlhYmxlfElkRmlufG51bGx8dW5kZWZpbmVkO1xyXG4gICAgaWYodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKXtcclxuICAgICAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICAgICAgaWYoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSl7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISldLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSwgXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG97XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbc2lndWllbnRlVmFyaWFibGVdLnNpZ3VpZW50ZTtcclxuICAgICAgICB9d2hpbGUodmFsb3JBbnRlcmlvciA9PSBudWxsICYmIHJlY2VudE1vZGlmaWVkICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9IG51bGwgJiYgc2lndWllbnRlVmFyaWFibGUgIT0gJ2ZpbicgJiYgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1tzaWd1aWVudGVWYXJpYWJsZV0uZnVuY2lvbkF1dG9JbmdyZXNhcilcclxuICAgICAgICBpZihzaWd1aWVudGVWYXJpYWJsZSA9PSBudWxsICYmIGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXS5lc3RhZG8gPT0gJ3ZhbGlkYScpe1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9ICdmaW4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7cmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbDogZmVlZGJhY2tSb3cuYWN0dWFsfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfbm90YShwYXlsb2FkOntmb3JQa1JhaXo6Rm9yUGtSYWl6LCB0YXJlYTpJZFRhcmVhLCBub3RhOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgdGFyZWEsIG5vdGEgfSA9IHBheWxvYWQ7XHJcbiAgICBjb25zb2xlLmxvZyhcIkZBTFRBIC8vIFRPRE9cIilcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX3Zpc2l0YShwYXlsb2FkOntmb3JQa1JhaXo6Rm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgb2JzZXJ2YWNpb25lcyB9ID0gcGF5bG9hZDtcclxuICAgIC8qXHJcbiAgICBpZighZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcyl7XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdmFyIHZpc2l0YXMgPSBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzO1xyXG4gICAgdmlzaXRhcy5wdXNoKHtcclxuICAgICAgICBmZWNoYTogZGF0ZXRpbWUubm93KCkudG9ZbWQoKSxcclxuICAgICAgICBob3JhOiBkYXRldGltZS5ub3coKS50b0htKCksXHJcbiAgICAgICAgaWRwZXI6IG51bGwsIC8vIFRPRE86IFZFUiBERSBET05ERSBTRSBTQUNBIEVMIElEUEVSIHN0YXRlLmRhdG9zLmlkcGVyLFxyXG4gICAgICAgIG9ic2VydmFjaW9uZXM6b2JzZXJ2YWNpb25lc1xyXG4gICAgfSlcclxuICAgICovXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7Zm9yUGtSYWl6OkZvclBrUmFpeiwgaW5kZXg6bnVtYmVyLCBvcGNpb246a2V5b2YgVmlzaXRhICwgdmFsb3I6c3RyaW5nfG51bGx9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvcn0gPSBwYXlsb2FkO1xyXG4gICAgLy8gdmFyIHZpc2l0YXMgPSBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzO1xyXG4gICAgLy8gdmlzaXRhc1tpbmRleF1bb3BjaW9uXSA9IHZhbG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlcn0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4fSA9IHBheWxvYWQ7XHJcbiAgICAvLyB2YXIgdmlzaXRhcyA9IGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXM7XHJcbiAgICAvLyB2aXNpdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8oe2ZvclBrfToge2ZvclBrOkZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIHZhciB7cmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oe2ZvclBrLCBmb3JQa1BhZHJlfToge2ZvclBrOkZvclBrLCBmb3JQa1BhZHJlOkZvclBrfSl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpen0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzfHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciB1YURlZjpVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBpbmRleCA9IGZvclBrW3VhRGVmLnBrX2FncmVnYWRhXTtcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VuaWRhZF9hbmFsaXNpc10ucG9wKCk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1BhZHJlKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7YXV0b0luZ3Jlc286IHRydWV9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjoocGF5bG9hZDpULCBkYXRvczp0eXBlb2YgZGF0b3NCeVBhc3MpPT5SLFxyXG4gICAgcGF5bG9hZDpUXHJcbil7XHJcbiAgICByZXR1cm4gZnVuKHBheWxvYWQsIGRhdG9zQnlQYXNzKTtcclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5leHBvcnQgY29uc3QgdWx0aW1hVmFyaWJsZVZpdmllbmRhID0gJ05PX0VTVEFfREVGSU5JREFfQVVOLy9UT0RPJyBhcyBJZFZhcmlhYmxlO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWENQPTIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOntba2V5OnN0cmluZ106c3RyaW5nfT17XHJcbiAgICBmYWxzZTogJ2ZhbHNlJyxcclxuICAgIHRydWU6ICd0cnVlJyxcclxuICAgIFwiPVwiOiAnPT0nLFxyXG4gICAgXCI8PlwiOiAnIT0nLFxyXG4gICAgXCImXCI6ICcmJicsXHJcbiAgICBcInxcIjogJ3x8JyxcclxuICAgIFwiT1JcIjogJ3x8JyxcclxuICAgIFwiQU5EXCI6ICcmJicsXHJcbiAgICBcIm9yXCI6ICd8fCcsXHJcbiAgICBcImFuZFwiOiAnJiYnLFxyXG4gICAgXCJub3RcIjogJyEnLFxyXG4gICAgXCJOT1RcIjogJyEnLFxyXG59O1xyXG5cclxuY29uc3QgaGVscGVyc0Nhc2lsbGVyb3M9e1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOmFueSl7XHJcbiAgICAgICAgaWYocG9zaWJsZU51bGw9PW51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOm51bWJlciwgZGVub21pbmFkb3I6bnVtYmVyLCBwazpzdHJpbmcpe1xyXG4gICAgICAgIGlmKGRlbm9taW5hZG9yPT0wKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIrcGsrXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIrbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvci9kZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOntcclxuICAgICAgICBibGFuY28oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PTAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpe1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OnN0cmluZyl7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbz0vXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PXVuZGVmaW5lZCAmJiB4IT09bnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpfHwgeC5sZW5ndGghPT0wIClcclxuICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCl8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4ID09IC05XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXIoeDpudW1iZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDI9PTBcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucm9jb2RpZ286c3RyaW5nfG51bGwsIGVzVmFsb3I6Ym9vbGVhbn09PntcclxuICAgIHZhciBucmNvZGlnbzpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgdmFyIHJ2YWxvcjpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTpzdHJpbmc7XHJcbiAgICB2YXIgcm5vcmVhOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgIC8vIHZhciByZXN1bHQ9e25yY29kOlN0cmluZywgZXN2YWw6Qm9vbGVhbn07XHJcbiAgICBpZih1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKXtcclxuICAgICAgICBmb3IobGV0IG5vUmVhIG9mIG5vUmVhc1RhcmVhKXsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYT09J25vX3JlYScpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZSAsIHZhbG9yLCBub19yZWF9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGVfc3VwICwgdmFsb3Jfc3VwLCBub19yZWFfc3VwfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3Jfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3J2YXJpYWJsZSBhcyBJZFZhcmlhYmxlXT09cnZhbG9yKXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID1ybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSl7XHJcbiAgICAgICAgaWYodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0hpamFzIG9mIHJlc3B1ZXN0YXNbdWE/LnVuaWRhZF9hbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuIH1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86RGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgdW5pZGFkZXNBUmVjb3JyZXIgPSBbJ3ZpdmllbmRhcycsJ2hvZ2FyZXMnLCdwZXJzb25hcyddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAgLy92YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIC8vICBsZXQgcmVzbm9yZWEgPSBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXIsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXMsJ25vX3JlYScpO1xyXG4gICAgICAgIC8vY29kTm9SZWE9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAgLy9lc05vUmVhPXJlc25vcmVhLmVzdmFsb3I7XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhLCBlc05vUmVhfTtcclxuICAgIH0sXHJcbiAgIGVzTm9SZWFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgYnVzY2FyTm9yZWFSZXNwdWVzdGFzXHJcbiAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlclN1cCA9IFsndml2aWVuZGFzJywnaG9nYXJlc19zdXAnLCdwZXJzb25hc19zdXAnXSBhcyBJZFVuaWRhZEFuYWxpc2lzW107XHJcbiAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAvL3ZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAvL3ZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgIC8vbGV0IHJlc25vcmVhID1idXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXJTdXAsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXNTdXAsJ25vX3JlYV9zdXAnKTsvL2NvbiBsb3MgcGFyYW1ldHJvcyBxdWUgbmVjZXNpdGFyaWFtb3MgcGFyYSBnZW5lcmFsaXphclxyXG4gICAgICAgLy8gIGNvZE5vUmVhU3VwPXJlc25vcmVhLm5yY29kaWdvO1xyXG4gICAgICAgLy8gIGVzTm9SZWFTdXA9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgIC8vcmV0dXJuIHtjb2ROb1JlYVN1cCxlc05vUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kUmVhOm51bWJlcnxudWxsPSBudWxsO1xyXG4gICAgICAgIC8vaWYoIXJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYSwgZXNSZWF9XHJcbiAgICAgICAgLy99ZWxzZSBpZihyZXNwdWVzdGFzWydpZGVudGlmJyBhcyBJZFZhcmlhYmxlXT09MiB8fHJlc3B1ZXN0YXNbJ3Jlc2lkX2hvZycgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ2NvbnRhY3QnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWEgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlcyddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhJyBdICE9IDF8fHJlc3B1ZXN0YXNIWydwcmVqdWUxJ109PTJ8fHJlc3B1ZXN0YXNIWyd0cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBzZWxlYz1yZXNwdWVzdGFzSFsnY3JfbnVtX21pZW1icm8nXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydwZXJzb25hcyddICYmIHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdICl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwdWVzdGFzUCA9IHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcF9lbnRyZWFfaW5kID0gcmVzcHVlc3Rhc1BbJ2VudHJlYWluZCcgYXMgSWRWYXJpYWJsZSBdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZihyZXNwX2VudHJlYV9pbmQ9PW51bGwpeyAvL3F1ZXJlbW9zIGNvbnRlbXBsYXIgZWwgdW5kZWZpbmVkXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gTnVtYmVyKHJlc3BfZW50cmVhX2luZCk7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgcmVhaCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgXHJcbiAgICAgICAgLy92YXIgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdICYmICFyZXNwdWVzdGFzWydzcDFhJyBhcyBJZFZhcmlhYmxlXSl7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIHtjb2RSZWFTdXAsIGVzUmVhU3VwfVxyXG4gICAgICAgIC8vfWVsc2UgaWYoIHJlc3B1ZXN0YXNbJ2NvbmZpcl90ZWxfc3VwJyBhcyBJZFZhcmlhYmxlXT09MiB8fCByZXNwdWVzdGFzWydjb25maXJfZG9tX3N1cCcgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1snc3AxYicgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWMnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlc19zdXAnXTtcclxuICAgICAgICAvLyAgICBpZihyZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICBmb3IobGV0IHJlc3B1ZXN0YXNIIG9mIHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgcmVhaDpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgc2VsZWM6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ2VudHJlYV9zdXAnIF0gPT0gMnx8cmVzcHVlc3Rhc0hbJ3NwcjFfc3VwJ109PTJ8fHJlc3B1ZXN0YXNIWydzcDQnXT09M3x8cmVzcHVlc3Rhc0hbJ3RvdGFsX3JhbmdvX3N1cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaCA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHJlYWg9MztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ICAgICBcclxuICAgICAgICAvLyAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgIHJlYWhzLnB1c2gocmVhaCk7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgaWYgKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MSkpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0yKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0xfHxyaD09Mykpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gNDtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICB9IGVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgIGNvZFJlYVN1cCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgfVxyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8vcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6JycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOnt9IGFzIHtbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e30gYXMge1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn1cclxuKT0+e1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hPXtwMTpzdHJpbmcsIHAyOm51bWJlciwgcDM6bnVtYmVyLCBwNDpudW1iZXJ8bnVsbCwgcDU6MXxudWxsLCBwNjoxfG51bGx9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOm51bWJlcnxzdHJpbmd8bnVsbCk6bnVtYmVye1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgaWYoaXNOYU4obnVtLTApKSByZXR1cm4gMDtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIHJldHVybiBudW0tMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczp7W2sgaW4gc3RyaW5nXTpib29sZWFufSA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZpY2FyU29ydGVvKG9wdHM6e1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgdmFyaWFibGVBY3R1YWw6SWRWYXJpYWJsZVxyXG5cclxufSl7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KT0+e1xyXG4gICAgICAgIHZhciB7cmVzcHVlc3Rhc30gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5yZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1udWxsKTtcclxuICAgICAgICBpZigndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICYmIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBwZXIgb2YgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9ICBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpe1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pLTFdO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKXtcclxuICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3RhczpwYWRyZX0pO1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdIT0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09Mil7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT1yZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYoY2FudGlkYWRUb3RhbDxyZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLGkpPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pPT5wW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwtMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlKGNhbnRpZGFkVG90YWw+cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5leHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTEgJiZcclxuICAgICAgICAgICAgICAgICFyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXT09MFxyXG4gICAgICAgICAgICApe1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRlYXI9cmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5maWx0cm9fZnVuKHApKTtcclxuICAgICAgICAgICAgICAgIGlmKHNvcnRlYXIubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZm9yRWFjaCgocGVyLCBpKT0+cGVyLiRwMD1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6XCIkcDBcIiBhcyBJZFZhcmlhYmxlLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmEuJHAwLTEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdPWxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkrMSk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKT0+bGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvP3Jlc3RvIC0gMTo5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDpSZXNwdWVzdGFzKT0+cFt2YXJMZXRyYV09PWxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPXBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1zb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1yZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0xXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT0wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXT0nb2snO1xyXG4gICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF09J29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKXtcclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgVUE6SWRVbmlkYWRBbmFsaXNpcywgXHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6UmVzcHVlc3Rhc3xudWxsLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbil7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvcih2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcyl7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLCBcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLCBcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsIFxyXG4gICAgICAgICAgICAgICAgey4uLmZvclBrLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKXtcclxuICAgICAgICBmb3IodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKXtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6UGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7Li4uZm9yUGssIGZvcm11bGFyaW99KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa109XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFyY2FGaW46J2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIge3Jlc3VtZW4sIGF1dG9JbmdyZXNhZGFzfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6SWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmKGF1dG9JbmdyZXNhZGFzIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FtYmlvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0+MCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2godmFybmFtZT0+e1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1t2YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicrZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZpdmllbmRhOm51bWJlcik6SWRGb3JtdWxhcmlvPT57XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgdml2aWVuZGEgZXMgZWwgcGFyYW1ldHJvIGNvcnJlY3RvXHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKXtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWY9PiF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZj0+e1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOkZvcm11bGFyaW8sIGVuYzphbnkpPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWw/Zm9ybXVsYXJpb1ByaW5jaXBhbD09Zi5pZF9jYXNpbGxlcm86Zi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGt9XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbil7XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPXsuLi5mb3JQa1JhaXp9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OkZvclBrUmFpeiwgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcil7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93cyA6IHtbeCBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxJZEZpbj59PXt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazphbnksIHBsYWluUGs6UGxhaW5Gb3JQayk9PkpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGEgIT0gZm9yUGtSYWl6LnZpdmllbmRhKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0gPSB7XHJcbiAgICAgICAgLi4uZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeiwgXHJcbiAgICAgICAgICAgIG51ZXZvc1Jvd3MsXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNcclxuICAgICAgICApXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYSA9IChpZFZpdmllbmRhOm51bWJlcik9PntcclxuICAgIHZhciBtYWluRm9ybUZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShpZFZpdmllbmRhKTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVml2aWVuZGFdO1xyXG4gICAgdmFyIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MgPSAoaWRGb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zLmZvckVhY2goKGNhc2lsbGVybyk9PntcclxuICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKT9jYXNpbGxlcm8uc2FsdG86J0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYoZm9ybUhpam8pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZpdmllbmRhKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDpudW1iZXJ8bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICA/IFxyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICA6XHJcbiAgICAgICAgbnVtQWN0dWFsID09IG51bUVsZW1lbnRvVUFcclxuICAgIClcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJEaXNhYmxlZEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyAmJlxyXG4gICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICkpXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6bnVtYmVyfG51bGwsXHJcbiAgICBjb2ROb1JlYTpzdHJpbmd8bnVsbCxcclxuICAgIGNvZFJlYVN1cDpudW1iZXJ8bnVsbFxyXG4gICAgY29kTm9SZWFTdXA6c3RyaW5nfG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejpGb3JQa1JhaXosIFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNcclxuKTpSZXN1bHRhZG9SZXN1bWVue1xyXG4gICAgdmFyIHtjb2RSZWEsIGVzUmVhfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYSwgZXNOb1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2RSZWFTdXAsZXNSZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhU3VwLCBlc05vUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKTtcclxuICAgIHZhciBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISldXHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKT0+e1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYT09Zm9yUGtSYWl6LnZpdmllbmRhICYmIFxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lSW5kaXZpZHVhbD9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyP3Jlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpdmllbmRhOmZvclBrUmFpei52aXZpZW5kYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgfSkucmVzcHVlc3Rhczp7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDp0cnVlKVxyXG4gICAgfSkuYXJyYXkoKTtcclxuICAgIHZhciBwcmlvcmlkYWRlczp7W2tleSBpbiBSZXN1bWVuRXN0YWRvXToge3ByaW9yaWRhZDpudW1iZXIsIGNhbnRpZGFkOm51bWJlcn19ID0ge1xyXG4gICAgICAgICdubyByZWEnOntwcmlvcmlkYWQ6IDEsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzp7cHJpb3JpZGFkOiAyLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnaW5jb21wbGV0byc6e3ByaW9yaWRhZDogMywgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ3ZhY2lvJzp7cHJpb3JpZGFkOiA0LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzp7cHJpb3JpZGFkOiA1LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnb2snOntwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOjB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvcih2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSl7XHJcbiAgICAgICAgdmFyIHJlc3VtZW4gPSBmZWVkYmFjay5yZXN1bWVuO1xyXG4gICAgICAgIHByaW9yaWRhZGVzW3Jlc3VtZW5dLmNhbnRpZGFkKys7XHJcbiAgICAgICAgaWYocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkPG1pbil7XHJcbiAgICAgICAgICAgIG1pbj1wcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49cmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihtaW5SZXN1bWVuPT0ndmFjaW8nJiYgcHJpb3JpZGFkZXNbJ29rJ10uY2FudGlkYWQgfHwgbWluUmVzdW1lbj09J2luY29tcGxldG8nKXtcclxuICAgICAgICBpZihmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLyl7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6LnZpdmllbmRhIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG87XHJcbiAgICBpZih0YXJlYT09J3N1cGUnKXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cD8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86UmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==
|
|
1133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFFL0QsbUNBZWlCO0lBRWpCLElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBbUU7UUFDcEcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFGRCxvREFFQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUF1RjtRQUM1SSxVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQUZELDRGQUVDO0lBU0QsSUFBSSxXQUFXLEdBQUcsRUFBaUIsQ0FBQTtJQUVuQyw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWMsSUFBa0IsQ0FBQztJQUUvQyxJQUFJLDJCQUEyQixHQUFnRCxHQUFFLEVBQUU7UUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFtRDtRQUN2RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxTQUFlLG9CQUFvQixDQUFDLElBQTRCOztZQUM1RCxNQUFNLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLGdCQUErRjtRQUUvRixhQUFhLEdBQUcsZ0JBQWdCLENBQUE7SUFDcEMsQ0FBQztJQUpELDRDQUlD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QzNCO1NBQ0o7UUFFRCx3Q0FBd0M7UUFDeEMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBNEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDM0YsSUFBSSxhQUEyQixDQUFDO1FBQ2hDLElBQUksZ0JBQThCLENBQUM7UUFDbkMsSUFBRyxLQUFLLElBQUUsTUFBTSxFQUFDO1lBQ2IsZ0JBQWdCLEdBQUcsVUFBVSxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQTtZQUNqRCxxRUFBcUU7WUFDckUsYUFBYSxHQUFHLGdCQUFnQixDQUFBO1NBQ25DO2FBQUk7WUFDRCxhQUFhLEdBQUcsT0FBTyxDQUFBLENBQUMsQ0FBQSxRQUFRLENBQUEsQ0FBQyxDQUFBLFVBQVUsQ0FBQTtTQUM5QztRQUNELElBQUksU0FBUyxHQUFvQjtZQUM3QixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLE1BQU07WUFDTixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7U0FDZCxDQUFBO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQTFFRCwwREEwRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLCBcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbywgXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsIFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvXHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeiwgZm9yUGs6Rm9yUGspPT52b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKT0+dm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczoocmVzcHVlc3Rhc1JhaXo6UmVzcHVlc3Rhc1JhaXosZm9yUGs6Rm9yUGspPT52b2lkKXtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOihyZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzUmFpeixmb3JQazpGb3JQayk9PnZvaWQpe1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTpib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOkVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOihkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKT0+UHJvbWlzZTxhbnk+ID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46dHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKXtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgIGF3YWl0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyhkYnBwKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZmFsc2VcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVuY29sYXJCYWNrdXAoXHJcbiAgICBlbmNvbGFyQmFja3VwRnVuOih0b2tlbjpzdHJpbmd8dW5kZWZpbmVkLCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejpSZXNwdWVzdGFzKT0+dm9pZFxyXG4pe1xyXG4gICAgZW5jb2xhckJhY2t1cCA9IGVuY29sYXJCYWNrdXBGdW5cclxufVxyXG5cclxubGV0IGVuY29sYXJCYWNrdXA6KHRva2VuOnN0cmluZ3x1bmRlZmluZWQsIGZvclBrUmFpejpGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXMpPT52b2lkID0gKCk9PntcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6Rm9yUGspPT57XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKVxyXG4gICAgdmFyIHRva2VuID0gZGF0b3NCeVBhc3MudG9rZW47XHJcbiAgICBpZih0b2tlbil7XHJcbiAgICAgICAgZW5jb2xhckJhY2t1cCh0b2tlbiwgZm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpeilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibm8gaGF5IHRva2VuLCBubyBzZSBwdWRvIGhhY2VyIGVsIGJhY2t1cFwiKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcjpFc3RydWN0dXJhKXtcclxuICAgIGVzdHJ1Y3R1cmEgPSBlc3RydWN0dXJhQUNhcmdhcjtcclxuICAgIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKHVhPT4hIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGY9Pih7aGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm99KSkucGxhaW4oKVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZlVBID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLm1hcCgodWFEZWYsIHVhKT0+KHtcclxuICAgICAgICBwazp1YURlZi5wa19hZ3JlZ2FkYSBhcyBJZFZhcmlhYmxlLCBcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmPT5mLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhKS5rZXlzKClcclxuICAgIH0pKS5wbGFpbigpXHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTsgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRvc0J5UGFzcyhkYnBwOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge2RpcnR5Pzpib29sZWFufSl7XHJcbiAgICBkYXRvc0J5UGFzcyA9IHtcclxuICAgICAgICBkaXJ0eTpmYWxzZSxcclxuICAgICAgICAuLi5kYnBwLFxyXG4gICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnt9IGFzIERhdG9zQnlQYXNzW1wiZmVlZGJhY2tSb3dWYWxpZGF0b3JcIl1cclxuICAgIH1cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0RGF0b3NCeVBhc3MgPSAoKT0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOm9iamVjdCl7XHJcbiAgICBmb3IodmFyIGsgaW4gbyl7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpe1xyXG4gICAgaWYoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSl7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcnR5KCl7XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZGlydHlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVzdHJ1Y3R1cmEoKXtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50fEhUTUxCdXR0b25FbGVtZW50fEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG50eXBlIERpcmVjdEZ1bmN0aW9uPFQsIFJlc3VsdD4gPSAocmVzcHVlc3Rhc0F1bWVudGFkYXM6UmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxWYWxvcixJZEZpbj4sIGVsZW1lbnRvOlQsXHJcbiAgICBmZWVkYmFja0FsbDp7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsVmFsb3IsSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTpFc3RydWN0dXJhXHJcbikgPT4gUmVzdWx0XHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7XHJcbiAgICBpZDogc3RyaW5nLCBcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PlxyXG59ICYgKHtcclxuICAgIHByb3A6a2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPlxyXG59fHtcclxuICAgIGF0dHI6c3RyaW5nXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz5cclxufXx7XHJcbiAgICBzdHlsZTprZXlvZiBDU1NTdHlsZURlY2xhcmF0aW9uXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz5cclxufXx7XHJcbiAgICBkaXJlY3Q6dHJ1ZVxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCB2b2lkPlxyXG59KVxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvczxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHsgW2lkOnN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7ZWxlbWVudG8/OlR9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjpSZWdpc3Ryb0VsZW1lbnRvPFQ+KXtcclxuICAgIC8vIEB0cy1pZ25vcmUgU8OtLCBwb2Ryw61hIHNlciBxdWUgbG9zIHRpcG9zIGRlIFQgc2VhbiBkaXN0aW50b3MsIHBlcm8gdmFuIGEgc2VyIGNvaGVyZW50ZXNcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvczpSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHtyZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6OlJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6Rm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpc31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGspOlJlc3B1ZXN0YXNGb3JQa0NvbXVuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGssIGNvbkF1bWVudGFkYXM6dHJ1ZSwgYWdyZWdhclNpRmFsdGE/OmJvb2xlYW4pOlJlc3B1ZXN0YXNGb3JQa0NvbXVuICYge3Jlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXN9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6Rm9yUGssIGNvbkF1bWVudGFkYXM/OmJvb2xlYW4sIGFncmVnYXJTaUZhbHRhPzpib29sZWFuKTpSZXNwdWVzdGFzRm9yUGtDb211biAmIHtyZXNwdWVzdGFzQXVtZW50YWRhcz86UmVzcHVlc3Rhc30ge1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0ge30gYXMgUmVzcHVlc3RhcztcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbG8gcXVlIHNvYnJhciBkZSByZXNwdWVzdGFzIG5vIG1lIGltcG9ydGEuLi5cclxuICAgIHZhciByZXNwdWVzdGFzID0gZGF0b3NCeVBhc3MucmVzcHVlc3RhcyBhcyBSZXNwdWVzdGFzO1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpejsgXHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQazsgXHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOklkVW5pZGFkQW5hbGlzaXN8dW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIGZvclBrQXBpbGFkYSA9IGZvclBrO1xyXG4gICAgdmFyIHBpbGE6W3VuaWRhZF9hbmFsaXNpczpJZFVuaWRhZEFuYWxpc2lzLCB1YURlZjpVbmlkYWRBbmFsaXNpcywgZm9yUGs6Rm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlKHVuaWRhZF9hbmFsaXNpcyl7XHJcbiAgICAgICAgdmFyIHVhRGVmOlVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhPXsuLi5mb3JQa0FwaWxhZGF9O1xyXG4gICAgICAgIGRlbGV0ZSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdXHJcbiAgICAgICAgdW5pZGFkX2FuYWxpc2lzPXVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZShwaWxhLmxlbmd0aCl7XHJcbiAgICAgICAgW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0gPSBwaWxhLnBvcCgpIVxyXG4gICAgICAgIHZhciB2YWxvclBrT1Bvc2ljaW9uID0gZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXTtcclxuICAgICAgICBpZih2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFsdGEgdW4gdmFsb3IgcGFyYSAke0pTT04uc3RyaW5naWZ5KHVhRGVmLnBrX2FncmVnYWRhKX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yPXJlc3B1ZXN0YXM7XHJcbiAgICAgICAgbGV0IHBvc2ljaW9uID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXk/dmFsb3JQa09Qb3NpY2lvbiAtIDE6dmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmKHJlc3B1ZXN0YXMgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGlmKGFncmVnYXJTaUZhbHRhKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzQW50ZXJpb3JbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl0gPSByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZihjb25BdW1lbnRhZGFzKXtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06dmFsb3JQa09Qb3NpY2lvbn1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFPDqSBxdWUgbGEgcGlsYSB0aWVuZSBhbCBtZW5vcyB1biBlbGVtZW50byBwb3IgbG8gdGFudG8gZXN0byBlc3TDoSBsbGVubyBzZWd1cm8uIFxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiB1YURlZlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1JhaXo6Rm9yUGtSYWl6KXtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUmFpeiwgdHJ1ZSlcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvcyA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgdmFyIHBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoZm9yUGtSYWl6KVxyXG4gICAgdmFyIHJvd1ZhbGlkYXRvciA9ICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgIGZvcih2YXIgaWQgaW4gcmVnaXN0cm9FbGVtZW50b3Mpe1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYoZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgaWYoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSl7XHJcbiAgICAgICAgICAgICAgICBkZWYuZWxlbWVudG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRlZi5lbGVtZW50byl7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighZGVmLmVsZW1lbnRvKXtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JVU0NBTkRPIGVsIGVsZW1lbnRvIHJlZ2lzdHJhZG8gJyxpZCwnbm8gZXN0w6EgZW4gZWwgRE9NJylcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZi5mdW4ocmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJvd1ZhbGlkYXRvciwgZGVmLmVsZW1lbnRvLCBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgaWYoJ3Byb3AnIGluIGRlZil7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYucHJvcCwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCdhdHRyJyBpbiBkZWYpe1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCdzdHlsZScgaW4gZGVmKXtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8uc3R5bGUsIGRlZi5zdHlsZSwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocm93VmFsaWRhdG9yLmFjdHVhbCl7XHJcbiAgICAgICAgdmFyIHt0b3AsIGJvdHRvbX0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYodG9wICE9IG51bGwgJiYgYm90dG9tICE9bnVsbCl7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbil7XHJcbiAgICB2YXIgZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZT09J2Zpbic/YGJvdG9uLXZvbHZlci0yYDpgdmFyLSR7aWRWYXJpYWJsZX1gKVxyXG4gICAgICAgIHx8ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlY2Npb24tYm90b24tZm9ybXVsYXJpby0ke2lkVmFyaWFibGV9YCk7XHJcbiAgICB2YXIgZWxlbWVudG8gPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICB2YXIgTUFSR0VOX1NDUk9MTCA9IDY0O1xyXG4gICAgdmFyIGFsdG9QYW50YWxsYSA9IHdpbmRvdy5pbm5lckhlaWdodCowLjcgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgdmFyIGVsZW1lbnRvRW50ZXJvOkhUTUxFbGVtZW50fG51bGwgPSBlbGVtZW50bzsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOlJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+fG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVsZW1lbnRvU3VwZXJpb3I6SFRNTEVsZW1lbnR8bnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIG1vc3RyYXJzZSBkZXNkZSBhcnJpYmEgYXVucXVlIG5vIGVudHJlIGVudGVybywgZGVmaW5lIGVsIHRvcFxyXG4gICAgdmFyIHJlY3RFbGVtZW50b1N1cGVyaW9yOlJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+fG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUoZWxlbWVudG8gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKSBcclxuICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpIFxyXG4gICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJykgXHJcbiAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3RvbmZvcm11bGFyaW8nKSBcclxuICAgICAgICApe1xyXG4gICAgICAgICAgICBpZihlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVyb1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8hKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdEVsZW1lbnRvRW50ZXJvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0IC0gcmVjdC50b3AgPCBhbHRvUGFudGFsbGEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50byA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudG8gPSBlbGVtZW50bz8ucGFyZW50RWxlbWVudCA/PyBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKXtcclxuICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm87XHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0OntcclxuICAgICAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/OkhUTUxFbGVtZW50fG51bGxcclxuICAgICAgICB0b3A/Om51bWJlcnxudWxsXHJcbiAgICAgICAgYm90dG9tPzpudW1iZXJ8bnVsbFxyXG4gICAgICAgIGVuZm9jYWRvPzpib29sZWFufG51bGxcclxuICAgICAgICBkZXNlbmZvcXVlPzpzdHJpbmd8bnVsbFxyXG4gICAgfSA9IHt9O1xyXG4gICAgaWYoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpe1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3I/P3JlY3RFbGVtZW50b0VudGVybykudG9wIC0gTUFSR0VOX1NDUk9MTDtcclxuICAgICAgICByZXN1bHQudG9wID0gdG9wO1xyXG4gICAgICAgIHJlc3VsdC5ib3R0b20gPSByZWN0RWxlbWVudG9FbnRlcm8udG9wK3JlY3RFbGVtZW50b0VudGVyby5oZWlnaHQ7XHJcbiAgICAgICAgaWYodG9wPGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3Ape1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZT0nYXJyaWJhJztcclxuICAgICAgICB9ZWxzZSBpZihyZWN0RWxlbWVudG9FbnRlcm8udG9wK3JlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgYWx0b1BhbnRhbGxhKXtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWU9J2FiYWpvJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmVzdWx0LmVuZm9jYWRvPXRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOntzZXRBdHRyaWJ1dGU6KG5hbWU6TiwgdmFsb3I6c3RyaW5nKT0+dm9pZCwgZ2V0QXR0cmlidXRlOihuYW1lOk4pPT5zdHJpbmd8bnVsbH0sXHJcbiAgICBuYW1lOk4sXHJcbiAgICB2YWxvcjpzdHJpbmdcclxuKXtcclxuICAgIGlmKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKXtcclxuICAgICAgICBvYmpldG8uc2V0QXR0cmlidXRlKG5hbWUsIHZhbG9yKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbG9yRGlzdGludG88VCBleHRlbmRzIHt9LCBOIGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgICBvYmpldG86VCxcclxuICAgIG5hbWU6TixcclxuICAgIHZhbG9yOlRbTl1cclxuKXtcclxuICAgIGlmKG9iamV0b1tuYW1lXSAhPSB2YWxvcil7XHJcbiAgICAgICAgb2JqZXRvW25hbWVdID0gdmFsb3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKF9mb3JQazpGb3JQayl7XHJcbiAgICBcclxufTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2lkX3ByZWd1bnRhKF9wYXlsb2FkOntwcmVndW50YTogSWRQcmVndW50YSwgZm9yUGs6IEZvclBrfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID0gU3ltYm9sKCdOT19DQU1CSUFSX1NPTE9fVFJBRVJfU1RBVFVTJylcclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gPSBTeW1ib2woJ05PX0NBTUJJQVJfVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTycpXHJcblxyXG5mdW5jdGlvbiByZWZyZXNjYXJNYXJjYURpcnR5KCl7XHJcbiAgICB2YXIgYm90b25HcmFiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNhdmUtYnV0dG9uXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgaWYoYm90b25HcmFiYXIpe1xyXG4gICAgICAgIGlmKGJvdG9uR3JhYmFyLmRpc2FibGVkICE9PSAhZGF0b3NCeVBhc3MuZGlydHkpe1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YShwYXlsb2FkOntcclxuICAgIGZvclBrOkZvclBrLCBcclxuICAgIHZhcmlhYmxlOklkVmFyaWFibGV8dHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBcclxuICAgIHJlc3B1ZXN0YTpWYWxvcnx0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJT1xyXG59LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHRva2VuID0gJ0FWRVJJR1VBUiBUT0RPJ1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YSwgdmFyaWFibGUgfSA9IHBheWxvYWQ7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ICA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXTtcclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbG9yQW50ZXJpb3IgPSB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA/IHJlc3B1ZXN0YXNbdmFyaWFibGVdIDogbnVsbDtcclxuICAgIGlmKHJlc3B1ZXN0YSAhPT0gTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyl7XHJcbiAgICAgICAgaWYocmVzcHVlc3RhID09PSAnJyl7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YSA9IG51bGw7XHJcbiAgICAgICAgfWVsc2UgaWYoZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1t2YXJpYWJsZV0udGlwbz09J251bWVybycpe1xyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGEgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYocmVjZW50TW9kaWZpZWQpe1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3ZhcmlhYmxlXSA9IHJlc3B1ZXN0YSA/PyBudWxsOyAvLyBjYW1iaW8gdW5kZWZpbmVkIHBvciBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICB2YXIgc2lndWllbnRlVmFyaWFibGU6SWRWYXJpYWJsZXxJZEZpbnxudWxsfHVuZGVmaW5lZDtcclxuICAgIGlmKHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTICYmIChyZWNlbnRNb2RpZmllZCB8fCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIGZlZWRiYWNrUm93LmF1dG9JbmdyZXNhZGFzPy5bdmFyaWFibGVdKSl7XHJcbiAgICAgICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGspO1xyXG4gICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICB2ZXJpZmljYXJTb3J0ZW8oe1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlbzogZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQay52aXZpZW5kYSEpXSwgXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUFjdHVhbDogdmFyaWFibGUsIFxyXG4gICAgICAgICAgICAgICAgZm9yUGs6IGZvclBrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHthdXRvSW5ncmVzbzogdHJ1ZX0pO1xyXG4gICAgICAgIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgIGRve1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXS5zaWd1aWVudGU7XHJcbiAgICAgICAgfXdoaWxlKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0uZXN0YWRvID09ICd2YWxpZGEnKXtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3JlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWw6IGZlZWRiYWNrUm93LmFjdHVhbH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX25vdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgdGFyZWE6SWRUYXJlYSwgbm90YTpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDp7Zm9yUGtSYWl6OkZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczpzdHJpbmd8bnVsbH0sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbiAgICAvKlxyXG4gICAgaWYoIWRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXMpe1xyXG4gICAgICAgIGRhdG9zQnlQYXNzLmhvamFEZVJ1dGFbdml2aWVuZGFdLnZpc2l0YXMgPSBbXTtcclxuICAgIH1cclxuICAgIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIHZpc2l0YXMucHVzaCh7XHJcbiAgICAgICAgZmVjaGE6IGRhdGV0aW1lLm5vdygpLnRvWW1kKCksXHJcbiAgICAgICAgaG9yYTogZGF0ZXRpbWUubm93KCkudG9IbSgpLFxyXG4gICAgICAgIGlkcGVyOiBudWxsLCAvLyBUT0RPOiBWRVIgREUgRE9OREUgU0UgU0FDQSBFTCBJRFBFUiBzdGF0ZS5kYXRvcy5pZHBlcixcclxuICAgICAgICBvYnNlcnZhY2lvbmVzOm9ic2VydmFjaW9uZXNcclxuICAgIH0pXHJcbiAgICAqL1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX21vZGlmaWNhcl92aXNpdGEocGF5bG9hZDoge2ZvclBrUmFpejpGb3JQa1JhaXosIGluZGV4Om51bWJlciwgb3BjaW9uOmtleW9mIFZpc2l0YSAsIHZhbG9yOnN0cmluZ3xudWxsfSwgX2RhdG9zQnlQYXNzOkRhdG9zQnlQYXNzKXtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXgsIG9wY2lvbiwgdmFsb3J9ID0gcGF5bG9hZDtcclxuICAgIC8vIHZhciB2aXNpdGFzID0gZGF0b3NCeVBhc3MuaG9qYURlUnV0YVt2aXZpZW5kYV0udmlzaXRhcztcclxuICAgIC8vIHZpc2l0YXNbaW5kZXhdW29wY2lvbl0gPSB2YWxvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHtmb3JQa1JhaXo6Rm9yUGtSYWl6LCBpbmRleDpudW1iZXJ9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleH0gPSBwYXlsb2FkO1xyXG4gICAgLy8gdmFyIHZpc2l0YXMgPSBkYXRvc0J5UGFzcy5ob2phRGVSdXRhW3ZpdmllbmRhXS52aXNpdGFzO1xyXG4gICAgLy8gdmlzaXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7Zm9yUGt9OiB7Zm9yUGs6Rm9yUGt9LCBfZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3Mpe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6fSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXJpYWJsZXNDYWxjdWxhZGFzKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHtmb3JQa306IHtmb3JQazpGb3JQa30sIF9kYXRvc0J5UGFzczpEYXRvc0J5UGFzcyl7XHJcbiAgICB2YXIge3Jlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhcmlhYmxlc0NhbGN1bGFkYXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHtmb3JQaywgZm9yUGtQYWRyZX06IHtmb3JQazpGb3JQaywgZm9yUGtQYWRyZTpGb3JQa30pe1xyXG4gICAgdmFyIHtyZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXp9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6SWRVbmlkYWRBbmFsaXNpc3x1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6VW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgaW5kZXggPSBmb3JQa1t1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t1bmlkYWRfYW5hbGlzaXNdLnBvcCgpO1xyXG4gICAgdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpeiwgZm9yUGtQYWRyZSk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwge2F1dG9JbmdyZXNvOiB0cnVlfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46KHBheWxvYWQ6VCwgZGF0b3M6dHlwZW9mIGRhdG9zQnlQYXNzKT0+UixcclxuICAgIHBheWxvYWQ6VFxyXG4pe1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUD0yMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjp7W2tleTpzdHJpbmddOnN0cmluZ309e1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmNvbnN0IGhlbHBlcnNDYXNpbGxlcm9zPXtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDphbnkpe1xyXG4gICAgICAgIGlmKHBvc2libGVOdWxsPT1udWxsKXtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjpudW1iZXIsIGRlbm9taW5hZG9yOm51bWJlciwgcGs6c3RyaW5nKXtcclxuICAgICAgICBpZihkZW5vbWluYWRvcj09MCl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiK3BrK1wiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiK251bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IvZGVub21pbmFkb3I7XHJcbiAgICB9LFxyXG4gICAgZnVuczp7XHJcbiAgICAgICAgYmxhbmNvKHg6YW55KXtcclxuICAgICAgICAgICAgcmV0dXJuIHghPT0wICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKXtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9kYXkoKS50b0RteSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmZWNoYV92YWxpZGEoeDpzdHJpbmcpe1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG89L14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDpzdHJpbmcpe1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG89L14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDphbnkpe1xyXG4gICAgICAgICAgICByZXR1cm4geCE9PXVuZGVmaW5lZCAmJiB4IT09bnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpfHwgeC5sZW5ndGghPT0wIClcclxuICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCl8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OmFueSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4ID09IC05XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXIoeDpudW1iZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDI9PTBcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqLyAgICAgICBcclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOntba2V5OnN0cmluZ106YW55fSk9PmJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3Jlczp7W2tleTpzdHJpbmddOmFueX0pPT5hbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uSGFiaWxpdGFyfT17XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6e1trZXk6c3RyaW5nXTpGdW5jaW9uVmFsb3Jhcn09e1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOnN0cmluZyl7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24oZWxUb2tlbil7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbz1lbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZihlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcil7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfWVsc2UgaWYoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpe1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1lbHNlIGlmKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfWVsc2UgaWYoL15cXHMrJC8udGVzdChlbFRva2VuKSl7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nK2VsVG9rZW4rJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOntba2V5OnN0cmluZ106KHZhbG9yZXM6e1trZXk6c3RyaW5nXTphbnl9KT0+VH0pe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6c3RyaW5nKXtcclxuICAgICAgICBpZighY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSl7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9ICBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJytjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uKHZhbG9yZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJyxub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyICAgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7Z2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXJ9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOklkVW5pZGFkQW5hbGlzaXNbXSx1bmlkYWRBbmFsaXNpczpVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczpSZXNwdWVzdGFzLG5vUmVhc1RhcmVhOnt9W10sbm9tYk5vUmVhOnN0cmluZylcclxuOntucm9jb2RpZ286c3RyaW5nfG51bGwsIGVzVmFsb3I6Ym9vbGVhbn09PntcclxuICAgIHZhciBucmNvZGlnbzpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yPWZhbHNlO1xyXG4gICAgdmFyIHJ2YWxvcjpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTpzdHJpbmc7XHJcbiAgICB2YXIgcm5vcmVhOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgIC8vIHZhciByZXN1bHQ9e25yY29kOlN0cmluZywgZXN2YWw6Qm9vbGVhbn07XHJcbiAgICBpZih1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKXtcclxuICAgICAgICBmb3IobGV0IG5vUmVhIG9mIG5vUmVhc1RhcmVhKXsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYT09J25vX3JlYScpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHt2YXJpYWJsZSAsIHZhbG9yLCBub19yZWF9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWE9bm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yPXZhbG9yO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciB7dmFyaWFibGVfc3VwICwgdmFsb3Jfc3VwLCBub19yZWFfc3VwfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhPW5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3I9dmFsb3Jfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlPXZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW3J2YXJpYWJsZSBhcyBJZFZhcmlhYmxlXT09cnZhbG9yKXtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID1ybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge25yY29kaWdvLGVzdmFsb3J9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ289bnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3I9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSl7XHJcbiAgICAgICAgaWYodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0hpamFzIG9mIHJlc3B1ZXN0YXNbdWE/LnVuaWRhZF9hbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICBsZXQgcmVzdWx0PSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSx1YSxyZXNwdWVzdGFzSGlqYXMsbm9SZWFzVGFyZWEsbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5lc3ZhbG9yICl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ289cmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3I9cmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtucmNvZGlnbyxlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvPW51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvcj1mYWxzZTtcclxuICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuIH1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86RGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7Y29kTm9SZWEsIGVzTm9SZWF9O1xyXG4gICAgICAgIC8vRUpFTVBMTyBQUkVKVV8yMDIyXHJcbiAgICAgICAgLy92YXIgdW5pZGFkZXNBUmVjb3JyZXIgPSBbJ3ZpdmllbmRhcycsJ2hvZ2FyZXMnLCdwZXJzb25hcyddIGFzIElkVW5pZGFkQW5hbGlzaXNbXTtcclxuICAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAgLy92YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vdmFyIGNvZE5vUmVhOnN0cmluZ3xudWxsPSBudWxsO1xyXG4gICAgICAgIC8vICBsZXQgcmVzbm9yZWEgPSBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXIsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXMsJ25vX3JlYScpO1xyXG4gICAgICAgIC8vY29kTm9SZWE9cmVzbm9yZWEubnJjb2RpZ287XHJcbiAgICAgICAgLy9lc05vUmVhPXJlc25vcmVhLmVzdmFsb3I7XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZE5vUmVhLCBlc05vUmVhfTtcclxuICAgIH0sXHJcbiAgIGVzTm9SZWFTdXA6KF9yZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT57XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZE5vUmVhU3VwLGVzTm9SZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgYnVzY2FyTm9yZWFSZXNwdWVzdGFzXHJcbiAgICAgICAvL3ZhciB1bmlkYWRlc0FSZWNvcnJlclN1cCA9IFsndml2aWVuZGFzJywnaG9nYXJlc19zdXAnLCdwZXJzb25hc19zdXAnXSBhcyBJZFVuaWRhZEFuYWxpc2lzW107XHJcbiAgICAgICAvL3ZhciB1YVByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSk9PiF1YS5wYWRyZSk7XHJcbiAgICAgICAvL3ZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAvL3ZhciBjb2ROb1JlYVN1cDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgIC8vbGV0IHJlc25vcmVhID1idXNjYXJOb1JlYUVuUmVzcHVlc3RhcyggdW5pZGFkZXNBUmVjb3JyZXJTdXAsdWFQcmluY2lwYWwhLHJlc3B1ZXN0YXMsZXN0cnVjdHVyYS5ub1JlYXNTdXAsJ25vX3JlYV9zdXAnKTsvL2NvbiBsb3MgcGFyYW1ldHJvcyBxdWUgbmVjZXNpdGFyaWFtb3MgcGFyYSBnZW5lcmFsaXphclxyXG4gICAgICAgLy8gIGNvZE5vUmVhU3VwPXJlc25vcmVhLm5yY29kaWdvO1xyXG4gICAgICAgLy8gIGVzTm9SZWFTdXA9cmVzbm9yZWEuZXN2YWxvcjtcclxuICAgICAgIC8vcmV0dXJuIHtjb2ROb1JlYVN1cCxlc05vUmVhU3VwfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOihfcmVzcHVlc3RhczpSZXNwdWVzdGFzKT0+e1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTpzdHJpbmd8bnVsbD0gbnVsbDtcclxuICAgICAgICByZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgICAgICAvL0VKRU1QTE8gUFJFSlVfMjAyMlxyXG4gICAgICAgIC8vdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy92YXIgY29kUmVhOm51bWJlcnxudWxsPSBudWxsO1xyXG4gICAgICAgIC8vaWYoIXJlc3B1ZXN0YXNbJ2lkZW50aWYnIGFzIElkVmFyaWFibGVdKXtcclxuICAgICAgICAvLyAgICByZXR1cm4ge2NvZFJlYSwgZXNSZWF9XHJcbiAgICAgICAgLy99ZWxzZSBpZihyZXNwdWVzdGFzWydpZGVudGlmJyBhcyBJZFZhcmlhYmxlXT09MiB8fHJlc3B1ZXN0YXNbJ3Jlc2lkX2hvZycgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ2NvbnRhY3QnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWEgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlcyddO1xyXG4gICAgICAgIC8vICAgIGlmKHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgIGZvcihsZXQgcmVzcHVlc3Rhc0ggb2YgcmVzcHVlc3Rhc0hzKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciByZWFoOm51bWJlcjtcclxuICAgICAgICAvLyAgICAgICAgICAgIHZhciBzZWxlYzpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhJyBdICE9IDF8fHJlc3B1ZXN0YXNIWydwcmVqdWUxJ109PTJ8fHJlc3B1ZXN0YXNIWyd0cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBzZWxlYz1yZXNwdWVzdGFzSFsnY3JfbnVtX21pZW1icm8nXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNIWydwZXJzb25hcyddICYmIHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdICl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHZhciByZXNwdWVzdGFzUCA9IHJlc3B1ZXN0YXNILnBlcnNvbmFzW3NlbGVjLTFdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcF9lbnRyZWFfaW5kID0gcmVzcHVlc3Rhc1BbJ2VudHJlYWluZCcgYXMgSWRWYXJpYWJsZSBdO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZihyZXNwX2VudHJlYV9pbmQ9PW51bGwpeyAvL3F1ZXJlbW9zIGNvbnRlbXBsYXIgZWwgdW5kZWZpbmVkXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICByZWFoID0gTnVtYmVyKHJlc3BfZW50cmVhX2luZCk7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgcmVhaCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVhaHMucHVzaChyZWFoKTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICBpZiAocmVhaHMuZXZlcnkocmg9PnJoPT0xKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAxO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTIpKXtcclxuICAgICAgICAvLyAgICAgICAgICAgIGNvZFJlYSA9IDI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICB9ZWxzZSBpZihyZWFocy5ldmVyeShyaD0+cmg9PTF8fHJoPT0zKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSAzO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWEgPSA0O1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfVxyXG4gICAgICAgIC8vICAgIH0gZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgY29kUmVhID0gMztcclxuICAgICAgICAvLyAgICAgICAgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy9yZXR1cm4ge2NvZFJlYSxlc1JlYX1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDooX3Jlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PntcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICAgICAgLy9FSkVNUExPIFBSRUpVXzIwMjJcclxuICAgICAgICAvL1RPRE8gR0VORVJBTElaQVIgXHJcbiAgICAgICAgLy92YXIgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvL3ZhciBjb2RSZWFTdXA6bnVtYmVyfG51bGw9IG51bGw7XHJcbiAgICAgICAgLy9pZighcmVzcHVlc3Rhc1snY29uZmlyX3RlbF9zdXAnIGFzIElkVmFyaWFibGVdICYmICFyZXNwdWVzdGFzWydzcDFhJyBhcyBJZFZhcmlhYmxlXSl7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIHtjb2RSZWFTdXAsIGVzUmVhU3VwfVxyXG4gICAgICAgIC8vfWVsc2UgaWYoIHJlc3B1ZXN0YXNbJ2NvbmZpcl90ZWxfc3VwJyBhcyBJZFZhcmlhYmxlXT09MiB8fCByZXNwdWVzdGFzWydjb25maXJfZG9tX3N1cCcgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWEnIGFzIElkVmFyaWFibGVdPT0yIHx8cmVzcHVlc3Rhc1snc3AxYicgYXMgSWRWYXJpYWJsZV09PTJ8fHJlc3B1ZXN0YXNbJ3NwMWMnIGFzIElkVmFyaWFibGVdPT0yKXtcclxuICAgICAgICAvLyAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy99ZWxzZXtcclxuICAgICAgICAvLyAgICB2YXIgcmVhaHM6IG51bWJlcltdPVtdIDtcclxuICAgICAgICAvLyAgICB2YXIgcmVzcHVlc3Rhc0hzID0gcmVzcHVlc3Rhc1snaG9nYXJlc19zdXAnXTtcclxuICAgICAgICAvLyAgICBpZihyZXNwdWVzdGFzSHMpe1xyXG4gICAgICAgIC8vICAgICAgICBmb3IobGV0IHJlc3B1ZXN0YXNIIG9mIHJlc3B1ZXN0YXNIcyl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgcmVhaDpudW1iZXI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB2YXIgc2VsZWM6bnVtYmVyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgaWYocmVzcHVlc3Rhc0hbJ2VudHJlYV9zdXAnIF0gPT0gMnx8cmVzcHVlc3Rhc0hbJ3NwcjFfc3VwJ109PTJ8fHJlc3B1ZXN0YXNIWydzcDQnXT09M3x8cmVzcHVlc3Rhc0hbJ3RvdGFsX3JhbmdvX3N1cCddPT0wKXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICByZWFoPTI7XHJcbiAgICAgICAgLy8gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzSFsnZW50cmVhX3N1cCcgXSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcmVhaCA9IDE7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHJlYWg9MztcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICB9ICAgICBcclxuICAgICAgICAvLyAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgIHJlYWhzLnB1c2gocmVhaCk7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgaWYgKHJlYWhzLmV2ZXJ5KHJoPT5yaD09MSkpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMTtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0yKSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICBjb2RSZWFTdXAgPSAyO1xyXG4gICAgICAgIC8vICAgICAgICAgICAgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgfWVsc2UgaWYocmVhaHMuZXZlcnkocmg9PnJoPT0xfHxyaD09Mykpe1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gMztcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vICAgICAgICAgICAgY29kUmVhU3VwID0gNDtcclxuICAgICAgICAvLyAgICAgICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAvLyAgICB9IGVsc2V7XHJcbiAgICAgICAgLy8gICAgICAgIGNvZFJlYVN1cCA9IDM7XHJcbiAgICAgICAgLy8gICAgICAgIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgfVxyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8vcmV0dXJuIHtjb2RSZWFTdXAsZXNSZWFTdXB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6JycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOnt9IGFzIHtbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTp7cGs6SWRWYXJpYWJsZSwgaW5jbHVpZGFzOklkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOklkRm9ybXVsYXJpb1tdfX0sXHJcbiAgICBkZWZGb3I6e30gYXMge1tmIGluIElkRm9ybXVsYXJpb106ey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OnRydWV9fVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kTm9SZWE6c3RyaW5nfG51bGwsIGVzTm9SZWE6Ym9vbGVhbn0sXHJcbiAgICBlc05vUmVhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZE5vUmVhU3VwOnN0cmluZ3xudWxsLCBlc05vUmVhU3VwOmJvb2xlYW59LFxyXG4gICAgZXNSZWFsaXphZGE6KHJlc3B1ZXN0YXM6UmVzcHVlc3Rhcyk9PiB7Y29kUmVhOm51bWJlcnxudWxsLCBlc1JlYTpib29sZWFufSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOihyZXNwdWVzdGFzOlJlc3B1ZXN0YXMpPT4ge2NvZFJlYVN1cDpudW1iZXJ8bnVsbCwgZXNSZWFTdXA6Ym9vbGVhbn1cclxuKT0+e1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hPXtwMTpzdHJpbmcsIHAyOm51bWJlciwgcDM6bnVtYmVyLCBwNDpudW1iZXJ8bnVsbCwgcDU6MXxudWxsLCBwNjoxfG51bGx9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOm51bWJlcnxzdHJpbmd8bnVsbCk6bnVtYmVye1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgaWYoaXNOYU4obnVtLTApKSByZXR1cm4gMDtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIHJldHVybiBudW0tMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczp7W2sgaW4gc3RyaW5nXTpib29sZWFufSA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZpY2FyU29ydGVvKG9wdHM6e1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbywgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOkZvclBrLFxyXG4gICAgdmFyaWFibGVBY3R1YWw6SWRWYXJpYWJsZVxyXG5cclxufSl7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOntyZXNwdWVzdGFzOlJlc3B1ZXN0YXN9KT0+e1xyXG4gICAgICAgIHZhciB7cmVzcHVlc3Rhc30gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdPW51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpPT5yZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1udWxsKTtcclxuICAgICAgICBpZigndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbyl7XHJcbiAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICYmIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgZm9yKHZhciBwZXIgb2YgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pe1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIge2NvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXp9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrLnZpdmllbmRhITtcclxuICAgIHZhciB7cmVzcHVlc3Rhc0F1bWVudGFkYXN9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pb10uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9ICBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpe1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKT0+dWEudW5pZGFkX2FuYWxpc2lzPT11bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpPT51YS51bmlkYWRfYW5hbGlzaXM9PXVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pe1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pLTFdO1xyXG4gICAgICAgICAgICBpZih2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKXtcclxuICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdPXBhZHJlW3VuaWRhZEFuYWxpc2lzXS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNldGVhclNvcnRlbyh7cmVzcHVlc3RhczpwYWRyZX0pO1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCl7XHJcbiAgICAgICAgaWYocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSl7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdIT0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXT09Mil7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXT1yZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oe3Jlc3B1ZXN0YXN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYoY2FudGlkYWRUb3RhbDxyZXNwdWVzdGFzVUEubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLGkpPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pPT5wW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwtMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlKGNhbnRpZGFkVG90YWw+cmVzcHVlc3Rhc1VBLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5leHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl09PTEgJiZcclxuICAgICAgICAgICAgICAgICFyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXT09MFxyXG4gICAgICAgICAgICApe1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRlYXI9cmVzcHVlc3Rhc1VBLmZpbHRlcihwPT5maWx0cm9fZnVuKHApKTtcclxuICAgICAgICAgICAgICAgIGlmKHNvcnRlYXIubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZm9yRWFjaCgocGVyLCBpKT0+cGVyLiRwMD1pKzEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7dmFyaWFibGU6XCIkcDBcIiBhcyBJZFZhcmlhYmxlLCBvcmRlbjoxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7Y29sdW1uOmVsZW0udmFyaWFibGUsIG9yZGVyOmVsZW0ub3JkZW59KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG89PSdoYXNoJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6SWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsaSk9Pmk9PXBlcnNvbmEuJHAwLTEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdPWxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkrMSk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKT0+bGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvP3Jlc3RvIC0gMTo5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMSA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDpSZXNwdWVzdGFzKT0+cFt2YXJMZXRyYV09PWxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dPXBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT1zb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKT0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XT1yZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0xXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXT0wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF09IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXT0nb2snO1xyXG4gICAgICAgICAgICBpZihjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKXtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF09J29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFyaWFibGVzQ2FsY3VsYWRhcyhyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOkZvclBrKXtcclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpe1xyXG4gICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIGZvclBrKTtcclxuICAgIH1cclxuICAgIGlmKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byl7XHJcbiAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBmb3JQayk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjp7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczp7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106SW5mb0Zvcm11bGFyaW8gfSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXMsIFxyXG4gICAgVUE6SWRVbmlkYWRBbmFsaXNpcywgXHJcbiAgICBmb3JQazpGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOlJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6UmVzcHVlc3Rhc3xudWxsLCBcclxuICAgIG9wdHM6T3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbil7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvcih2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcyl7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLCBcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLCBcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsIFxyXG4gICAgICAgICAgICAgICAgey4uLmZvclBrLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICB7Li4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06dmFsb3JQa30sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKXtcclxuICAgICAgICBmb3IodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKXtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6UGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7Li4uZm9yUGssIGZvcm11bGFyaW99KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa109XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFyY2FGaW46J2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIge3Jlc3VtZW4sIGF1dG9JbmdyZXNhZGFzfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6SWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmKGF1dG9JbmdyZXNhZGFzIT1udWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FtYmlvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0+MCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2godmFybmFtZT0+e1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1t2YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicrZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrLnZpdmllbmRhISk7XHJcbiAgICAgICAgICAgIGlmKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPSBcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiYgXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWU/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgOnJlc3VtZW4gPT0gJ3ZhY2lvJyA/IFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpyZXN1bWVuXHJcbiAgICAgICAgICAgIGlmKGVzSGVybWFubyl7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfWVsc2UgaWYocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzpudW1iZXJ8c3RyaW5nLCBvYmplY3Q6b2JqZWN0fGFueVtdKToobnVtYmVyfHN0cmluZyl7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYoaXNOYU4obnVtYmVyT3JTdHJpbmcpKXtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSsob2JqZWN0IGluc3RhbmNlb2YgQXJyYXk/MTowKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZpdmllbmRhOm51bWJlcik6SWRGb3JtdWxhcmlvPT57XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgdml2aWVuZGEgZXMgZWwgcGFyYW1ldHJvIGNvcnJlY3RvXHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKXtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWY9PiF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZj0+e1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOkZvcm11bGFyaW8sIGVuYzphbnkpPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWw/Zm9ybXVsYXJpb1ByaW5jaXBhbD09Zi5pZF9jYXNpbGxlcm86Zi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKT0+e1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZj0+Zi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOnZhbG9yUGt9XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOnsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106Rm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOnsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTpJbmZvRm9ybXVsYXJpbyB9LCBcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LCBcclxuICAgIHJlc3B1ZXN0YXM6UmVzcHVlc3RhcywgXHJcbiAgICBvcHRzOk9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbil7XHJcbiAgICB2YXIgZm9yUGs6Rm9yUGsgPXsuLi5mb3JQa1JhaXp9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OkZvclBrUmFpeiwgb3B0czpPcGNpb25lc1Jvd1ZhbGlkYXRvcil7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzpSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93cyA6IHtbeCBpbiBQbGFpbkZvclBrXTpGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSxJZEZpbj59PXt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazphbnksIHBsYWluUGs6UGxhaW5Gb3JQayk9PkpTT04ucGFyc2UocGxhaW5Qaykudml2aWVuZGEgIT0gZm9yUGtSYWl6LnZpdmllbmRhKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7Li4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3N9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0gPSB7XHJcbiAgICAgICAgLi4uZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeiwgXHJcbiAgICAgICAgICAgIG51ZXZvc1Jvd3MsXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNcclxuICAgICAgICApXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYSA9IChpZFZpdmllbmRhOm51bWJlcik9PntcclxuICAgIHZhciBtYWluRm9ybUZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShpZFZpdmllbmRhKTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVml2aWVuZGFdO1xyXG4gICAgdmFyIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MgPSAoaWRGb3JtdWxhcmlvOklkRm9ybXVsYXJpbyk9PntcclxuICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zLmZvckVhY2goKGNhc2lsbGVybyk9PntcclxuICAgICAgICAgICAgaWYoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKT9jYXNpbGxlcm8uc2FsdG86J0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYoZm9ybUhpam8pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZpdmllbmRhKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzpDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpb3xudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDpudW1iZXJ8bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8sIHI6UmVzcHVlc3Rhcyk9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICA/IFxyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICA6XHJcbiAgICAgICAgbnVtQWN0dWFsID09IG51bUVsZW1lbnRvVUFcclxuICAgIClcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJEaXNhYmxlZEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBmb3JtdWxhcmlvOklkRm9ybXVsYXJpbywgcjpSZXNwdWVzdGFzKT0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmIFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyAmJlxyXG4gICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICkpXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86Q29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW98bnVsbCwgZm9ybXVsYXJpbzpJZEZvcm11bGFyaW8pPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJiBcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6bnVtYmVyfG51bGwsXHJcbiAgICBjb2ROb1JlYTpzdHJpbmd8bnVsbCxcclxuICAgIGNvZFJlYVN1cDpudW1iZXJ8bnVsbFxyXG4gICAgY29kTm9SZWFTdXA6c3RyaW5nfG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejpGb3JQa1JhaXosIFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6e1tmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOkZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+fSwgXHJcbiAgICByZXNwdWVzdGFzOlJlc3B1ZXN0YXNcclxuKTpSZXN1bHRhZG9SZXN1bWVue1xyXG4gICAgdmFyIHtjb2RSZWEsIGVzUmVhfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2ROb1JlYSwgZXNOb1JlYX0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHtjb2RSZWFTdXAsZXNSZWFTdXB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIge2NvZE5vUmVhU3VwLCBlc05vUmVhU3VwfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9ySWRWaXZpZW5kYShmb3JQa1JhaXoudml2aWVuZGEhKTtcclxuICAgIHZhciBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtSYWl6LnZpdmllbmRhISldXHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKT0+e1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKS52aXZpZW5kYT09Zm9yUGtSYWl6LnZpdmllbmRhICYmIFxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lSW5kaXZpZHVhbD9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sIFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLCBcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyP3Jlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpdmllbmRhOmZvclBrUmFpei52aXZpZW5kYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86Y29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOkpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgfSkucmVzcHVlc3Rhczp7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDp0cnVlKVxyXG4gICAgfSkuYXJyYXkoKTtcclxuICAgIHZhciBwcmlvcmlkYWRlczp7W2tleSBpbiBSZXN1bWVuRXN0YWRvXToge3ByaW9yaWRhZDpudW1iZXIsIGNhbnRpZGFkOm51bWJlcn19ID0ge1xyXG4gICAgICAgICdubyByZWEnOntwcmlvcmlkYWQ6IDEsIGNhbnRpZGFkOjB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzp7cHJpb3JpZGFkOiAyLCBjYW50aWRhZDowfSxcclxuICAgICAgICAnaW5jb21wbGV0byc6e3ByaW9yaWRhZDogMywgY2FudGlkYWQ6MH0sXHJcbiAgICAgICAgJ3ZhY2lvJzp7cHJpb3JpZGFkOiA0LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzp7cHJpb3JpZGFkOiA1LCBjYW50aWRhZDowfSxcclxuICAgICAgICAnb2snOntwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOjB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvcih2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSl7XHJcbiAgICAgICAgdmFyIHJlc3VtZW4gPSBmZWVkYmFjay5yZXN1bWVuO1xyXG4gICAgICAgIHByaW9yaWRhZGVzW3Jlc3VtZW5dLmNhbnRpZGFkKys7XHJcbiAgICAgICAgaWYocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkPG1pbil7XHJcbiAgICAgICAgICAgIG1pbj1wcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49cmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihtaW5SZXN1bWVuPT0ndmFjaW8nJiYgcHJpb3JpZGFkZXNbJ29rJ10uY2FudGlkYWQgfHwgbWluUmVzdW1lbj09J2luY29tcGxldG8nKXtcclxuICAgICAgICBpZihmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLyl7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW49J2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6LnZpdmllbmRhIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86UmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOlJlc3VtZW5Fc3RhZG87XHJcbiAgICBpZih0YXJlYT09J3N1cGUnKXtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cD8nbm8gcmVhJzptaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhPydubyByZWEnOm1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86UmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==
|