@aws-cdk/integ-runner 1.181.0 → 1.182.0

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/lib/index.js CHANGED
@@ -10201,4 +10201,4 @@ var cli_1 = (init_cli(), __toCommonJS(cli_exports));
10201
10201
  Object.defineProperty(exports, "cli", { enumerable: true, get: function() {
10202
10202
  return cli_1.cli;
10203
10203
  } });
10204
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3dvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvaW5kZXguanMiLCAibG9nZ2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWxpZnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL3BvbHlmaWxscy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvbGVnYWN5LXN0cmVhbXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2Nsb25lLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9ncmFjZWZ1bC1mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2ZzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hdC1sZWFzdC1ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL21ha2UtZGlyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5LXN5bmMvY29weS1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcGF0aC1leGlzdHMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2NvcHkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL3JpbXJhZi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2VtcHR5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2ZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXBhdGhzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstdHlwZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvanNvbmZpbGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUtc3luYy9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlLXN5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL21vdmUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAicnVubmVyL2ludGVncmF0aW9uLXRlc3RzLnRzIiwgIndvcmtlcnMvY29tbW9uLnRzIiwgInV0aWxzLnRzIiwgIndvcmtlcnMvaW50ZWctdGVzdC13b3JrZXIudHMiLCAid29ya2Vycy9pbnRlZy1zbmFwc2hvdC13b3JrZXIudHMiLCAid29ya2Vycy9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZXNjYWxhZGUvc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZXF1aXJlLWRpcmVjdG9yeS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95YXJncy9pbmRleC5janMiLCAiY2xpLnRzIiwgImluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwgIi8qIE1JVCBsaWNlbnNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmNvbnN0IGNzc0tleXdvcmRzID0gcmVxdWlyZSgnY29sb3ItbmFtZScpO1xuXG4vLyBOT1RFOiBjb252ZXJzaW9ucyBzaG91bGQgb25seSByZXR1cm4gcHJpbWl0aXZlIHZhbHVlcyAoaS5lLiBhcnJheXMsIG9yXG4vLyAgICAgICB2YWx1ZXMgdGhhdCBnaXZlIGNvcnJlY3QgYHR5cGVvZmAgcmVzdWx0cykuXG4vLyAgICAgICBkbyBub3QgdXNlIGJveCB2YWx1ZXMgdHlwZXMgKGkuZS4gTnVtYmVyKCksIFN0cmluZygpLCBldGMuKVxuXG5jb25zdCByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRyZXZlcnNlS2V5d29yZHNbY3NzS2V5d29yZHNba2V5XV0gPSBrZXk7XG59XG5cbmNvbnN0IGNvbnZlcnQgPSB7XG5cdHJnYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdyZ2InfSxcblx0aHNsOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzbCd9LFxuXHRoc3Y6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHN2J30sXG5cdGh3Yjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdod2InfSxcblx0Y215azoge2NoYW5uZWxzOiA0LCBsYWJlbHM6ICdjbXlrJ30sXG5cdHh5ejoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICd4eXonfSxcblx0bGFiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xhYid9LFxuXHRsY2g6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGNoJ30sXG5cdGhleDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnaGV4J119LFxuXHRrZXl3b3JkOiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydrZXl3b3JkJ119LFxuXHRhbnNpMTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kxNiddfSxcblx0YW5zaTI1Njoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTI1NiddfSxcblx0aGNnOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydoJywgJ2MnLCAnZyddfSxcblx0YXBwbGU6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ3IxNicsICdnMTYnLCAnYjE2J119LFxuXHRncmF5OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydncmF5J119XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cbi8vIEhpZGUgLmNoYW5uZWxzIGFuZCAubGFiZWxzIHByb3BlcnRpZXNcbmZvciAoY29uc3QgbW9kZWwgb2YgT2JqZWN0LmtleXMoY29udmVydCkpIHtcblx0aWYgKCEoJ2NoYW5uZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoISgnbGFiZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoY29udmVydFttb2RlbF0ubGFiZWxzLmxlbmd0aCAhPT0gY29udmVydFttb2RlbF0uY2hhbm5lbHMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogJyArIG1vZGVsKTtcblx0fVxuXG5cdGNvbnN0IHtjaGFubmVscywgbGFiZWxzfSA9IGNvbnZlcnRbbW9kZWxdO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0uY2hhbm5lbHM7XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5sYWJlbHM7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGxhYmVsc30pO1xufVxuXG5jb252ZXJ0LnJnYi5oc2wgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGVsdGEgPSBtYXggLSBtaW47XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmIChyID09PSBtYXgpIHtcblx0XHRoID0gKGcgLSBiKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGcgPT09IG1heCkge1xuXHRcdGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuXHRcdGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXHR9XG5cblx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGwgPSAobWluICsgbWF4KSAvIDI7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAobCA8PSAwLjUpIHtcblx0XHRzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcblx0fSBlbHNlIHtcblx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cdH1cblxuXHRyZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuaHN2ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgcmRpZjtcblx0bGV0IGdkaWY7XG5cdGxldCBiZGlmO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgdiA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmID0gdiAtIE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmYyA9IGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICh2IC0gYykgLyA2IC8gZGlmZiArIDEgLyAyO1xuXHR9O1xuXG5cdGlmIChkaWZmID09PSAwKSB7XG5cdFx0aCA9IDA7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRpZmYgLyB2O1xuXHRcdHJkaWYgPSBkaWZmYyhyKTtcblx0XHRnZGlmID0gZGlmZmMoZyk7XG5cdFx0YmRpZiA9IGRpZmZjKGIpO1xuXG5cdFx0aWYgKHIgPT09IHYpIHtcblx0XHRcdGggPSBiZGlmIC0gZ2RpZjtcblx0XHR9IGVsc2UgaWYgKGcgPT09IHYpIHtcblx0XHRcdGggPSAoMSAvIDMpICsgcmRpZiAtIGJkaWY7XG5cdFx0fSBlbHNlIGlmIChiID09PSB2KSB7XG5cdFx0XHRoID0gKDIgLyAzKSArIGdkaWYgLSByZGlmO1xuXHRcdH1cblxuXHRcdGlmIChoIDwgMCkge1xuXHRcdFx0aCArPSAxO1xuXHRcdH0gZWxzZSBpZiAoaCA+IDEpIHtcblx0XHRcdGggLT0gMTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gW1xuXHRcdGggKiAzNjAsXG5cdFx0cyAqIDEwMCxcblx0XHR2ICogMTAwXG5cdF07XG59O1xuXG5jb252ZXJ0LnJnYi5od2IgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF07XG5cdGNvbnN0IGcgPSByZ2JbMV07XG5cdGxldCBiID0gcmdiWzJdO1xuXHRjb25zdCBoID0gY29udmVydC5yZ2IuaHNsKHJnYilbMF07XG5cdGNvbnN0IHcgPSAxIC8gMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpO1xuXG5cdGIgPSAxIC0gMSAvIDI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuXHRyZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuY215ayA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHRjb25zdCBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG5cdGNvbnN0IGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cblx0cmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn07XG5cbmZ1bmN0aW9uIGNvbXBhcmF0aXZlRGlzdGFuY2UoeCwgeSkge1xuXHQvKlxuXHRcdFNlZSBodHRwczovL2VuLm0ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9kaXN0YW5jZSNTcXVhcmVkX0V1Y2xpZGVhbl9kaXN0YW5jZVxuXHQqL1xuXHRyZXR1cm4gKFxuXHRcdCgoeFswXSAtIHlbMF0pICoqIDIpICtcblx0XHQoKHhbMV0gLSB5WzFdKSAqKiAyKSArXG5cdFx0KCh4WzJdIC0geVsyXSkgKiogMilcblx0KTtcbn1cblxuY29udmVydC5yZ2Iua2V5d29yZCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgcmV2ZXJzZWQgPSByZXZlcnNlS2V5d29yZHNbcmdiXTtcblx0aWYgKHJldmVyc2VkKSB7XG5cdFx0cmV0dXJuIHJldmVyc2VkO1xuXHR9XG5cblx0bGV0IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblx0bGV0IGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcblxuXHRmb3IgKGNvbnN0IGtleXdvcmQgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcblxuXHRcdC8vIENvbXB1dGUgY29tcGFyYXRpdmUgZGlzdGFuY2Vcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvbXBhcmF0aXZlRGlzdGFuY2UocmdiLCB2YWx1ZSk7XG5cblx0XHQvLyBDaGVjayBpZiBpdHMgbGVzcywgaWYgc28gc2V0IGFzIGNsb3Nlc3Rcblx0XHRpZiAoZGlzdGFuY2UgPCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlKSB7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdEtleXdvcmQgPSBrZXl3b3JkO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG59O1xuXG5jb252ZXJ0LmtleXdvcmQucmdiID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0cmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufTtcblxuY29udmVydC5yZ2IueHl6ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgciA9IHJnYlswXSAvIDI1NTtcblx0bGV0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGxldCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wNDA0NSA/ICgoKHIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChyIC8gMTIuOTIpO1xuXHRnID0gZyA+IDAuMDQwNDUgPyAoKChnICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoZyAvIDEyLjkyKTtcblx0YiA9IGIgPiAwLjA0MDQ1ID8gKCgoYiArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGIgLyAxMi45Mik7XG5cblx0Y29uc3QgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcblx0Y29uc3QgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcblx0Y29uc3QgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuXHRyZXR1cm4gW3ggKiAxMDAsIHkgKiAxMDAsIHogKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IubGFiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB4eXogPSBjb252ZXJ0LnJnYi54eXoocmdiKTtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmhzbC5yZ2IgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF0gLyAzNjA7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCB0Mjtcblx0bGV0IHQzO1xuXHRsZXQgdmFsO1xuXG5cdGlmIChzID09PSAwKSB7XG5cdFx0dmFsID0gbCAqIDI1NTtcblx0XHRyZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuXHR9XG5cblx0aWYgKGwgPCAwLjUpIHtcblx0XHR0MiA9IGwgKiAoMSArIHMpO1xuXHR9IGVsc2Uge1xuXHRcdHQyID0gbCArIHMgLSBsICogcztcblx0fVxuXG5cdGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcblxuXHRjb25zdCByZ2IgPSBbMCwgMCwgMF07XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRpZiAodDMgPCAwKSB7XG5cdFx0XHR0MysrO1xuXHRcdH1cblxuXHRcdGlmICh0MyA+IDEpIHtcblx0XHRcdHQzLS07XG5cdFx0fVxuXG5cdFx0aWYgKDYgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuXHRcdH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDI7XG5cdFx0fSBlbHNlIGlmICgzICogdDMgPCAyKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbCA9IHQxO1xuXHRcdH1cblxuXHRcdHJnYltpXSA9IHZhbCAqIDI1NTtcblx0fVxuXG5cdHJldHVybiByZ2I7XG59O1xuXG5jb252ZXJ0LmhzbC5oc3YgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF07XG5cdGxldCBzID0gaHNsWzFdIC8gMTAwO1xuXHRsZXQgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHNtaW4gPSBzO1xuXHRjb25zdCBsbWluID0gTWF0aC5tYXgobCwgMC4wMSk7XG5cblx0bCAqPSAyO1xuXHRzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRzbWluICo9IGxtaW4gPD0gMSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0Y29uc3QgdiA9IChsICsgcykgLyAyO1xuXHRjb25zdCBzdiA9IGwgPT09IDAgPyAoMiAqIHNtaW4pIC8gKGxtaW4gKyBzbWluKSA6ICgyICogcykgLyAobCArIHMpO1xuXG5cdHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YucmdiID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdIC8gNjA7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGxldCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCBoaSA9IE1hdGguZmxvb3IoaCkgJSA2O1xuXG5cdGNvbnN0IGYgPSBoIC0gTWF0aC5mbG9vcihoKTtcblx0Y29uc3QgcCA9IDI1NSAqIHYgKiAoMSAtIHMpO1xuXHRjb25zdCBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSk7XG5cdGNvbnN0IHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKTtcblx0diAqPSAyNTU7XG5cblx0c3dpdGNoIChoaSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHJldHVybiBbdiwgdCwgcF07XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cmV0dXJuIFtxLCB2LCBwXTtcblx0XHRjYXNlIDI6XG5cdFx0XHRyZXR1cm4gW3AsIHYsIHRdO1xuXHRcdGNhc2UgMzpcblx0XHRcdHJldHVybiBbcCwgcSwgdl07XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cmV0dXJuIFt0LCBwLCB2XTtcblx0XHRjYXNlIDU6XG5cdFx0XHRyZXR1cm4gW3YsIHAsIHFdO1xuXHR9XG59O1xuXG5jb252ZXJ0Lmhzdi5oc2wgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF07XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IHZtaW4gPSBNYXRoLm1heCh2LCAwLjAxKTtcblx0bGV0IHNsO1xuXHRsZXQgbDtcblxuXHRsID0gKDIgLSBzKSAqIHY7XG5cdGNvbnN0IGxtaW4gPSAoMiAtIHMpICogdm1pbjtcblx0c2wgPSBzICogdm1pbjtcblx0c2wgLz0gKGxtaW4gPD0gMSkgPyBsbWluIDogMiAtIGxtaW47XG5cdHNsID0gc2wgfHwgMDtcblx0bCAvPSAyO1xuXG5cdHJldHVybiBbaCwgc2wgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5jb252ZXJ0Lmh3Yi5yZ2IgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IGggPSBod2JbMF0gLyAzNjA7XG5cdGxldCB3aCA9IGh3YlsxXSAvIDEwMDtcblx0bGV0IGJsID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCByYXRpbyA9IHdoICsgYmw7XG5cdGxldCBmO1xuXG5cdC8vIFdoICsgYmwgY2FudCBiZSA+IDFcblx0aWYgKHJhdGlvID4gMSkge1xuXHRcdHdoIC89IHJhdGlvO1xuXHRcdGJsIC89IHJhdGlvO1xuXHR9XG5cblx0Y29uc3QgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuXHRjb25zdCB2ID0gMSAtIGJsO1xuXHRmID0gNiAqIGggLSBpO1xuXG5cdGlmICgoaSAmIDB4MDEpICE9PSAwKSB7XG5cdFx0ZiA9IDEgLSBmO1xuXHR9XG5cblx0Y29uc3QgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvblxuXG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXHRzd2l0Y2ggKGkpIHtcblx0XHRkZWZhdWx0OlxuXHRcdGNhc2UgNjpcblx0XHRjYXNlIDA6IHIgPSB2OyAgZyA9IG47ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMTogciA9IG47ICBnID0gdjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAyOiByID0gd2g7IGcgPSB2OyAgYiA9IG47IGJyZWFrO1xuXHRcdGNhc2UgMzogciA9IHdoOyBnID0gbjsgIGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDQ6IHIgPSBuOyAgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA1OiByID0gdjsgIGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQuY215ay5yZ2IgPSBmdW5jdGlvbiAoY215aykge1xuXHRjb25zdCBjID0gY215a1swXSAvIDEwMDtcblx0Y29uc3QgbSA9IGNteWtbMV0gLyAxMDA7XG5cdGNvbnN0IHkgPSBjbXlrWzJdIC8gMTAwO1xuXHRjb25zdCBrID0gY215a1szXSAvIDEwMDtcblxuXHRjb25zdCByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGcgPSAxIC0gTWF0aC5taW4oMSwgbSAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgYiA9IDEgLSBNYXRoLm1pbigxLCB5ICogKDEgLSBrKSArIGspO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5yZ2IgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGNvbnN0IHggPSB4eXpbMF0gLyAxMDA7XG5cdGNvbnN0IHkgPSB4eXpbMV0gLyAxMDA7XG5cdGNvbnN0IHogPSB4eXpbMl0gLyAxMDA7XG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cblx0ciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuXHRnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcblx0YiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAociAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiByICogMTIuOTI7XG5cblx0ZyA9IGcgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoZyAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBnICogMTIuOTI7XG5cblx0YiA9IGIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoYiAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBiICogMTIuOTI7XG5cblx0ciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcblx0ZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcblx0YiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoubGFiID0gZnVuY3Rpb24gKHh5eikge1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQubGFiLnh5eiA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IHg7XG5cdGxldCB5O1xuXHRsZXQgejtcblxuXHR5ID0gKGwgKyAxNikgLyAxMTY7XG5cdHggPSBhIC8gNTAwICsgeTtcblx0eiA9IHkgLSBiIC8gMjAwO1xuXG5cdGNvbnN0IHkyID0geSAqKiAzO1xuXHRjb25zdCB4MiA9IHggKiogMztcblx0Y29uc3QgejIgPSB6ICoqIDM7XG5cdHkgPSB5MiA+IDAuMDA4ODU2ID8geTIgOiAoeSAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR4ID0geDIgPiAwLjAwODg1NiA/IHgyIDogKHggLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eiA9IHoyID4gMC4wMDg4NTYgPyB6MiA6ICh6IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cblx0eCAqPSA5NS4wNDc7XG5cdHkgKj0gMTAwO1xuXHR6ICo9IDEwOC44ODM7XG5cblx0cmV0dXJuIFt4LCB5LCB6XTtcbn07XG5cbmNvbnZlcnQubGFiLmxjaCA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IGg7XG5cblx0Y29uc3QgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuXHRoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG5cblx0cmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmNvbnZlcnQubGNoLmxhYiA9IGZ1bmN0aW9uIChsY2gpIHtcblx0Y29uc3QgbCA9IGxjaFswXTtcblx0Y29uc3QgYyA9IGxjaFsxXTtcblx0Y29uc3QgaCA9IGxjaFsyXTtcblxuXHRjb25zdCBociA9IGggLyAzNjAgKiAyICogTWF0aC5QSTtcblx0Y29uc3QgYSA9IGMgKiBNYXRoLmNvcyhocik7XG5cdGNvbnN0IGIgPSBjICogTWF0aC5zaW4oaHIpO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncywgc2F0dXJhdGlvbiA9IG51bGwpIHtcblx0Y29uc3QgW3IsIGcsIGJdID0gYXJncztcblx0bGV0IHZhbHVlID0gc2F0dXJhdGlvbiA9PT0gbnVsbCA/IGNvbnZlcnQucmdiLmhzdihhcmdzKVsyXSA6IHNhdHVyYXRpb247IC8vIEhzdiAtPiBhbnNpMTYgb3B0aW1pemF0aW9uXG5cblx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gNTApO1xuXG5cdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdHJldHVybiAzMDtcblx0fVxuXG5cdGxldCBhbnNpID0gMzBcblx0XHQrICgoTWF0aC5yb3VuZChiIC8gMjU1KSA8PCAyKVxuXHRcdHwgKE1hdGgucm91bmQoZyAvIDI1NSkgPDwgMSlcblx0XHR8IE1hdGgucm91bmQociAvIDI1NSkpO1xuXG5cdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdGFuc2kgKz0gNjA7XG5cdH1cblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuaHN2LmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIE9wdGltaXphdGlvbiBoZXJlOyB3ZSBhbHJlYWR5IGtub3cgdGhlIHZhbHVlIGFuZCBkb24ndCBuZWVkIHRvIGdldFxuXHQvLyBpdCBjb252ZXJ0ZWQgZm9yIHVzLlxuXHRyZXR1cm4gY29udmVydC5yZ2IuYW5zaTE2KGNvbnZlcnQuaHN2LnJnYihhcmdzKSwgYXJnc1syXSk7XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMjU2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgciA9IGFyZ3NbMF07XG5cdGNvbnN0IGcgPSBhcmdzWzFdO1xuXHRjb25zdCBiID0gYXJnc1syXTtcblxuXHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0aWYgKHIgPT09IGcgJiYgZyA9PT0gYikge1xuXHRcdGlmIChyIDwgOCkge1xuXHRcdFx0cmV0dXJuIDE2O1xuXHRcdH1cblxuXHRcdGlmIChyID4gMjQ4KSB7XG5cdFx0XHRyZXR1cm4gMjMxO1xuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLnJvdW5kKCgociAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0fVxuXG5cdGNvbnN0IGFuc2kgPSAxNlxuXHRcdCsgKDM2ICogTWF0aC5yb3VuZChyIC8gMjU1ICogNSkpXG5cdFx0KyAoNiAqIE1hdGgucm91bmQoZyAvIDI1NSAqIDUpKVxuXHRcdCsgTWF0aC5yb3VuZChiIC8gMjU1ICogNSk7XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0LmFuc2kxNi5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRsZXQgY29sb3IgPSBhcmdzICUgMTA7XG5cblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoY29sb3IgPT09IDAgfHwgY29sb3IgPT09IDcpIHtcblx0XHRpZiAoYXJncyA+IDUwKSB7XG5cdFx0XHRjb2xvciArPSAzLjU7XG5cdFx0fVxuXG5cdFx0Y29sb3IgPSBjb2xvciAvIDEwLjUgKiAyNTU7XG5cblx0XHRyZXR1cm4gW2NvbG9yLCBjb2xvciwgY29sb3JdO1xuXHR9XG5cblx0Y29uc3QgbXVsdCA9ICh+fihhcmdzID4gNTApICsgMSkgKiAwLjU7XG5cdGNvbnN0IHIgPSAoKGNvbG9yICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgZyA9ICgoKGNvbG9yID4+IDEpICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgYiA9ICgoKGNvbG9yID4+IDIpICYgMSkgKiBtdWx0KSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5hbnNpMjU2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGFyZ3MgPj0gMjMyKSB7XG5cdFx0Y29uc3QgYyA9IChhcmdzIC0gMjMyKSAqIDEwICsgODtcblx0XHRyZXR1cm4gW2MsIGMsIGNdO1xuXHR9XG5cblx0YXJncyAtPSAxNjtcblxuXHRsZXQgcmVtO1xuXHRjb25zdCByID0gTWF0aC5mbG9vcihhcmdzIC8gMzYpIC8gNSAqIDI1NTtcblx0Y29uc3QgZyA9IE1hdGguZmxvb3IoKHJlbSA9IGFyZ3MgJSAzNikgLyA2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGIgPSAocmVtICUgNikgLyA1ICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oZXggPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBpbnRlZ2VyID0gKChNYXRoLnJvdW5kKGFyZ3NbMF0pICYgMHhGRikgPDwgMTYpXG5cdFx0KyAoKE1hdGgucm91bmQoYXJnc1sxXSkgJiAweEZGKSA8PCA4KVxuXHRcdCsgKE1hdGgucm91bmQoYXJnc1syXSkgJiAweEZGKTtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5oZXgucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgbWF0Y2ggPSBhcmdzLnRvU3RyaW5nKDE2KS5tYXRjaCgvW2EtZjAtOV17Nn18W2EtZjAtOV17M30vaSk7XG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHR9XG5cblx0bGV0IGNvbG9yU3RyaW5nID0gbWF0Y2hbMF07XG5cblx0aWYgKG1hdGNoWzBdLmxlbmd0aCA9PT0gMykge1xuXHRcdGNvbG9yU3RyaW5nID0gY29sb3JTdHJpbmcuc3BsaXQoJycpLm1hcChjaGFyID0+IHtcblx0XHRcdHJldHVybiBjaGFyICsgY2hhcjtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdGNvbnN0IGludGVnZXIgPSBwYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXHRjb25zdCByID0gKGludGVnZXIgPj4gMTYpICYgMHhGRjtcblx0Y29uc3QgZyA9IChpbnRlZ2VyID4+IDgpICYgMHhGRjtcblx0Y29uc3QgYiA9IGludGVnZXIgJiAweEZGO1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oY2cgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KE1hdGgubWF4KHIsIGcpLCBiKTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4oTWF0aC5taW4ociwgZyksIGIpO1xuXHRjb25zdCBjaHJvbWEgPSAobWF4IC0gbWluKTtcblx0bGV0IGdyYXlzY2FsZTtcblx0bGV0IGh1ZTtcblxuXHRpZiAoY2hyb21hIDwgMSkge1xuXHRcdGdyYXlzY2FsZSA9IG1pbiAvICgxIC0gY2hyb21hKTtcblx0fSBlbHNlIHtcblx0XHRncmF5c2NhbGUgPSAwO1xuXHR9XG5cblx0aWYgKGNocm9tYSA8PSAwKSB7XG5cdFx0aHVlID0gMDtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IHIpIHtcblx0XHRodWUgPSAoKGcgLSBiKSAvIGNocm9tYSkgJSA2O1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gZykge1xuXHRcdGh1ZSA9IDIgKyAoYiAtIHIpIC8gY2hyb21hO1xuXHR9IGVsc2Uge1xuXHRcdGh1ZSA9IDQgKyAociAtIGcpIC8gY2hyb21hO1xuXHR9XG5cblx0aHVlIC89IDY7XG5cdGh1ZSAlPSAxO1xuXG5cdHJldHVybiBbaHVlICogMzYwLCBjaHJvbWEgKiAxMDAsIGdyYXlzY2FsZSAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhzbC5oY2cgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IGwgPCAwLjUgPyAoMi4wICogcyAqIGwpIDogKDIuMCAqIHMgKiAoMS4wIC0gbCkpO1xuXG5cdGxldCBmID0gMDtcblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKGwgLSAwLjUgKiBjKSAvICgxLjAgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHNsWzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LmhjZyA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gcyAqIHY7XG5cdGxldCBmID0gMDtcblxuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHN2WzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLnJnYiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgaCA9IGhjZ1swXSAvIDM2MDtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRpZiAoYyA9PT0gMC4wKSB7XG5cdFx0cmV0dXJuIFtnICogMjU1LCBnICogMjU1LCBnICogMjU1XTtcblx0fVxuXG5cdGNvbnN0IHB1cmUgPSBbMCwgMCwgMF07XG5cdGNvbnN0IGhpID0gKGggJSAxKSAqIDY7XG5cdGNvbnN0IHYgPSBoaSAlIDE7XG5cdGNvbnN0IHcgPSAxIC0gdjtcblx0bGV0IG1nID0gMDtcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXHRzd2l0Y2ggKE1hdGguZmxvb3IoaGkpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSB2OyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cHVyZVswXSA9IHc7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSB3OyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cHVyZVswXSA9IHY7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IHc7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXG5cdG1nID0gKDEuMCAtIGMpICogZztcblxuXHRyZXR1cm4gW1xuXHRcdChjICogcHVyZVswXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMV0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzJdICsgbWcpICogMjU1XG5cdF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc3YgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKHYgPiAwLjApIHtcblx0XHRmID0gYyAvIHY7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgZiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc2wgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgbCA9IGcgKiAoMS4wIC0gYykgKyAwLjUgKiBjO1xuXHRsZXQgcyA9IDA7XG5cblx0aWYgKGwgPiAwLjAgJiYgbCA8IDAuNSkge1xuXHRcdHMgPSBjIC8gKDIgKiBsKTtcblx0fSBlbHNlXG5cdGlmIChsID49IDAuNSAmJiBsIDwgMS4wKSB7XG5cdFx0cyA9IGMgLyAoMiAqICgxIC0gbCkpO1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdHJldHVybiBbaGNnWzBdLCAodiAtIGMpICogMTAwLCAoMSAtIHYpICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHdiLmhjZyA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgdyA9IGh3YlsxXSAvIDEwMDtcblx0Y29uc3QgYiA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgdiA9IDEgLSBiO1xuXHRjb25zdCBjID0gdiAtIHc7XG5cdGxldCBnID0gMDtcblxuXHRpZiAoYyA8IDEpIHtcblx0XHRnID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2h3YlswXSwgYyAqIDEwMCwgZyAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmFwcGxlLnJnYiA9IGZ1bmN0aW9uIChhcHBsZSkge1xuXHRyZXR1cm4gWyhhcHBsZVswXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzFdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMl0gLyA2NTUzNSkgKiAyNTVdO1xufTtcblxuY29udmVydC5yZ2IuYXBwbGUgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHJldHVybiBbKHJnYlswXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsxXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsyXSAvIDI1NSkgKiA2NTUzNV07XG59O1xuXG5jb252ZXJ0LmdyYXkucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFthcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc2wgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gWzAsIDAsIGFyZ3NbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmhzdiA9IGNvbnZlcnQuZ3JheS5oc2w7XG5cbmNvbnZlcnQuZ3JheS5od2IgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDEwMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuY215ayA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMCwgMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkubGFiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFtncmF5WzBdLCAwLCAwXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oZXggPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRjb25zdCB2YWwgPSBNYXRoLnJvdW5kKGdyYXlbMF0gLyAxMDAgKiAyNTUpICYgMHhGRjtcblx0Y29uc3QgaW50ZWdlciA9ICh2YWwgPDwgMTYpICsgKHZhbCA8PCA4KSArIHZhbDtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5yZ2IuZ3JheSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgdmFsID0gKHJnYlswXSArIHJnYlsxXSArIHJnYlsyXSkgLyAzO1xuXHRyZXR1cm4gW3ZhbCAvIDI1NSAqIDEwMF07XG59O1xuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuXG4vKlxuXHRUaGlzIGZ1bmN0aW9uIHJvdXRlcyBhIG1vZGVsIHRvIGFsbCBvdGhlciBtb2RlbHMuXG5cblx0YWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSByb3V0ZWQgaGF2ZSBhIHByb3BlcnR5IGAuY29udmVyc2lvbmAgYXR0YWNoZWRcblx0dG8gdGhlIHJldHVybmVkIHN5bnRoZXRpYyBmdW5jdGlvbi4gVGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheVxuXHRvZiBzdHJpbmdzLCBlYWNoIHdpdGggdGhlIHN0ZXBzIGluIGJldHdlZW4gdGhlICdmcm9tJyBhbmQgJ3RvJ1xuXHRjb2xvciBtb2RlbHMgKGluY2x1c2l2ZSkuXG5cblx0Y29udmVyc2lvbnMgdGhhdCBhcmUgbm90IHBvc3NpYmxlIHNpbXBseSBhcmUgbm90IGluY2x1ZGVkLlxuKi9cblxuZnVuY3Rpb24gYnVpbGRHcmFwaCgpIHtcblx0Y29uc3QgZ3JhcGggPSB7fTtcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL29iamVjdC1rZXlzLXZzLWZvci1pbi13aXRoLWNsb3N1cmUvM1xuXHRjb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9ucyk7XG5cblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGdyYXBoW21vZGVsc1tpXV0gPSB7XG5cdFx0XHQvLyBodHRwOi8vanNwZXJmLmNvbS8xLXZzLWluZmluaXR5XG5cdFx0XHQvLyBtaWNyby1vcHQsIGJ1dCB0aGlzIGlzIHNpbXBsZS5cblx0XHRcdGRpc3RhbmNlOiAtMSxcblx0XHRcdHBhcmVudDogbnVsbFxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JyZWFkdGgtZmlyc3Rfc2VhcmNoXG5mdW5jdGlvbiBkZXJpdmVCRlMoZnJvbU1vZGVsKSB7XG5cdGNvbnN0IGdyYXBoID0gYnVpbGRHcmFwaCgpO1xuXHRjb25zdCBxdWV1ZSA9IFtmcm9tTW9kZWxdOyAvLyBVbnNoaWZ0IC0+IHF1ZXVlIC0+IHBvcFxuXG5cdGdyYXBoW2Zyb21Nb2RlbF0uZGlzdGFuY2UgPSAwO1xuXG5cdHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcXVldWUucG9wKCk7XG5cdFx0Y29uc3QgYWRqYWNlbnRzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnNbY3VycmVudF0pO1xuXG5cdFx0Zm9yIChsZXQgbGVuID0gYWRqYWNlbnRzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y29uc3QgYWRqYWNlbnQgPSBhZGphY2VudHNbaV07XG5cdFx0XHRjb25zdCBub2RlID0gZ3JhcGhbYWRqYWNlbnRdO1xuXG5cdFx0XHRpZiAobm9kZS5kaXN0YW5jZSA9PT0gLTEpIHtcblx0XHRcdFx0bm9kZS5kaXN0YW5jZSA9IGdyYXBoW2N1cnJlbnRdLmRpc3RhbmNlICsgMTtcblx0XHRcdFx0bm9kZS5wYXJlbnQgPSBjdXJyZW50O1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KGFkamFjZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbmZ1bmN0aW9uIGxpbmsoZnJvbSwgdG8pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG5cdFx0cmV0dXJuIHRvKGZyb20oYXJncykpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCkge1xuXHRjb25zdCBwYXRoID0gW2dyYXBoW3RvTW9kZWxdLnBhcmVudCwgdG9Nb2RlbF07XG5cdGxldCBmbiA9IGNvbnZlcnNpb25zW2dyYXBoW3RvTW9kZWxdLnBhcmVudF1bdG9Nb2RlbF07XG5cblx0bGV0IGN1ciA9IGdyYXBoW3RvTW9kZWxdLnBhcmVudDtcblx0d2hpbGUgKGdyYXBoW2N1cl0ucGFyZW50KSB7XG5cdFx0cGF0aC51bnNoaWZ0KGdyYXBoW2N1cl0ucGFyZW50KTtcblx0XHRmbiA9IGxpbmsoY29udmVyc2lvbnNbZ3JhcGhbY3VyXS5wYXJlbnRdW2N1cl0sIGZuKTtcblx0XHRjdXIgPSBncmFwaFtjdXJdLnBhcmVudDtcblx0fVxuXG5cdGZuLmNvbnZlcnNpb24gPSBwYXRoO1xuXHRyZXR1cm4gZm47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGRlcml2ZUJGUyhmcm9tTW9kZWwpO1xuXHRjb25zdCBjb252ZXJzaW9uID0ge307XG5cblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoZ3JhcGgpO1xuXHRmb3IgKGxldCBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Y29uc3QgdG9Nb2RlbCA9IG1vZGVsc1tpXTtcblx0XHRjb25zdCBub2RlID0gZ3JhcGhbdG9Nb2RlbF07XG5cblx0XHRpZiAobm9kZS5wYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdC8vIE5vIHBvc3NpYmxlIGNvbnZlcnNpb24sIG9yIHRoaXMgbm9kZSBpcyB0aGUgc291cmNlIG1vZGVsLlxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udmVyc2lvblt0b01vZGVsXSA9IHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKTtcblx0fVxuXG5cdHJldHVybiBjb252ZXJzaW9uO1xufTtcblxuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuY29uc3Qgcm91dGUgPSByZXF1aXJlKCcuL3JvdXRlJyk7XG5cbmNvbnN0IGNvbnZlcnQgPSB7fTtcblxuY29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBmbihhcmdzKTtcblxuXHRcdC8vIFdlJ3JlIGFzc3VtaW5nIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgaGVyZS5cblx0XHQvLyBzZWUgbm90aWNlIGluIGNvbnZlcnNpb25zLmpzOyBkb24ndCB1c2UgYm94IHR5cGVzXG5cdFx0Ly8gaW4gY29udmVyc2lvbiBmdW5jdGlvbnMuXG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGxldCBsZW4gPSByZXN1bHQubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdFtpXSA9IE1hdGgucm91bmQocmVzdWx0W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxubW9kZWxzLmZvckVhY2goZnJvbU1vZGVsID0+IHtcblx0Y29udmVydFtmcm9tTW9kZWxdID0ge307XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0ubGFiZWxzfSk7XG5cblx0Y29uc3Qgcm91dGVzID0gcm91dGUoZnJvbU1vZGVsKTtcblx0Y29uc3Qgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2godG9Nb2RlbCA9PiB7XG5cdFx0Y29uc3QgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgcmdiID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmdiWzBdfTske3JnYlsxXX07JHtyZ2JbMl19bWA7XG59O1xuXG5jb25zdCBhbnNpMmFuc2kgPSBuID0+IG47XG5jb25zdCByZ2IycmdiID0gKHIsIGcsIGIpID0+IFtyLCBnLCBiXTtcblxuY29uc3Qgc2V0TGF6eVByb3BlcnR5ID0gKG9iamVjdCwgcHJvcGVydHksIGdldCkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoKTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xufTtcblxuLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCdjb2xvci1jb252ZXJ0Jyl9ICovXG5sZXQgY29sb3JDb252ZXJ0O1xuY29uc3QgbWFrZUR5bmFtaWNTdHlsZXMgPSAod3JhcCwgdGFyZ2V0U3BhY2UsIGlkZW50aXR5LCBpc0JhY2tncm91bmQpID0+IHtcblx0aWYgKGNvbG9yQ29udmVydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29sb3JDb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXHR9XG5cblx0Y29uc3Qgb2Zmc2V0ID0gaXNCYWNrZ3JvdW5kID8gMTAgOiAwO1xuXHRjb25zdCBzdHlsZXMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IFtzb3VyY2VTcGFjZSwgc3VpdGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9yQ29udmVydCkpIHtcblx0XHRjb25zdCBuYW1lID0gc291cmNlU3BhY2UgPT09ICdhbnNpMTYnID8gJ2Fuc2knIDogc291cmNlU3BhY2U7XG5cdFx0aWYgKHNvdXJjZVNwYWNlID09PSB0YXJnZXRTcGFjZSkge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChpZGVudGl0eSwgb2Zmc2V0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzdWl0ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoc3VpdGVbdGFyZ2V0U3BhY2VdLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIHRydWUpKTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG4vLyBNYWtlIHRoZSBleHBvcnQgaW1tdXRhYmxlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBhc3NlbWJsZVN0eWxlc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2ID0gcHJvY2Vzcy5hcmd2KSA9PiB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBURU1QTEFURV9SRUdFWCA9IC8oPzpcXFxcKHUoPzpbYS1mXFxkXXs0fXxcXHtbYS1mXFxkXXsxLDZ9XFx9KXx4W2EtZlxcZF17Mn18LikpfCg/Olxceyh+KT8oXFx3Kyg/OlxcKFteKV0qXFwpKT8oPzpcXC5cXHcrKD86XFwoW14pXSpcXCkpPykqKSg/OlsgXFx0XXwoPz1cXHI/XFxuKSkpfChcXH0pfCgoPzoufFtcXHJcXG5cXGZdKSs/KS9naTtcbmNvbnN0IFNUWUxFX1JFR0VYID0gLyg/Ol58XFwuKShcXHcrKSg/OlxcKChbXildKilcXCkpPy9nO1xuY29uc3QgU1RSSU5HX1JFR0VYID0gL14oWydcIl0pKCg/OlxcXFwufCg/IVxcMSlbXlxcXFxdKSopXFwxJC87XG5jb25zdCBFU0NBUEVfUkVHRVggPSAvXFxcXCh1KD86W2EtZlxcZF17NH18e1thLWZcXGRdezEsNn19KXx4W2EtZlxcZF17Mn18Lil8KFteXFxcXF0pL2dpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IE1hcChbXG5cdFsnbicsICdcXG4nXSxcblx0WydyJywgJ1xcciddLFxuXHRbJ3QnLCAnXFx0J10sXG5cdFsnYicsICdcXGInXSxcblx0WydmJywgJ1xcZiddLFxuXHRbJ3YnLCAnXFx2J10sXG5cdFsnMCcsICdcXDAnXSxcblx0WydcXFxcJywgJ1xcXFwnXSxcblx0WydlJywgJ1xcdTAwMUInXSxcblx0WydhJywgJ1xcdTAwMDcnXVxuXSk7XG5cbmZ1bmN0aW9uIHVuZXNjYXBlKGMpIHtcblx0Y29uc3QgdSA9IGNbMF0gPT09ICd1Jztcblx0Y29uc3QgYnJhY2tldCA9IGNbMV0gPT09ICd7JztcblxuXHRpZiAoKHUgJiYgIWJyYWNrZXQgJiYgYy5sZW5ndGggPT09IDUpIHx8IChjWzBdID09PSAneCcgJiYgYy5sZW5ndGggPT09IDMpKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zbGljZSgxKSwgMTYpKTtcblx0fVxuXG5cdGlmICh1ICYmIGJyYWNrZXQpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoYy5zbGljZSgyLCAtMSksIDE2KSk7XG5cdH1cblxuXHRyZXR1cm4gRVNDQVBFUy5nZXQoYykgfHwgYztcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMobmFtZSwgYXJndW1lbnRzXykge1xuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IGFyZ3VtZW50c18udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovZyk7XG5cdGxldCBtYXRjaGVzO1xuXG5cdGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG5cdFx0Y29uc3QgbnVtYmVyID0gTnVtYmVyKGNodW5rKTtcblx0XHRpZiAoIU51bWJlci5pc05hTihudW1iZXIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobnVtYmVyKTtcblx0XHR9IGVsc2UgaWYgKChtYXRjaGVzID0gY2h1bmsubWF0Y2goU1RSSU5HX1JFR0VYKSkpIHtcblx0XHRcdHJlc3VsdHMucHVzaChtYXRjaGVzWzJdLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCAobSwgZXNjYXBlLCBjaGFyYWN0ZXIpID0+IGVzY2FwZSA/IHVuZXNjYXBlKGVzY2FwZSkgOiBjaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIENoYWxrIHRlbXBsYXRlIHN0eWxlIGFyZ3VtZW50OiAke2NodW5rfSAoaW4gc3R5bGUgJyR7bmFtZX0nKWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0eWxlKHN0eWxlKSB7XG5cdFNUWUxFX1JFR0VYLmxhc3RJbmRleCA9IDA7XG5cblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRsZXQgbWF0Y2hlcztcblxuXHR3aGlsZSAoKG1hdGNoZXMgPSBTVFlMRV9SRUdFWC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRjb25zdCBuYW1lID0gbWF0Y2hlc1sxXTtcblxuXHRcdGlmIChtYXRjaGVzWzJdKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gcGFyc2VBcmd1bWVudHMobmFtZSwgbWF0Y2hlc1syXSk7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdLmNvbmNhdChhcmdzKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpIHtcblx0Y29uc3QgZW5hYmxlZCA9IHt9O1xuXG5cdGZvciAoY29uc3QgbGF5ZXIgb2Ygc3R5bGVzKSB7XG5cdFx0Zm9yIChjb25zdCBzdHlsZSBvZiBsYXllci5zdHlsZXMpIHtcblx0XHRcdGVuYWJsZWRbc3R5bGVbMF1dID0gbGF5ZXIuaW52ZXJzZSA/IG51bGwgOiBzdHlsZS5zbGljZSgxKTtcblx0XHR9XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IGNoYWxrO1xuXHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlc10gb2YgT2JqZWN0LmVudHJpZXMoZW5hYmxlZCkpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3R5bGVzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEoc3R5bGVOYW1lIGluIGN1cnJlbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gQ2hhbGsgc3R5bGU6ICR7c3R5bGVOYW1lfWApO1xuXHRcdH1cblxuXHRcdGN1cnJlbnQgPSBzdHlsZXMubGVuZ3RoID4gMCA/IGN1cnJlbnRbc3R5bGVOYW1lXSguLi5zdHlsZXMpIDogY3VycmVudFtzdHlsZU5hbWVdO1xuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKGNoYWxrLCB0ZW1wb3JhcnkpID0+IHtcblx0Y29uc3Qgc3R5bGVzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IFtdO1xuXHRsZXQgY2h1bmsgPSBbXTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuXHR0ZW1wb3JhcnkucmVwbGFjZShURU1QTEFURV9SRUdFWCwgKG0sIGVzY2FwZUNoYXJhY3RlciwgaW52ZXJzZSwgc3R5bGUsIGNsb3NlLCBjaGFyYWN0ZXIpID0+IHtcblx0XHRpZiAoZXNjYXBlQ2hhcmFjdGVyKSB7XG5cdFx0XHRjaHVuay5wdXNoKHVuZXNjYXBlKGVzY2FwZUNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSBpZiAoc3R5bGUpIHtcblx0XHRcdGNvbnN0IHN0cmluZyA9IGNodW5rLmpvaW4oJycpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdGNodW5rcy5wdXNoKHN0eWxlcy5sZW5ndGggPT09IDAgPyBzdHJpbmcgOiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKHN0cmluZykpO1xuXHRcdFx0c3R5bGVzLnB1c2goe2ludmVyc2UsIHN0eWxlczogcGFyc2VTdHlsZShzdHlsZSl9KTtcblx0XHR9IGVsc2UgaWYgKGNsb3NlKSB7XG5cdFx0XHRpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGV4dHJhbmVvdXMgfSBpbiBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNodW5rcy5wdXNoKGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoY2h1bmsuam9pbignJykpKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRzdHlsZXMucG9wKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNodW5rLnB1c2goY2hhcmFjdGVyKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNodW5rcy5wdXNoKGNodW5rLmpvaW4oJycpKTtcblxuXHRpZiAoc3R5bGVzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBlcnJNZXNzYWdlID0gYENoYWxrIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWlzc2luZyAke3N0eWxlcy5sZW5ndGh9IGNsb3NpbmcgYnJhY2tldCR7c3R5bGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSAoXFxgfVxcYClgO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJNZXNzYWdlKTtcblx0fVxuXG5cdHJldHVybiBjaHVua3Muam9pbignJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcbmNvbnN0IHtcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4XG59ID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vLyBgc3VwcG9ydHNDb2xvci5sZXZlbGAgXHUyMTkyIGBhbnNpU3R5bGVzLmNvbG9yW25hbWVdYCBtYXBwaW5nXG5jb25zdCBsZXZlbE1hcHBpbmcgPSBbXG5cdCdhbnNpJyxcblx0J2Fuc2knLFxuXHQnYW5zaTI1NicsXG5cdCdhbnNpMTZtJ1xuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuY2xhc3MgQ2hhbGtDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG5cdFx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcblx0fVxufVxuXG5jb25zdCBjaGFsa0ZhY3RvcnkgPSBvcHRpb25zID0+IHtcblx0Y29uc3QgY2hhbGsgPSB7fTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRjaGFsay50ZW1wbGF0ZSA9ICguLi5hcmd1bWVudHNfKSA9PiBjaGFsa1RhZyhjaGFsay50ZW1wbGF0ZSwgLi4uYXJndW1lbnRzXyk7XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLCBDaGFsay5wcm90b3R5cGUpO1xuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGsudGVtcGxhdGUsIGNoYWxrKTtcblxuXHRjaGFsay50ZW1wbGF0ZS5jb25zdHJ1Y3RvciA9ICgpID0+IHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BjaGFsay5jb25zdHJ1Y3RvcigpYCBpcyBkZXByZWNhdGVkLiBVc2UgYG5ldyBjaGFsay5JbnN0YW5jZSgpYCBpbnN0ZWFkLicpO1xuXHR9O1xuXG5cdGNoYWxrLnRlbXBsYXRlLkluc3RhbmNlID0gQ2hhbGtDbGFzcztcblxuXHRyZXR1cm4gY2hhbGsudGVtcGxhdGU7XG59O1xuXG5mdW5jdGlvbiBDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpcy5fc3R5bGVyKSwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3R5bGVOYW1lLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRcdHJldHVybiBidWlsZGVyO1xuXHRcdH1cblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzLl9zdHlsZXIsIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9XG59O1xuXG5jb25zdCB1c2VkTW9kZWxzID0gWydyZ2InLCAnaGV4JywgJ2tleXdvcmQnLCAnaHNsJywgJ2hzdicsICdod2InLCAnYW5zaScsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihhbnNpU3R5bGVzLmNvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5iZ0NvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5iZ0NvbG9yLmNsb3NlLCB0aGlzLl9zdHlsZXIpO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dlbmVyYXRvci5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpcy5fZ2VuZXJhdG9yLmxldmVsID0gbGV2ZWw7XG5cdFx0fVxuXHR9XG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnRcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0aWYgKGlzQXJyYXkoYXJndW1lbnRzX1swXSkgJiYgaXNBcnJheShhcmd1bWVudHNfWzBdLnJhdykpIHtcblx0XHRcdC8vIENhbGxlZCBhcyBhIHRlbXBsYXRlIGxpdGVyYWwsIGZvciBleGFtcGxlOiBjaGFsay5yZWRgMiArIDMgPSB7Ym9sZCAkezIrM319YFxuXHRcdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgY2hhbGtUYWcoYnVpbGRlciwgLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0XHRyZXR1cm4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cdH07XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyLl9nZW5lcmF0b3IgPSBzZWxmO1xuXHRidWlsZGVyLl9zdHlsZXIgPSBfc3R5bGVyO1xuXHRidWlsZGVyLl9pc0VtcHR5ID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZi5faXNFbXB0eSA/ICcnIDogc3RyaW5nO1xuXHR9XG5cblx0bGV0IHN0eWxlciA9IHNlbGYuX3N0eWxlcjtcblxuXHRpZiAoc3R5bGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qge29wZW5BbGwsIGNsb3NlQWxsfSA9IHN0eWxlcjtcblx0aWYgKHN0cmluZy5pbmRleE9mKCdcXHUwMDFCJykgIT09IC0xKSB7XG5cdFx0d2hpbGUgKHN0eWxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBSZXBsYWNlIGFueSBpbnN0YW5jZXMgYWxyZWFkeSBwcmVzZW50IHdpdGggYSByZS1vcGVuaW5nIGNvZGVcblx0XHRcdC8vIG90aGVyd2lzZSBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdW50aWwgc2FpZCBjbG9zaW5nIGNvZGVcblx0XHRcdC8vIHdpbGwgYmUgY29sb3JlZCwgYW5kIHRoZSByZXN0IHdpbGwgc2ltcGx5IGJlICdwbGFpbicuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmdSZXBsYWNlQWxsKHN0cmluZywgc3R5bGVyLmNsb3NlLCBzdHlsZXIub3Blbik7XG5cblx0XHRcdHN0eWxlciA9IHN0eWxlci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV2UgY2FuIG1vdmUgYm90aCBuZXh0IGFjdGlvbnMgb3V0IG9mIGxvb3AsIGJlY2F1c2UgcmVtYWluaW5nIGFjdGlvbnMgaW4gbG9vcCB3b24ndCBoYXZlXG5cdC8vIGFueS92aXNpYmxlIGVmZmVjdCBvbiBwYXJ0cyB3ZSBhZGQgaGVyZS4gQ2xvc2UgdGhlIHN0eWxpbmcgYmVmb3JlIGEgbGluZWJyZWFrIGFuZCByZW9wZW5cblx0Ly8gYWZ0ZXIgbmV4dCBsaW5lIHRvIGZpeCBhIGJsZWVkIGlzc3VlIG9uIG1hY09TOiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGsvcHVsbC85MlxuXHRjb25zdCBsZkluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicpO1xuXHRpZiAobGZJbmRleCAhPT0gLTEpIHtcblx0XHRzdHJpbmcgPSBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBjbG9zZUFsbCwgb3BlbkFsbCwgbGZJbmRleCk7XG5cdH1cblxuXHRyZXR1cm4gb3BlbkFsbCArIHN0cmluZyArIGNsb3NlQWxsO1xufTtcblxubGV0IHRlbXBsYXRlO1xuY29uc3QgY2hhbGtUYWcgPSAoY2hhbGssIC4uLnN0cmluZ3MpID0+IHtcblx0Y29uc3QgW2ZpcnN0U3RyaW5nXSA9IHN0cmluZ3M7XG5cblx0aWYgKCFpc0FycmF5KGZpcnN0U3RyaW5nKSB8fCAhaXNBcnJheShmaXJzdFN0cmluZy5yYXcpKSB7XG5cdFx0Ly8gSWYgY2hhbGsoKSB3YXMgY2FsbGVkIGJ5IGl0c2VsZiBvciB3aXRoIGEgc3RyaW5nLFxuXHRcdC8vIHJldHVybiB0aGUgc3RyaW5nIGl0c2VsZiBhcyBhIHN0cmluZy5cblx0XHRyZXR1cm4gc3RyaW5ncy5qb2luKCcgJyk7XG5cdH1cblxuXHRjb25zdCBhcmd1bWVudHNfID0gc3RyaW5ncy5zbGljZSgxKTtcblx0Y29uc3QgcGFydHMgPSBbZmlyc3RTdHJpbmcucmF3WzBdXTtcblxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0cGFydHMucHVzaChcblx0XHRcdFN0cmluZyhhcmd1bWVudHNfW2kgLSAxXSkucmVwbGFjZSgvW3t9XFxcXF0vZywgJ1xcXFwkJicpLFxuXHRcdFx0U3RyaW5nKGZpcnN0U3RyaW5nLnJhd1tpXSlcblx0XHQpO1xuXHR9XG5cblx0aWYgKHRlbXBsYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHR0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGVzJyk7XG5cdH1cblxuXHRyZXR1cm4gdGVtcGxhdGUoY2hhbGssIHBhcnRzLmpvaW4oJycpKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBDaGFsaygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbmNoYWxrLnN1cHBvcnRzQ29sb3IgPSBzdGRvdXRDb2xvcjtcbmNoYWxrLnN0ZGVyciA9IENoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdGRlcnIuc3VwcG9ydHNDb2xvciA9IHN0ZGVyckNvbG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNoYWxrO1xuIiwgIi8vIHNvdXJjZSBvZiBpbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9yZXF1aXJlLWZvb2wtd2VicGFja1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IGV2YWwoXG4gICAgJ3R5cGVvZiByZXF1aXJlICE9PSBcXCd1bmRlZmluZWRcXCcgJyArXG4gICAgJz8gcmVxdWlyZSAnICtcbiAgICAnOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcihcXCdNb2R1bGUgXCIgKyBtb2R1bGUgKyBcIiBub3QgZm91bmQuXFwnKSB9J1xuKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRm9vbFdlYnBhY2s7XG4iLCAidmFyIHJlcXVpcmVGb29sV2VicGFjayA9IHJlcXVpcmUoJy4vcmVxdWlyZUZvb2xXZWJwYWNrJyk7XG5cbi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZsZXhkaW5lc2gvYnJvd3Nlci1vci1ub2RlXG52YXIgaXNOb2RlID0gZnVuY3Rpb24gKG5vZGVQcm9jZXNzKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG5vZGVQcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5vZGVQcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcbiAgKTtcbn1cbm1vZHVsZS5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZVxuXG4vLyBkZXRlcm1pbmVzIHRoZSBKYXZhU2NyaXB0IHBsYXRmb3JtOiBicm93c2VyIG9yIG5vZGVcbm1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIGlzTm9kZShwcm9jZXNzKVxuICA/ICdub2RlJ1xuICA6ICdicm93c2VyJztcblxuLy8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb2RlIGlzIHJ1bm5pbmcgaW4gbWFpbiB0aHJlYWQgb3Igbm90XG4vLyBub3RlIHRoYXQgaW4gbm9kZS5qcyB3ZSBoYXZlIHRvIGNoZWNrIGJvdGggd29ya2VyX3RocmVhZCBhbmQgY2hpbGRfcHJvY2Vzc1xudmFyIHdvcmtlcl90aHJlYWRzID0gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xubW9kdWxlLmV4cG9ydHMuaXNNYWluVGhyZWFkID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdub2RlJ1xuICA/ICgoIXdvcmtlcl90aHJlYWRzIHx8IHdvcmtlcl90aHJlYWRzLmlzTWFpblRocmVhZCkgJiYgIXByb2Nlc3MuY29ubmVjdGVkKVxuICA6IHR5cGVvZiBXaW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY3B1cyBhdmFpbGFibGVcbm1vZHVsZS5leHBvcnRzLmNwdXMgPSBtb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInXG4gID8gc2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeVxuICA6IHJlcXVpcmVGb29sV2VicGFjaygnb3MnKS5jcHVzKCkubGVuZ3RoO1xuXG5mdW5jdGlvbiB0cnlSZXF1aXJlRm9vbFdlYnBhY2sgKG1vZHVsZSkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2sobW9kdWxlKTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFByb21pc2VcbiAqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9SdWJhWGEvODUwMTM1OSBmcm9tIFJ1YmFYYSA8dHJhc2hAcnViYXhhLm9yZz5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyICAgQ2FsbGVkIGFzIGhhbmRsZXIocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pXG4gKiBAcGFyYW0ge1Byb21pc2V9IFtwYXJlbnRdICAgUGFyZW50IHByb21pc2UgZm9yIHByb3BhZ2F0aW9uIG9mIGNhbmNlbCBhbmQgdGltZW91dFxuICovXG5mdW5jdGlvbiBQcm9taXNlKGhhbmRsZXIsIHBhcmVudCkge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHBhcmFtZXRlciBoYW5kbGVyKHJlc29sdmUsIHJlamVjdCkgbWlzc2luZycpO1xuICB9XG5cbiAgdmFyIF9vblN1Y2Nlc3MgPSBbXTtcbiAgdmFyIF9vbkZhaWwgPSBbXTtcblxuICAvLyBzdGF0dXNcbiAgdGhpcy5yZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLnJlamVjdGVkID0gZmFsc2U7XG4gIHRoaXMucGVuZGluZyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgb25TdWNjZXNzIGFuZCBvbkZhaWwgY2FsbGJhY2tzOiBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gICAqIE9uY2UgdGhlIHByb21pc2UgaXMgcmVzb2x2ZSwgdGhlIGZ1bmN0aW9uIF9wcm9taXNlIGlzIHJlcGxhY2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2Vzc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIF9vblN1Y2Nlc3MucHVzaChvblN1Y2Nlc3MpO1xuICAgIF9vbkZhaWwucHVzaChvbkZhaWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gb25TdWNjZXNzIGNhbGxiYWNrIGFuZCBvcHRpb25hbGx5IGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbF1cbiAgICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAgICovXG4gIHRoaXMudGhlbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcyA9IG9uU3VjY2VzcyA/IF90aGVuKG9uU3VjY2VzcywgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlc29sdmU7XG4gICAgICB2YXIgZiA9IG9uRmFpbCAgICA/IF90aGVuKG9uRmFpbCwgICAgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlamVjdDtcblxuICAgICAgX3Byb2Nlc3MocywgZik7XG4gICAgfSwgbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Kn0gcmVzdWx0XG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVzb2x2ZSA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSB0cnVlO1xuICAgIG1lLnJlamVjdGVkID0gZmFsc2U7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uU3VjY2Vzcy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4ocmVzdWx0KTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvblN1Y2Nlc3MocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgX3Jlc29sdmUgPSBfcmVqZWN0ID0gZnVuY3Rpb24gKCkgeyB9O1xuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIHByb21pc2VcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSBmYWxzZTtcbiAgICBtZS5yZWplY3RlZCA9IHRydWU7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uRmFpbC5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4oZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICAgIG9uRmFpbChlcnJvcik7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW5jZWwgdGUgcHJvbWlzZS4gVGhpcyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoIGEgQ2FuY2VsbGF0aW9uRXJyb3JcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5jYW5jZWwoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBfcmVqZWN0KG5ldyBDYW5jZWxsYXRpb25FcnJvcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhIHRpbWVvdXQgZm9yIHRoZSBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyBub3QgcmVzb2x2ZWQgd2l0aGluXG4gICAqIHRoZSB0aW1lLCB0aGUgcHJvbWlzZSB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgYSBUaW1lb3V0RXJyb3IgaXMgdGhyb3duLlxuICAgKiBJZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbiB0aW1lLCB0aGUgdGltZW91dCBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgICAgIERlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gc2VsZlxuICAgKi9cbiAgdGhpcy50aW1lb3V0ID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnRpbWVvdXQoZGVsYXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ1Byb21pc2UgdGltZWQgb3V0IGFmdGVyICcgKyBkZWxheSArICcgbXMnKSk7XG4gICAgICB9LCBkZWxheSk7XG5cbiAgICAgIG1lLmFsd2F5cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLy8gYXR0YWNoIGhhbmRsZXIgcGFzc2luZyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9uc1xuICBoYW5kbGVyKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBfcmVzb2x2ZShyZXN1bHQpO1xuICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBfcmVqZWN0KGVycm9yKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBnaXZlbiBjYWxsYmFjaywgdGhlbiBjYWxsIHJlc29sdmUvcmVqZWN0IGJhc2VkIG9uIHRoZSByZXR1cm5lZCByZXN1bHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF90aGVuKGNhbGxiYWNrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlcyA9IGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcmVzWydjYXRjaCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG1ldGhvZCByZXR1cm5lZCBhIHByb21pc2VcbiAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gb25GYWlsIGNhbGxiYWNrIHRvIHRoZSBQcm9taXNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24gKG9uRmFpbCkge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uRmFpbCk7XG59O1xuXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgY2FsbGJhY2spXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgRXJyb3IsIGNhbGxiYWNrKVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2sgd2hlbiB0aGUgcHJvbWlzZSBlaXRoZXIgcmVzb2x2ZXMgb3IgcmVqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZS5hbHdheXMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIHRoaXMudGhlbihmbiwgZm4pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIHByb3ZpZGVkIHByb21pc2VzIGFyZSByZXNvbHZlZCxcbiAqIGFuZCBmYWlscyB3aGVuIGFueSBvZiB0aGUgcHJvbWlzZXMgcmVzb2x2ZXMuXG4gKiBAcGFyYW0ge1Byb21pc2VbXX0gcHJvbWlzZXNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UuYWxsID0gZnVuY3Rpb24gKHByb21pc2VzKXtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVtYWluaW5nID0gcHJvbWlzZXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gW107XG5cbiAgICBpZiAocmVtYWluaW5nKSB7XG4gICAgICBwcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7XG4gICAgICAgIHAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdDtcbiAgICAgICAgICByZW1haW5pbmctLTtcbiAgICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZW1haW5pbmcgPSAwO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHJlc29sdmVyXG4gKiBAcmV0dXJucyB7e3Byb21pc2U6IFByb21pc2UsIHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gcmVzb2x2ZXJcbiAqL1xuUHJvbWlzZS5kZWZlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlc29sdmVyID0ge307XG5cbiAgcmVzb2x2ZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXNvbHZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICByZXNvbHZlci5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHJldHVybiByZXNvbHZlcjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FuY2VsbGF0aW9uIGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBDYW5jZWxsYXRpb25FcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Byb21pc2UgY2FuY2VsbGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdDYW5jZWxsYXRpb25FcnJvcic7XG5cblByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3IgPSBDYW5jZWxsYXRpb25FcnJvcjtcblxuXG4vKipcbiAqIENyZWF0ZSBhIHRpbWVvdXQgZXJyb3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWVzc2FnZV1cbiAqIEBleHRlbmRzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIFRpbWVvdXRFcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cblByb21pc2UuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICIvKipcbiAqIGVtYmVkZGVkV29ya2VyLmpzIGNvbnRhaW5zIGFuIGVtYmVkZGVkIHZlcnNpb24gb2Ygd29ya2VyLmpzLlxuICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLFxuICogY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IFwiIWZ1bmN0aW9uKCl7dmFyIF9fd2VicGFja19leHBvcnRzX189e307IWZ1bmN0aW9uKCl7dmFyIGV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO2Z1bmN0aW9uIF90eXBlb2Yocil7cmV0dXJuKF90eXBlb2Y9XFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmXFxcInN5bWJvbFxcXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/XFxcInN5bWJvbFxcXCI6dHlwZW9mIHJ9KShyKX12YXIgcmVxdWlyZUZvb2xXZWJwYWNrPWV2YWwoXFxcInR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUgOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcignTW9kdWxlIFxcXFxcXFwiICsgbW9kdWxlICsgXFxcXFxcXCIgbm90IGZvdW5kLicpIH1cXFwiKSxURVJNSU5BVEVfTUVUSE9EX0lEPVxcXCJfX3dvcmtlcnBvb2wtdGVybWluYXRlX19cXFwiLHdvcmtlcj17ZXhpdDpmdW5jdGlvbigpe319LFdvcmtlclRocmVhZHMscGFyZW50UG9ydDtpZihcXFwidW5kZWZpbmVkXFxcIiE9dHlwZW9mIHNlbGYmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIpd29ya2VyLm9uPWZ1bmN0aW9uKHIsZSl7YWRkRXZlbnRMaXN0ZW5lcihyLGZ1bmN0aW9uKHIpe2Uoci5kYXRhKX0pfSx3b3JrZXIuc2VuZD1mdW5jdGlvbihyKXtwb3N0TWVzc2FnZShyKX07ZWxzZXtpZihcXFwidW5kZWZpbmVkXFxcIj09dHlwZW9mIHByb2Nlc3MpdGhyb3cgbmV3IEVycm9yKFxcXCJTY3JpcHQgbXVzdCBiZSBleGVjdXRlZCBhcyBhIHdvcmtlclxcXCIpO3RyeXtXb3JrZXJUaHJlYWRzPXJlcXVpcmVGb29sV2VicGFjayhcXFwid29ya2VyX3RocmVhZHNcXFwiKX1jYXRjaChlcnJvcil7aWYoXFxcIm9iamVjdFxcXCIhPT1fdHlwZW9mKGVycm9yKXx8bnVsbD09PWVycm9yfHxcXFwiTU9EVUxFX05PVF9GT1VORFxcXCIhPT1lcnJvci5jb2RlKXRocm93IGVycm9yfVdvcmtlclRocmVhZHMmJm51bGwhPT1Xb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ/KHBhcmVudFBvcnQ9V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0LHdvcmtlci5zZW5kPXBhcmVudFBvcnQucG9zdE1lc3NhZ2UuYmluZChwYXJlbnRQb3J0KSx3b3JrZXIub249cGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpKTood29ya2VyLm9uPXByb2Nlc3Mub24uYmluZChwcm9jZXNzKSx3b3JrZXIuc2VuZD1wcm9jZXNzLnNlbmQuYmluZChwcm9jZXNzKSx3b3JrZXIub24oXFxcImRpc2Nvbm5lY3RcXFwiLGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KDEpfSksd29ya2VyLmV4aXQ9cHJvY2Vzcy5leGl0LmJpbmQocHJvY2VzcykpfWZ1bmN0aW9uIGNvbnZlcnRFcnJvcihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKGZ1bmN0aW9uKHIsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse3ZhbHVlOm9bZV0sZW51bWVyYWJsZTohMH0pfSx7fSl9ZnVuY3Rpb24gaXNQcm9taXNlKHIpe3JldHVybiByJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci50aGVuJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci5jYXRjaH13b3JrZXIubWV0aG9kcz17fSx3b3JrZXIubWV0aG9kcy5ydW49ZnVuY3Rpb24ocixlKXtyPW5ldyBGdW5jdGlvbihcXFwicmV0dXJuIChcXFwiK3IrXFxcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcXFwiKTtyZXR1cm4gci5hcHBseShyLGUpfSx3b3JrZXIubWV0aG9kcy5tZXRob2RzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKX07dmFyIGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbDt3b3JrZXIub24oXFxcIm1lc3NhZ2VcXFwiLGZ1bmN0aW9uKGUpe2lmKGU9PT1URVJNSU5BVEVfTUVUSE9EX0lEKXJldHVybiB3b3JrZXIuZXhpdCgwKTt0cnl7dmFyIHI9d29ya2VyLm1ldGhvZHNbZS5tZXRob2RdO2lmKCFyKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXFxcIicrZS5tZXRob2QrJ1xcXCInKTtjdXJyZW50UmVxdWVzdElkPWUuaWQ7dmFyIG89ci5hcHBseShyLGUucGFyYW1zKTtpc1Byb21pc2Uobyk/by50aGVuKGZ1bmN0aW9uKHIpe3dvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpyLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KS5jYXRjaChmdW5jdGlvbihyKXt3b3JrZXIuc2VuZCh7aWQ6ZS5pZCxyZXN1bHQ6bnVsbCxlcnJvcjpjb252ZXJ0RXJyb3Iocil9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KTood29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om8sZXJyb3I6bnVsbH0pLGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbCl9Y2F0Y2gocil7d29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKHIpfSl9fSksd29ya2VyLnJlZ2lzdGVyPWZ1bmN0aW9uKHIpe2lmKHIpZm9yKHZhciBlIGluIHIpci5oYXNPd25Qcm9wZXJ0eShlKSYmKHdvcmtlci5tZXRob2RzW2VdPXJbZV0pO3dvcmtlci5zZW5kKFxcXCJyZWFkeVxcXCIpfSx3b3JrZXIuZW1pdD1mdW5jdGlvbihyKXtjdXJyZW50UmVxdWVzdElkJiZ3b3JrZXIuc2VuZCh7aWQ6Y3VycmVudFJlcXVlc3RJZCxpc0V2ZW50OiEwLHBheWxvYWQ6cn0pfSxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fPXdvcmtlci5yZWdpc3Rlcix3b3JrZXIuZW1pdH0oKX0oKTtcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gcmVxdWlyZSgnLi9yZXF1aXJlRm9vbFdlYnBhY2snKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIGEgY2hpbGQgcHJvY2VzcyB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG4vKipcbiAqIElmIHNlbmRpbmcgYFRFUk1JTkFURV9NRVRIT0RfSURgIGRvZXMgbm90IGNhdXNlIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGV4aXQgaW4gdGhpcyBtYW55IG1pbGxpc2Vjb25kcyxcbiAqIGZvcmNlLWtpbGwgdGhlIGNoaWxkIHByb2Nlc3MuXG4gKi9cbnZhciBDSElMRF9QUk9DRVNTX0VYSVRfVElNRU9VVCA9IDEwMDA7XG5cbmZ1bmN0aW9uIGVuc3VyZVdvcmtlclRocmVhZHMoKSB7XG4gIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKVxuICBpZiAoIVdvcmtlclRocmVhZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IHdvcmtlclR5cGUgPSBcXCd0aHJlYWRcXCcgaXMgbm90IHN1cHBvcnRlZCwgTm9kZSA+PSAxMS43LjAgcmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIFdvcmtlclRocmVhZHM7XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgV29ya2VyIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlclxuZnVuY3Rpb24gZW5zdXJlV2ViV29ya2VyKCkge1xuICAvLyBXb3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBQaGFudG9tSlMgKE9yIFF0V2Via2l0KTogaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTQ1MzRcbiAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBXb3JrZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBXb3JrZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyUG9vbDogV2ViIFdvcmtlcnMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKCkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzIGF2YWlsYWJsZSAob2xkIHZlcnNpb24gb2Ygbm9kZS5qcylcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuLy8gZ2V0IHRoZSBkZWZhdWx0IHdvcmtlciBzY3JpcHRcbmZ1bmN0aW9uIGdldERlZmF1bHRXb3JrZXIoKSB7XG4gIGlmIChlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgLy8gdGVzdCB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGFsbCBmZWF0dXJlcyB0aGF0IHdlIG5lZWRcbiAgICBpZiAodHlwZW9mIEJsb2IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jsb2Igbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5VUkwgfHwgdHlwZW9mIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5jcmVhdGVPYmplY3RVUkwgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cblxuICAgIC8vIHVzZSBlbWJlZGRlZCB3b3JrZXIuanNcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXF1aXJlKCcuL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlcicpXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XG4gICAgcmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIHVzZSBleHRlcm5hbCB3b3JrZXIuanMgaW4gY3VycmVudCBkaXJlY3RvcnlcbiAgICByZXR1cm4gX19kaXJuYW1lICsgJy93b3JrZXIuanMnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwV29ya2VyKHNjcmlwdCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAnd2ViJykgeyAvLyBicm93c2VyIG9ubHlcbiAgICBlbnN1cmVXZWJXb3JrZXIoKTtcbiAgICByZXR1cm4gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7IC8vIG5vZGUuanMgb25seVxuICAgIFdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcywgb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICdwcm9jZXNzJyB8fCAhb3B0aW9ucy53b3JrZXJUeXBlKSB7IC8vIG5vZGUuanMgb25seVxuICAgIHJldHVybiBzZXR1cFByb2Nlc3NXb3JrZXIoc2NyaXB0LCByZXNvbHZlRm9ya09wdGlvbnMob3B0aW9ucyksIHJlcXVpcmVGb29sV2VicGFjaygnY2hpbGRfcHJvY2VzcycpKTtcbiAgfSBlbHNlIHsgLy8gb3B0aW9ucy53b3JrZXJUeXBlID09PSAnYXV0bycgb3IgdW5kZWZpbmVkXG4gICAgaWYgKGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnYnJvd3NlcicpIHtcbiAgICAgIGVuc3VyZVdlYldvcmtlcigpO1xuICAgICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIFdvcmtlcik7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ25vZGUnXG4gICAgICB2YXIgV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgICBpZiAoV29ya2VyVGhyZWFkcykge1xuICAgICAgICByZXR1cm4gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXIoc2NyaXB0LCBXb3JrZXJUaHJlYWRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZXR1cFByb2Nlc3NXb3JrZXIoc2NyaXB0LCByZXNvbHZlRm9ya09wdGlvbnMob3B0aW9ucyksIHJlcXVpcmVGb29sV2VicGFjaygnY2hpbGRfcHJvY2VzcycpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKSB7XG4gIC8vIGNyZWF0ZSB0aGUgd2ViIHdvcmtlclxuICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihzY3JpcHQpO1xuXG4gIHdvcmtlci5pc0Jyb3dzZXJXb3JrZXIgPSB0cnVlO1xuICAvLyBhZGQgbm9kZS5qcyBBUEkgdG8gdGhlIHdlYiB3b3JrZXJcbiAgd29ya2VyLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGNhbGxiYWNrKG1lc3NhZ2UuZGF0YSk7XG4gICAgfSk7XG4gIH07XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICB9O1xuICByZXR1cm4gd29ya2VyO1xufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMsIHdvcmtlclRocmVhZE9wdGlvbnMpIHtcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJUaHJlYWRzLldvcmtlcihzY3JpcHQsIHtcbiAgICBzdGRvdXQ6IGZhbHNlLCAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNURE9VVCB0byBwcm9jZXNzLlNURE9VVFxuICAgIHN0ZGVycjogZmFsc2UsICAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNUREVSUiB0byBwcm9jZXNzLlNUREVSUlxuICAgIC4uLndvcmtlclRocmVhZE9wdGlvbnNcbiAgfSk7XG4gIHdvcmtlci5pc1dvcmtlclRocmVhZCA9IHRydWU7XG4gIC8vIG1ha2UgdGhlIHdvcmtlciBtaW1pYyBhIGNoaWxkX3Byb2Nlc3NcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcblxuICB3b3JrZXIua2lsbCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgd29ya2VyLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZSgpO1xuICB9O1xuXG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIG9wdGlvbnMsIGNoaWxkX3Byb2Nlc3MpIHtcbiAgLy8gbm8gV29ya2VyVGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICB2YXIgd29ya2VyID0gY2hpbGRfcHJvY2Vzcy5mb3JrKFxuICAgIHNjcmlwdCxcbiAgICBvcHRpb25zLmZvcmtBcmdzLFxuICAgIG9wdGlvbnMuZm9ya09wdHNcbiAgKTtcblxuICB3b3JrZXIuaXNDaGlsZFByb2Nlc3MgPSB0cnVlO1xuICByZXR1cm4gd29ya2VyO1xufVxuXG4vLyBhZGQgZGVidWcgZmxhZ3MgdG8gY2hpbGQgcHJvY2Vzc2VzIGlmIHRoZSBub2RlIGluc3BlY3RvciBpcyBhY3RpdmVcbmZ1bmN0aW9uIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBwcm9jZXNzRXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oJyAnKTtcbiAgdmFyIGluc3BlY3RvckFjdGl2ZSA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWluc3BlY3QnKSAhPT0gLTE7XG4gIHZhciBkZWJ1Z0JyayA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWRlYnVnLWJyaycpICE9PSAtMTtcblxuICB2YXIgZXhlY0FyZ3YgPSBbXTtcbiAgaWYgKGluc3BlY3RvckFjdGl2ZSkge1xuICAgIGV4ZWNBcmd2LnB1c2goJy0taW5zcGVjdD0nICsgb3B0cy5kZWJ1Z1BvcnQpO1xuXG4gICAgaWYgKGRlYnVnQnJrKSB7XG4gICAgICBleGVjQXJndi5wdXNoKCctLWRlYnVnLWJyaycpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZXhlY0FyZ3YuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAoYXJnLmluZGV4T2YoJy0tbWF4LW9sZC1zcGFjZS1zaXplJykgPiAtMSkge1xuICAgICAgZXhlY0FyZ3YucHVzaChhcmcpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgZm9ya0FyZ3M6IG9wdHMuZm9ya0FyZ3MsXG4gICAgZm9ya09wdHM6IE9iamVjdC5hc3NpZ24oe30sIG9wdHMuZm9ya09wdHMsIHtcbiAgICAgIGV4ZWNBcmd2OiAob3B0cy5mb3JrT3B0cyAmJiBvcHRzLmZvcmtPcHRzLmV4ZWNBcmd2IHx8IFtdKVxuICAgICAgLmNvbmNhdChleGVjQXJndilcbiAgICB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNlcmlhbGl6ZWQgZXJyb3IgdG8gRXJyb3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogRXJyb3IgdGhhdCBoYXMgYmVlbiBzZXJpYWxpemVkIGFuZCBwYXJzZWQgdG8gb2JqZWN0XG4gKiBAcmV0dXJuIHtFcnJvcn0gVGhlIGVxdWl2YWxlbnQgRXJyb3IuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvRXJyb3IgKG9iaikge1xuICB2YXIgdGVtcCA9IG5ldyBFcnJvcignJylcbiAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB0ZW1wW3Byb3BzW2ldXSA9IG9ialtwcm9wc1tpXV1cbiAgfVxuXG4gIHJldHVybiB0ZW1wXG59XG5cbi8qKlxuICogQSBXb3JrZXJIYW5kbGVyIGNvbnRyb2xzIGEgc2luZ2xlIHdvcmtlci4gVGhpcyB3b3JrZXIgY2FuIGJlIGEgY2hpbGQgcHJvY2Vzc1xuICogb24gbm9kZS5qcyBvciBhIFdlYldvcmtlciBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1N0cmluZ30gW3NjcmlwdF0gSWYgbm8gc2NyaXB0IGlzIHByb3ZpZGVkLCBhIGRlZmF1bHQgd29ya2VyIHdpdGggYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1biB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBfb3B0aW9ucyBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdvcmtlckhhbmRsZXIoc2NyaXB0LCBfb3B0aW9ucykge1xuICB2YXIgbWUgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IGdldERlZmF1bHRXb3JrZXIoKTtcbiAgdGhpcy53b3JrZXIgPSBzZXR1cFdvcmtlcih0aGlzLnNjcmlwdCwgb3B0aW9ucyk7XG4gIHRoaXMuZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQ7XG4gIHRoaXMuZm9ya09wdHMgPSBvcHRpb25zLmZvcmtPcHRzO1xuICB0aGlzLmZvcmtBcmdzID0gb3B0aW9ucy5mb3JrQXJncztcbiAgdGhpcy53b3JrZXJUaHJlYWRPcHRzID0gb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzXG5cbiAgLy8gVGhlIHJlYWR5IG1lc3NhZ2UgaXMgb25seSBzZW50IGlmIHRoZSB3b3JrZXIuYWRkIG1ldGhvZCBpcyBjYWxsZWQgKEFuZCB0aGUgZGVmYXVsdCBzY3JpcHQgaXMgbm90IHVzZWQpXG4gIGlmICghc2NyaXB0KSB7XG4gICAgdGhpcy53b3JrZXIucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLy8gcXVldWUgZm9yIHJlcXVlc3RzIHRoYXQgYXJlIHJlY2VpdmVkIGJlZm9yZSB0aGUgd29ya2VyIGlzIHJlYWR5XG4gIHRoaXMucmVxdWVzdFF1ZXVlID0gW107XG4gIHRoaXMud29ya2VyLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgaWYgKG1lLnRlcm1pbmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgJiYgcmVzcG9uc2UgPT09ICdyZWFkeScpIHtcbiAgICAgIG1lLndvcmtlci5yZWFkeSA9IHRydWU7XG4gICAgICBkaXNwYXRjaFF1ZXVlZFJlcXVlc3RzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpbmQgdGhlIHRhc2sgZnJvbSB0aGUgcHJvY2Vzc2luZyBxdWV1ZSwgYW5kIHJ1biB0aGUgdGFza3MgY2FsbGJhY2tcbiAgICAgIHZhciBpZCA9IHJlc3BvbnNlLmlkO1xuICAgICAgdmFyIHRhc2sgPSBtZS5wcm9jZXNzaW5nW2lkXTtcbiAgICAgIGlmICh0YXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXZlbnQpIHtcbiAgICAgICAgICBpZiAodGFzay5vcHRpb25zICYmIHR5cGVvZiB0YXNrLm9wdGlvbnMub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRhc2sub3B0aW9ucy5vbihyZXNwb25zZS5wYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSB0YXNrIGZyb20gdGhlIHF1ZXVlXG4gICAgICAgICAgZGVsZXRlIG1lLnByb2Nlc3NpbmdbaWRdO1xuXG4gICAgICAgICAgLy8gdGVzdCBpZiB3ZSBuZWVkIHRvIHRlcm1pbmF0ZVxuICAgICAgICAgIGlmIChtZS50ZXJtaW5hdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gY29tcGxldGUgd29ya2VyIHRlcm1pbmF0aW9uIGlmIGFsbCB0YXNrcyBhcmUgZmluaXNoZWRcbiAgICAgICAgICAgIG1lLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlc29sdmUgdGhlIHRhc2sncyBwcm9taXNlXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmVyLnJlamVjdChvYmplY3RUb0Vycm9yKHJlc3BvbnNlLmVycm9yKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFzay5yZXNvbHZlci5yZXNvbHZlKHJlc3BvbnNlLnJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyByZWplY3QgYWxsIHJ1bm5pbmcgdGFza3Mgb24gd29ya2VyIGVycm9yXG4gIGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICBtZS50ZXJtaW5hdGVkID0gdHJ1ZTtcblxuICAgIGZvciAodmFyIGlkIGluIG1lLnByb2Nlc3NpbmcpIHtcbiAgICAgIGlmIChtZS5wcm9jZXNzaW5nW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lLnByb2Nlc3NpbmdbaWRdLnJlc29sdmVyLnJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIG1lLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgLy8gc2VuZCBhbGwgcXVldWVkIHJlcXVlc3RzIHRvIHdvcmtlclxuICBmdW5jdGlvbiBkaXNwYXRjaFF1ZXVlZFJlcXVlc3RzKClcbiAge1xuICAgIGZvcihjb25zdCByZXF1ZXN0IG9mIG1lLnJlcXVlc3RRdWV1ZS5zcGxpY2UoMCkpIHtcbiAgICAgIG1lLndvcmtlci5zZW5kKHJlcXVlc3QpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB3b3JrZXIgPSB0aGlzLndvcmtlcjtcbiAgLy8gbGlzdGVuIGZvciB3b3JrZXIgbWVzc2FnZXMgZXJyb3IgYW5kIGV4aXRcbiAgdGhpcy53b3JrZXIub24oJ2Vycm9yJywgb25FcnJvcik7XG4gIHRoaXMud29ya2VyLm9uKCdleGl0JywgZnVuY3Rpb24gKGV4aXRDb2RlLCBzaWduYWxDb2RlKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV29ya2VycG9vbCBXb3JrZXIgdGVybWluYXRlZCBVbmV4cGVjdGVkbHlcXG4nO1xuXG4gICAgbWVzc2FnZSArPSAnICAgIGV4aXRDb2RlOiBgJyArIGV4aXRDb2RlICsgJ2BcXG4nO1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzaWduYWxDb2RlOiBgJyArIHNpZ25hbENvZGUgKyAnYFxcbic7XG5cbiAgICBtZXNzYWdlICs9ICcgICAgd29ya2VycG9vbC5zY3JpcHQ6IGAnICsgIG1lLnNjcmlwdCArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc3Bhd25BcmdzOiBgJyArICB3b3JrZXIuc3Bhd25hcmdzICsgJ2BcXG4nO1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzcGF3bmZpbGU6IGAnICsgd29ya2VyLnNwYXduZmlsZSArICdgXFxuJ1xuXG4gICAgbWVzc2FnZSArPSAnICAgIHN0ZG91dDogYCcgKyB3b3JrZXIuc3Rkb3V0ICsgJ2BcXG4nXG4gICAgbWVzc2FnZSArPSAnICAgIHN0ZGVycjogYCcgKyB3b3JrZXIuc3RkZXJyICsgJ2BcXG4nXG5cbiAgICBvbkVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gIH0pO1xuXG4gIHRoaXMucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7IC8vIHF1ZXVlIHdpdGggdGFza3MgY3VycmVudGx5IGluIHByb2dyZXNzXG5cbiAgdGhpcy50ZXJtaW5hdGluZyA9IGZhbHNlO1xuICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGlvbkhhbmRsZXIgPSBudWxsO1xuICB0aGlzLmxhc3RJZCA9IDA7XG59XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxTdHJpbmdbXSwgRXJyb3I+fSBtZXRob2RzXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLm1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZSBhIG1ldGhvZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMgb24gdGhlIHdvcmtlclxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtBcnJheX0gW3BhcmFtc11cbiAqIEBwYXJhbSB7e3Jlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gW3Jlc29sdmVyXVxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gIFtvcHRpb25zXVxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKG1ldGhvZCwgcGFyYW1zLCByZXNvbHZlciwgb3B0aW9ucykge1xuICBpZiAoIXJlc29sdmVyKSB7XG4gICAgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIH1cblxuICAvLyBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHRhc2tcbiAgdmFyIGlkID0gKyt0aGlzLmxhc3RJZDtcblxuICAvLyByZWdpc3RlciBhIG5ldyB0YXNrIGFzIGJlaW5nIGluIHByb2dyZXNzXG4gIHRoaXMucHJvY2Vzc2luZ1tpZF0gPSB7XG4gICAgaWQ6IGlkLFxuICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG5cbiAgLy8gYnVpbGQgYSBKU09OLVJQQyByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIGlkOiBpZCxcbiAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICBwYXJhbXM6IHBhcmFtc1xuICB9O1xuXG4gIGlmICh0aGlzLnRlcm1pbmF0ZWQpIHtcbiAgICByZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgaXMgdGVybWluYXRlZCcpKTtcbiAgfSBlbHNlIGlmICh0aGlzLndvcmtlci5yZWFkeSkge1xuICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHdvcmtlclxuICAgIHRoaXMud29ya2VyLnNlbmQocmVxdWVzdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXF1ZXN0UXVldWUucHVzaChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIG9uIGNhbmNlbGxhdGlvbiwgZm9yY2UgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGVcbiAgdmFyIG1lID0gdGhpcztcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUHJvbWlzZS5DYW5jZWxsYXRpb25FcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFByb21pc2UuVGltZW91dEVycm9yKSB7XG4gICAgICAvLyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHF1ZXVlLiBJdCBpcyBhbHJlYWR5IHJlamVjdGVkIChoZW5jZSB0aGlzXG4gICAgICAvLyBjYXRjaCBldmVudCksIGFuZCBlbHNlIGl0IHdpbGwgYmUgcmVqZWN0ZWQgYWdhaW4gd2hlbiB0ZXJtaW5hdGluZ1xuICAgICAgZGVsZXRlIG1lLnByb2Nlc3NpbmdbaWRdO1xuXG4gICAgICAvLyB0ZXJtaW5hdGUgd29ya2VyXG4gICAgICByZXR1cm4gbWUudGVybWluYXRlQW5kTm90aWZ5KHRydWUpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pXG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgd29ya2VyIGlzIHdvcmtpbmcgb3Igbm90XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIHdvcmtlciBpcyBidXN5XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLmJ1c3kgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnByb2Nlc3NpbmcpLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFRlcm1pbmF0ZSB0aGUgd29ya2VyLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VyIGlzIHRlcm1pbmF0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MgY3VycmVudGx5IGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy4gSWYgdHJ1ZSwgdGhlIHdvcmtlciB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrPW51bGxdIElmIHByb3ZpZGVkLCB3aWxsIGJlIGNhbGxlZCB3aGVuIHByb2Nlc3MgdGVybWluYXRlcy5cbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUudGVybWluYXRlID0gZnVuY3Rpb24gKGZvcmNlLCBjYWxsYmFjaykge1xuICB2YXIgbWUgPSB0aGlzO1xuICBpZiAoZm9yY2UpIHtcbiAgICAvLyBjYW5jZWwgYWxsIHRhc2tzIGluIHByb2dyZXNzXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5wcm9jZXNzaW5nKSB7XG4gICAgICBpZiAodGhpcy5wcm9jZXNzaW5nW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1tpZF0ucmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHRlcm1pbmF0ZWQnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy50ZXJtaW5hdGlvbkhhbmRsZXIgPSBjYWxsYmFjaztcbiAgfVxuICBpZiAoIXRoaXMuYnVzeSgpKSB7XG4gICAgLy8gYWxsIHRhc2tzIGFyZSBmaW5pc2hlZC4ga2lsbCB0aGUgd29ya2VyXG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG1lLnRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgaWYgKG1lLndvcmtlciAhPSBudWxsICYmIG1lLndvcmtlci5yZW1vdmVBbGxMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gcmVtb3ZlQWxsTGlzdGVuZXJzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBjaGlsZF9wcm9jZXNzXG4gICAgICAgIG1lLndvcmtlci5yZW1vdmVBbGxMaXN0ZW5lcnMoJ21lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICAgIG1lLndvcmtlciA9IG51bGw7XG4gICAgICBtZS50ZXJtaW5hdGluZyA9IGZhbHNlO1xuICAgICAgaWYgKG1lLnRlcm1pbmF0aW9uSGFuZGxlcikge1xuICAgICAgICBtZS50ZXJtaW5hdGlvbkhhbmRsZXIoZXJyLCBtZSk7XG4gICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud29ya2VyKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMud29ya2VyLmtpbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKHRoaXMud29ya2VyLmtpbGxlZCkge1xuICAgICAgICAgIGNsZWFudXAobmV3IEVycm9yKCd3b3JrZXIgYWxyZWFkeSBraWxsZWQhJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndvcmtlci5pc0NoaWxkUHJvY2Vzcykge1xuICAgICAgICAgIHZhciBjbGVhbkV4aXRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChtZS53b3JrZXIpIHtcbiAgICAgICAgICAgICAgbWUud29ya2VyLmtpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBDSElMRF9QUk9DRVNTX0VYSVRfVElNRU9VVCk7XG5cbiAgICAgICAgICB0aGlzLndvcmtlci5vbmNlKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoY2xlYW5FeGl0VGltZW91dCk7XG4gICAgICAgICAgICBpZiAobWUud29ya2VyKSB7XG4gICAgICAgICAgICAgIG1lLndvcmtlci5raWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMud29ya2VyLnJlYWR5KSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlci5zZW5kKFRFUk1JTkFURV9NRVRIT0RfSUQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKFRFUk1JTkFURV9NRVRIT0RfSUQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdvcmtlcl90aHJlYWRcbiAgICAgICAgICB0aGlzLndvcmtlci5raWxsKCk7XG4gICAgICAgICAgdGhpcy53b3JrZXIua2lsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMud29ya2VyLnRlcm1pbmF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTsgLy8gd2ViIHdvcmtlclxuICAgICAgICB0aGlzLndvcmtlci5raWxsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRlcm1pbmF0ZSB3b3JrZXInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIHdlIGNhbid0IHRlcm1pbmF0ZSBpbW1lZGlhdGVseSwgdGhlcmUgYXJlIHN0aWxsIHRhc2tzIGJlaW5nIGV4ZWN1dGVkXG4gICAgdGhpcy50ZXJtaW5hdGluZyA9IHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogVGVybWluYXRlIHRoZSB3b3JrZXIsIHJldHVybmluZyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXJtaW5hdGlvbiBoYXMgYmVlbiBkb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VyIGlzIHRlcm1pbmF0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MgY3VycmVudGx5IGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy4gSWYgdHJ1ZSwgdGhlIHdvcmtlciB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XSAgICAgICAgSWYgcHJvdmlkZWQgYW5kIG5vbi16ZXJvLCB3b3JrZXIgdGVybWluYXRpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aW1lb3V0IGlmIHdvcmtlciBwcm9jZXNzIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkLlxuICogQHJldHVybiB7UHJvbWlzZS48V29ya2VySGFuZGxlciwgRXJyb3I+fVxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS50ZXJtaW5hdGVBbmROb3RpZnkgPSBmdW5jdGlvbiAoZm9yY2UsIHRpbWVvdXQpIHtcbiAgdmFyIHJlc29sdmVyID0gUHJvbWlzZS5kZWZlcigpO1xuICBpZiAodGltZW91dCkge1xuICAgIHJlc29sdmVyLnByb21pc2UudGltZW91dCA9IHRpbWVvdXQ7XG4gIH1cbiAgdGhpcy50ZXJtaW5hdGUoZm9yY2UsIGZ1bmN0aW9uKGVyciwgd29ya2VyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmVzb2x2ZXIucmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVyLnJlc29sdmUod29ya2VyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gV29ya2VySGFuZGxlcjtcbm1vZHVsZS5leHBvcnRzLl90cnlSZXF1aXJlV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwUHJvY2Vzc1dvcmtlciA9IHNldHVwUHJvY2Vzc1dvcmtlcjtcbm1vZHVsZS5leHBvcnRzLl9zZXR1cEJyb3dzZXJXb3JrZXIgPSBzZXR1cEJyb3dzZXJXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXIgPSBzZXR1cFdvcmtlclRocmVhZFdvcmtlcjtcbm1vZHVsZS5leHBvcnRzLmVuc3VyZVdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9QT1JUUyA9IDY1NTM1O1xubW9kdWxlLmV4cG9ydHMgPSBEZWJ1Z1BvcnRBbGxvY2F0b3I7XG5mdW5jdGlvbiBEZWJ1Z1BvcnRBbGxvY2F0b3IoKSB7XG4gIHRoaXMucG9ydHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG59XG5cbkRlYnVnUG9ydEFsbG9jYXRvci5wcm90b3R5cGUubmV4dEF2YWlsYWJsZVN0YXJ0aW5nQXQgPSBmdW5jdGlvbihzdGFydGluZykge1xuICB3aGlsZSAodGhpcy5wb3J0c1tzdGFydGluZ10gPT09IHRydWUpIHtcbiAgICBzdGFydGluZysrO1xuICB9XG5cbiAgaWYgKHN0YXJ0aW5nID49IE1BWF9QT1JUUykge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyUG9vbCBkZWJ1ZyBwb3J0IGxpbWl0IHJlYWNoZWQ6ICcgKyBzdGFydGluZyArICc+PSAnICsgTUFYX1BPUlRTICk7XG4gIH1cblxuICB0aGlzLnBvcnRzW3N0YXJ0aW5nXSA9IHRydWU7XG4gIHRoaXMubGVuZ3RoKys7XG4gIHJldHVybiBzdGFydGluZztcbn07XG5cbkRlYnVnUG9ydEFsbG9jYXRvci5wcm90b3R5cGUucmVsZWFzZVBvcnQgPSBmdW5jdGlvbihwb3J0KSB7XG4gIGRlbGV0ZSB0aGlzLnBvcnRzW3BvcnRdO1xuICB0aGlzLmxlbmd0aC0tO1xufTtcblxuIiwgInZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgV29ya2VySGFuZGxlciA9IHJlcXVpcmUoJy4vV29ya2VySGFuZGxlcicpO1xudmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xudmFyIERlYnVnUG9ydEFsbG9jYXRvciA9IHJlcXVpcmUoJy4vZGVidWctcG9ydC1hbGxvY2F0b3InKTtcbnZhciBERUJVR19QT1JUX0FMTE9DQVRPUiA9IG5ldyBEZWJ1Z1BvcnRBbGxvY2F0b3IoKTtcbi8qKlxuICogQSBwb29sIHRvIG1hbmFnZSB3b3JrZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gW3NjcmlwdF0gICBPcHRpb25hbCB3b3JrZXIgc2NyaXB0XG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBbb3B0aW9uc10gIFNlZSBkb2NzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUG9vbChzY3JpcHQsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzY3JpcHQgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5zY3JpcHQgPSBzY3JpcHQgfHwgbnVsbDtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gICAgb3B0aW9ucyA9IHNjcmlwdDtcbiAgfVxuXG4gIHRoaXMud29ya2VycyA9IFtdOyAgLy8gcXVldWUgd2l0aCBhbGwgd29ya2Vyc1xuICB0aGlzLnRhc2tzID0gW107ICAgIC8vIHF1ZXVlIHdpdGggdGFza3MgYXdhaXRpbmcgZXhlY3V0aW9uXG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy5mb3JrQXJncyA9IE9iamVjdC5mcmVlemUob3B0aW9ucy5mb3JrQXJncyB8fCBbXSk7XG4gIHRoaXMuZm9ya09wdHMgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMuZm9ya09wdHMgfHwge30pO1xuICB0aGlzLndvcmtlclRocmVhZE9wdHMgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMud29ya2VyVGhyZWFkT3B0cyB8fCB7fSlcbiAgdGhpcy5kZWJ1Z1BvcnRTdGFydCA9IChvcHRpb25zLmRlYnVnUG9ydFN0YXJ0IHx8IDQzMjEwKTtcbiAgdGhpcy5ub2RlV29ya2VyID0gb3B0aW9ucy5ub2RlV29ya2VyO1xuICB0aGlzLndvcmtlclR5cGUgPSBvcHRpb25zLndvcmtlclR5cGUgfHwgb3B0aW9ucy5ub2RlV29ya2VyIHx8ICdhdXRvJ1xuICB0aGlzLm1heFF1ZXVlU2l6ZSA9IG9wdGlvbnMubWF4UXVldWVTaXplIHx8IEluZmluaXR5O1xuXG4gIHRoaXMub25DcmVhdGVXb3JrZXIgPSBvcHRpb25zLm9uQ3JlYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcbiAgdGhpcy5vblRlcm1pbmF0ZVdvcmtlciA9IG9wdGlvbnMub25UZXJtaW5hdGVXb3JrZXIgfHwgKCgpID0+IG51bGwpO1xuXG4gIC8vIGNvbmZpZ3VyYXRpb25cbiAgaWYgKG9wdGlvbnMgJiYgJ21heFdvcmtlcnMnIGluIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU1heFdvcmtlcnMob3B0aW9ucy5tYXhXb3JrZXJzKTtcbiAgICB0aGlzLm1heFdvcmtlcnMgPSBvcHRpb25zLm1heFdvcmtlcnM7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gTWF0aC5tYXgoKGVudmlyb25tZW50LmNwdXMgfHwgNCkgLSAxLCAxKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICYmICdtaW5Xb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgaWYob3B0aW9ucy5taW5Xb3JrZXJzID09PSAnbWF4Jykge1xuICAgICAgdGhpcy5taW5Xb3JrZXJzID0gdGhpcy5tYXhXb3JrZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZU1pbldvcmtlcnMob3B0aW9ucy5taW5Xb3JrZXJzKTtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IG9wdGlvbnMubWluV29ya2VycztcbiAgICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KHRoaXMubWluV29ya2VycywgdGhpcy5tYXhXb3JrZXJzKTsgICAgIC8vIGluIGNhc2UgbWluV29ya2VycyBpcyBoaWdoZXIgdGhhbiBtYXhXb3JrZXJzXG4gICAgfVxuICAgIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kTmV4dCA9IHRoaXMuX25leHQuYmluZCh0aGlzKTtcblxuXG4gIGlmICh0aGlzLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7XG4gICAgV29ya2VySGFuZGxlci5lbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBmdW5jdGlvbiBvbiBhIHdvcmtlci5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICpcbiAqICAgdmFyIHBvb2wgPSBuZXcgUG9vbCgpXG4gKlxuICogICAvLyBjYWxsIGEgZnVuY3Rpb24gYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXJcbiAqICAgcG9vbC5leGVjKCdmaWJvbmFjY2knLCBbNl0pXG4gKlxuICogICAvLyBvZmZsb2FkIGEgZnVuY3Rpb25cbiAqICAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAqICAgICByZXR1cm4gYSArIGJcbiAqICAgfTtcbiAqICAgcG9vbC5leGVjKGFkZCwgWzIsIDRdKVxuICogICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyBvdXRwdXRzIDZcbiAqICAgICAgIH0pXG4gKiAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICogICAgICAgfSk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmcgfCBGdW5jdGlvbn0gbWV0aG9kICBGdW5jdGlvbiBuYW1lIG9yIGZ1bmN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIHN0cmluZywgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG9uIHRoZSB3b3JrZXIgd2lsbCBiZSBleGVjdXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIEZ1bmN0aW9uLCB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzdHJpbmdpZmllZCBhbmQgZXhlY3V0ZWQgdmlhIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIGJ1aWx0LWluIGZ1bmN0aW9uIGBydW4oZm4sIGFyZ3MpYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbXNdICBGdW5jdGlvbiBhcmd1bWVudHMgYXBwbGllZCB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSBbb3B0aW9uc10gIE9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJuIHtQcm9taXNlLjwqLCBFcnJvcj59IHJlc3VsdFxuICovXG5Qb29sLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKG1ldGhvZCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8vIHZhbGlkYXRlIHR5cGUgb2YgYXJndW1lbnRzXG4gIGlmIChwYXJhbXMgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwicGFyYW1zXCInKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgIHZhciByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcblxuICAgIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+PSB0aGlzLm1heFF1ZXVlU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXggcXVldWUgc2l6ZSBvZiAnICsgdGhpcy5tYXhRdWV1ZVNpemUgKyAnIHJlYWNoZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBuZXcgdGFzayB0byB0aGUgcXVldWVcbiAgICB2YXIgdGFza3MgPSB0aGlzLnRhc2tzO1xuICAgIHZhciB0YXNrID0ge1xuICAgICAgbWV0aG9kOiAgbWV0aG9kLFxuICAgICAgcGFyYW1zOiAgcGFyYW1zLFxuICAgICAgcmVzb2x2ZXI6IHJlc29sdmVyLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9O1xuICAgIHRhc2tzLnB1c2godGFzayk7XG5cbiAgICAvLyByZXBsYWNlIHRoZSB0aW1lb3V0IG1ldGhvZCBvZiB0aGUgUHJvbWlzZSB3aXRoIG91ciBvd24sXG4gICAgLy8gd2hpY2ggc3RhcnRzIHRoZSB0aW1lciBhcyBzb29uIGFzIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHN0YXJ0ZWRcbiAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0O1xuICAgIHJlc29sdmVyLnByb21pc2UudGltZW91dCA9IGZ1bmN0aW9uIHRpbWVvdXQgKGRlbGF5KSB7XG4gICAgICBpZiAodGFza3MuaW5kZXhPZih0YXNrKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gdGFzayBpcyBzdGlsbCBxdWV1ZWQgLT4gc3RhcnQgdGhlIHRpbWVyIGxhdGVyIG9uXG4gICAgICAgIHRhc2sudGltZW91dCA9IGRlbGF5O1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyB0YXNrIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQgLT4gc3RhcnQgdGltZXIgaW1tZWRpYXRlbHlcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dC5jYWxsKHJlc29sdmVyLnByb21pc2UsIGRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdHJpZ2dlciB0YXNrIGV4ZWN1dGlvblxuICAgIHRoaXMuX25leHQoKTtcblxuICAgIHJldHVybiByZXNvbHZlci5wcm9taXNlO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBzZW5kIHN0cmluZ2lmaWVkIGZ1bmN0aW9uIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgdG8gd29ya2VyXG4gICAgcmV0dXJuIHRoaXMuZXhlYygncnVuJywgW1N0cmluZyhtZXRob2QpLCBwYXJhbXNdKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgYXJndW1lbnQgXCJtZXRob2RcIicpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHByb3h5IGZvciBjdXJyZW50IHdvcmtlci4gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGxcbiAqIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuIFRoZSBtZXRob2RzIGFsd2F5cyByZXR1cm4gYSBwcm9taXNlLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2UuPE9iamVjdCwgRXJyb3I+fSBwcm94eVxuICovXG5Qb29sLnByb3RvdHlwZS5wcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhcmd1bWVudHMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHZhciBwb29sID0gdGhpcztcbiAgcmV0dXJuIHRoaXMuZXhlYygnbWV0aG9kcycpXG4gICAgICAudGhlbihmdW5jdGlvbiAobWV0aG9kcykge1xuICAgICAgICB2YXIgcHJveHkgPSB7fTtcblxuICAgICAgICBtZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgIHByb3h5W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9vbC5leGVjKG1ldGhvZCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBhcnJheS5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgRnVuY3Rpb24gdGFraW5nIHR3byBhcmd1bWVudHM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxiYWNrKGN1cnJlbnRWYWx1ZSwgaW5kZXgpYFxuICogQHJldHVybiB7UHJvbWlzZS48QXJyYXk+fSBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyAgd2l0aCBhbiBBcnJheVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgYXJyYXkgZWxlbWVudHMuXG4gKi9cbi8qIFRPRE86IGltcGxlbWVudCBtYXBcblBvb2wucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChhcnJheSwgY2FsbGJhY2spIHtcbn07XG4qL1xuXG4vKipcbiAqIEdyYWIgdGhlIGZpcnN0IHRhc2sgZnJvbSB0aGUgcXVldWUsIGZpbmQgYSBmcmVlIHdvcmtlciwgYW5kIGFzc2lnbiB0aGVcbiAqIHdvcmtlciB0byB0aGUgdGFzay5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAvLyB0aGVyZSBhcmUgdGFza3MgaW4gdGhlIHF1ZXVlXG5cbiAgICAvLyBmaW5kIGFuIGF2YWlsYWJsZSB3b3JrZXJcbiAgICB2YXIgd29ya2VyID0gdGhpcy5fZ2V0V29ya2VyKCk7XG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgLy8gZ2V0IHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlXG4gICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgdmFyIHRhc2sgPSB0aGlzLnRhc2tzLnNoaWZ0KCk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSB0YXNrIGlzIHN0aWxsIHBlbmRpbmcgKGFuZCBub3QgY2FuY2VsbGVkIC0+IHByb21pc2UgcmVqZWN0ZWQpXG4gICAgICBpZiAodGFzay5yZXNvbHZlci5wcm9taXNlLnBlbmRpbmcpIHtcbiAgICAgICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgd29ya2VyXG4gICAgICAgIHZhciBwcm9taXNlID0gd29ya2VyLmV4ZWModGFzay5tZXRob2QsIHRhc2sucGFyYW1zLCB0YXNrLnJlc29sdmVyLCB0YXNrLm9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4obWUuX2JvdW5kTmV4dClcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHdvcmtlciBjcmFzaGVkIGFuZCB0ZXJtaW5hdGVkLCByZW1vdmUgaXQgZnJvbSB0aGUgcG9vbFxuICAgICAgICAgICAgaWYgKHdvcmtlci50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZS5fcmVtb3ZlV29ya2VyKHdvcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG1lLl9uZXh0KCk7IC8vIHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHN0YXJ0IHF1ZXVlZCB0aW1lciBub3dcbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrLnRpbWVvdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcHJvbWlzZS50aW1lb3V0KHRhc2sudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0YXNrIHRha2VuIHdhcyBhbHJlYWR5IGNvbXBsZXRlIChlaXRoZXIgcmVqZWN0ZWQgb3IgcmVzb2x2ZWQpLCBzbyBqdXN0IHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICBtZS5fbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYW4gYXZhaWxhYmxlIHdvcmtlci4gSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSBhbmQgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiB3b3JrZXJzIGlzbid0IHlldCByZWFjaGVkLCBhIG5ldyB3b3JrZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIGlzIHJlYWNoZWQsXG4gKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHJldHVybiB7V29ya2VySGFuZGxlciB8IG51bGx9IHdvcmtlclxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2dldFdvcmtlciA9IGZ1bmN0aW9uKCkge1xuICAvLyBmaW5kIGEgbm9uLWJ1c3kgd29ya2VyXG4gIHZhciB3b3JrZXJzID0gdGhpcy53b3JrZXJzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgd29ya2VyID0gd29ya2Vyc1tpXTtcbiAgICBpZiAod29ya2VyLmJ1c3koKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtlcnMubGVuZ3RoIDwgdGhpcy5tYXhXb3JrZXJzKSB7XG4gICAgLy8gY3JlYXRlIGEgbmV3IHdvcmtlclxuICAgIHdvcmtlciA9IHRoaXMuX2NyZWF0ZVdvcmtlckhhbmRsZXIoKTtcbiAgICB3b3JrZXJzLnB1c2god29ya2VyKTtcbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sLlxuICogQXR0ZW1wdHMgdG8gdGVybWluYXRlIHdvcmtlciBpZiBub3QgYWxyZWFkeSB0ZXJtaW5hdGVkLCBhbmQgZW5zdXJlcyB0aGUgbWluaW11bVxuICogcG9vbCBzaXplIGlzIG1ldC5cbiAqIEBwYXJhbSB7V29ya2VySGFuZGxlcn0gd29ya2VyXG4gKiBAcmV0dXJuIHtQcm9taXNlPFdvcmtlckhhbmRsZXI+fVxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyID0gZnVuY3Rpb24od29ya2VyKSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgREVCVUdfUE9SVF9BTExPQ0FUT1IucmVsZWFzZVBvcnQod29ya2VyLmRlYnVnUG9ydCk7XG4gIC8vIF9yZW1vdmVXb3JrZXIgd2lsbCBjYWxsIHRoaXMsIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHJlbW92ZWQgc3luY2hyb25vdXNseVxuICB0aGlzLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCh3b3JrZXIpO1xuICAvLyBJZiBtaW5Xb3JrZXJzIHNldCwgc3BpbiB1cCBuZXcgd29ya2VycyB0byByZXBsYWNlIHRoZSBjcmFzaGVkIG9uZXNcbiAgdGhpcy5fZW5zdXJlTWluV29ya2VycygpO1xuICAvLyB0ZXJtaW5hdGUgdGhlIHdvcmtlciAoaWYgbm90IGFscmVhZHkgdGVybWluYXRlZClcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHdvcmtlci50ZXJtaW5hdGUoZmFsc2UsIGZ1bmN0aW9uKGVycikge1xuICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICBmb3JrQXJnczogd29ya2VyLmZvcmtBcmdzLFxuICAgICAgICBmb3JrT3B0czogd29ya2VyLmZvcmtPcHRzLFxuICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgIH0pO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUod29ya2VyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sIGxpc3QuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyRnJvbUxpc3QgPSBmdW5jdGlvbih3b3JrZXIpIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIGxpc3Qgd2l0aCB3b3JrZXJzXG4gIHZhciBpbmRleCA9IHRoaXMud29ya2Vycy5pbmRleE9mKHdvcmtlcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLndvcmtlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbG9zZSBhbGwgYWN0aXZlIHdvcmtlcnMuIFRhc2tzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCB3aWxsIGJlIGZpbmlzaGVkIGZpcnN0LlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VycyBhcmUgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VycyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XSAgICAgICAgSWYgcHJvdmlkZWQgYW5kIG5vbi16ZXJvLCB3b3JrZXIgdGVybWluYXRpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aW1lb3V0IGlmIHdvcmtlciBwcm9jZXNzIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkLlxuICogQHJldHVybiB7UHJvbWlzZS48dm9pZCwgRXJyb3I+fVxuICovXG5Qb29sLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoZm9yY2UsIHRpbWVvdXQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICAvLyBjYW5jZWwgYW55IHBlbmRpbmcgdGFza3NcbiAgdGhpcy50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgdGFzay5yZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdQb29sIHRlcm1pbmF0ZWQnKSk7XG4gIH0pO1xuICB0aGlzLnRhc2tzLmxlbmd0aCA9IDA7XG5cbiAgdmFyIGYgPSBmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgREVCVUdfUE9SVF9BTExPQ0FUT1IucmVsZWFzZVBvcnQod29ya2VyLmRlYnVnUG9ydCk7XG4gICAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgfTtcbiAgdmFyIHJlbW92ZVdvcmtlciA9IGYuYmluZCh0aGlzKTtcblxuICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgdmFyIHdvcmtlcnMgPSB0aGlzLndvcmtlcnMuc2xpY2UoKTtcbiAgd29ya2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICB2YXIgdGVybVByb21pc2UgPSB3b3JrZXIudGVybWluYXRlQW5kTm90aWZ5KGZvcmNlLCB0aW1lb3V0KVxuICAgICAgLnRoZW4ocmVtb3ZlV29ya2VyKVxuICAgICAgLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICAgIGZvcmtBcmdzOiB3b3JrZXIuZm9ya0FyZ3MsXG4gICAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBwcm9taXNlcy5wdXNoKHRlcm1Qcm9taXNlKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHN0YXRpc3RpY3Mgb24gdGFza3MgYW5kIHdvcmtlcnMuXG4gKiBAcmV0dXJuIHt7dG90YWxXb3JrZXJzOiBudW1iZXIsIGJ1c3lXb3JrZXJzOiBudW1iZXIsIGlkbGVXb3JrZXJzOiBudW1iZXIsIHBlbmRpbmdUYXNrczogbnVtYmVyLCBhY3RpdmVUYXNrczogbnVtYmVyfX0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzdGF0aXN0aWNzXG4gKi9cblBvb2wucHJvdG90eXBlLnN0YXRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG90YWxXb3JrZXJzID0gdGhpcy53b3JrZXJzLmxlbmd0aDtcbiAgdmFyIGJ1c3lXb3JrZXJzID0gdGhpcy53b3JrZXJzLmZpbHRlcihmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgcmV0dXJuIHdvcmtlci5idXN5KCk7XG4gIH0pLmxlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHRvdGFsV29ya2VyczogIHRvdGFsV29ya2VycyxcbiAgICBidXN5V29ya2VyczogICBidXN5V29ya2VycyxcbiAgICBpZGxlV29ya2VyczogICB0b3RhbFdvcmtlcnMgLSBidXN5V29ya2VycyxcblxuICAgIHBlbmRpbmdUYXNrczogIHRoaXMudGFza3MubGVuZ3RoLFxuICAgIGFjdGl2ZVRhc2tzOiAgIGJ1c3lXb3JrZXJzXG4gIH07XG59O1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIG1pbmltdW0gb2YgbWluV29ya2VycyBpcyB1cCBhbmQgcnVubmluZ1xuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fZW5zdXJlTWluV29ya2VycyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5taW5Xb3JrZXJzKSB7XG4gICAgZm9yKHZhciBpID0gdGhpcy53b3JrZXJzLmxlbmd0aDsgaSA8IHRoaXMubWluV29ya2VyczsgaSsrKSB7XG4gICAgICB0aGlzLndvcmtlcnMucHVzaCh0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCkpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IFdvcmtlckhhbmRsZXIgYW5kIHBhc3MgYWxsIG9wdGlvbnMuXG4gKiBAcmV0dXJuIHtXb3JrZXJIYW5kbGVyfVxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2NyZWF0ZVdvcmtlckhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG92ZXJyaWRlblBhcmFtcyA9IHRoaXMub25DcmVhdGVXb3JrZXIoe1xuICAgIGZvcmtBcmdzOiB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiB0aGlzLmZvcmtPcHRzLFxuICAgIHdvcmtlclRocmVhZE9wdHM6IHRoaXMud29ya2VyVGhyZWFkT3B0cyxcbiAgICBzY3JpcHQ6IHRoaXMuc2NyaXB0XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBuZXcgV29ya2VySGFuZGxlcihvdmVycmlkZW5QYXJhbXMuc2NyaXB0IHx8IHRoaXMuc2NyaXB0LCB7XG4gICAgZm9ya0FyZ3M6IG92ZXJyaWRlblBhcmFtcy5mb3JrQXJncyB8fCB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBvdmVycmlkZW5QYXJhbXMuZm9ya09wdHMgfHwgdGhpcy5mb3JrT3B0cyxcbiAgICB3b3JrZXJUaHJlYWRPcHRzOiBvdmVycmlkZW5QYXJhbXMud29ya2VyVGhyZWFkT3B0cyB8fCB0aGlzLndvcmtlclRocmVhZE9wdHMsXG4gICAgZGVidWdQb3J0OiBERUJVR19QT1JUX0FMTE9DQVRPUi5uZXh0QXZhaWxhYmxlU3RhcnRpbmdBdCh0aGlzLmRlYnVnUG9ydFN0YXJ0KSxcbiAgICB3b3JrZXJUeXBlOiB0aGlzLndvcmtlclR5cGVcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIG1heFdvcmtlcnMgb3B0aW9uIGlzIGFuIGludGVnZXIgPj0gMVxuICogQHBhcmFtIHsqfSBtYXhXb3JrZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIG1heFdvcmtlcnMgaGFzIGEgdmFsaWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNYXhXb3JrZXJzKG1heFdvcmtlcnMpIHtcbiAgaWYgKCFpc051bWJlcihtYXhXb3JrZXJzKSB8fCAhaXNJbnRlZ2VyKG1heFdvcmtlcnMpIHx8IG1heFdvcmtlcnMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIG1heFdvcmtlcnMgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciA+PSAxJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgbWluV29ya2VycyBvcHRpb24gaXMgYW4gaW50ZWdlciA+PSAwXG4gKiBAcGFyYW0geyp9IG1pbldvcmtlcnNcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiBtaW5Xb3JrZXJzIGhhcyBhIHZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWluV29ya2VycyhtaW5Xb3JrZXJzKSB7XG4gIGlmICghaXNOdW1iZXIobWluV29ya2VycykgfHwgIWlzSW50ZWdlcihtaW5Xb3JrZXJzKSB8fCBtaW5Xb3JrZXJzIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBtaW5Xb3JrZXJzIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgPj0gMCcpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFyaWFibGUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiB2YWx1ZSBpcyBhIG51bWJlclxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSBudW1iZXIgaXMgYW4gaW50ZWdlclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sO1xuIiwgIi8qKlxuICogd29ya2VyIG11c3QgYmUgc3RhcnRlZCBhcyBhIGNoaWxkIHByb2Nlc3Mgb3IgYSB3ZWIgd29ya2VyLlxuICogSXQgbGlzdGVucyBmb3IgUlBDIG1lc3NhZ2VzIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzLlxuICovXG5cbi8vIHNvdXJjZSBvZiBpbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9yZXF1aXJlLWZvb2wtd2VicGFja1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IGV2YWwoXG4gICAgJ3R5cGVvZiByZXF1aXJlICE9PSBcXCd1bmRlZmluZWRcXCcnICtcbiAgICAnID8gcmVxdWlyZScgK1xuICAgICcgOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcihcXCdNb2R1bGUgXCIgKyBtb2R1bGUgKyBcIiBub3QgZm91bmQuXFwnKSB9J1xuKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIHRoZSB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG4vLyB2YXIgbm9kZU9TUGxhdGZvcm0gPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jykubm9kZU9TUGxhdGZvcm07XG5cbi8vIGNyZWF0ZSBhIHdvcmtlciBBUEkgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBtZXNzYWdlcyB3aGljaCB3b3JrcyBib3RoIG9uXG4vLyBub2RlLmpzIGFuZCBpbiB0aGUgYnJvd3NlclxudmFyIHdvcmtlciA9IHtcbiAgZXhpdDogZnVuY3Rpb24oKSB7fVxufTtcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIHdvcmtlciBpbiB0aGUgYnJvd3NlclxuICB3b3JrZXIub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGNhbGxiYWNrKG1lc3NhZ2UuZGF0YSk7XG4gICAgfSlcbiAgfTtcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICB9O1xufVxuZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIG5vZGUuanNcblxuICB2YXIgV29ya2VyVGhyZWFkcztcbiAgdHJ5IHtcbiAgICBXb3JrZXJUaHJlYWRzID0gcmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgZXJyb3IuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAvLyBubyB3b3JrZXJfdGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBpZiAoV29ya2VyVGhyZWFkcyAmJlxuICAgIC8qIGlmIHRoZXJlIGlzIGEgcGFyZW50UG9ydCwgd2UgYXJlIGluIGEgV29ya2VyVGhyZWFkICovXG4gICAgV29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0ICE9PSBudWxsKSB7XG4gICAgdmFyIHBhcmVudFBvcnQgID0gV29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0O1xuICAgIHdvcmtlci5zZW5kID0gcGFyZW50UG9ydC5wb3N0TWVzc2FnZS5iaW5kKHBhcmVudFBvcnQpO1xuICAgIHdvcmtlci5vbiA9IHBhcmVudFBvcnQub24uYmluZChwYXJlbnRQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrZXIub24gPSBwcm9jZXNzLm9uLmJpbmQocHJvY2Vzcyk7XG4gICAgd29ya2VyLnNlbmQgPSBwcm9jZXNzLnNlbmQuYmluZChwcm9jZXNzKTtcbiAgICAvLyByZWdpc3RlciBkaXNjb25uZWN0IGhhbmRsZXIgb25seSBmb3Igc3VicHJvY2VzcyB3b3JrZXIgdG8gZXhpdCB3aGVuIHBhcmVudCBpcyBraWxsZWQgdW5leHBlY3RlZGx5XG4gICAgd29ya2VyLm9uKCdkaXNjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH0pO1xuICAgIHdvcmtlci5leGl0ID0gcHJvY2Vzcy5leGl0LmJpbmQocHJvY2Vzcyk7XG4gIH1cbn1cbmVsc2Uge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmlwdCBtdXN0IGJlIGV4ZWN1dGVkIGFzIGEgd29ya2VyJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRFcnJvcihlcnJvcikge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLnJlZHVjZShmdW5jdGlvbihwcm9kdWN0LCBuYW1lKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9kdWN0LCBuYW1lLCB7XG5cdHZhbHVlOiBlcnJvcltuYW1lXSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBQcm9taXNlIHZpYSBkdWNrIHR5cGluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICBoYXZpbmcgZnVuY3Rpb25zIGB0aGVuYCBhbmQgYGNhdGNoYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpICYmICh0eXBlb2YgdmFsdWUuY2F0Y2ggPT09ICdmdW5jdGlvbicpO1xufVxuXG4vLyBmdW5jdGlvbnMgYXZhaWxhYmxlIGV4dGVybmFsbHlcbndvcmtlci5tZXRob2RzID0ge307XG5cbi8qKlxuICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQgYXJndW1lbnRzXG4gKiBAcGFyYW0ge1N0cmluZ30gZm4gICAgIFN0cmluZ2lmaWVkIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc10gIEZ1bmN0aW9uIGFyZ3VtZW50c1xuICogQHJldHVybnMgeyp9XG4gKi9cbndvcmtlci5tZXRob2RzLnJ1biA9IGZ1bmN0aW9uIHJ1bihmbiwgYXJncykge1xuICB2YXIgZiA9IG5ldyBGdW5jdGlvbigncmV0dXJuICgnICsgZm4gKyAnKS5hcHBseShudWxsLCBhcmd1bWVudHMpOycpO1xuICByZXR1cm4gZi5hcHBseShmLCBhcmdzKTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoaXMgd29ya2VyXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX0gbWV0aG9kc1xuICovXG53b3JrZXIubWV0aG9kcy5tZXRob2RzID0gZnVuY3Rpb24gbWV0aG9kcygpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKTtcbn07XG5cbnZhciBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcblxud29ya2VyLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgaWYgKHJlcXVlc3QgPT09IFRFUk1JTkFURV9NRVRIT0RfSUQpIHtcbiAgICByZXR1cm4gd29ya2VyLmV4aXQoMCk7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgbWV0aG9kID0gd29ya2VyLm1ldGhvZHNbcmVxdWVzdC5tZXRob2RdO1xuXG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgY3VycmVudFJlcXVlc3RJZCA9IHJlcXVlc3QuaWQ7XG4gICAgICBcbiAgICAgIC8vIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uXG4gICAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KG1ldGhvZCwgcmVxdWVzdC5wYXJhbXMpO1xuXG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgLy8gcHJvbWlzZSByZXR1cm5lZCwgcmVzb2x2ZSB0aGlzIGFuZCB0aGVuIHJldHVyblxuICAgICAgICByZXN1bHRcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBjb252ZXJ0RXJyb3IoZXJyKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBpbW1lZGlhdGUgcmVzdWx0XG4gICAgICAgIHdvcmtlci5zZW5kKHtcbiAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFwiJyArIHJlcXVlc3QubWV0aG9kICsgJ1wiJyk7XG4gICAgfVxuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICB3b3JrZXIuc2VuZCh7XG4gICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgIGVycm9yOiBjb252ZXJ0RXJyb3IoZXJyKVxuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZWdpc3RlciBtZXRob2RzIHRvIHRoZSB3b3JrZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBtZXRob2RzXG4gKi9cbndvcmtlci5yZWdpc3RlciA9IGZ1bmN0aW9uIChtZXRob2RzKSB7XG5cbiAgaWYgKG1ldGhvZHMpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChtZXRob2RzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHdvcmtlci5tZXRob2RzW25hbWVdID0gbWV0aG9kc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3b3JrZXIuc2VuZCgncmVhZHknKTtcblxufTtcblxud29ya2VyLmVtaXQgPSBmdW5jdGlvbiAocGF5bG9hZCkge1xuICBpZiAoY3VycmVudFJlcXVlc3RJZCkge1xuICAgIHdvcmtlci5zZW5kKHtcbiAgICAgIGlkOiBjdXJyZW50UmVxdWVzdElkLFxuICAgICAgaXNFdmVudDogdHJ1ZSxcbiAgICAgIHBheWxvYWRcbiAgICB9KTtcbiAgfVxufTtcblxuaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICBleHBvcnRzLmFkZCA9IHdvcmtlci5yZWdpc3RlcjtcbiAgZXhwb3J0cy5lbWl0ID0gd29ya2VyLmVtaXQ7XG59XG4iLCAidmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyB3b3JrZXIgcG9vbFxuICogQHBhcmFtIHtzdHJpbmd9IFtzY3JpcHRdXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQb29sfSBwb29sXG4gKi9cbmV4cG9ydHMucG9vbCA9IGZ1bmN0aW9uIHBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIHZhciBQb29sID0gcmVxdWlyZSgnLi9Qb29sJyk7XG5cbiAgcmV0dXJuIG5ldyBQb29sKHNjcmlwdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHdvcmtlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlciBhIHNldCBvZiBtZXRob2RzIHRvIHRoZSB3b3JrZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGhvZHNdXG4gKi9cbmV4cG9ydHMud29ya2VyID0gZnVuY3Rpb24gd29ya2VyKG1ldGhvZHMpIHtcbiAgdmFyIHdvcmtlciA9IHJlcXVpcmUoJy4vd29ya2VyJyk7XG4gIHdvcmtlci5hZGQobWV0aG9kcyk7XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGV2ZW50IHRvIHRoZSBwYXJlbnQgd29ya2VyIHBvb2wuXG4gKiBAcGFyYW0ge2FueX0gcGF5bG9hZCBcbiAqL1xuZXhwb3J0cy53b3JrZXJFbWl0ID0gZnVuY3Rpb24gd29ya2VyRW1pdChwYXlsb2FkKSB7XG4gIHZhciB3b3JrZXIgPSByZXF1aXJlKCcuL3dvcmtlcicpO1xuICB3b3JrZXIuZW1pdChwYXlsb2FkKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZS5cbiAqIEB0eXBlIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cbmV4cG9ydHMuUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xuXG5leHBvcnRzLnBsYXRmb3JtID0gZW52aXJvbm1lbnQucGxhdGZvcm07XG5leHBvcnRzLmlzTWFpblRocmVhZCA9IGVudmlyb25tZW50LmlzTWFpblRocmVhZDtcbmV4cG9ydHMuY3B1cyA9IGVudmlyb25tZW50LmNwdXM7IiwgImltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5cbnR5cGUgU3R5bGVGbiA9IChzdHI6IHN0cmluZykgPT4gc3RyaW5nO1xuY29uc3QgeyBzdGRlcnIgfSA9IHByb2Nlc3M7XG5cbmNvbnN0IGxvZ2dlciA9IChzdHJlYW06IFdyaXRhYmxlLCBzdHlsZXM/OiBTdHlsZUZuW10pID0+IChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHtcbiAgbGV0IHN0ciA9IHV0aWwuZm9ybWF0KGZtdCwgLi4uYXJncyk7XG4gIGlmIChzdHlsZXMgJiYgc3R5bGVzLmxlbmd0aCkge1xuICAgIHN0ciA9IHN0eWxlcy5yZWR1Y2UoKGEsIHN0eWxlKSA9PiBzdHlsZShhKSwgc3RyKTtcbiAgfVxuICBzdHJlYW0ud3JpdGUoc3RyICsgJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHByaW50ID0gbG9nZ2VyKHN0ZGVycik7XG5leHBvcnQgY29uc3QgZXJyb3IgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsucmVkXSk7XG5leHBvcnQgY29uc3Qgd2FybmluZyA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay55ZWxsb3ddKTtcbmV4cG9ydCBjb25zdCBzdWNjZXNzID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLmdyZWVuXSk7XG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0ID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLmJvbGRdKTtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5mcm9tQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZm4uY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgKGVyciwgcmVzKSA9PiAoZXJyICE9IG51bGwpID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlcylcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9XG4gIH0sICduYW1lJywgeyB2YWx1ZTogZm4ubmFtZSB9KVxufVxuXG5leHBvcnRzLmZyb21Qcm9taXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGVsc2UgZm4uYXBwbHkodGhpcywgYXJncy5zbGljZSgwLCAtMSkpLnRoZW4ociA9PiBjYihudWxsLCByKSwgY2IpXG4gIH0sICduYW1lJywgeyB2YWx1ZTogZm4ubmFtZSB9KVxufVxuIiwgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0IDwgNjAwMDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZzLnN0YXQodG8sIGZ1bmN0aW9uIChzdGF0ZXIsIHN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlciAmJiBzdGF0ZXIuY29kZSA9PT0gXCJFTk9FTlRcIilcbiAgICAgICAgICAgICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgQ0IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGNiKGVyKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgYmFja29mZilcbiAgICAgICAgICAgIGlmIChiYWNrb2ZmIDwgMTAwKVxuICAgICAgICAgICAgICBiYWNrb2ZmICs9IDEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlbmFtZSwgZnMkcmVuYW1lKVxuICAgICAgcmV0dXJuIHJlbmFtZVxuICAgIH0pKGZzLnJlbmFtZSlcbiAgfVxuXG4gIC8vIGlmIHJlYWQoKSByZXR1cm5zIEVBR0FJTiwgdGhlbiBqdXN0IHRyeSBpdCBhZ2Fpbi5cbiAgZnMucmVhZCA9IHR5cGVvZiBmcy5yZWFkICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFxuICA6IChmdW5jdGlvbiAoZnMkcmVhZCkge1xuICAgIGZ1bmN0aW9uIHJlYWQgKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2tfKSB7XG4gICAgICB2YXIgY2FsbGJhY2tcbiAgICAgIGlmIChjYWxsYmFja18gJiYgdHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXIsIF8sIF9fKSB7XG4gICAgICAgICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2tfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgYHV0aWwucHJvbWlzaWZ5YCB3b3JrcyBhcyBpdCBkb2VzIGZvciBuYXRpdmUgYGZzLnJlYWRgLlxuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZWFkLCBmcyRyZWFkKVxuICAgIHJldHVybiByZWFkXG4gIH0pKGZzLnJlYWQpXG5cbiAgZnMucmVhZFN5bmMgPSB0eXBlb2YgZnMucmVhZFN5bmMgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkU3luY1xuICA6IChmdW5jdGlvbiAoZnMkcmVhZFN5bmMpIHsgcmV0dXJuIGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRTeW5jLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfX0pKGZzLnJlYWRTeW5jKVxuXG4gIGZ1bmN0aW9uIHBhdGNoTGNobW9kIChmcykge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgZnMub3BlbiggcGF0aFxuICAgICAgICAgICAgICwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOS1xuICAgICAgICAgICAgICwgbW9kZVxuICAgICAgICAgICAgICwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICAgIGZzLmZjaG1vZChmZCwgbW9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbihlcnIyKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciB8fCBlcnIyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSkge1xuICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOSywgbW9kZSlcblxuICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICB2YXIgcmV0XG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBmcy5mY2htb2RTeW5jKGZkLCBtb2RlKVxuICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoTHV0aW1lcyAoZnMpIHtcbiAgICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KFwiT19TWU1MSU5LXCIpICYmIGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10LCBjYikge1xuICAgICAgICBmcy5vcGVuKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkssIGZ1bmN0aW9uIChlciwgZmQpIHtcbiAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZnMuZnV0aW1lcyhmZCwgYXQsIG10LCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgICAgICAgICAgIGlmIChjYikgY2IoZXIgfHwgZXIyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQpIHtcbiAgICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSylcbiAgICAgICAgdmFyIHJldFxuICAgICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0ID0gZnMuZnV0aW1lc1N5bmMoZmQsIGF0LCBtdClcbiAgICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAoX2EsIF9iLCBfYywgY2IpIHsgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKSB9XG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNob3duRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG93bkZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBjYikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0gbnVsbFxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyLCBzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICB9XG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgdmFyIHN0YXRzID0gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0KVxuICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVOT1NZUyBtZWFucyB0aGF0IHRoZSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wLiBKdXN0IGlnbm9yZVxuICAvLyB0aGF0LCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0dGVyLlxuICAvL1xuICAvLyBpZiB0aGVyZSdzIG5vIGdldHVpZCwgb3IgaWYgZ2V0dWlkKCkgaXMgc29tZXRoaW5nIG90aGVyXG4gIC8vIHRoYW4gMCwgYW5kIHRoZSBlcnJvciBpcyBFSU5WQUwgb3IgRVBFUk0sIHRoZW4ganVzdCBpZ25vcmVcbiAgLy8gaXQuXG4gIC8vXG4gIC8vIFRoaXMgc3BlY2lmaWMgY2FzZSBpcyBhIHNpbGVudCBmYWlsdXJlIGluIGNwLCBpbnN0YWxsLCB0YXIsXG4gIC8vIGFuZCBtb3N0IG90aGVyIHVuaXggdG9vbHMgdGhhdCBtYW5hZ2UgcGVybWlzc2lvbnMuXG4gIC8vXG4gIC8vIFdoZW4gcnVubmluZyBhcyByb290LCBvciBpZiBvdGhlciB0eXBlcyBvZiBlcnJvcnMgYXJlXG4gIC8vIGVuY291bnRlcmVkLCB0aGVuIGl0J3Mgc3RyaWN0LlxuICBmdW5jdGlvbiBjaG93bkVyT2sgKGVyKSB7XG4gICAgaWYgKCFlcilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoZXIuY29kZSA9PT0gXCJFTk9TWVNcIilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICB2YXIgbm9ucm9vdCA9ICFwcm9jZXNzLmdldHVpZCB8fCBwcm9jZXNzLmdldHVpZCgpICE9PSAwXG4gICAgaWYgKG5vbnJvb3QpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSBcIkVJTlZBTFwiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxubW9kdWxlLmV4cG9ydHMgPSBsZWdhY3lcblxuZnVuY3Rpb24gbGVnYWN5IChmcykge1xuICByZXR1cm4ge1xuICAgIFJlYWRTdHJlYW06IFJlYWRTdHJlYW0sXG4gICAgV3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAncic7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ1ZmZlclNpemUgPSA2NCAqIDEwMjQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuY29kaW5nKSB0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdlbmQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA8PSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZkICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLl9yZWFkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZmQgPSBmZDtcbiAgICAgIHNlbGYuZW1pdCgnb3BlbicsIGZkKTtcbiAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pKSByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5mbGFncyA9ICd3JztcbiAgICB0aGlzLmVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGFydCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlID49IHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICBpZiAodGhpcy5mZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fb3BlbiA9IGZzLm9wZW47XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLCB0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgdW5kZWZpbmVkXSk7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVcblxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX3Byb3RvX19cbn1cblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IGdldFByb3RvdHlwZU9mKG9iaikgfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwgInZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnLi9sZWdhY3ktc3RyZWFtcy5qcycpXG52YXIgY2xvbmUgPSByZXF1aXJlKCcuL2Nsb25lLmpzJylcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xudmFyIGdyYWNlZnVsUXVldWVcbnZhciBwcmV2aW91c1N5bWJvbFxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIG5vZGUgMC54IHBvbHlmaWxsICovXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBncmFjZWZ1bFF1ZXVlID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucXVldWUnKVxuICAvLyBUaGlzIGlzIHVzZWQgaW4gdGVzdGluZyBieSBmdXR1cmUgdmVyc2lvbnNcbiAgcHJldmlvdXNTeW1ib2wgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5wcmV2aW91cycpXG59IGVsc2Uge1xuICBncmFjZWZ1bFF1ZXVlID0gJ19fX2dyYWNlZnVsLWZzLnF1ZXVlJ1xuICBwcmV2aW91c1N5bWJvbCA9ICdfX19ncmFjZWZ1bC1mcy5wcmV2aW91cydcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBwdWJsaXNoUXVldWUoY29udGV4dCwgcXVldWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIGdyYWNlZnVsUXVldWUsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHF1ZXVlXG4gICAgfVxuICB9KVxufVxuXG52YXIgZGVidWcgPSBub29wXG5pZiAodXRpbC5kZWJ1Z2xvZylcbiAgZGVidWcgPSB1dGlsLmRlYnVnbG9nKCdnZnM0JylcbmVsc2UgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSlcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbSA9IHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cylcbiAgICBtID0gJ0dGUzQ6ICcgKyBtLnNwbGl0KC9cXG4vKS5qb2luKCdcXG5HRlM0OiAnKVxuICAgIGNvbnNvbGUuZXJyb3IobSlcbiAgfVxuXG4vLyBPbmNlIHRpbWUgaW5pdGlhbGl6YXRpb25cbmlmICghZnNbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgLy8gVGhpcyBxdWV1ZSBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlIGxvYWRlZCBpbnN0YW5jZXNcbiAgdmFyIHF1ZXVlID0gZ2xvYmFsW2dyYWNlZnVsUXVldWVdIHx8IFtdXG4gIHB1Ymxpc2hRdWV1ZShmcywgcXVldWUpXG5cbiAgLy8gUGF0Y2ggZnMuY2xvc2UvY2xvc2VTeW5jIHRvIHNoYXJlZCBxdWV1ZSB2ZXJzaW9uLCBiZWNhdXNlIHdlIG5lZWRcbiAgLy8gdG8gcmV0cnkoKSB3aGVuZXZlciBhIGNsb3NlIGhhcHBlbnMgKmFueXdoZXJlKiBpbiB0aGUgcHJvZ3JhbS5cbiAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgd2hlbiBtdWx0aXBsZSBncmFjZWZ1bC1mcyBpbnN0YW5jZXMgYXJlXG4gIC8vIGluIHBsYXkgYXQgdGhlIHNhbWUgdGltZS5cbiAgZnMuY2xvc2UgPSAoZnVuY3Rpb24gKGZzJGNsb3NlKSB7XG4gICAgZnVuY3Rpb24gY2xvc2UgKGZkLCBjYikge1xuICAgICAgcmV0dXJuIGZzJGNsb3NlLmNhbGwoZnMsIGZkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VcbiAgfSkoZnMuY2xvc2UpXG5cbiAgZnMuY2xvc2VTeW5jID0gKGZ1bmN0aW9uIChmcyRjbG9zZVN5bmMpIHtcbiAgICBmdW5jdGlvbiBjbG9zZVN5bmMgKGZkKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgZnMkY2xvc2VTeW5jLmFwcGx5KGZzLCBhcmd1bWVudHMpXG4gICAgICByZXNldFF1ZXVlKClcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2VTeW5jLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlU3luY1xuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlU3luY1xuICB9KShmcy5jbG9zZVN5bmMpXG5cbiAgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSkge1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKGZzW2dyYWNlZnVsUXVldWVdKVxuICAgICAgcmVxdWlyZSgnYXNzZXJ0JykuZXF1YWwoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoLCAwKVxuICAgIH0pXG4gIH1cbn1cblxuaWYgKCFnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgcHVibGlzaFF1ZXVlKGdsb2JhbCwgZnNbZ3JhY2VmdWxRdWV1ZV0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGNsb25lKGZzKSlcbmlmIChwcm9jZXNzLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCAmJiAhZnMuX19wYXRjaGVkKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXRjaChmcylcbiAgICBmcy5fX3BhdGNoZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gRXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZXMgdGhlIG9wZW4oKSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbiBoZXJlXG4gIHBvbHlmaWxscyhmcylcbiAgZnMuZ3JhY2VmdWxpZnkgPSBwYXRjaFxuXG4gIGZzLmNyZWF0ZVJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtXG4gIGZzLmNyZWF0ZVdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW1cbiAgdmFyIGZzJHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgZnMucmVhZEZpbGUgPSByZWFkRmlsZVxuICBmdW5jdGlvbiByZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRyZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kcmVhZEZpbGUsIFtwYXRoLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyR3cml0ZUZpbGUgPSBmcy53cml0ZUZpbGVcbiAgZnMud3JpdGVGaWxlID0gd3JpdGVGaWxlXG4gIGZ1bmN0aW9uIHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kd3JpdGVGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkYXBwZW5kRmlsZSA9IGZzLmFwcGVuZEZpbGVcbiAgaWYgKGZzJGFwcGVuZEZpbGUpXG4gICAgZnMuYXBwZW5kRmlsZSA9IGFwcGVuZEZpbGVcbiAgZnVuY3Rpb24gYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kYXBwZW5kRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGNvcHlGaWxlID0gZnMuY29weUZpbGVcbiAgaWYgKGZzJGNvcHlGaWxlKVxuICAgIGZzLmNvcHlGaWxlID0gY29weUZpbGVcbiAgZnVuY3Rpb24gY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBmbGFnc1xuICAgICAgZmxhZ3MgPSAwXG4gICAgfVxuICAgIHJldHVybiBnbyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRjb3B5RmlsZSwgW3NyYywgZGVzdCwgZmxhZ3MsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHJlYWRkaXIgPSBmcy5yZWFkZGlyXG4gIGZzLnJlYWRkaXIgPSByZWFkZGlyXG4gIHZhciBub1JlYWRkaXJPcHRpb25WZXJzaW9ucyA9IC9edlswLTVdXFwuL1xuICBmdW5jdGlvbiByZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHZhciBnbyRyZWFkZGlyID0gbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMudGVzdChwcm9jZXNzLnZlcnNpb24pXG4gICAgICA/IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBvcHRpb25zLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuXG4gICAgcmV0dXJuIGdvJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBmcyRyZWFkZGlyQ2FsbGJhY2sgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCBmaWxlcykge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtcbiAgICAgICAgICAgIGdvJHJlYWRkaXIsXG4gICAgICAgICAgICBbcGF0aCwgb3B0aW9ucywgY2JdLFxuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgc3RhcnRUaW1lIHx8IERhdGUubm93KCksXG4gICAgICAgICAgICBEYXRlLm5vdygpXG4gICAgICAgICAgXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLnNvcnQpXG4gICAgICAgICAgICBmaWxlcy5zb3J0KClcblxuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGVyciwgZmlsZXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cigwLCA0KSA9PT0gJ3YwLjgnKSB7XG4gICAgdmFyIGxlZ1N0cmVhbXMgPSBsZWdhY3koZnMpXG4gICAgUmVhZFN0cmVhbSA9IGxlZ1N0cmVhbXMuUmVhZFN0cmVhbVxuICAgIFdyaXRlU3RyZWFtID0gbGVnU3RyZWFtcy5Xcml0ZVN0cmVhbVxuICB9XG5cbiAgdmFyIGZzJFJlYWRTdHJlYW0gPSBmcy5SZWFkU3RyZWFtXG4gIGlmIChmcyRSZWFkU3RyZWFtKSB7XG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFJlYWRTdHJlYW0ucHJvdG90eXBlKVxuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBSZWFkU3RyZWFtJG9wZW5cbiAgfVxuXG4gIHZhciBmcyRXcml0ZVN0cmVhbSA9IGZzLldyaXRlU3RyZWFtXG4gIGlmIChmcyRXcml0ZVN0cmVhbSkge1xuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkV3JpdGVTdHJlYW0ucHJvdG90eXBlKVxuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gV3JpdGVTdHJlYW0kb3BlblxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1dyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIC8vIGxlZ2FjeSBuYW1lc1xuICB2YXIgRmlsZVJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICB2YXIgRmlsZVdyaXRlU3RyZWFtID0gV3JpdGVTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVdyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRSZWFkU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gUmVhZFN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFJlYWRTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhhdC5hdXRvQ2xvc2UpXG4gICAgICAgICAgdGhhdC5kZXN0cm95KClcblxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgICB0aGF0LnJlYWQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkV3JpdGVTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFdyaXRlU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoYXQuZGVzdHJveSgpXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLlJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5Xcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgdmFyIGZzJG9wZW4gPSBmcy5vcGVuXG4gIGZzLm9wZW4gPSBvcGVuXG4gIGZ1bmN0aW9uIG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYikge1xuICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gbW9kZSwgbW9kZSA9IG51bGxcblxuICAgIHJldHVybiBnbyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkb3BlbihwYXRoLCBmbGFncywgbW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kb3BlbiwgW3BhdGgsIGZsYWdzLCBtb2RlLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmc1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlIChlbGVtKSB7XG4gIGRlYnVnKCdFTlFVRVVFJywgZWxlbVswXS5uYW1lLCBlbGVtWzFdKVxuICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gIHJldHJ5KClcbn1cblxuLy8ga2VlcCB0cmFjayBvZiB0aGUgdGltZW91dCBiZXR3ZWVuIHJldHJ5KCkgY2FsbHNcbnZhciByZXRyeVRpbWVyXG5cbi8vIHJlc2V0IHRoZSBzdGFydFRpbWUgYW5kIGxhc3RUaW1lIHRvIG5vd1xuLy8gdGhpcyByZXNldHMgdGhlIHN0YXJ0IG9mIHRoZSA2MCBzZWNvbmQgb3ZlcmFsbCB0aW1lb3V0IGFzIHdlbGwgYXMgdGhlXG4vLyBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzIHNvIHRoYXQgd2UnbGwgcmV0cnkgdGhlc2Ugam9icyBzb29uZXJcbmZ1bmN0aW9uIHJlc2V0UXVldWUgKCkge1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gZW50cmllcyB0aGF0IGFyZSBvbmx5IGEgbGVuZ3RoIG9mIDIgYXJlIGZyb20gYW4gb2xkZXIgdmVyc2lvbiwgZG9uJ3RcbiAgICAvLyBib3RoZXIgbW9kaWZ5aW5nIHRob3NlIHNpbmNlIHRoZXknbGwgYmUgcmV0cmllZCBhbnl3YXkuXG4gICAgaWYgKGZzW2dyYWNlZnVsUXVldWVdW2ldLmxlbmd0aCA+IDIpIHtcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzNdID0gbm93IC8vIHN0YXJ0VGltZVxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bNF0gPSBub3cgLy8gbGFzdFRpbWVcbiAgICB9XG4gIH1cbiAgLy8gY2FsbCByZXRyeSB0byBtYWtlIHN1cmUgd2UncmUgYWN0aXZlbHkgcHJvY2Vzc2luZyB0aGUgcXVldWVcbiAgcmV0cnkoKVxufVxuXG5mdW5jdGlvbiByZXRyeSAoKSB7XG4gIC8vIGNsZWFyIHRoZSB0aW1lciBhbmQgcmVtb3ZlIGl0IHRvIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbmN1cnJlbmN5XG4gIGNsZWFyVGltZW91dChyZXRyeVRpbWVyKVxuICByZXRyeVRpbWVyID0gdW5kZWZpbmVkXG5cbiAgaWYgKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm5cblxuICB2YXIgZWxlbSA9IGZzW2dyYWNlZnVsUXVldWVdLnNoaWZ0KClcbiAgdmFyIGZuID0gZWxlbVswXVxuICB2YXIgYXJncyA9IGVsZW1bMV1cbiAgLy8gdGhlc2UgaXRlbXMgbWF5IGJlIHVuc2V0IGlmIHRoZXkgd2VyZSBhZGRlZCBieSBhbiBvbGRlciBncmFjZWZ1bC1mc1xuICB2YXIgZXJyID0gZWxlbVsyXVxuICB2YXIgc3RhcnRUaW1lID0gZWxlbVszXVxuICB2YXIgbGFzdFRpbWUgPSBlbGVtWzRdXG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0VGltZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmIHdlJ3ZlIHdhaXRlZFxuICAvLyBsb25nIGVub3VnaCwgc28gZ28gYWhlYWQgYW5kIHJldHJ5IHRoaXMgaXRlbSBub3dcbiAgaWYgKHN0YXJ0VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICBmbi5hcHBseShudWxsLCBhcmdzKVxuICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPj0gNjAwMDApIHtcbiAgICAvLyBpdCdzIGJlZW4gbW9yZSB0aGFuIDYwIHNlY29uZHMgdG90YWwsIGJhaWwgbm93XG4gICAgZGVidWcoJ1RJTUVPVVQnLCBmbi5uYW1lLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3MucG9wKClcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IuY2FsbChudWxsLCBlcnIpXG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGhlIGxhc3QgYXR0ZW1wdCBhbmQgcmlnaHQgbm93XG4gICAgdmFyIHNpbmNlQXR0ZW1wdCA9IERhdGUubm93KCkgLSBsYXN0VGltZVxuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHdoZW4gd2UgZmlyc3QgdHJpZWQsIGFuZCB3aGVuIHdlIGxhc3QgdHJpZWRcbiAgICAvLyByb3VuZGVkIHVwIHRvIGF0IGxlYXN0IDFcbiAgICB2YXIgc2luY2VTdGFydCA9IE1hdGgubWF4KGxhc3RUaW1lIC0gc3RhcnRUaW1lLCAxKVxuICAgIC8vIGJhY2tvZmYuIHdhaXQgbG9uZ2VyIHRoYW4gdGhlIHRvdGFsIHRpbWUgd2UndmUgYmVlbiByZXRyeWluZywgYnV0IG9ubHlcbiAgICAvLyB1cCB0byBhIG1heGltdW0gb2YgMTAwbXNcbiAgICB2YXIgZGVzaXJlZERlbGF5ID0gTWF0aC5taW4oc2luY2VTdGFydCAqIDEuMiwgMTAwKVxuICAgIC8vIGl0J3MgYmVlbiBsb25nIGVub3VnaCBzaW5jZSB0aGUgbGFzdCByZXRyeSwgZG8gaXQgYWdhaW5cbiAgICBpZiAoc2luY2VBdHRlbXB0ID49IGRlc2lyZWREZWxheSkge1xuICAgICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtzdGFydFRpbWVdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgY2FuJ3QgZG8gdGhpcyBqb2IgeWV0LCBwdXNoIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgICAvLyBhbmQgbGV0IHRoZSBuZXh0IGl0ZXJhdGlvbiBjaGVjayBhZ2FpblxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICAgIH1cbiAgfVxuXG4gIC8vIHNjaGVkdWxlIG91ciBuZXh0IHJ1biBpZiBvbmUgaXNuJ3QgYWxyZWFkeSBzY2hlZHVsZWRcbiAgaWYgKHJldHJ5VGltZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KHJldHJ5LCAwKVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG4vLyBUaGlzIGlzIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9ybWFsaXplL216XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBKb25hdGhhbiBPbmcgbWVAam9uZ2xlYmVycnkuY29tIGFuZCBDb250cmlidXRvcnNcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG5jb25zdCBhcGkgPSBbXG4gICdhY2Nlc3MnLFxuICAnYXBwZW5kRmlsZScsXG4gICdjaG1vZCcsXG4gICdjaG93bicsXG4gICdjbG9zZScsXG4gICdjb3B5RmlsZScsXG4gICdmY2htb2QnLFxuICAnZmNob3duJyxcbiAgJ2ZkYXRhc3luYycsXG4gICdmc3RhdCcsXG4gICdmc3luYycsXG4gICdmdHJ1bmNhdGUnLFxuICAnZnV0aW1lcycsXG4gICdsY2htb2QnLFxuICAnbGNob3duJyxcbiAgJ2xpbmsnLFxuICAnbHN0YXQnLFxuICAnbWtkaXInLFxuICAnbWtkdGVtcCcsXG4gICdvcGVuJyxcbiAgJ29wZW5kaXInLFxuICAncmVhZGRpcicsXG4gICdyZWFkRmlsZScsXG4gICdyZWFkbGluaycsXG4gICdyZWFscGF0aCcsXG4gICdyZW5hbWUnLFxuICAncm0nLFxuICAncm1kaXInLFxuICAnc3RhdCcsXG4gICdzeW1saW5rJyxcbiAgJ3RydW5jYXRlJyxcbiAgJ3VubGluaycsXG4gICd1dGltZXMnLFxuICAnd3JpdGVGaWxlJ1xuXS5maWx0ZXIoa2V5ID0+IHtcbiAgLy8gU29tZSBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBzb21lIHN5c3RlbXMuIEV4OlxuICAvLyBmcy5vcGVuZGlyIHdhcyBhZGRlZCBpbiBOb2RlLmpzIHYxMi4xMi4wXG4gIC8vIGZzLnJtIHdhcyBhZGRlZCBpbiBOb2RlLmpzIHYxNC4xNC4wXG4gIC8vIGZzLmxjaG93biBpcyBub3QgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IHNvbWUgTGludXhcbiAgcmV0dXJuIHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nXG59KVxuXG4vLyBFeHBvcnQgYWxsIGtleXM6XG5PYmplY3Qua2V5cyhmcykuZm9yRWFjaChrZXkgPT4ge1xuICBpZiAoa2V5ID09PSAncHJvbWlzZXMnKSB7XG4gICAgLy8gZnMucHJvbWlzZXMgaXMgYSBnZXR0ZXIgcHJvcGVydHkgdGhhdCB0cmlnZ2VycyBFeHBlcmltZW50YWxXYXJuaW5nXG4gICAgLy8gRG9uJ3QgcmUtZXhwb3J0IGl0IGhlcmUsIHRoZSBnZXR0ZXIgaXMgZGVmaW5lZCBpbiBcImxpYi9pbmRleC5qc1wiXG4gICAgcmV0dXJuXG4gIH1cbiAgZXhwb3J0c1trZXldID0gZnNba2V5XVxufSlcblxuLy8gVW5pdmVyc2FsaWZ5IGFzeW5jIG1ldGhvZHM6XG5hcGkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBleHBvcnRzW21ldGhvZF0gPSB1KGZzW21ldGhvZF0pXG59KVxuXG4vLyBXZSBkaWZmZXIgZnJvbSBtei9mcyBpbiB0aGF0IHdlIHN0aWxsIHNoaXAgdGhlIG9sZCwgYnJva2VuLCBmcy5leGlzdHMoKVxuLy8gc2luY2Ugd2UgYXJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIG5hdGl2ZSBtb2R1bGVcbmV4cG9ydHMuZXhpc3RzID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIHJlc29sdmUpXG4gIH0pXG59XG5cbi8vIGZzLnJlYWQoKSwgZnMud3JpdGUoKSwgJiBmcy53cml0ZXYoKSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byBtdWx0aXBsZSBjYWxsYmFjayBhcmdzXG5cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gYmVcbi8vIGZzLndyaXRlKGZkLCBidWZmZXJbLCBvZmZzZXRbLCBsZW5ndGhbLCBwb3NpdGlvbl1dXSwgY2FsbGJhY2spXG4vLyBPUlxuLy8gZnMud3JpdGUoZmQsIHN0cmluZ1ssIHBvc2l0aW9uWywgZW5jb2RpbmddXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIGZzLndyaXRldiBvbmx5IGF2YWlsYWJsZSBpbiBOb2RlIHYxMi45LjArXG5pZiAodHlwZW9mIGZzLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBGdW5jdGlvbiBzaWduYXR1cmUgaXNcbiAgLy8gcy53cml0ZXYoZmQsIGJ1ZmZlcnNbLCBwb3NpdGlvbl0sIGNhbGxiYWNrKVxuICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuICBleHBvcnRzLndyaXRldiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVycykgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVycyB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbi8vIGZzLnJlYWxwYXRoLm5hdGl2ZSBvbmx5IGF2YWlsYWJsZSBpbiBOb2RlIHY5LjIrXG5pZiAodHlwZW9mIGZzLnJlYWxwYXRoLm5hdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBleHBvcnRzLnJlYWxwYXRoLm5hdGl2ZSA9IHUoZnMucmVhbHBhdGgubmF0aXZlKVxufVxuIiwgIm1vZHVsZS5leHBvcnRzID0gciA9PiB7XG4gIGNvbnN0IG4gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpXG4gIHIgPSByLnNwbGl0KCcuJykubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKVxuICByZXR1cm4gblswXSA+IHJbMF0gfHwgKG5bMF0gPT09IHJbMF0gJiYgKG5bMV0gPiByWzFdIHx8IChuWzFdID09PSByWzFdICYmIG5bMl0gPj0gclsyXSkpKVxufVxuIiwgIi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21ha2UtZGlyXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCdcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgYXRMZWFzdE5vZGUgPSByZXF1aXJlKCdhdC1sZWFzdC1ub2RlJylcblxuY29uc3QgdXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uID0gYXRMZWFzdE5vZGUoJzEwLjEyLjAnKVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzg5ODdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ1di9saWJ1di9wdWxsLzEwODhcbmNvbnN0IGNoZWNrUGF0aCA9IHB0aCA9PiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgcGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzID0gL1s8PjpcInw/Kl0vLnRlc3QocHRoLnJlcGxhY2UocGF0aC5wYXJzZShwdGgpLnJvb3QsICcnKSlcblxuICAgIGlmIChwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtwdGh9YClcbiAgICAgIGVycm9yLmNvZGUgPSAnRUlOVkFMJ1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc09wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgb3B0aW9ucyA9IHsgbW9kZTogb3B0aW9ucyB9XG4gIHJldHVybiB7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH1cbn1cblxuY29uc3QgcGVybWlzc2lvbkVycm9yID0gcHRoID0+IHtcbiAgLy8gVGhpcyByZXBsaWNhdGVzIHRoZSBleGNlcHRpb24gb2YgYGZzLm1rZGlyYCB3aXRoIG5hdGl2ZSB0aGVcbiAgLy8gYHJlY3VzaXZlYCBvcHRpb24gd2hlbiBydW4gb24gYW4gaW52YWxpZCBkcml2ZSB1bmRlciBXaW5kb3dzLlxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgb3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQsIG1rZGlyICcke3B0aH0nYClcbiAgZXJyb3IuY29kZSA9ICdFUEVSTSdcbiAgZXJyb3IuZXJybm8gPSAtNDA0OFxuICBlcnJvci5wYXRoID0gcHRoXG4gIGVycm9yLnN5c2NhbGwgPSAnbWtkaXInXG4gIHJldHVybiBlcnJvclxufVxuXG5tb2R1bGUuZXhwb3J0cy5tYWtlRGlyID0gYXN5bmMgKGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChpbnB1dClcbiAgb3B0aW9ucyA9IHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cbiAgaWYgKHVzZU5hdGl2ZVJlY3Vyc2l2ZU9wdGlvbikge1xuICAgIGNvbnN0IHB0aCA9IHBhdGgucmVzb2x2ZShpbnB1dClcblxuICAgIHJldHVybiBmcy5ta2RpcihwdGgsIHtcbiAgICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtYWtlID0gYXN5bmMgcHRoID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIocHRoLCBvcHRpb25zLm1vZGUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHB0aCkgPT09IHB0aCkge1xuICAgICAgICAgIHRocm93IHBlcm1pc3Npb25FcnJvcihwdGgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbnVsbCBieXRlcycpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG1ha2UocGF0aC5kaXJuYW1lKHB0aCkpXG4gICAgICAgIHJldHVybiBtYWtlKHB0aClcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHB0aClcbiAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgLy8gVGhpcyBlcnJvciBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSB1c2VyXG4gICAgICAgICAgLy8gaXQgaXMgY2F1Z2h0IGJlbG93LCBhbmQgdGhlIG9yaWdpbmFsIGVycm9yIGlzIHRocm93blxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhdGggaXMgbm90IGEgZGlyZWN0b3J5JylcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ha2UocGF0aC5yZXNvbHZlKGlucHV0KSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGlucHV0KVxuICBvcHRpb25zID0gcHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblxuICBpZiAodXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uKSB7XG4gICAgY29uc3QgcHRoID0gcGF0aC5yZXNvbHZlKGlucHV0KVxuXG4gICAgcmV0dXJuIGZzLm1rZGlyU3luYyhwdGgsIHtcbiAgICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtYWtlID0gcHRoID0+IHtcbiAgICB0cnkge1xuICAgICAgZnMubWtkaXJTeW5jKHB0aCwgb3B0aW9ucy5tb2RlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgaWYgKHBhdGguZGlybmFtZShwdGgpID09PSBwdGgpIHtcbiAgICAgICAgICB0aHJvdyBwZXJtaXNzaW9uRXJyb3IocHRoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ251bGwgYnl0ZXMnKSkge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBtYWtlKHBhdGguZGlybmFtZShwdGgpKVxuICAgICAgICByZXR1cm4gbWFrZShwdGgpXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZnMuc3RhdFN5bmMocHRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgLy8gVGhpcyBlcnJvciBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSB1c2VyXG4gICAgICAgICAgLy8gaXQgaXMgY2F1Z2h0IGJlbG93LCBhbmQgdGhlIG9yaWdpbmFsIGVycm9yIGlzIHRocm93blxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhdGggaXMgbm90IGEgZGlyZWN0b3J5JylcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ha2UocGF0aC5yZXNvbHZlKGlucHV0KSlcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgeyBtYWtlRGlyOiBfbWFrZURpciwgbWFrZURpclN5bmMgfSA9IHJlcXVpcmUoJy4vbWFrZS1kaXInKVxuY29uc3QgbWFrZURpciA9IHUoX21ha2VEaXIpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBta2RpcnM6IG1ha2VEaXIsXG4gIG1rZGlyc1N5bmM6IG1ha2VEaXJTeW5jLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IG1ha2VEaXIsXG4gIG1rZGlycFN5bmM6IG1ha2VEaXJTeW5jLFxuICBlbnN1cmVEaXI6IG1ha2VEaXIsXG4gIGVuc3VyZURpclN5bmM6IG1ha2VEaXJTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXMgKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spIHtcbiAgLy8gaWYgKCFIQVNfTUlMTElTX1JFUykgcmV0dXJuIGZzLnV0aW1lcyhwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKVxuICBmcy5vcGVuKHBhdGgsICdyKycsIChlcnIsIGZkKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBmcy5mdXRpbWVzKGZkLCBhdGltZSwgbXRpbWUsIGZ1dGltZXNFcnIgPT4ge1xuICAgICAgZnMuY2xvc2UoZmQsIGNsb3NlRXJyID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhmdXRpbWVzRXJyIHx8IGNsb3NlRXJyKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXNTeW5jIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncisnKVxuICBmcy5mdXRpbWVzU3luYyhmZCwgYXRpbWUsIG10aW1lKVxuICByZXR1cm4gZnMuY2xvc2VTeW5jKGZkKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXRpbWVzTWlsbGlzLFxuICB1dGltZXNNaWxsaXNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgYXRMZWFzdE5vZGUgPSByZXF1aXJlKCdhdC1sZWFzdC1ub2RlJylcblxuY29uc3Qgbm9kZVN1cHBvcnRzQmlnSW50ID0gYXRMZWFzdE5vZGUoJzEwLjUuMCcpXG5jb25zdCBzdGF0ID0gKGZpbGUpID0+IG5vZGVTdXBwb3J0c0JpZ0ludCA/IGZzLnN0YXQoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSkgOiBmcy5zdGF0KGZpbGUpXG5jb25zdCBzdGF0U3luYyA9IChmaWxlKSA9PiBub2RlU3VwcG9ydHNCaWdJbnQgPyBmcy5zdGF0U3luYyhmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KSA6IGZzLnN0YXRTeW5jKGZpbGUpXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICBzdGF0KHNyYyksXG4gICAgc3RhdChkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCkge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRTeW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRTeW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIGNiKSB7XG4gIHV0aWwuY2FsbGJhY2tpZnkoZ2V0U3RhdHMpKHNyYywgZGVzdCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IHN0YXRzXG4gICAgaWYgKGRlc3RTdGF0ICYmIGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1NvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuJykpXG4gICAgfVxuICAgIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgaXNTcmNTdWJkaXIoc3JjLCBkZXN0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpKVxuICAgIH1cbiAgICByZXR1cm4gY2IobnVsbCwgeyBzcmNTdGF0LCBkZXN0U3RhdCB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1BhdGhzU3luYyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBnZXRTdGF0c1N5bmMoc3JjLCBkZXN0KVxuICBpZiAoZGVzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICB9XG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgaXNTcmNTdWJkaXIoc3JjLCBkZXN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cbiAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQgfVxufVxuXG4vLyByZWN1cnNpdmVseSBjaGVjayBpZiBkZXN0IHBhcmVudCBpcyBhIHN1YmRpcmVjdG9yeSBvZiBzcmMuXG4vLyBJdCB3b3JrcyBmb3IgYWxsIGZpbGUgdHlwZXMgaW5jbHVkaW5nIHN5bWxpbmtzIHNpbmNlIGl0XG4vLyBjaGVja3MgdGhlIHNyYyBhbmQgZGVzdCBpbm9kZXMuIEl0IHN0YXJ0cyBmcm9tIHRoZSBkZWVwZXN0XG4vLyBwYXJlbnQgYW5kIHN0b3BzIG9uY2UgaXQgcmVhY2hlcyB0aGUgc3JjIHBhcmVudCBvciB0aGUgcm9vdCBwYXRoLlxuZnVuY3Rpb24gY2hlY2tQYXJlbnRQYXRocyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSwgY2IpIHtcbiAgY29uc3Qgc3JjUGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShzcmMpKVxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShkZXN0KSlcbiAgaWYgKGRlc3RQYXJlbnQgPT09IHNyY1BhcmVudCB8fCBkZXN0UGFyZW50ID09PSBwYXRoLnBhcnNlKGRlc3RQYXJlbnQpLnJvb3QpIHJldHVybiBjYigpXG4gIGNvbnN0IGNhbGxiYWNrID0gKGVyciwgZGVzdFN0YXQpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gY2IoKVxuICAgICAgcmV0dXJuIGNiKGVycilcbiAgICB9XG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKSlcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0UGFyZW50LCBmdW5jTmFtZSwgY2IpXG4gIH1cbiAgaWYgKG5vZGVTdXBwb3J0c0JpZ0ludCkgZnMuc3RhdChkZXN0UGFyZW50LCB7IGJpZ2ludDogdHJ1ZSB9LCBjYWxsYmFjaylcbiAgZWxzZSBmcy5zdGF0KGRlc3RQYXJlbnQsIGNhbGxiYWNrKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gc3RhdFN5bmMoZGVzdFBhcmVudClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIGlmIChkZXN0U3RhdC5pbm8gJiYgZGVzdFN0YXQuZGV2ICYmIGRlc3RTdGF0LmlubyA9PT0gc3JjU3RhdC5pbm8gJiYgZGVzdFN0YXQuZGV2ID09PSBzcmNTdGF0LmRldikge1xuICAgIGlmIChub2RlU3VwcG9ydHNCaWdJbnQgfHwgZGVzdFN0YXQuaW5vIDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgIC8vIGRlZmluaXRpdmUgYW5zd2VyXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBVc2UgYWRkaXRpb25hbCBoZXVyaXN0aWNzIGlmIHdlIGNhbid0IHVzZSAnYmlnaW50Jy5cbiAgICAvLyBEaWZmZXJlbnQgJ2lubycgY291bGQgYmUgcmVwcmVzZW50ZWQgdGhlIHNhbWUgaWYgdGhleSBhcmUgPj0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAvLyBTZWUgaXNzdWUgNjU3XG4gICAgaWYgKGRlc3RTdGF0LnNpemUgPT09IHNyY1N0YXQuc2l6ZSAmJlxuICAgICAgICBkZXN0U3RhdC5tb2RlID09PSBzcmNTdGF0Lm1vZGUgJiZcbiAgICAgICAgZGVzdFN0YXQubmxpbmsgPT09IHNyY1N0YXQubmxpbmsgJiZcbiAgICAgICAgZGVzdFN0YXQuYXRpbWVNcyA9PT0gc3JjU3RhdC5hdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0Lm10aW1lTXMgPT09IHNyY1N0YXQubXRpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5jdGltZU1zID09PSBzcmNTdGF0LmN0aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQuYmlydGh0aW1lTXMgPT09IHNyY1N0YXQuYmlydGh0aW1lTXMpIHtcbiAgICAgIC8vIGhldXJpc3RpYyBhbnN3ZXJcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyByZXR1cm4gdHJ1ZSBpZiBkZXN0IGlzIGEgc3ViZGlyIG9mIHNyYywgb3RoZXJ3aXNlIGZhbHNlLlxuLy8gSXQgb25seSBjaGVja3MgdGhlIHBhdGggc3RyaW5ncy5cbmZ1bmN0aW9uIGlzU3JjU3ViZGlyIChzcmMsIGRlc3QpIHtcbiAgY29uc3Qgc3JjQXJyID0gcGF0aC5yZXNvbHZlKHNyYykuc3BsaXQocGF0aC5zZXApLmZpbHRlcihpID0+IGkpXG4gIGNvbnN0IGRlc3RBcnIgPSBwYXRoLnJlc29sdmUoZGVzdCkuc3BsaXQocGF0aC5zZXApLmZpbHRlcihpID0+IGkpXG4gIHJldHVybiBzcmNBcnIucmVkdWNlKChhY2MsIGN1ciwgaSkgPT4gYWNjICYmIGRlc3RBcnJbaV0gPT09IGN1ciwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gZXJyTXNnIChzcmMsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIHJldHVybiBgQ2Fubm90ICR7ZnVuY05hbWV9ICcke3NyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7ZGVzdH0nLmBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNoZWNrUGF0aHMsXG4gIGNoZWNrUGF0aHNTeW5jLFxuICBjaGVja1BhcmVudFBhdGhzLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgaXNTcmNTdWJkaXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnNTeW5jID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJzU3luY1xuY29uc3QgdXRpbWVzTWlsbGlzU3luYyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzU3luY1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIGNvcHlTeW5jIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0cyA9IHsgZmlsdGVyOiBvcHRzIH1cbiAgfVxuXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybihgZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjlgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdjb3B5JylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcbiAgcmV0dXJuIGhhbmRsZUZpbHRlckFuZENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gaGFuZGxlRmlsdGVyQW5kQ29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKHNyYywgZGVzdCkpIHJldHVyblxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkZXN0UGFyZW50KSkgbWtkaXJzU3luYyhkZXN0UGFyZW50KVxuICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKHNyYywgZGVzdCkpIHJldHVyblxuICByZXR1cm4gZ2V0U3RhdHMoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHMgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdFN5bmMgPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdFN5bmMgOiBmcy5sc3RhdFN5bmNcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRTeW5jKHNyYylcblxuICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gb25EaXIoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZpbGUoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKCkpIHJldHVybiBvbkZpbGUoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc1N5bWJvbGljTGluaygpKSByZXR1cm4gb25MaW5rKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGlua1N5bmMoZGVzdClcbiAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSBoYW5kbGVUaW1lc3RhbXBzKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0KVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzIChzcmNNb2RlLCBzcmMsIGRlc3QpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSlcbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdClcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kU3luYyhkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0KSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyYylcbiAgcmV0dXJuIHV0aW1lc01pbGxpc1N5bmMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQgJiYgIWRlc3RTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgfVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLm1rZGlyU3luYyhkZXN0KVxuICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5yZWFkZGlyU3luYyhzcmMpLmZvckVhY2goaXRlbSA9PiBjb3B5RGlySXRlbShpdGVtLCBzcmMsIGRlc3QsIG9wdHMpKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHNyY0l0ZW0gPSBwYXRoLmpvaW4oc3JjLCBpdGVtKVxuICBjb25zdCBkZXN0SXRlbSA9IHBhdGguam9pbihkZXN0LCBpdGVtKVxuICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScpXG4gIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzKVxufVxuXG5mdW5jdGlvbiBvbkxpbmsgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgbGV0IHJlc29sdmVkU3JjID0gZnMucmVhZGxpbmtTeW5jKHNyYylcbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgfVxuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH0gZWxzZSB7XG4gICAgbGV0IHJlc29sdmVkRGVzdFxuICAgIHRyeSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBmcy5yZWFkbGlua1N5bmMoZGVzdClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGRlc3QgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnksXG4gICAgICAvLyBXaW5kb3dzIG1heSB0aHJvdyBVTktOT1dOIGVycm9yLiBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLFxuICAgICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFSU5WQUwnIHx8IGVyci5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgcmVzb2x2ZWREZXN0ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkRGVzdClcbiAgICB9XG4gICAgaWYgKHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWRTcmMsIHJlc29sdmVkRGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7cmVzb2x2ZWRTcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3Jlc29sdmVkRGVzdH0nLmApXG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICBpZiAoZnMuc3RhdFN5bmMoZGVzdCkuaXNEaXJlY3RvcnkoKSAmJiBzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cmVzb2x2ZWREZXN0fScgd2l0aCAnJHtyZXNvbHZlZFNyY30nLmApXG4gICAgfVxuICAgIHJldHVybiBjb3B5TGluayhyZXNvbHZlZFNyYywgZGVzdClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5TGluayAocmVzb2x2ZWRTcmMsIGRlc3QpIHtcbiAgZnMudW5saW5rU3luYyhkZXN0KVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bmNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHlTeW5jOiByZXF1aXJlKCcuL2NvcHktc3luYycpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuXG5mdW5jdGlvbiBwYXRoRXhpc3RzIChwYXRoKSB7XG4gIHJldHVybiBmcy5hY2Nlc3MocGF0aCkudGhlbigoKSA9PiB0cnVlKS5jYXRjaCgoKSA9PiBmYWxzZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhdGhFeGlzdHM6IHUocGF0aEV4aXN0cyksXG4gIHBhdGhFeGlzdHNTeW5jOiBmcy5leGlzdHNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJzXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5jb25zdCB1dGltZXNNaWxsaXMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIGNvcHkgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nICYmICFjYikge1xuICAgIGNiID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0cyA9IHsgZmlsdGVyOiBvcHRzIH1cbiAgfVxuXG4gIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkge31cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBjb25zb2xlLndhcm4oYGZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XFxuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5YClcbiAgfVxuXG4gIHN0YXQuY2hlY2tQYXRocyhzcmMsIGRlc3QsICdjb3B5JywgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IHN0YXRzXG4gICAgc3RhdC5jaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGlmIChvcHRzLmZpbHRlcikgcmV0dXJuIGhhbmRsZUZpbHRlcihjaGVja1BhcmVudERpciwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgICByZXR1cm4gY2hlY2tQYXJlbnREaXIoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJlbnREaXIgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgcGF0aEV4aXN0cyhkZXN0UGFyZW50LCAoZXJyLCBkaXJFeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgbWtkaXJzKGRlc3RQYXJlbnQsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXIgKG9uSW5jbHVkZSwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgUHJvbWlzZS5yZXNvbHZlKG9wdHMuZmlsdGVyKHNyYywgZGVzdCkpLnRoZW4oaW5jbHVkZSA9PiB7XG4gICAgaWYgKGluY2x1ZGUpIHJldHVybiBvbkluY2x1ZGUoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgcmV0dXJuIGNiKClcbiAgfSwgZXJyb3IgPT4gY2IoZXJyb3IpKVxufVxuXG5mdW5jdGlvbiBzdGFydENvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmIChvcHRzLmZpbHRlcikgcmV0dXJuIGhhbmRsZUZpbHRlcihnZXRTdGF0cywgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHMgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IHN0YXQgPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdCA6IGZzLmxzdGF0XG4gIHN0YXQoc3JjLCAoZXJyLCBzcmNTdGF0KSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcblxuICAgIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKCkpIHJldHVybiBvbkZpbGUoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgZWxzZSBpZiAoc3JjU3RhdC5pc1N5bWJvbGljTGluaygpKSByZXR1cm4gb25MaW5rKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkZpbGUgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gbWF5Q29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rKGRlc3QsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSBlbHNlIGlmIChvcHRzLmVycm9yT25FeGlzdCkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApKVxuICB9IGVsc2UgcmV0dXJuIGNiKClcbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMuY29weUZpbGUoc3JjLCBkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSByZXR1cm4gaGFuZGxlVGltZXN0YW1wc0FuZE1vZGUoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIGNiKVxuICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzQW5kTW9kZSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYikge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkge1xuICAgIHJldHVybiBtYWtlRmlsZVdyaXRhYmxlKGRlc3QsIHNyY01vZGUsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzQW5kTW9kZShzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzQW5kTW9kZShzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSwgY2IpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMCwgY2IpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzQW5kTW9kZSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYikge1xuICBzZXREZXN0VGltZXN0YW1wcyhzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNldERlc3RNb2RlIChkZXN0LCBzcmNNb2RlLCBjYikge1xuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjTW9kZSwgY2IpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QsIGNiKSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBmcy5zdGF0KHNyYywgKGVyciwgdXBkYXRlZFNyY1N0YXQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiB1dGltZXNNaWxsaXMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25EaXIgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICBpZiAoZGVzdFN0YXQgJiYgIWRlc3RTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7ZGVzdH0nIHdpdGggZGlyZWN0b3J5ICcke3NyY30nLmApKVxuICB9XG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5ta2RpcihkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29weURpcihzcmMsIGRlc3QsIG9wdHMsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMucmVhZGRpcihzcmMsIChlcnIsIGl0ZW1zKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gY29weURpckl0ZW1zKGl0ZW1zLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbXMgKGl0ZW1zLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IGl0ZW0gPSBpdGVtcy5wb3AoKVxuICBpZiAoIWl0ZW0pIHJldHVybiBjYigpXG4gIHJldHVybiBjb3B5RGlySXRlbShpdGVtcywgaXRlbSwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW1zLCBpdGVtLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IHNyY0l0ZW0gPSBwYXRoLmpvaW4oc3JjLCBpdGVtKVxuICBjb25zdCBkZXN0SXRlbSA9IHBhdGguam9pbihkZXN0LCBpdGVtKVxuICBzdGF0LmNoZWNrUGF0aHMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5JywgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXRzXG4gICAgc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmNJdGVtLCBkZXN0SXRlbSwgb3B0cywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gY29weURpckl0ZW1zKGl0ZW1zLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMucmVhZGxpbmsoc3JjLCAoZXJyLCByZXNvbHZlZFNyYykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICAgIH1cblxuICAgIGlmICghZGVzdFN0YXQpIHtcbiAgICAgIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICB9IGVsc2Uge1xuICAgICAgZnMucmVhZGxpbmsoZGVzdCwgKGVyciwgcmVzb2x2ZWREZXN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgICAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAgICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRUlOVkFMJyB8fCBlcnIuY29kZSA9PT0gJ1VOS05PV04nKSByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gICAgICAgICAgcmV0dXJuIGNiKGVycilcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWRTcmMsIHJlc29sdmVkRGVzdCkpIHtcbiAgICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYCkpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBkbyBub3QgY29weSBpZiBzcmMgaXMgYSBzdWJkaXIgb2YgZGVzdCBzaW5jZSB1bmxpbmtpbmdcbiAgICAgICAgLy8gZGVzdCBpbiB0aGlzIGNhc2Ugd291bGQgcmVzdWx0IGluIHJlbW92aW5nIHNyYyBjb250ZW50c1xuICAgICAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICAgICAgaWYgKGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cmVzb2x2ZWREZXN0fScgd2l0aCAnJHtyZXNvbHZlZFNyY30nLmApKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3B5TGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weUxpbmsgKHJlc29sdmVkU3JjLCBkZXN0LCBjYikge1xuICBmcy51bmxpbmsoZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5OiB1KHJlcXVpcmUoJy4vY29weScpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGlzV2luZG93cyA9IChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKVxuXG5mdW5jdGlvbiBkZWZhdWx0cyAob3B0aW9ucykge1xuICBjb25zdCBtZXRob2RzID0gW1xuICAgICd1bmxpbmsnLFxuICAgICdjaG1vZCcsXG4gICAgJ3N0YXQnLFxuICAgICdsc3RhdCcsXG4gICAgJ3JtZGlyJyxcbiAgICAncmVhZGRpcidcbiAgXVxuICBtZXRob2RzLmZvckVhY2gobSA9PiB7XG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgICBtID0gbSArICdTeW5jJ1xuICAgIG9wdGlvbnNbbV0gPSBvcHRpb25zW21dIHx8IGZzW21dXG4gIH0pXG5cbiAgb3B0aW9ucy5tYXhCdXN5VHJpZXMgPSBvcHRpb25zLm1heEJ1c3lUcmllcyB8fCAzXG59XG5cbmZ1bmN0aW9uIHJpbXJhZiAocCwgb3B0aW9ucywgY2IpIHtcbiAgbGV0IGJ1c3lUcmllcyA9IDBcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdGlvbnNcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIGFzc2VydChwLCAncmltcmFmOiBtaXNzaW5nIHBhdGgnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHAsICdzdHJpbmcnLCAncmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZycpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgZGVmYXVsdHMob3B0aW9ucylcblxuICByaW1yYWZfKHAsIG9wdGlvbnMsIGZ1bmN0aW9uIENCIChlcikge1xuICAgIGlmIChlcikge1xuICAgICAgaWYgKChlci5jb2RlID09PSAnRUJVU1knIHx8IGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpICYmXG4gICAgICAgICAgYnVzeVRyaWVzIDwgb3B0aW9ucy5tYXhCdXN5VHJpZXMpIHtcbiAgICAgICAgYnVzeVRyaWVzKytcbiAgICAgICAgY29uc3QgdGltZSA9IGJ1c3lUcmllcyAqIDEwMFxuICAgICAgICAvLyB0cnkgYWdhaW4sIHdpdGggdGhlIHNhbWUgZXhhY3QgY2FsbGJhY2sgYXMgdGhpcyBvbmUuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHJpbXJhZl8ocCwgb3B0aW9ucywgQ0IpLCB0aW1lKVxuICAgICAgfVxuXG4gICAgICAvLyBhbHJlYWR5IGdvbmVcbiAgICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykgZXIgPSBudWxsXG4gICAgfVxuXG4gICAgY2IoZXIpXG4gIH0pXG59XG5cbi8vIFR3byBwb3NzaWJsZSBzdHJhdGVnaWVzLlxuLy8gMS4gQXNzdW1lIGl0J3MgYSBmaWxlLiAgdW5saW5rIGl0LCB0aGVuIGRvIHRoZSBkaXIgc3R1ZmYgb24gRVBFUk0gb3IgRUlTRElSXG4vLyAyLiBBc3N1bWUgaXQncyBhIGRpcmVjdG9yeS4gIHJlYWRkaXIsIHRoZW4gZG8gdGhlIGZpbGUgc3R1ZmYgb24gRU5PVERJUlxuLy9cbi8vIEJvdGggcmVzdWx0IGluIGFuIGV4dHJhIHN5c2NhbGwgd2hlbiB5b3UgZ3Vlc3Mgd3JvbmcuICBIb3dldmVyLCB0aGVyZVxuLy8gYXJlIGxpa2VseSBmYXIgbW9yZSBub3JtYWwgZmlsZXMgaW4gdGhlIHdvcmxkIHRoYW4gZGlyZWN0b3JpZXMuICBUaGlzXG4vLyBpcyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGZpbGVzIHBlclxuLy8gZGlyZWN0b3J5IGlzID49IDEuXG4vL1xuLy8gSWYgYW55b25lIGV2ZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHRoZW4gSSBndWVzcyB0aGUgc3RyYXRlZ3kgY291bGRcbi8vIGJlIG1hZGUgY29uZmlndXJhYmxlIHNvbWVob3cuICBCdXQgdW50aWwgdGhlbiwgWUFHTkkuXG5mdW5jdGlvbiByaW1yYWZfIChwLCBvcHRpb25zLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgLy8gc3Vub3MgbGV0cyB0aGUgcm9vdCB1c2VyIHVubGluayBkaXJlY3Rvcmllcywgd2hpY2ggaXMuLi4gd2VpcmQuXG4gIC8vIHNvIHdlIGhhdmUgdG8gbHN0YXQgaGVyZSBhbmQgbWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlyLlxuICBvcHRpb25zLmxzdGF0KHAsIChlciwgc3QpID0+IHtcbiAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybiBjYihudWxsKVxuICAgIH1cblxuICAgIC8vIFdpbmRvd3MgY2FuIEVQRVJNIG9uIHN0YXQuICBMaWZlIGlzIHN1ZmZlcmluZy5cbiAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VQRVJNJyAmJiBpc1dpbmRvd3MpIHtcbiAgICAgIHJldHVybiBmaXhXaW5FUEVSTShwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgfVxuXG4gICAgaWYgKHN0ICYmIHN0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgfVxuXG4gICAgb3B0aW9ucy51bmxpbmsocCwgZXIgPT4ge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiBjYihudWxsKVxuICAgICAgICB9XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgcmV0dXJuIChpc1dpbmRvd3MpXG4gICAgICAgICAgICA/IGZpeFdpbkVQRVJNKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgICAgIDogcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUlTRElSJykge1xuICAgICAgICAgIHJldHVybiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjYihlcilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBmaXhXaW5FUEVSTSAocCwgb3B0aW9ucywgZXIsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICBvcHRpb25zLmNobW9kKHAsIDBvNjY2LCBlcjIgPT4ge1xuICAgIGlmIChlcjIpIHtcbiAgICAgIGNiKGVyMi5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5zdGF0KHAsIChlcjMsIHN0YXRzKSA9PiB7XG4gICAgICAgIGlmIChlcjMpIHtcbiAgICAgICAgICBjYihlcjMuY29kZSA9PT0gJ0VOT0VOVCcgPyBudWxsIDogZXIpXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zLnVubGluayhwLCBjYilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNU3luYyAocCwgb3B0aW9ucywgZXIpIHtcbiAgbGV0IHN0YXRzXG5cbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5jaG1vZFN5bmMocCwgMG82NjYpXG4gIH0gY2F0Y2ggKGVyMikge1xuICAgIGlmIChlcjIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBvcHRpb25zLnN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyMykge1xuICAgIGlmIChlcjMuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyIChwLCBvcHRpb25zLCBvcmlnaW5hbEVyLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgLy8gdHJ5IHRvIHJtZGlyIGZpcnN0LCBhbmQgb25seSByZWFkZGlyIG9uIEVOT1RFTVBUWSBvciBFRVhJU1QgKFN1bk9TKVxuICAvLyBpZiB3ZSBndWVzc2VkIHdyb25nLCBhbmQgaXQncyBub3QgYSBkaXJlY3RvcnksIHRoZW5cbiAgLy8gcmFpc2UgdGhlIG9yaWdpbmFsIGVycm9yLlxuICBvcHRpb25zLnJtZGlyKHAsIGVyID0+IHtcbiAgICBpZiAoZXIgJiYgKGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFRVhJU1QnIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpKSB7XG4gICAgICBybWtpZHMocCwgb3B0aW9ucywgY2IpXG4gICAgfSBlbHNlIGlmIChlciAmJiBlci5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIGNiKG9yaWdpbmFsRXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKGVyKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcm1raWRzIChwLCBvcHRpb25zLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgb3B0aW9ucy5yZWFkZGlyKHAsIChlciwgZmlsZXMpID0+IHtcbiAgICBpZiAoZXIpIHJldHVybiBjYihlcilcblxuICAgIGxldCBuID0gZmlsZXMubGVuZ3RoXG4gICAgbGV0IGVyclN0YXRlXG5cbiAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG9wdGlvbnMucm1kaXIocCwgY2IpXG5cbiAgICBmaWxlcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgcmltcmFmKHBhdGguam9pbihwLCBmKSwgb3B0aW9ucywgZXIgPT4ge1xuICAgICAgICBpZiAoZXJyU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXIpIHJldHVybiBjYihlcnJTdGF0ZSA9IGVyKVxuICAgICAgICBpZiAoLS1uID09PSAwKSB7XG4gICAgICAgICAgb3B0aW9ucy5ybWRpcihwLCBjYilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyB0aGlzIGxvb2tzIHNpbXBsZXIsIGFuZCBpcyBzdHJpY3RseSAqZmFzdGVyKiwgYnV0IHdpbGxcbi8vIHRpZSB1cCB0aGUgSmF2YVNjcmlwdCB0aHJlYWQgYW5kIGZhaWwgb24gZXhjZXNzaXZlbHlcbi8vIGRlZXAgZGlyZWN0b3J5IHRyZWVzLlxuZnVuY3Rpb24gcmltcmFmU3luYyAocCwgb3B0aW9ucykge1xuICBsZXQgc3RcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICBkZWZhdWx0cyhvcHRpb25zKVxuXG4gIGFzc2VydChwLCAncmltcmFmOiBtaXNzaW5nIHBhdGgnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHAsICdzdHJpbmcnLCAncmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZycpXG4gIGFzc2VydChvcHRpb25zLCAncmltcmFmOiBtaXNzaW5nIG9wdGlvbnMnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIG9wdGlvbnMsICdvYmplY3QnLCAncmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QnKVxuXG4gIHRyeSB7XG4gICAgc3QgPSBvcHRpb25zLmxzdGF0U3luYyhwKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gV2luZG93cyBjYW4gRVBFUk0gb24gc3RhdC4gIExpZmUgaXMgc3VmZmVyaW5nLlxuICAgIGlmIChlci5jb2RlID09PSAnRVBFUk0nICYmIGlzV2luZG93cykge1xuICAgICAgZml4V2luRVBFUk1TeW5jKHAsIG9wdGlvbnMsIGVyKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc3Vub3MgbGV0cyB0aGUgcm9vdCB1c2VyIHVubGluayBkaXJlY3Rvcmllcywgd2hpY2ggaXMuLi4gd2VpcmQuXG4gICAgaWYgKHN0ICYmIHN0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnVubGlua1N5bmMocClcbiAgICB9XG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgIHJldHVybiBpc1dpbmRvd3MgPyBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpIDogcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSAhPT0gJ0VJU0RJUicpIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgfVxufVxuXG5mdW5jdGlvbiBybWRpclN5bmMgKHAsIG9wdGlvbnMsIG9yaWdpbmFsRXIpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5ybWRpclN5bmMocClcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICB0aHJvdyBvcmlnaW5hbEVyXG4gICAgfSBlbHNlIGlmIChlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRUVYSVNUJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICBybWtpZHNTeW5jKHAsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChlci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcm1raWRzU3luYyAocCwgb3B0aW9ucykge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIG9wdGlvbnMucmVhZGRpclN5bmMocCkuZm9yRWFjaChmID0+IHJpbXJhZlN5bmMocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zKSlcblxuICBpZiAoaXNXaW5kb3dzKSB7XG4gICAgLy8gV2Ugb25seSBlbmQgdXAgaGVyZSBvbmNlIHdlIGdvdCBFTk9URU1QVFkgYXQgbGVhc3Qgb25jZSwgYW5kXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSByZW1vdmVkIGFsbCB0aGUga2lkcy5cbiAgICAvLyBTbywgd2Uga25vdyB0aGF0IGl0IHdvbid0IGJlIEVOT0VOVCBvciBFTk9URElSIG9yIGFueXRoaW5nIGVsc2UuXG4gICAgLy8gdHJ5IHJlYWxseSBoYXJkIHRvIGRlbGV0ZSBzdHVmZiBvbiB3aW5kb3dzLCBiZWNhdXNlIGl0IGhhcyBhXG4gICAgLy8gUFJPRk9VTkRMWSBhbm5veWluZyBoYWJpdCBvZiBub3QgY2xvc2luZyBoYW5kbGVzIHByb21wdGx5IHdoZW5cbiAgICAvLyBmaWxlcyBhcmUgZGVsZXRlZCwgcmVzdWx0aW5nIGluIHNwdXJpb3VzIEVOT1RFTVBUWSBlcnJvcnMuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGRvIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJldCA9IG9wdGlvbnMucm1kaXJTeW5jKHAsIG9wdGlvbnMpXG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgNTAwKSAvLyBnaXZlIHVwIGFmdGVyIDUwMG1zXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmV0ID0gb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByaW1yYWZcbnJpbXJhZi5zeW5jID0gcmltcmFmU3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCByaW1yYWYgPSByZXF1aXJlKCcuL3JpbXJhZicpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICByZW1vdmU6IHUocmltcmFmKSxcbiAgcmVtb3ZlU3luYzogcmltcmFmLnN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoZnVuY3Rpb24gZW1wdHlEaXIgKGRpciwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fVxuICBmcy5yZWFkZGlyKGRpciwgKGVyciwgaXRlbXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gbWtkaXIubWtkaXJzKGRpciwgY2FsbGJhY2spXG5cbiAgICBpdGVtcyA9IGl0ZW1zLm1hcChpdGVtID0+IHBhdGguam9pbihkaXIsIGl0ZW0pKVxuXG4gICAgZGVsZXRlSXRlbSgpXG5cbiAgICBmdW5jdGlvbiBkZWxldGVJdGVtICgpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtcy5wb3AoKVxuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgcmVtb3ZlLnJlbW92ZShpdGVtLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBkZWxldGVJdGVtKClcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufSlcblxuZnVuY3Rpb24gZW1wdHlEaXJTeW5jIChkaXIpIHtcbiAgbGV0IGl0ZW1zXG4gIHRyeSB7XG4gICAgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgfVxuXG4gIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgaXRlbSA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgcmVtb3ZlLnJlbW92ZVN5bmMoaXRlbSlcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVtcHR5RGlyU3luYyxcbiAgZW1wdHlkaXJTeW5jOiBlbXB0eURpclN5bmMsXG4gIGVtcHR5RGlyLFxuICBlbXB0eWRpcjogZW1wdHlEaXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGUgKGZpbGUsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIG1ha2VGaWxlICgpIHtcbiAgICBmcy53cml0ZUZpbGUoZmlsZSwgJycsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2soKVxuICAgIH0pXG4gIH1cblxuICBmcy5zdGF0KGZpbGUsIChlcnIsIHN0YXRzKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgIGlmICghZXJyICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm4gY2FsbGJhY2soKVxuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICAgIGZzLnN0YXQoZGlyLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIG1ha2UgaXRcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgIG1ha2VGaWxlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSBtYWtlRmlsZSgpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gcGFyZW50IGlzIG5vdCBhIGRpcmVjdG9yeVxuICAgICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgICAgZnMucmVhZGRpcihkaXIsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWxlU3luYyAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGUpXG4gIH0gY2F0Y2gge31cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLnN0YXRTeW5jKGRpcikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgLy8gcGFyZW50IGlzIG5vdCBhIGRpcmVjdG9yeVxuICAgICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgICBmcy5yZWFkZGlyU3luYyhkaXIpXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJZiB0aGUgc3RhdCBjYWxsIGFib3ZlIGZhaWxlZCBiZWNhdXNlIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICAgIGVsc2UgdGhyb3cgZXJyXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsICcnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlRmlsZTogdShjcmVhdGVGaWxlKSxcbiAgY3JlYXRlRmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIG1ha2VMaW5rIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gICAgZnMubGluayhzcmNwYXRoLCBkc3RwYXRoLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGNhbGxiYWNrKG51bGwpXG4gICAgfSlcbiAgfVxuXG4gIHBhdGhFeGlzdHMoZHN0cGF0aCwgKGVyciwgZGVzdGluYXRpb25FeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgZnMubHN0YXQoc3JjcGF0aCwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBkaXJFeGlzdHMpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIG1ha2VMaW5rKHNyY3BhdGgsIGRzdHBhdGgpXG4gICAgICAgIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICBtYWtlTGluayhzcmNwYXRoLCBkc3RwYXRoKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBjb25zdCBkZXN0aW5hdGlvbkV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZHN0cGF0aClcbiAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgdHJ5IHtcbiAgICBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBkaXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuXG4gIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlTGluazogdShjcmVhdGVMaW5rKSxcbiAgY3JlYXRlTGlua1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHR3byB0eXBlcyBvZiBwYXRocywgb25lIHJlbGF0aXZlIHRvIHN5bWxpbmssIGFuZCBvbmVcbiAqIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBDaGVja3MgaWYgcGF0aCBpcyBhYnNvbHV0ZSBvclxuICogcmVsYXRpdmUuIElmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgcGF0aCBpc1xuICogcmVsYXRpdmUgdG8gc3ltbGluayBvciByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGlzIGlzIGFuXG4gKiBpbml0aWF0aXZlIHRvIGZpbmQgYSBzbWFydGVyIGBzcmNwYXRoYCB0byBzdXBwbHkgd2hlbiBidWlsZGluZyBzeW1saW5rcy5cbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgd2hpY2ggcGF0aCB0byB1c2Ugb3V0IG9mIG9uZSBvZiB0aHJlZSBwb3NzaWJsZVxuICogdHlwZXMgb2Ygc291cmNlIHBhdGhzLiBUaGUgZmlyc3QgaXMgYW4gYWJzb2x1dGUgcGF0aC4gVGhpcyBpcyBkZXRlY3RlZCBieVxuICogYHBhdGguaXNBYnNvbHV0ZSgpYC4gV2hlbiBhbiBhYnNvbHV0ZSBwYXRoIGlzIHByb3ZpZGVkLCBpdCBpcyBjaGVja2VkIHRvXG4gKiBzZWUgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIGl0J3MgdXNlZCwgaWYgbm90IGFuIGVycm9yIGlzIHJldHVybmVkXG4gKiAoY2FsbGJhY2spLyB0aHJvd24gKHN5bmMpLiBUaGUgb3RoZXIgdHdvIG9wdGlvbnMgZm9yIGBzcmNwYXRoYCBhcmUgYVxuICogcmVsYXRpdmUgdXJsLiBCeSBkZWZhdWx0IE5vZGUncyBgZnMuc3ltbGlua2Agd29ya3MgYnkgY3JlYXRpbmcgYSBzeW1saW5rXG4gKiB1c2luZyBgZHN0cGF0aGAgYW5kIGV4cGVjdHMgdGhlIGBzcmNwYXRoYCB0byBiZSByZWxhdGl2ZSB0byB0aGUgbmV3bHlcbiAqIGNyZWF0ZWQgc3ltbGluay4gSWYgeW91IHByb3ZpZGUgYSBgc3JjcGF0aGAgdGhhdCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZmlsZVxuICogc3lzdGVtIGl0IHJlc3VsdHMgaW4gYSBicm9rZW4gc3ltbGluay4gVG8gbWluaW1pemUgdGhpcywgdGhlIGZ1bmN0aW9uXG4gKiBjaGVja3MgdG8gc2VlIGlmIHRoZSAncmVsYXRpdmUgdG8gc3ltbGluaycgc291cmNlIGZpbGUgZXhpc3RzLCBhbmQgaWYgaXRcbiAqIGRvZXMgaXQgd2lsbCB1c2UgaXQuIElmIGl0IGRvZXMgbm90LCBpdCBjaGVja3MgaWYgdGhlcmUncyBhIGZpbGUgdGhhdFxuICogZXhpc3RzIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGlmIGRvZXMgaXRzIHVzZWQuXG4gKiBUaGlzIHByZXNlcnZlcyB0aGUgZXhwZWN0YXRpb25zIG9mIHRoZSBvcmlnaW5hbCBmcy5zeW1saW5rIHNwZWMgYW5kIGFkZHNcbiAqIHRoZSBhYmlsaXR5IHRvIHBhc3MgaW4gYHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY290cnlgIHBhdGhzLlxuICovXG5cbmZ1bmN0aW9uIHN5bWxpbmtQYXRocyAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHJldHVybiBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlU3ltbGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICAgIH0pXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICByZXR1cm4gcGF0aEV4aXN0cyhyZWxhdGl2ZVRvRHN0LCAoZXJyLCBleGlzdHMpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgICAgICAgIHRvRHN0OiBwYXRoLnJlbGF0aXZlKGRzdGRpciwgc3JjcGF0aClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBsZXQgZXhpc3RzXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoc3JjcGF0aCkpIHtcbiAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHNyY3BhdGgpXG4gICAgaWYgKCFleGlzdHMpIHRocm93IG5ldyBFcnJvcignYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgY29uc3QgcmVsYXRpdmVUb0RzdCA9IHBhdGguam9pbihkc3RkaXIsIHNyY3BhdGgpXG4gICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhyZWxhdGl2ZVRvRHN0KVxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvQ3dkOiByZWxhdGl2ZVRvRHN0LFxuICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHNyY3BhdGgpXG4gICAgICBpZiAoIWV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0JylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHMsXG4gIHN5bWxpbmtQYXRoc1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmZ1bmN0aW9uIHN5bWxpbmtUeXBlIChzcmNwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyB0eXBlIDogY2FsbGJhY2tcbiAgdHlwZSA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyBmYWxzZSA6IHR5cGVcbiAgaWYgKHR5cGUpIHJldHVybiBjYWxsYmFjayhudWxsLCB0eXBlKVxuICBmcy5sc3RhdChzcmNwYXRoLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhudWxsLCAnZmlsZScpXG4gICAgdHlwZSA9IChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSA/ICdkaXInIDogJ2ZpbGUnXG4gICAgY2FsbGJhY2sobnVsbCwgdHlwZSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3ltbGlua1R5cGVTeW5jIChzcmNwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuXG4gIGlmICh0eXBlKSByZXR1cm4gdHlwZVxuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtUeXBlLFxuICBzeW1saW5rVHlwZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBfbWtkaXJzID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IG1rZGlycyA9IF9ta2RpcnMubWtkaXJzXG5jb25zdCBta2RpcnNTeW5jID0gX21rZGlycy5ta2RpcnNTeW5jXG5cbmNvbnN0IF9zeW1saW5rUGF0aHMgPSByZXF1aXJlKCcuL3N5bWxpbmstcGF0aHMnKVxuY29uc3Qgc3ltbGlua1BhdGhzID0gX3N5bWxpbmtQYXRocy5zeW1saW5rUGF0aHNcbmNvbnN0IHN5bWxpbmtQYXRoc1N5bmMgPSBfc3ltbGlua1BhdGhzLnN5bWxpbmtQYXRoc1N5bmNcblxuY29uc3QgX3N5bWxpbmtUeXBlID0gcmVxdWlyZSgnLi9zeW1saW5rLXR5cGUnKVxuY29uc3Qgc3ltbGlua1R5cGUgPSBfc3ltbGlua1R5cGUuc3ltbGlua1R5cGVcbmNvbnN0IHN5bWxpbmtUeXBlU3luYyA9IF9zeW1saW5rVHlwZS5zeW1saW5rVHlwZVN5bmNcblxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyB0eXBlIDogY2FsbGJhY2tcbiAgdHlwZSA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyBmYWxzZSA6IHR5cGVcblxuICBwYXRoRXhpc3RzKGRzdHBhdGgsIChlcnIsIGRlc3RpbmF0aW9uRXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiBjYWxsYmFjayhudWxsKVxuICAgIHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoLCAoZXJyLCByZWxhdGl2ZSkgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICAgICAgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUsIChlcnIsIHR5cGUpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICAgIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBkaXJFeGlzdHMpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBmcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKVxuICAgICAgICAgIG1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgZnMuc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaylcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBjb25zdCBkZXN0aW5hdGlvbkV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZHN0cGF0aClcbiAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgcmVsYXRpdmUgPSBzeW1saW5rUGF0aHNTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICB0eXBlID0gc3ltbGlua1R5cGVTeW5jKHJlbGF0aXZlLnRvQ3dkLCB0eXBlKVxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiB1KGNyZWF0ZVN5bWxpbmspLFxuICBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmaWxlID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IGxpbmsgPSByZXF1aXJlKCcuL2xpbmsnKVxuY29uc3Qgc3ltbGluayA9IHJlcXVpcmUoJy4vc3ltbGluaycpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBmaWxlXG4gIGNyZWF0ZUZpbGU6IGZpbGUuY3JlYXRlRmlsZSxcbiAgY3JlYXRlRmlsZVN5bmM6IGZpbGUuY3JlYXRlRmlsZVN5bmMsXG4gIGVuc3VyZUZpbGU6IGZpbGUuY3JlYXRlRmlsZSxcbiAgZW5zdXJlRmlsZVN5bmM6IGZpbGUuY3JlYXRlRmlsZVN5bmMsXG4gIC8vIGxpbmtcbiAgY3JlYXRlTGluazogbGluay5jcmVhdGVMaW5rLFxuICBjcmVhdGVMaW5rU3luYzogbGluay5jcmVhdGVMaW5rU3luYyxcbiAgZW5zdXJlTGluazogbGluay5jcmVhdGVMaW5rLFxuICBlbnN1cmVMaW5rU3luYzogbGluay5jcmVhdGVMaW5rU3luYyxcbiAgLy8gc3ltbGlua1xuICBjcmVhdGVTeW1saW5rOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmssXG4gIGNyZWF0ZVN5bWxpbmtTeW5jOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmtTeW5jLFxuICBlbnN1cmVTeW1saW5rOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiZnVuY3Rpb24gc3RyaW5naWZ5IChvYmosIHsgRU9MID0gJ1xcbicsIGZpbmFsRU9MID0gdHJ1ZSwgcmVwbGFjZXIgPSBudWxsLCBzcGFjZXMgfSA9IHt9KSB7XG4gIGNvbnN0IEVPRiA9IGZpbmFsRU9MID8gRU9MIDogJydcbiAgY29uc3Qgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2VzKVxuXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxuL2csIEVPTCkgKyBFT0Zcbn1cblxuZnVuY3Rpb24gc3RyaXBCb20gKGNvbnRlbnQpIHtcbiAgLy8gd2UgZG8gdGhpcyBiZWNhdXNlIEpTT04ucGFyc2Ugd291bGQgY29udmVydCBpdCB0byBhIHV0Zjggc3RyaW5nIGlmIGVuY29kaW5nIHdhc24ndCBzcGVjaWZpZWRcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSkgY29udGVudCA9IGNvbnRlbnQudG9TdHJpbmcoJ3V0ZjgnKVxuICByZXR1cm4gY29udGVudC5yZXBsYWNlKC9eXFx1RkVGRi8sICcnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgc3RyaW5naWZ5LCBzdHJpcEJvbSB9XG4iLCAibGV0IF9mc1xudHJ5IHtcbiAgX2ZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxufSBjYXRjaCAoXykge1xuICBfZnMgPSByZXF1aXJlKCdmcycpXG59XG5jb25zdCB1bml2ZXJzYWxpZnkgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKVxuY29uc3QgeyBzdHJpbmdpZnksIHN0cmlwQm9tIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcblxuYXN5bmMgZnVuY3Rpb24gX3JlYWRGaWxlIChmaWxlLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzaG91bGRUaHJvdyA9ICd0aHJvd3MnIGluIG9wdGlvbnMgPyBvcHRpb25zLnRocm93cyA6IHRydWVcblxuICBsZXQgZGF0YSA9IGF3YWl0IHVuaXZlcnNhbGlmeS5mcm9tQ2FsbGJhY2soZnMucmVhZEZpbGUpKGZpbGUsIG9wdGlvbnMpXG5cbiAgZGF0YSA9IHN0cmlwQm9tKGRhdGEpXG5cbiAgbGV0IG9ialxuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2UoZGF0YSwgb3B0aW9ucyA/IG9wdGlvbnMucmV2aXZlciA6IG51bGwpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmNvbnN0IHJlYWRGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF9yZWFkRmlsZSlcblxuZnVuY3Rpb24gcmVhZEZpbGVTeW5jIChmaWxlLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzaG91bGRUaHJvdyA9ICd0aHJvd3MnIGluIG9wdGlvbnMgPyBvcHRpb25zLnRocm93cyA6IHRydWVcblxuICB0cnkge1xuICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIG9wdGlvbnMpXG4gICAgY29udGVudCA9IHN0cmlwQm9tKGNvbnRlbnQpXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCwgb3B0aW9ucy5yZXZpdmVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF93cml0ZUZpbGUgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuXG4gIGF3YWl0IHVuaXZlcnNhbGlmeS5mcm9tQ2FsbGJhY2soZnMud3JpdGVGaWxlKShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbmNvbnN0IHdyaXRlRmlsZSA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZShfd3JpdGVGaWxlKVxuXG5mdW5jdGlvbiB3cml0ZUZpbGVTeW5jIChmaWxlLCBvYmosIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KG9iaiwgb3B0aW9ucylcbiAgLy8gbm90IHN1cmUgaWYgZnMud3JpdGVGaWxlU3luYyByZXR1cm5zIGFueXRoaW5nLCBidXQganVzdCBpbiBjYXNlXG4gIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3QganNvbmZpbGUgPSB7XG4gIHJlYWRGaWxlLFxuICByZWFkRmlsZVN5bmMsXG4gIHdyaXRlRmlsZSxcbiAgd3JpdGVGaWxlU3luY1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25maWxlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKc29uU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKc29uU3luYzoganNvbkZpbGUud3JpdGVGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gb3V0cHV0RmlsZSAoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICBwYXRoRXhpc3RzKGRpciwgKGVyciwgaXREb2VzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBpZiAoaXREb2VzKSByZXR1cm4gZnMud3JpdGVGaWxlKGZpbGUsIGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaylcblxuICAgIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuXG4gICAgICBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG91dHB1dEZpbGVTeW5jIChmaWxlLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICBpZiAoZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgLi4uYXJncylcbiAgfVxuICBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgb3V0cHV0RmlsZTogdShvdXRwdXRGaWxlKSxcbiAgb3V0cHV0RmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0JylcblxuYXN5bmMgZnVuY3Rpb24gb3V0cHV0SnNvbiAoZmlsZSwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShkYXRhLCBvcHRpb25zKVxuXG4gIGF3YWl0IG91dHB1dEZpbGUoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4uL291dHB1dCcpXG5cbmZ1bmN0aW9uIG91dHB1dEpzb25TeW5jIChmaWxlLCBkYXRhLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShkYXRhLCBvcHRpb25zKVxuXG4gIG91dHB1dEZpbGVTeW5jKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRwdXRKc29uU3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb24gPSB1KHJlcXVpcmUoJy4vb3V0cHV0LWpzb24nKSlcbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT04gPSBqc29uRmlsZS5vdXRwdXRKc29uXG5qc29uRmlsZS5vdXRwdXRKU09OU3luYyA9IGpzb25GaWxlLm91dHB1dEpzb25TeW5jXG5qc29uRmlsZS53cml0ZUpTT04gPSBqc29uRmlsZS53cml0ZUpzb25cbmpzb25GaWxlLndyaXRlSlNPTlN5bmMgPSBqc29uRmlsZS53cml0ZUpzb25TeW5jXG5qc29uRmlsZS5yZWFkSlNPTiA9IGpzb25GaWxlLnJlYWRKc29uXG5qc29uRmlsZS5yZWFkSlNPTlN5bmMgPSBqc29uRmlsZS5yZWFkSnNvblN5bmNcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGNvcHlTeW5jID0gcmVxdWlyZSgnLi4vY29weS1zeW5jJykuY29weVN5bmNcbmNvbnN0IHJlbW92ZVN5bmMgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVTeW5jXG5jb25zdCBta2RpcnBTeW5jID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJwU3luY1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIG1vdmVTeW5jIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgY29uc3Qgb3ZlcndyaXRlID0gb3B0cy5vdmVyd3JpdGUgfHwgb3B0cy5jbG9iYmVyIHx8IGZhbHNlXG5cbiAgY29uc3QgeyBzcmNTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ21vdmUnKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ21vdmUnKVxuICBta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSlcbiAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJlbW92ZVN5bmMoZGVzdClcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJylcbiAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICB0cnkge1xuICAgIGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHRocm93IGVyclxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZVxuICB9XG4gIGNvcHlTeW5jKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZVN5bmMoc3JjKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3ZlU3luYzogcmVxdWlyZSgnLi9tb3ZlLXN5bmMnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGNvcHkgPSByZXF1aXJlKCcuLi9jb3B5JykuY29weVxuY29uc3QgcmVtb3ZlID0gcmVxdWlyZSgnLi4vcmVtb3ZlJykucmVtb3ZlXG5jb25zdCBta2RpcnAgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBtb3ZlIChzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9XG5cbiAgY29uc3Qgb3ZlcndyaXRlID0gb3B0cy5vdmVyd3JpdGUgfHwgb3B0cy5jbG9iYmVyIHx8IGZhbHNlXG5cbiAgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0IH0gPSBzdGF0c1xuICAgIHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBta2RpcnAocGF0aC5kaXJuYW1lKGRlc3QpLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGlmIChvdmVyd3JpdGUpIHtcbiAgICByZXR1cm4gcmVtb3ZlKGRlc3QsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gICAgfSlcbiAgfVxuICBwYXRoRXhpc3RzKGRlc3QsIChlcnIsIGRlc3RFeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChkZXN0RXhpc3RzKSByZXR1cm4gY2IobmV3IEVycm9yKCdkZXN0IGFscmVhZHkgZXhpc3RzLicpKVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYikge1xuICBmcy5yZW5hbWUoc3JjLCBkZXN0LCBlcnIgPT4ge1xuICAgIGlmICghZXJyKSByZXR1cm4gY2IoKVxuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYikge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWVcbiAgfVxuICBjb3B5KHNyYywgZGVzdCwgb3B0cywgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiByZW1vdmUoc3JjLCBjYilcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3ZlOiB1KHJlcXVpcmUoJy4vbW92ZScpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5LXN5bmMnKSxcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZS1zeW5jJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dCcpLFxuICAuLi5yZXF1aXJlKCcuL3BhdGgtZXhpc3RzJyksXG4gIC4uLnJlcXVpcmUoJy4vcmVtb3ZlJylcbn1cblxuLy8gRXhwb3J0IGZzLnByb21pc2VzIGFzIGEgZ2V0dGVyIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgdHJpZ2dlclxuLy8gRXhwZXJpbWVudGFsV2FybmluZyBiZWZvcmUgZnMucHJvbWlzZXMgaXMgYWN0dWFsbHkgYWNjZXNzZWQuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZzLCAncHJvbWlzZXMnKSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdwcm9taXNlcycsIHtcbiAgICBnZXQgKCkgeyByZXR1cm4gZnMucHJvbWlzZXMgfVxuICB9KVxufVxuIiwgImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5cbmNvbnN0IENES19PVVRESVJfUFJFRklYID0gJ2Nkay1pbnRlZy5vdXQnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgaW50ZWdyYXRpb24gdGVzdFxuICpcbiAqIFRoaXMgdHlwZSBpcyBhIGRhdGEtb25seSBzdHJ1Y3R1cmUsIHNvIGl0IGNhbiB0cml2aWFsbHkgYmUgcGFzc2VkIHRvIHdvcmtlcnMuXG4gKiBEZXJpdmVkIGF0dHJpYnV0ZXMgYXJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGBJbnRlZ1Rlc3RgIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEluZm8ge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGRpcmVjdG9yeSB3ZSBkaXNjb3ZlcmVkIHRoaXMgdGVzdCBmcm9tXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkaXNjb3ZlcnlSb290OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVyaXZlZCBpbmZvcm1hdGlvbiBmb3IgSW50ZWdUZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdUZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbGF0aXZlIHBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFJlbGF0aXZlIGZyb20gdGhlIFwiZGlzY292ZXJ5IHJvb3RcIi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGVGaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdGhlIHRlc3QgaXMgaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheSBuYW1lIGZvciB0aGUgdGVzdFxuICAgKlxuICAgKiBEZXBlbmRzIG9uIHRoZSBkaXNjb3ZlcnkgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBMb29rcyBsaWtlIGBpbnRlZy5teXRlc3RgIG9yIGBwYWNrYWdlL3Rlc3QvaW50ZWcubXl0ZXN0YC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBzbmFwc2hvdCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90RGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRlbXBvcmFyeSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGlzIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZW1wb3JhcnlPdXRwdXREaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaW5mbzogSW50ZWdUZXN0SW5mbykge1xuICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShpbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpbmZvLmZpbGVOYW1lKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhdGgucGFyc2UodGhpcy5maWxlTmFtZSk7XG4gICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShpbmZvLmRpc2NvdmVyeVJvb3QsIGluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMuZGlyZWN0b3J5ID0gcGFyc2VkLmRpcjtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgcGFja2FnZSBkaXJlY3RvcnkgdGhlbiBqdXN0IHVzZSB0aGUgZmlsZU5hbWVcbiAgICAvLyBhcyB0aGUgdGVzdG5hbWUsIGJ1dCBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhcmVudCBkaXJlY3Rvcnkgd2l0aFxuICAgIC8vIG11bHRpcGxlIHBhY2thZ2VzIHRoZW4gdXNlIHRoZSBkaXJlY3RvcnkvZmlsZW5hbWUgYXMgdGhlIHRlc3RuYW1lXG4gICAgLy9cbiAgICAvLyBMb29rcyBlaXRoZXIgbGlrZSBgaW50ZWcubXl0ZXN0YCBvciBgcGFja2FnZS90ZXN0L2ludGVnLm15dGVzdGAuXG4gICAgY29uc3QgcmVsRGlzY292ZXJ5Um9vdCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgaW5mby5kaXNjb3ZlcnlSb290KTtcbiAgICB0aGlzLnRlc3ROYW1lID0gdGhpcy5kaXJlY3RvcnkgPT09IHBhdGguam9pbihyZWxEaXNjb3ZlcnlSb290LCAndGVzdCcpIHx8IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdClcbiAgICAgID8gcGFyc2VkLm5hbWVcbiAgICAgIDogcGF0aC5qb2luKHBhdGgucmVsYXRpdmUodGhpcy5pbmZvLmRpc2NvdmVyeVJvb3QsIHBhcnNlZC5kaXIpLCBwYXJzZWQubmFtZSk7XG5cbiAgICBjb25zdCBuYWtlZFRlc3ROYW1lID0gcGFyc2VkLm5hbWUuc2xpY2UoNik7IC8vIExlYXZlIG5hbWUgd2l0aG91dCAnaW50ZWcuJyBhbmQgJy50cydcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtuYWtlZFRlc3ROYW1lfS5pbnRlZy5zbmFwc2hvdGApO1xuICAgIHRoaXMudGVtcG9yYXJ5T3V0cHV0RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtDREtfT1VURElSX1BSRUZJWH0uJHtuYWtlZFRlc3ROYW1lfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0ZXN0IG1hdGNoZXMgdGhlIHVzZXItZ2l2ZW4gbmFtZVxuICAgKlxuICAgKiBXZSBhcmUgdmVyeSBsZW5pZW50IGhlcmUuIEEgbmFtZSBtYXRjaGVzIGlmIGl0IG1hdGNoZXM6XG4gICAqXG4gICAqIC0gVGhlIENXRC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBkaXNjb3Zlcnkgcm9vdC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBzdWl0ZSBuYW1lXG4gICAqIC0gVGhlIGFic29sdXRlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlcyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgIHRoaXMudGVzdE5hbWUsXG4gICAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUsXG4gICAgXS5pbmNsdWRlcyhuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1biBjYW4gYmUgcHJvdmlkZWQgaW4gYSBmaWxlXG4gKiBpbnN0ZWFkIG9mIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGxpc3Qgb2YgdGVzdHNcbiAgICogcHJvdmlkZWQgd2lsbCBiZSBleGNsdWRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdyYXRpb25UZXN0cyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGZpbGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgdGVzdFxuICAgKiB0byBlaXRoZXIgcnVuIG9yIGV4Y2x1ZGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIEludGVncmF0aW9uIFRlc3RzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZmlsZTogSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgICBjb25zdCBmb3VuZFRlc3RzID0gYXdhaXQgdGhpcy5kaXNjb3ZlcigpO1xuXG4gICAgY29uc3QgYWxsVGVzdHMgPSB0aGlzLmZpbHRlclRlc3RzKGZvdW5kVGVzdHMsIGZpbGUudGVzdHMsIGZpbGUuZXhjbHVkZSk7XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVzZXIgcHJvdmlkZXMgYSBsaXN0IG9mIHRlc3RzLCB0aGVzZSBjYW4gZWl0aGVyIGJlIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIG9yIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLlxuICAgKlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgcHJvdmlkZWQgdmFsaWQgdGVzdHMuXG4gICAqICAgSWYgdGhleSBoYXZlIHByb3ZpZGVkIGEgdGVzdCBuYW1lIHRoYXQgd2UgZG9uJ3QgZmluZCwgdGhlbiB3ZSB3cml0ZSBvdXQgdGhhdCBlcnJvciBtZXNzYWdlLlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLCB0aGVuIHdlIGRpc2NvdmVyIGFsbCBhdmFpbGFibGUgdGVzdHMgYW5kIGZpbHRlciBvdXQgdGhlIHRlc3RzIHRoYXQgd2VyZSBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgZmlsdGVyVGVzdHMoZGlzY292ZXJlZFRlc3RzOiBJbnRlZ1Rlc3RbXSwgcmVxdWVzdGVkVGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgaWYgKCFyZXF1ZXN0ZWRUZXN0cykge1xuICAgICAgcmV0dXJuIGRpc2NvdmVyZWRUZXN0cztcbiAgICB9XG5cblxuICAgIGNvbnN0IGFsbFRlc3RzID0gZGlzY292ZXJlZFRlc3RzLmZpbHRlcih0ID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0ZWRUZXN0cy5zb21lKHBhdHRlcm4gPT4gdC5tYXRjaGVzKHBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBtYXRjaGVzICE9PSAhIWV4Y2x1ZGU7IC8vIExvb2tzIHdlaXJkIGJ1dCBpcyBlcXVhbCB0byAobWF0Y2hlcyAmJiAhZXhjbHVkZSkgfHwgKCFtYXRjaGVzICYmIGV4Y2x1ZGUpXG4gICAgfSk7XG5cbiAgICAvLyBJZiBub3QgZXhjbHVkaW5nLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIG1hdGNoZWQgYXQgbGVhc3Qgb25lIHRlc3RcbiAgICBpZiAoIWV4Y2x1ZGUpIHtcbiAgICAgIGNvbnN0IHVubWF0Y2hlZFBhdHRlcm5zID0gcmVxdWVzdGVkVGVzdHMuZmlsdGVyKHBhdHRlcm4gPT4gIWRpc2NvdmVyZWRUZXN0cy5zb21lKHQgPT4gdC5tYXRjaGVzKHBhdHRlcm4pKSk7XG4gICAgICBmb3IgKGNvbnN0IHVubWF0Y2hlZCBvZiB1bm1hdGNoZWRQYXR0ZXJucykge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgTm8gc3VjaCBpbnRlZyB0ZXN0OiAke3VubWF0Y2hlZH1cXG5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1bm1hdGNoZWRQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBBdmFpbGFibGUgdGVzdHM6ICR7ZGlzY292ZXJlZFRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignICcpfVxcbmApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgdGVzdHMgdG8gbG9vayBmb3IsIG90aGVyd2lzZVxuICAgKiBpdCB3aWxsIGxvb2sgZm9yIGFsbCB0ZXN0cyBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICpcbiAgICogQHBhcmFtIHRlc3RzIFRlc3RzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSwgdW5kZWZpbmVkIG1lYW5zIGluY2x1ZGUgYWxsIHRlc3RzLlxuICAgKiBAcGFyYW0gZXhjbHVkZSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlBcmdzKHRlc3RzPzogc3RyaW5nW10sIGV4Y2x1ZGU/OiBib29sZWFuKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGRpc2NvdmVyZWRUZXN0cyA9IGF3YWl0IHRoaXMuZGlzY292ZXIoKTtcblxuICAgIGNvbnN0IGFsbFRlc3RzID0gdGhpcy5maWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHMsIHRlc3RzLCBleGNsdWRlKTtcblxuICAgIHJldHVybiBhbGxUZXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGlzY292ZXIoKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5yZWFkVHJlZSgpO1xuICAgIGNvbnN0IGludGVncyA9IGZpbGVzLmZpbHRlcihmaWxlTmFtZSA9PiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5zdGFydHNXaXRoKCdpbnRlZy4nKSAmJiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5lbmRzV2l0aCgnLmpzJykpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoaW50ZWdzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdChmaWxlczogc3RyaW5nW10pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgcmV0dXJuIGZpbGVzLm1hcChmaWxlTmFtZSA9PiBuZXcgSW50ZWdUZXN0KHsgZGlzY292ZXJ5Um9vdDogdGhpcy5kaXJlY3RvcnksIGZpbGVOYW1lIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHsgcmV0LnB1c2goZnVsbFBhdGgpOyB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7IGF3YWl0IHJlY3Vyc2UocGF0aC5qb2luKGZ1bGxQYXRoKSk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCByZWN1cnNlKHRoaXMuZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcblxuLyoqXG4gKiBUaGUgYWdncmVnYXRlIHJlc3VsdHMgZnJvbSBydW5uaW5nIGFzc2VydGlvbnMgb24gYSB0ZXN0IGNhc2VcbiAqL1xuZXhwb3J0IHR5cGUgQXNzZXJ0aW9uUmVzdWx0cyA9IHsgW2lkOiBzdHJpbmddOiBBc3NlcnRpb25SZXN1bHQgfTtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGluZGl2aWR1YWwgYXNzZXJ0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXJ0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gbWVzc2FnZS4gSWYgdGhlIGFzc2VydGlvbiBmYWlsZWQsIHRoaXMgd2lsbFxuICAgKiBpbmNsdWRlIHRoZSByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFzc2VydGlvbiBzdWNjZWVkZWQgb3IgZmFpbGVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdzdWNjZXNzJyB8ICdmYWlsJztcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIGFuIGludGVncmF0aW9uIHRlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RXb3JrZXJDb25maWcgZXh0ZW5kcyBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdHJ1Y3RpdmVDaGFuZ2VzPzogRGVzdHJ1Y3RpdmVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvbiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlc3RydWN0aXZlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBsb2dpY2FsSWQgb2YgdGhlIHJlc291cmNlIHdpdGggYSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhY2sgdGhhdCBjb250YWlucyB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGltcGFjdCBvZiB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBpbXBhY3Q6IFJlc291cmNlSW1wYWN0O1xufVxuXG5cbi8qKlxuICogUmVwcmVzZW50cyBpbnRlZ3JhdGlvbiB0ZXN0cyBtZXRyaWNzIGZvciBhIGdpdmVuIHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyTWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB0ZXN0IHdhcyBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHdvcmtlci5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWwgdGVzdCBkdXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQgdGhlXG4gICAqIHdvcmtlciBleGVjdXRlZC5cbiAgICpcbiAgICogTWFwIG9mIHRlc3ROYW1lIHRvIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgdGhhdCB3YXMgdXNlZCB0byBydW4gdGhlIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJldGFpbiBmYWlsZWQgc25hcHNob3QgY29tcGFyaXNvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2UgbW9kZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCByZXN1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdCYXRjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmFpbGVkIHRlc3RzXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRUZXN0czogSW50ZWdUZXN0SW5mb1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEludGVncmF0aW9uIHRlc3QgbWV0cmljcy4gRWFjaCBlbnRyeSBpbiB0aGVcbiAgICogbGlzdCByZXByZXNlbnRzIG1ldHJpY3MgZnJvbSBhIHNpbmdsZSB3b3JrZXIgKGFjY291bnQgKyByZWdpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW107XG59XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBydW5cbiAgICogaW4gdGhpcyBiYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHRoZSBzdGFja3MgYXQgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBpcyBzZXQgdG8gYHRydWVgIHRoZSBzbmFwc2hvdCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQgX3dpdGhvdXRfIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogVGhlIHJlc3VsdGluZyBzbmFwc2hvdCBTSE9VTEQgTk9UIGJlIGNoZWNrZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHZlcmJvc2UgbG9nZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgc3RhY2sgdXBkYXRlIHdvcmtmbG93IHdpbGwgYmUgZGlzYWJsZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlV29ya2Zsb3c/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgcG9zc2libGUgcmVhc29ucyBmb3IgYSBkaWFnbm9zdGljXG4gKi9cbmV4cG9ydCBlbnVtIERpYWdub3N0aWNSZWFzb24ge1xuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlcmVcbiAgICogaXMgbm90IGV4aXN0aW5nIHNuYXBzaG90XG4gICAqL1xuICBOT19TTkFQU0hPVCA9ICdOT19TTkFQU0hPVCcsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGZhaWxlZFxuICAgKi9cbiAgVEVTVF9GQUlMRUQgPSAnVEVTVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgVEVTVF9FUlJPUiA9ICdURVNUX0VSUk9SJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlIGFjdHVhbFxuICAgKiBzbmFwc2hvdCB3YXMgZGlmZmVyZW50IHRoYW4gdGhlIGV4cGVjdGVkIHNuYXBzaG90XG4gICAqL1xuICBTTkFQU0hPVF9GQUlMRUQgPSAnU05BUFNIT1RfRkFJTEVEJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlcmUgd2FzIGFuIGVycm9yIGV4ZWN1dGluZyBpdFxuICAgKi9cbiAgU05BUFNIT1RfRVJST1IgPSAnU05BUFNIT1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBzdWNjZWVkZWRcbiAgICovXG4gIFNOQVBTSE9UX1NVQ0NFU1MgPSAnU05BUFNIT1RfU1VDQ0VTUycsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgVEVTVF9TVUNDRVNTID0gJ1RFU1RfU1VDQ0VTUycsXG5cbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gZmFpbGVkXG4gICAqL1xuICBBU1NFUlRJT05fRkFJTEVEID0gJ0FTU0VSVElPTl9GQUlMRUQnLFxufVxuXG4vKipcbiAqIEludGVncmF0aW9uIHRlc3QgZGlhZ25vc3RpY3NcbiAqIFRoaXMgaXMgdXNlZCB0byByZXBvcnQgYmFjayB0aGUgc3RhdHVzIG9mIGVhY2ggdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3N0aWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljIG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgaXQgdG9vayB0byBydW4gdGhlIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIGZvciB0aGUgZGlhZ25vc3RpY1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1lc3NhZ2VzIHRvIHByaW50XG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsTWVzc2FnZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50U3VtbWFyeSh0b3RhbDogbnVtYmVyLCBmYWlsZWQ6IG51bWJlcik6IHZvaWQge1xuICBpZiAoZmFpbGVkID4gMCkge1xuICAgIGxvZ2dlci5wcmludCgnJXM6ICAgICVzICVzLCAlcyB0b3RhbCcsIGNoYWxrLmJvbGQoJ1Rlc3RzJyksIGNoYWxrLnJlZChmYWlsZWQpLCBjaGFsay5yZWQoJ2ZhaWxlZCcpLCB0b3RhbCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsuZ3JlZW4odG90YWwpLCBjaGFsay5ncmVlbigncGFzc2VkJyksIHRvdGFsKTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgYXNzZXJ0aW9uIHJlc3VsdHMgc28gdGhhdCB0aGUgcmVzdWx0cyBjYW4gYmVcbiAqIHByaW50ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFzc2VydGlvblJlc3VsdHMocmVzdWx0czogQXNzZXJ0aW9uUmVzdWx0cyk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHRzKVxuICAgIC5tYXAoKFtpZCwgcmVzdWx0XSkgPT4gZm9ybWF0KCclc1xcbiVzJywgaWQsIHJlc3VsdC5tZXNzYWdlKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUHJpbnQgb3V0IHRoZSByZXN1bHRzIGZyb20gdGVzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50UmVzdWx0cyhkaWFnbm9zdGljOiBEaWFnbm9zdGljKTogdm9pZCB7XG4gIHN3aXRjaCAoZGlhZ25vc3RpYy5yZWFzb24pIHtcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFVOQ0hBTkdFRCAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX1NVQ0NFU1M6XG4gICAgICBsb2dnZXIuc3VjY2VzcygnICBTVUNDRVNTICAgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uTk9fU05BUFNIT1Q6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgTkVXICAgICAgICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBDSEFOR0VEICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0VSUk9SOlxuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0VSUk9SOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEVSUk9SICAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRkFJTEVEICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5BU1NFUlRJT05fRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEFTU0VSVCAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgfVxuICBmb3IgKGNvbnN0IGFkZGwgb2YgZGlhZ25vc3RpYy5hZGRpdGlvbmFsTWVzc2FnZXMgPz8gW10pIHtcbiAgICBsb2dnZXIucHJpbnQoYCAgICAgICR7YWRkbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMYWdnYXJkcyh0ZXN0TmFtZXM6IFNldDxzdHJpbmc+KSB7XG4gIGNvbnN0IHBhcnRzID0gW1xuICAgICcgICcsXG4gICAgYFdhaXRpbmcgZm9yICR7dGVzdE5hbWVzLnNpemV9IG1vcmVgLFxuICAgIHRlc3ROYW1lcy5zaXplIDwgMTAgPyBbJygnLCBBcnJheS5mcm9tKHRlc3ROYW1lcykuam9pbignLCAnKSwgJyknXS5qb2luKCcnKSA6ICcnLFxuICBdO1xuXG4gIGxvZ2dlci5wcmludChjaGFsay5ncmV5KHBhcnRzLmZpbHRlcih4ID0+IHgpLmpvaW4oJyAnKSkpO1xufSIsICIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBDREsgRXhlY1xuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogT3VyIG93biBleGVjdXRlIGZ1bmN0aW9uIHdoaWNoIGRvZXNuJ3QgdXNlIHNoZWxscyBhbmQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmU6IHN0cmluZ1tdLCBvcHRpb25zOiB7IGN3ZD86IHN0cmluZywgdmVyYm9zZT86IGJvb2xlYW4sIGVudj86IGFueSB9ID0geyB9KTogYW55IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kTGluZVswXSwgY29tbWFuZExpbmUuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsIG9wdGlvbnMudmVyYm9zZSA/ICdpbmhlcml0JyA6ICdwaXBlJ10sIC8vIGluaGVyaXQgU1RERVJSIGluIHZlcmJvc2UgbW9kZVxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmVudixcbiAgICB9LFxuICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gIH0pO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7IHRocm93IHByb2MuZXJyb3I7IH1cbiAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgaWYgKHByb2Nlc3Muc3RkZXJyKSB7IC8vIHdpbGwgYmUgJ251bGwnIGluIHZlcmJvc2UgbW9kZVxuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUocHJvYy5zdGRlcnIpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZXhpdGVkIHdpdGggJHtwcm9jLnN0YXR1cyA/IGBzdGF0dXMgJHtwcm9jLnN0YXR1c31gIDogYHNpZ25hbCAke3Byb2Muc2lnbmFsfWB9YCk7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBwcm9jLnN0ZG91dC50b1N0cmluZygndXRmLTgnKS50cmltKCk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgbGlzdCBvZiBsaXN0cyBpbnRvIGEgbGlzdCBvZiBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbjxUPih4czogVFtdW10pOiBUW10ge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgeHMpO1xufVxuXG4vKipcbiAqIENoYWluIGNvbW1hbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbihjb21tYW5kczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gY29tbWFuZHMuZmlsdGVyKGMgPT4gISFjKS5qb2luKCcgJiYgJyk7XG59XG5cblxuLyoqXG4gKiBBIGNsYXNzIGhvbGRpbmcgYSBzZXQgb2YgaXRlbXMgd2hpY2ggYXJlIGJlaW5nIGNyb3NzZWQgb2ZmIGluIHRpbWVcbiAqXG4gKiBJZiBpdCB0YWtlcyB0b28gbG9uZyB0byBjcm9zcyBvZmYgYSBuZXcgaXRlbSwgcHJpbnQgdGhlIGxpc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrTGlzdDxBPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtYWluaW5nID0gbmV3IFNldCh0aGlzLml0ZW1zKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgdGltZXI/OiBOb2RlSlMuVGltZW91dDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBBW10sIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogV29ya0xpc3RPcHRpb25zPEE+ID0ge30pIHtcbiAgICB0aGlzLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gNjBfMDAwO1xuICAgIHRoaXMuc2NoZWR1bGVUaW1lcigpO1xuICB9XG5cbiAgcHVibGljIGNyb3NzT2ZmKGl0ZW06IEEpIHtcbiAgICB0aGlzLnJlbWFpbmluZy5kZWxldGUoaXRlbSk7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICBpZiAodGhpcy5yZW1haW5pbmcuc2l6ZSA+IDApIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkb25lKCkge1xuICAgIHRoaXMucmVtYWluaW5nLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BUaW1lcigpIHtcbiAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlVGltZXIoKSB7XG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXBvcnQoKSwgdGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwb3J0KCkge1xuICAgIHRoaXMub3B0aW9ucy5vblRpbWVvdXQ/Lih0aGlzLnJlbWFpbmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrTGlzdE9wdGlvbnM8QT4ge1xuICAvKipcbiAgICogV2hlbiB0byByZXBseSB3aXRoIHJlbWFpbmluZyBpdGVtc1xuICAgKlxuICAgKiBAZGVmYXVsdCA2MDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRpbWVvdXQgaGl0c1xuICAgKi9cbiAgcmVhZG9ubHkgb25UaW1lb3V0PzogKHg6IFNldDxBPikgPT4gdm9pZDtcbn0iLCAiaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcHJpbnRSZXN1bHRzLCBwcmludFN1bW1hcnksIEludGVnQmF0Y2hSZXNwb25zZSwgSW50ZWdUZXN0T3B0aW9ucywgSW50ZWdSdW5uZXJNZXRyaWNzIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFuIGludGVncmF0aW9uIHRlc3QgYmF0Y2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RCYXRjaFJlcXVlc3QgZXh0ZW5kcyBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHRvIHJ1biB0aGlzIGJhdGNoIGluXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgYWxsIGludGVncmF0aW9uIHRlc3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0UnVuT3B0aW9ucyBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbnMgdG8gcnVuIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyBhY3Jvc3MuXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBydW5uZXIgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsXG4gICAqL1xuICByZWFkb25seSByZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBBV1MgcHJvZmlsZXMuIFRoaXMgd2lsbCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHJlZ2lvbnNgXG4gICAqIHRvIHJ1biB0ZXN0cyBpbiBwYXJhbGxlbCBhY3Jvc3MgYWNjb3VudHMgKyByZWdpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2VycG9vbCB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbDtcbn1cblxuLyoqXG4gKiBSdW4gSW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5JbnRlZ3JhdGlvblRlc3RzKG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbiwgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10gfT4ge1xuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5SdW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGZvciBmYWlsZWQgdGVzdHMuLi5cXG4nKTtcbiAgbG9nZ2VyLnByaW50KFxuICAgICdSdW5uaW5nIGluIHBhcmFsbGVsIGFjcm9zcyAlc3JlZ2lvbnM6ICVzJyxcbiAgICBvcHRpb25zLnByb2ZpbGVzID8gYHByb2ZpbGVzICR7b3B0aW9ucy5wcm9maWxlcy5qb2luKCcsICcpfSBhbmQgYDogJycsXG4gICAgb3B0aW9ucy5yZWdpb25zLmpvaW4oJywgJykpO1xuICBjb25zdCB0b3RhbFRlc3RzID0gb3B0aW9ucy50ZXN0cy5sZW5ndGg7XG5cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwob3B0aW9ucyk7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblRlc3QgUmVzdWx0czogXFxuJyk7XG4gIHByaW50U3VtbWFyeSh0b3RhbFRlc3RzLCByZXNwb25zZXMuZmFpbGVkVGVzdHMubGVuZ3RoKTtcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiByZXNwb25zZXMuZmFpbGVkVGVzdHMubGVuZ3RoID09PSAwLFxuICAgIG1ldHJpY3M6IHJlc3BvbnNlcy5tZXRyaWNzLFxuICB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB3b3JrZXIgZm9yIGEgc2luZ2xlIGFjY291bnQgKyByZWdpb25cbiAqL1xuaW50ZXJmYWNlIEFjY291bnRXb3JrZXIge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0aGUgd29ya2VyIHNob3VsZCBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdGhhdCB0aGUgd29ya2VyIHNob3VsZCB1c2VcbiAgICogVGhpcyB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgJy0tcHJvZmlsZScgb3B0aW9uIHRvIHRoZSBDREsgQ0xJXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIEFjY291bnRXb3JrZXJzIGJhc2VkIG9uIHRoZSBsaXN0IG9mIHJlZ2lvbnMgYW5kIHByb2ZpbGVzXG4gKiBnaXZlbiB0byB0aGUgQ0xJLlxuICovXG5mdW5jdGlvbiBnZXRBY2NvdW50V29ya2VycyhyZWdpb25zOiBzdHJpbmdbXSwgcHJvZmlsZXM/OiBzdHJpbmdbXSk6IEFjY291bnRXb3JrZXJbXSB7XG4gIGNvbnN0IHdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IFtdO1xuICBmdW5jdGlvbiBwdXNoV29ya2VyKHByb2ZpbGU/OiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiByZWdpb25zKSB7XG4gICAgICB3b3JrZXJzLnB1c2goe1xuICAgICAgICByZWdpb24sXG4gICAgICAgIHByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb2ZpbGVzICYmIHByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgcHJvZmlsZXMgPz8gW10pIHtcbiAgICAgIHB1c2hXb3JrZXIocHJvZmlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHB1c2hXb3JrZXIoKTtcbiAgfVxuICByZXR1cm4gd29ya2Vycztcbn1cblxuLyoqXG4gKiBSdW5zIGEgc2V0IG9mIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhIGxpc3Qgb2YgQVdTIHJlZ2lvbnMuXG4gKiBPbmx5IGEgc2luZ2xlIHRlc3QgY2FuIGJlIHJ1biBhdCBhIHRpbWUgaW4gYSBnaXZlbiByZWdpb24uIE9uY2UgYSByZWdpb25cbiAqIGlzIGRvbmUgcnVubmluZyBhIHRlc3QsIHRoZSBuZXh0IHRlc3Qgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgcXVldWVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHNJblBhcmFsbGVsKFxuICBvcHRpb25zOiBJbnRlZ1Rlc3RSdW5PcHRpb25zLFxuKTogUHJvbWlzZTxJbnRlZ0JhdGNoUmVzcG9uc2U+IHtcblxuICBjb25zdCBxdWV1ZSA9IG9wdGlvbnMudGVzdHM7XG4gIGNvbnN0IHJlc3VsdHM6IEludGVnQmF0Y2hSZXNwb25zZSA9IHtcbiAgICBtZXRyaWNzOiBbXSxcbiAgICBmYWlsZWRUZXN0czogW10sXG4gIH07XG4gIGNvbnN0IGFjY291bnRXb3JrZXJzOiBBY2NvdW50V29ya2VyW10gPSBnZXRBY2NvdW50V29ya2VycyhvcHRpb25zLnJlZ2lvbnMsIG9wdGlvbnMucHJvZmlsZXMpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3Qod29ya2VyOiBBY2NvdW50V29ya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRlc3RzOiB7IFt0ZXN0TmFtZTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBkbyB7XG4gICAgICBjb25zdCB0ZXN0ID0gcXVldWUucG9wKCk7XG4gICAgICBpZiAoIXRlc3QpIGJyZWFrO1xuICAgICAgY29uc3QgdGVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxvZ2dlci5oaWdobGlnaHQoYFJ1bm5pbmcgdGVzdCAke3Rlc3QuZmlsZU5hbWV9IGluICR7d29ya2VyLnByb2ZpbGUgPyB3b3JrZXIucHJvZmlsZSArICcvJyA6ICcnfSR7d29ya2VyLnJlZ2lvbn1gKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBJbnRlZ1Rlc3RJbmZvW11bXSA9IGF3YWl0IG9wdGlvbnMucG9vbC5leGVjKCdpbnRlZ1Rlc3RXb3JrZXInLCBbe1xuICAgICAgICByZWdpb246IHdvcmtlci5yZWdpb24sXG4gICAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgICB0ZXN0czogW3Rlc3RdLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogb3B0aW9ucy51cGRhdGVXb3JrZmxvdyxcbiAgICAgIH1dLCB7XG4gICAgICAgIG9uOiBwcmludFJlc3VsdHMsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy5mYWlsZWRUZXN0cy5wdXNoKC4uLmZsYXR0ZW4ocmVzcG9uc2UpKTtcbiAgICAgIHRlc3RzW3Rlc3QuZmlsZU5hbWVdID0gKERhdGUubm93KCkgLSB0ZXN0U3RhcnQpIC8gMTAwMDtcbiAgICB9IHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3MgPSB7XG4gICAgICByZWdpb246IHdvcmtlci5yZWdpb24sXG4gICAgICBwcm9maWxlOiB3b3JrZXIucHJvZmlsZSxcbiAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICB0ZXN0cyxcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5tZXRyaWNzLnB1c2gobWV0cmljcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ya2VycyA9IGFjY291bnRXb3JrZXJzLm1hcCgod29ya2VyKSA9PiBydW5UZXN0KHdvcmtlcikpO1xuICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzKTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iLCAiaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0IH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4sIFdvcmtMaXN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcHJpbnRTdW1tYXJ5LCBwcmludFJlc3VsdHMsIEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBwcmludExhZ2dhcmRzIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIFJ1biBTbmFwc2hvdCB0ZXN0c1xuICogRmlyc3QgYmF0Y2ggdXAgdGhlIHRlc3RzLiBCeSBkZWZhdWx0IHRoZXJlIHdpbGwgYmUgMyB0ZXN0cyBwZXIgYmF0Y2guXG4gKiBVc2UgYSB3b3JrZXJwb29sIHRvIHJ1biB0aGUgYmF0Y2hlcyBpbiBwYXJhbGxlbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNuYXBzaG90VGVzdHMoXG4gIHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbCxcbiAgdGVzdHM6IEludGVnVGVzdFtdLFxuICBvcHRpb25zOiBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnVGVzdFdvcmtlckNvbmZpZ1tdPiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblZlcmlmeWluZyBpbnRlZ3JhdGlvbiB0ZXN0IHNuYXBzaG90cy4uLlxcbicpO1xuXG4gIGNvbnN0IHRvZG8gPSBuZXcgV29ya0xpc3QodGVzdHMubWFwKHQgPT4gdC50ZXN0TmFtZSksIHtcbiAgICBvblRpbWVvdXQ6IHByaW50TGFnZ2FyZHMsXG4gIH0pO1xuXG4gIGNvbnN0IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdGVzdHMubWFwKCh0ZXN0KSA9PiBwb29sLmV4ZWMoJ3NuYXBzaG90VGVzdFdvcmtlcicsIFt0ZXN0LmluZm8gLyogRGVoeWRyYXRlIGNsYXNzIC0+IGRhdGEgKi8sIG9wdGlvbnNdLCB7XG4gICAgICBvbjogKHgpID0+IHtcbiAgICAgICAgdG9kby5jcm9zc09mZih4LnRlc3ROYW1lKTtcbiAgICAgICAgcHJpbnRSZXN1bHRzKHgpO1xuICAgICAgfSxcbiAgICB9KSksXG4gICk7XG4gIHRvZG8uZG9uZSgpO1xuICBjb25zdCB0ZXN0c1RvUnVuID0gZmxhdHRlbihmYWlsZWRUZXN0cyk7XG5cbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuU25hcHNob3QgUmVzdWx0czogXFxuJyk7XG4gIHByaW50U3VtbWFyeSh0ZXN0cy5sZW5ndGgsIHRlc3RzVG9SdW4ubGVuZ3RoKTtcbiAgcmV0dXJuIHRlc3RzVG9SdW47XG5cbn1cbiIsICJleHBvcnQgKiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVnLXRlc3Qtd29ya2VyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctc25hcHNob3Qtd29ya2VyJztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgc2hpbTtcbmNsYXNzIFkxOE4ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgLy8gY29uZmlndXJhYmxlIG9wdGlvbnMuXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5IHx8ICcuL2xvY2FsZXMnO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzID0gdHlwZW9mIG9wdHMudXBkYXRlRmlsZXMgPT09ICdib29sZWFuJyA/IG9wdHMudXBkYXRlRmlsZXMgOiB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IG9wdHMubG9jYWxlIHx8ICdlbic7XG4gICAgICAgIHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlID0gdHlwZW9mIG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlID09PSAnYm9vbGVhbicgPyBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA6IHRydWU7XG4gICAgICAgIC8vIGludGVybmFsIHN0dWZmLlxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlID0gW107XG4gICAgfVxuICAgIF9fKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnZ2VkTGl0ZXJhbChhcmd1bWVudHNbMF0sIC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdID0gc3RyO1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIFt0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdIHx8IHN0cl0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgX19uKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGxldCBzdHIgPSBxdWFudGl0eSA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xuICAgICAgICBpZiAodGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXTtcbiAgICAgICAgICAgIHN0ciA9IGVudHJ5W3F1YW50aXR5ID09PSAxID8gJ29uZScgOiAnb3RoZXInXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdID0ge1xuICAgICAgICAgICAgICAgIG9uZTogc2luZ3VsYXIsXG4gICAgICAgICAgICAgICAgb3RoZXI6IHBsdXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYSAlZCBwbGFjZWhvbGRlciBpcyBwcm92aWRlZCwgYWRkIHF1YW50aXR5XG4gICAgICAgIC8vIHRvIHRoZSBhcmd1bWVudHMgZXhwYW5kZWQgYnkgdXRpbC5mb3JtYXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtzdHJdO1xuICAgICAgICBpZiAofnN0ci5pbmRleE9mKCclZCcpKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocXVhbnRpdHkpO1xuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIHZhbHVlcy5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cbiAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfdGFnZ2VkTGl0ZXJhbChwYXJ0cywgLi4uYXJncykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgc3RyICs9IHBhcnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9fLmFwcGx5KHRoaXMsIFtzdHJdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlV3JpdGUod29yaykge1xuICAgICAgICB0aGlzLndyaXRlUXVldWUucHVzaCh3b3JrKTtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgIH1cbiAgICBfcHJvY2Vzc1dyaXRlUXVldWUoKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgY29uc3Qgd29yayA9IHRoaXMud3JpdGVRdWV1ZVswXTtcbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmUgdGhlIGVucXVldWVkIHdvcmsuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHdvcmsuZGlyZWN0b3J5O1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB3b3JrLmxvY2FsZTtcbiAgICAgICAgY29uc3QgY2IgPSB3b3JrLmNiO1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2NhbGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlW2xvY2FsZV0sIG51bGwsIDIpO1xuICAgICAgICBzaGltLmZzLndyaXRlRmlsZShsYW5ndWFnZUZpbGUsIHNlcmlhbGl6ZWRMb2NhbGUsICd1dGYtOCcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIF90aGlzLndyaXRlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlYWRMb2NhbGVGaWxlKCkge1xuICAgICAgICBsZXQgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgYnVuZGxlciBzdWNoIGFzIHdlYnBhY2ssIHJlYWRGaWxlU3luYyBtYXkgbm90IGJlIGRlZmluZWQ6XG4gICAgICAgICAgICBpZiAoc2hpbS5mcy5yZWFkRmlsZVN5bmMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSBKU09OLnBhcnNlKHNoaW0uZnMucmVhZEZpbGVTeW5jKGxhbmd1YWdlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gJ3N5bnRheCBlcnJvciBpbiAnICsgbGFuZ3VhZ2VGaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0gPSBsb2NhbGVMb29rdXA7XG4gICAgfVxuICAgIF9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSkge1xuICAgICAgICBsZXQgZmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZSArICcuanNvbicpO1xuICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgJiYgIXRoaXMuX2ZpbGVFeGlzdHNTeW5jKGZpbGUpICYmIH5sb2NhbGUubGFzdEluZGV4T2YoJ18nKSkge1xuICAgICAgICAgICAgLy8gYXR0ZW1wdCBmYWxsYmFjayB0byBsYW5ndWFnZSBvbmx5XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUuc3BsaXQoJ18nKVswXSArICcuanNvbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeGlzdHNTeW5jKGxhbmd1YWdlRmlsZSkpXG4gICAgICAgICAgICAgICAgZmlsZSA9IGxhbmd1YWdlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gICAgX2ZpbGVFeGlzdHNTeW5jKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0uZXhpc3RzKGZpbGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHkxOG4kMShvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cblxudmFyIG5vZGVQbGF0Zm9ybVNoaW0gPSB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jOiBmcy5yZWFkRmlsZVN5bmMsXG4gICAgICAgIHdyaXRlRmlsZTogZnMud3JpdGVGaWxlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIHJlc29sdmU6IHBhdGgucmVzb2x2ZSxcbiAgICBleGlzdHM6IChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gICAgcmV0dXJuIHkxOG4kMShvcHRzLCBub2RlUGxhdGZvcm1TaGltKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geTE4bjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgY29uc3QgaXNDYW1lbENhc2UgPSBzdHIgIT09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPT0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFpc0NhbWVsQ2FzZSkge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHN0ci5pbmRleE9mKCctJykgPT09IC0xICYmIHN0ci5pbmRleE9mKCdfJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2FtZWxjYXNlID0gJyc7XG4gICAgICAgIGxldCBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGVhZGluZ0h5cGhlbnMgPSBzdHIubWF0Y2goL14tKy8pO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVhZGluZ0h5cGhlbnMgPyBsZWFkaW5nSHlwaGVuc1swXS5sZW5ndGggOiAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChuZXh0Q2hyVXBwZXIpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjaHIgPSBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIChjaHIgPT09ICctJyB8fCBjaHIgPT09ICdfJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hyICE9PSAnLScgJiYgY2hyICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBjYW1lbGNhc2UgKz0gY2hyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW1lbGNhc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIsIGpvaW5TdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlcmNhc2UgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICBqb2luU3RyaW5nID0gam9pblN0cmluZyB8fCAnLSc7XG4gICAgbGV0IG5vdENhbWVsY2FzZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNockxvd2VyID0gbG93ZXJjYXNlLmNoYXJBdChpKTtcbiAgICAgICAgY29uc3QgY2hyU3RyaW5nID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGNockxvd2VyICE9PSBjaHJTdHJpbmcgJiYgaSA+IDApIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBgJHtqb2luU3RyaW5nfSR7bG93ZXJjYXNlLmNoYXJBdChpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGNoclN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm90Q2FtZWxjYXNlO1xufVxuZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG5cbmZ1bmN0aW9uIHRva2VuaXplQXJnU3RyaW5nKGFyZ1N0cmluZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ1N0cmluZy5tYXAoZSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycgPyBlICsgJycgOiBlKTtcbiAgICB9XG4gICAgYXJnU3RyaW5nID0gYXJnU3RyaW5nLnRyaW0oKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IHByZXZDID0gbnVsbDtcbiAgICBsZXQgYyA9IG51bGw7XG4gICAgbGV0IG9wZW5pbmcgPSBudWxsO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgYXJnU3RyaW5nLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBwcmV2QyA9IGM7XG4gICAgICAgIGMgPSBhcmdTdHJpbmcuY2hhckF0KGlpKTtcbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgaWYgKCEocHJldkMgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3NbaV0pXG4gICAgICAgICAgICBhcmdzW2ldID0gJyc7XG4gICAgICAgIGFyZ3NbaV0gKz0gYztcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5cbnZhciBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleTtcbihmdW5jdGlvbiAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkpIHtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIlNUUklOR1wiXSA9IFwic3RyaW5nXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJOVU1CRVJcIl0gPSBcIm51bWJlclwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG59KShEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB8fCAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgPSB7fSkpO1xuXG5sZXQgbWl4aW47XG5jbGFzcyBZYXJnc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IoX21peGluKSB7XG4gICAgICAgIG1peGluID0gX21peGluO1xuICAgIH1cbiAgICBwYXJzZShhcmdzSW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYWxpYXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFycmF5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib29sZWFuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvZXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudlByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmFyZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX186IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogdW5kZWZpbmVkXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJnc0lucHV0KTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpO1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnY2FtZWwtY2FzZS1leHBhbnNpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NvbWJpbmUtYXJyYXlzJzogZmFsc2UsXG4gICAgICAgICAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5JzogdHJ1ZSxcbiAgICAgICAgICAgICdmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2hhbHQtYXQtbm9uLW9wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgJ25hcmdzLWVhdHMtb3B0aW9ucyc6IGZhbHNlLFxuICAgICAgICAgICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICAgICAgICAgJ3BhcnNlLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3NldC1wbGFjZWhvbGRlci1rZXknOiBmYWxzZSxcbiAgICAgICAgICAgICdzaG9ydC1vcHRpb24tZ3JvdXBzJzogdHJ1ZSxcbiAgICAgICAgICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgICAgICAgICAnc3RyaXAtZGFzaGVkJzogZmFsc2UsXG4gICAgICAgICAgICAndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnOiBmYWxzZVxuICAgICAgICB9LCBvcHRzLmNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5kZWZhdWx0KTtcbiAgICAgICAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgZW52UHJlZml4ID0gb3B0cy5lbnZQcmVmaXg7XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzT3B0aW9uID0gY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXyc7XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBfXyA9IG9wdHMuX18gfHwgbWl4aW4uZm9ybWF0O1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBib29sczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIHN0cmluZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY291bnRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5hcmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29lcmNpb25zOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAga2V5czogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmUgPSAvXi0oWzAtOV0rKFxcLlswLTldKyk/fFxcLlswLTldKykkLztcbiAgICAgICAgY29uc3QgbmVnYXRlZEJvb2xlYW4gPSBuZXcgUmVnRXhwKCdeLS0nICsgY29uZmlndXJhdGlvblsnbmVnYXRpb24tcHJlZml4J10gKyAnKC4rKScpO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5hcnJheSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQua2V5IDogb3B0O1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IE9iamVjdC5rZXlzKG9wdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUZsYWdLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICBib29sZWFuOiAnYm9vbHMnLFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmc6ICdzdHJpbmdzJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiAnbnVtYmVycydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUZsYWdLZXlzW2tleV07XG4gICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikucG9wKCk7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZsYWdzW2Fzc2lnbm1lbnRdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3MuYXJyYXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ib29sZWFuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ib29sc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuc3RyaW5nIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5udW1iZXIgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm51bWJlcnNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmNvdW50IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5jb3VudHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm5vcm1hbGl6ZSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubmFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMubmFyZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MubmFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29lcmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb2VyY2UpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29lcmNpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuY29uZmlnKSB8fCB0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KG9wdHMuY29uZmlnKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1thbGlhc10gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbGV0IG5vdEZsYWdzID0gW107XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSk7XG4gICAgICAgIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkQXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLS0nKTtcbiAgICAgICAgICAgIGxldCBicm9rZW47XG4gICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgbGV0IGxldHRlcnM7XG4gICAgICAgICAgICBsZXQgbTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGFyZyAhPT0gJy0tJyAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRydW5jYXRlZEFyZy5tYXRjaCgvLS0tKyg9fCQpLykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKz0vKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pICYmIGNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpID8gW2ZhbHNlXSA6IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIW5leHQubWF0Y2goL14tLykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rPS8pKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAhbmV4dC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVteLV0rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbGV0dGVyc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKG5leHQsIGZsYWdzLmJvb2xzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgZGVmYXVsdFZhbHVlKGxldHRlcnNbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCEvXigtfC0tKVteLV0vLnRlc3QobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tWzAtOV0kLykgJiZcbiAgICAgICAgICAgICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGFyZy5zbGljZSgxKSwgZmxhZ3MuYm9vbHMpKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpO1xuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3RGbGFnc09wdGlvbiAmJiBub3RGbGFncy5sZW5ndGgpXG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0gPSBbXTtcbiAgICAgICAgbm90RmxhZ3MuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnLS0nICYmIGtleS5pbmNsdWRlcygnLScpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3Zba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzdHJpcC1hbGlhc2VkJ10pIHtcbiAgICAgICAgICAgIFtdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgYWxpYXMuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXNdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHVzaFBvc2l0aW9uYWwoYXJnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUNvZXJjZWROdW1iZXIgPSBtYXliZUNvZXJjZU51bWJlcignXycsIGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8ucHVzaChtYXliZUNvZXJjZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdE5hcmdzKGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBpaTtcbiAgICAgICAgICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIHRvRWF0ID0gdHlwZW9mIHRvRWF0ICE9PSAnbnVtYmVyJyB8fCBpc05hTih0b0VhdCkgPyAxIDogdG9FYXQ7XG4gICAgICAgICAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdBcmd1bWVudCB1bmV4cGVjdGVkIGZvcjogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdG9FYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzW2lpXS5tYXRjaCgvXi1bXjAtOV0vKSB8fCBhcmdzW2lpXS5tYXRjaChuZWdhdGl2ZSkgfHwgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnc1tpaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlIDwgdG9FYXQpXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb25zdW1lZCA9IE1hdGgubWluKGF2YWlsYWJsZSwgdG9FYXQpO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgY29uc3VtZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChpICsgY29uc3VtZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdEFycmF5KGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBhcmdzVG9TZXQgPSBbXTtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gYXJnQWZ0ZXJFcXVhbFNpZ24gfHwgYXJnc1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgICAgICAgICAgKGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiAvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFyZ3NDb3VudCAmJiB0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgKChuYXJnc0NvdW50ICYmIGFyZ3NUb1NldC5sZW5ndGggPCBuYXJnc0NvdW50KSB8fFxuICAgICAgICAgICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzVG9TZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0QXJnKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIHNwbGl0S2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gW10uY29uY2F0KHNwbGl0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0aWVzID0ga2V5UHJvcGVydGllcy5jb25jYXQoYSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG1peGluLm5vcm1hbGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkTmV3QWxpYXMoa2V5LCBhbGlhcykge1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldICYmIGZsYWdzLmFsaWFzZXNba2V5XS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXTtcbiAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2FsaWFzXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2FsaWFzXSAmJiBmbGFncy5hbGlhc2VzW2FsaWFzXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoYWxpYXMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodmFsWzBdID09PSBcIidcIiB8fCB2YWxbMF0gPT09ICdcIicpICYmXG4gICAgICAgICAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxLCB2YWwubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiYgKGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsLm1hcCgodmFsKSA9PiB7IHJldHVybiBtaXhpbi5ub3JtYWxpemUodmFsKTsgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1peGluLm5vcm1hbGl6ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gJiYga2V5ID09PSAnXycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENvZXJjZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcih2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsncGFyc2UtbnVtYmVycyddICYmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWcoYXJndikge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGNvbmZpZ0xvb2t1cCwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY29uZmlncykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbmZpZ1BhdGggPSBtaXhpbi5yZXNvbHZlKG1peGluLmN3ZCgpLCBjb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSBmbGFncy5jb25maWdzW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSByZXNvbHZlQ29uZmlnKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1peGluLnJlcXVpcmUocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3QoY29uZmlnLCBwcmV2KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZXYgPyBwcmV2ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhmdWxsS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gZW52VmFyLnNwbGl0KCdfXycpLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleXMuam9pbignLicpLCBlbnZbZW52VmFyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyhhcmd2KSB7XG4gICAgICAgICAgICBsZXQgY29lcmNlO1xuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgY29lcmNlKGFyZ3Zba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpKS5mb3JFYWNoKGFsaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuYWRkKGFsaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpIHtcbiAgICAgICAgICAgIGZsYWdzLmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc2FuaXRpemVLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG9ba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XS5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzYW5pdGl6ZUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cyk7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J107XG4gICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBpbmNyZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGluY3JlbWVudChvW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZHVwbGljYXRlICYmIEJvb2xlYW4oaXNUeXBlQXJyYXkpID09PSBCb29sZWFuKGlzVmFsdWVBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBvW2tleV0uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9ba2V5XSA9PT0gdW5kZWZpbmVkICYmIGlzVHlwZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaXNWYWx1ZUFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZHVwbGljYXRlICYmICEob1trZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbXS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvLS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhbWVsQ2FzZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gZGVjYW1lbGl6ZSh4LCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1t4XSA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0uZmlsdGVyKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggIT09IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZyk7XG4gICAgICAgICAgICBjb25zdCBzZXRBbGlhcyA9IHRvQ2hlY2suZmluZChrZXkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBzZXRBbGlhcyA/IGZsYWdbc2V0QWxpYXNdIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQW55RmxhZyhrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzS2V5cyA9IE9iamVjdC5rZXlzKGZsYWdzKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3NLZXlzLm1hcChrID0+IGZsYWdzW2tdKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmxhZykgPyBmbGFnLmluY2x1ZGVzKGtleSkgOiBmbGFnW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNGbGFnc01hdGNoaW5nKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoLi4ucGF0dGVybnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBoYXNBbnlGbGFnKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0FsbFNob3J0RmxhZ3MoYXJnKSB7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQWxsU2hvcnRGbGFncyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmxhZ1dpdGhFcXVhbHMgPSAvXi0rKFtePV0rPyk9W1xcc1xcU10qJC87XG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5EaWdpdHMgPSAvXi0rKFtePV0rP1xcZCspJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyA9IC9eLSsoW149XSs/KVxcVysuKiQvO1xuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBndWVzc1R5cGUoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklORztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVI7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5hcnJheS4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBmbGFncy5hbGlhc2VzKSxcbiAgICAgICAgICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdGVkOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0ZWQpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgbmV3QWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgbmV3QWxpYXNlcylcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21iaW5lQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgY29uc3QgYWxpYXNBcnJheXMgPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGV0IGNoYW5nZSA9IHRydWU7XG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgd2hpbGUgKGNoYW5nZSkge1xuICAgICAgICBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhbGlhc0FycmF5c1tpXS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5c1tpXSA9IGFsaWFzQXJyYXlzW2ldLmNvbmNhdChhbGlhc0FycmF5c1tpaV0pO1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuZnVuY3Rpb24gaW5jcmVtZW50KG9yaWcpIHtcbiAgICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxO1xufVxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBwYXJzZXIgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zYCk7XG4gICAgfVxufVxuY29uc3QgZW52ID0gcHJvY2VzcyA/IHByb2Nlc3MuZW52IDoge307XG5jb25zdCBwYXJzZXIgPSBuZXcgWWFyZ3NQYXJzZXIoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW52OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIG5vcm1hbGl6ZTogcGF0aC5ub3JtYWxpemUsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdvbmx5IC5qc29uIGNvbmZpZyBmaWxlcyBhcmUgc3VwcG9ydGVkIGluIEVTTScpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5jb25zdCB5YXJnc1BhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihhcmdzLCBvcHRzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5hcmd2O1xufTtcbnlhcmdzUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG59O1xueWFyZ3NQYXJzZXIuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xueWFyZ3NQYXJzZXIuZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemU7XG55YXJnc1BhcnNlci5sb29rc0xpa2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXI7XG5cbm1vZHVsZS5leHBvcnRzID0geWFyZ3NQYXJzZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpUmVnZXggPSByZXF1aXJlKCdhbnNpLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnID8gc3RyaW5nLnJlcGxhY2UoYW5zaVJlZ2V4KCksICcnKSA6IHN0cmluZztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSB5b2RhICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gY29kZVBvaW50ID0+IHtcblx0aWYgKE51bWJlci5pc05hTihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ29kZSBwb2ludHMgYXJlIGRlcml2ZWQgZnJvbTpcblx0Ly8gaHR0cDovL3d3dy51bml4Lm9yZy9QdWJsaWMvVU5JREFUQS9FYXN0QXNpYW5XaWR0aC50eHRcblx0aWYgKFxuXHRcdGNvZGVQb2ludCA+PSAweDExMDAgJiYgKFxuXHRcdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMjkgfHwgLy8gTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyQSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0XHQoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3ICYmIGNvZGVQb2ludCAhPT0gMHgzMDNGKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG5cdFx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAuLiBZaSBSYWRpY2Fsc1xuXHRcdFx0KDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0XHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHRcdCgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG5cdFx0XHQvLyBIYW5ndWwgU3lsbGFibGVzXG5cdFx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1xuXHRcdFx0KDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0XHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0XHQoMHhGRTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTE5KSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuXHRcdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHRcdC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXG5cdFx0XHQoMHhGRjAxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRjYwKSB8fFxuXHRcdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHRcdC8vIEthbmEgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUYyMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjUxKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAuLiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZVxuXHRcdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IHJlcXVpcmUoJ2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Jyk7XG5jb25zdCBlbW9qaVJlZ2V4ID0gcmVxdWlyZSgnZW1vamktcmVnZXgnKTtcblxuY29uc3Qgc3RyaW5nV2lkdGggPSBzdHJpbmcgPT4ge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGVtb2ppUmVnZXgoKSwgJyAgJyk7XG5cblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPD0gMHgxRiB8fCAoY29kZSA+PSAweDdGICYmIGNvZGUgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlID49IDB4MzAwICYmIGNvZGUgPD0gMHgzNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFN1cnJvZ2F0ZXNcblx0XHRpZiAoY29kZSA+IDB4RkZGRikge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGlzRnVsbHdpZHRoQ29kZVBvaW50KGNvZGUpID8gMiA6IDE7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1dpZHRoO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ1dpZHRoO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaSA9IGNvZGUgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0NTSX0ke2NvZGV9JHtBTlNJX1NHUl9URVJNSU5BVE9SfWA7XG5jb25zdCB3cmFwQW5zaUh5cGVybGluayA9IHVyaSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfRVNDQVBFX0xJTkt9JHt1cml9JHtBTlNJX0VTQ0FQRV9CRUxMfWA7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHdvcmRzIHNwbGl0IG9uICcgJywgaWdub3Jpbmdcbi8vIHRoZSBleHRyYSBjaGFyYWN0ZXJzIGFkZGVkIGJ5IGFuc2kgZXNjYXBlIGNvZGVzXG5jb25zdCB3b3JkTGVuZ3RocyA9IHN0cmluZyA9PiBzdHJpbmcuc3BsaXQoJyAnKS5tYXAoY2hhcmFjdGVyID0+IHN0cmluZ1dpZHRoKGNoYXJhY3RlcikpO1xuXG4vLyBXcmFwIGEgbG9uZyB3b3JkIGFjcm9zcyBtdWx0aXBsZSByb3dzXG4vLyBBbnNpIGVzY2FwZSBjb2RlcyBkbyBub3QgY291bnQgdG93YXJkcyBsZW5ndGhcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcblx0Y29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcblxuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRsZXQgdmlzaWJsZSA9IHN0cmluZ1dpZHRoKHN0cmlwQW5zaShyb3dzW3Jvd3MubGVuZ3RoIC0gMV0pKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBjaGFyYWN0ZXJzLnNsaWNlKGluZGV4ICsgMSkuam9pbignJykuc3RhcnRzV2l0aChBTlNJX0VTQ0FQRV9MSU5LKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnNpZGVFc2NhcGUpIHtcblx0XHRcdGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcblx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gQU5TSV9FU0NBUEVfQkVMTCkge1xuXHRcdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBBTlNJX1NHUl9URVJNSU5BVE9SKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZpc2libGUgKz0gY2hhcmFjdGVyTGVuZ3RoO1xuXG5cdFx0aWYgKHZpc2libGUgPT09IGNvbHVtbnMgJiYgaW5kZXggPCBjaGFyYWN0ZXJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cdH1cblxuXHQvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3Qgcm93IHdlIGNvcHkgb3ZlciBpcyBvbmx5XG5cdC8vIGFuc2kgZXNjYXBlIGNoYXJhY3RlcnMsIGhhbmRsZSB0aGlzIGVkZ2UtY2FzZVxuXHRpZiAoIXZpc2libGUgJiYgcm93c1tyb3dzLmxlbmd0aCAtIDFdLmxlbmd0aCA+IDAgJiYgcm93cy5sZW5ndGggPiAxKSB7XG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG5cdH1cbn07XG5cbi8vIFRyaW1zIHNwYWNlcyBmcm9tIGEgc3RyaW5nIGlnbm9yaW5nIGludmlzaWJsZSBzZXF1ZW5jZXNcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSBzdHJpbmcgPT4ge1xuXHRjb25zdCB3b3JkcyA9IHN0cmluZy5zcGxpdCgnICcpO1xuXHRsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcblxuXHR3aGlsZSAobGFzdCA+IDApIHtcblx0XHRpZiAoc3RyaW5nV2lkdGgod29yZHNbbGFzdCAtIDFdKSA+IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxhc3QtLTtcblx0fVxuXG5cdGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0cmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcblxuLy8gVGhlIHdyYXAtYW5zaSBtb2R1bGUgY2FuIGJlIGludm9rZWQgaW4gZWl0aGVyICdoYXJkJyBvciAnc29mdCcgd3JhcCBtb2RlXG4vL1xuLy8gJ2hhcmQnIHdpbGwgbmV2ZXIgYWxsb3cgYSBzdHJpbmcgdG8gdGFrZSB1cCBtb3JlIHRoYW4gY29sdW1ucyBjaGFyYWN0ZXJzXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoXG5jb25zdCBleGVjID0gKHN0cmluZywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlICYmIHN0cmluZy50cmltKCkgPT09ICcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGxldCBlc2NhcGVDb2RlO1xuXHRsZXQgZXNjYXBlVXJsO1xuXG5cdGNvbnN0IGxlbmd0aHMgPSB3b3JkTGVuZ3RocyhzdHJpbmcpO1xuXHRsZXQgcm93cyA9IFsnJ107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHdvcmRdIG9mIHN0cmluZy5zcGxpdCgnICcpLmVudHJpZXMoKSkge1xuXHRcdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV0udHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0Y29uc3QgcHJlID0gWy4uLnJvd3Muam9pbignXFxuJyldO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIHByZS5lbnRyaWVzKCkpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBjaGFyYWN0ZXI7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29uc3Qge2dyb3Vwc30gPSBuZXcgUmVnRXhwKGAoPzpcXFxcJHtBTlNJX0NTSX0oPzxjb2RlPlxcXFxkKyltfFxcXFwke0FOU0lfRVNDQVBFX0xJTkt9KD88dXJpPi4qKSR7QU5TSV9FU0NBUEVfQkVMTH0pYCkuZXhlYyhwcmUuc2xpY2UoaW5kZXgpLmpvaW4oJycpKSB8fCB7Z3JvdXBzOiB7fX07XG5cdFx0XHRpZiAoZ3JvdXBzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlRmxvYXQoZ3JvdXBzLmNvZGUpO1xuXHRcdFx0XHRlc2NhcGVDb2RlID0gY29kZSA9PT0gRU5EX0NPREUgPyB1bmRlZmluZWQgOiBjb2RlO1xuXHRcdFx0fSBlbHNlIGlmIChncm91cHMudXJpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXNjYXBlVXJsID0gZ3JvdXBzLnVyaS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBncm91cHMudXJpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluaygnJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLy8gRm9yIGVhY2ggbmV3bGluZSwgaW52b2tlIHRoZSBtZXRob2Qgc2VwYXJhdGVseVxubW9kdWxlLmV4cG9ydHMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zKSA9PiB7XG5cdHJldHVybiBTdHJpbmcoc3RyaW5nKVxuXHRcdC5ub3JtYWxpemUoKVxuXHRcdC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmNsYXNzIFVJIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy53aWR0aCA9IG9wdHMud2lkdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IChfYSA9IG9wdHMud3JhcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIHNwYW4oLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5kaXYoLi4uYXJncyk7XG4gICAgICAgIGNvbHMuc3BhbiA9IHRydWU7XG4gICAgfVxuICAgIHJlc2V0T3V0cHV0KCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgZGl2KC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpdignJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JhcCAmJiB0aGlzLnNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlMYXlvdXREU0woYXJnc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29scyA9IGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xGcm9tU3RyaW5nKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dzLnB1c2goY29scyk7XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cbiAgICBzaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC9bXFx0XFxuXS8udGVzdChhcmdzWzBdKTtcbiAgICB9XG4gICAgYXBwbHlMYXlvdXREU0woc3RyKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChyb3cgPT4gcm93LnNwbGl0KCdcXHQnKSk7XG4gICAgICAgIGxldCBsZWZ0Q29sdW1uV2lkdGggPSAwO1xuICAgICAgICAvLyBzaW1wbGUgaGV1cmlzdGljIGZvciBsYXlvdXQsIG1ha2Ugc3VyZSB0aGVcbiAgICAgICAgLy8gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cCBhbG9uZyB0aGUgbGVmdC1oYW5kLlxuICAgICAgICAvLyBkb24ndCBhbGxvdyB0aGUgZmlyc3QgY29sdW1uIHRvIHRha2UgdXAgbW9yZVxuICAgICAgICAvLyB0aGFuIDUwJSBvZiB0aGUgc2NyZWVuLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPiAxICYmIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pID4gbGVmdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGVmdENvbHVtbldpZHRoID0gTWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLndpZHRoICogMC41KSwgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSB0YWJsZTpcbiAgICAgICAgLy8gIHJlcGxhY2luZyAnICcgd2l0aCBwYWRkaW5nIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgLy8gIHVzaW5nIHRoZSBhbGdvcml0aG1pY2FsbHkgZ2VuZXJhdGVkIHdpZHRoLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpdiguLi5jb2x1bW5zLm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHIudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHIpLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKGkgPT09IDAgJiYgY29sdW1ucy5sZW5ndGggPiAxKSA/IGxlZnRDb2x1bW5XaWR0aCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgY29sRnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyh0ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBtZWFzdXJlUGFkZGluZyhzdHIpIHtcbiAgICAgICAgLy8gbWVhc3VyZSBwYWRkaW5nIHdpdGhvdXQgYW5zaSBlc2NhcGUgY29kZXNcbiAgICAgICAgY29uc3Qgbm9BbnNpID0gbWl4aW4uc3RyaXBBbnNpKHN0cik7XG4gICAgICAgIHJldHVybiBbMCwgbm9BbnNpLm1hdGNoKC9cXHMqJC8pWzBdLmxlbmd0aCwgMCwgbm9BbnNpLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aF07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dUb1N0cmluZyhyb3csIGxpbmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGRvbid0IGRpc3BsYXkgYW55IGxpbmVzIHdpdGggdGhlXG4gICAgICAgIC8vIGhpZGRlbiBmbGFnIHNldC5cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gIWxpbmUuaGlkZGVuKVxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUudGV4dClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcm93VG9TdHJpbmcocm93LCBsaW5lcykge1xuICAgICAgICB0aGlzLnJhc3Rlcml6ZShyb3cpLmZvckVhY2goKHJyb3csIHIpID0+IHtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHJyb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gcm93W2NdOyAvLyB0aGUgd2lkdGggd2l0aCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBXaWR0aCA9IHRoaXMubmVnYXRlUGFkZGluZyhyb3dbY10pOyAvLyB0aGUgd2lkdGggd2l0aG91dCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGxldCB0cyA9IGNvbDsgLy8gdGVtcG9yYXJ5IHN0cmluZyB1c2VkIGR1cmluZyBhbGlnbm1lbnQvcGFkZGluZy5cbiAgICAgICAgICAgICAgICBpZiAod3JhcFdpZHRoID4gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSkge1xuICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KHdyYXBXaWR0aCAtIG1peGluLnN0cmluZ1dpZHRoKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhbGlnbiB0aGUgc3RyaW5nIHdpdGhpbiBpdHMgY29sdW1uLlxuICAgICAgICAgICAgICAgIGlmIChyb3dbY10uYWxpZ24gJiYgcm93W2NdLmFsaWduICE9PSAnbGVmdCcgJiYgdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gYWxpZ25bcm93W2NdLmFsaWduXTtcbiAgICAgICAgICAgICAgICAgICAgdHMgPSBmbih0cywgd3JhcFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1peGluLnN0cmluZ1dpZHRoKHRzKSA8IHdyYXBXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCgod2lkdGggfHwgMCkgLSBtaXhpbi5zdHJpbmdXaWR0aCh0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhcHBseSBib3JkZXIgYW5kIHBhZGRpbmcgdG8gc3RyaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSByb3dbY10ucGFkZGluZyB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbbGVmdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tsZWZ0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJ3wgJyk7XG4gICAgICAgICAgICAgICAgc3RyICs9IHRzO1xuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJyB8Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbcmlnaHRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbcmlnaHRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJpb3Igcm93IGlzIHNwYW4sIHRyeSB0byByZW5kZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCByb3cgb24gdGhlIHByaW9yIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKHIgPT09IDAgJiYgbGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnJlbmRlcklubGluZShzdHIsIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyLnJlcGxhY2UoLyArJC8sICcnKSxcbiAgICAgICAgICAgICAgICBzcGFuOiByb3cuc3BhblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBmdWxsICdzb3VyY2UnIGNhbiByZW5kZXIgaW5cbiAgICAvLyB0aGUgdGFyZ2V0IGxpbmUsIGRvIHNvLlxuICAgIHJlbmRlcklubGluZShzb3VyY2UsIHByZXZpb3VzTGluZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaCgvXiAqLyk7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwcmV2aW91c0xpbmUudGV4dDtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGV4dFdpZHRoID0gbWl4aW4uc3RyaW5nV2lkdGgodGFyZ2V0LnRyaW1SaWdodCgpKTtcbiAgICAgICAgaWYgKCFwcmV2aW91c0xpbmUuc3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgYXBwbHlpbmcgd3JhcHBpbmcgbG9naWMsXG4gICAgICAgIC8vIGp1c3QgYWx3YXlzIGFwcGVuZCB0byB0aGUgc3Bhbi5cbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCArIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ1doaXRlc3BhY2UgPCB0YXJnZXRUZXh0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0YXJnZXQudHJpbVJpZ2h0KCkgKyAnICcucmVwZWF0KGxlYWRpbmdXaGl0ZXNwYWNlIC0gdGFyZ2V0VGV4dFdpZHRoKSArIHNvdXJjZS50cmltTGVmdCgpO1xuICAgIH1cbiAgICByYXN0ZXJpemUocm93KSB7XG4gICAgICAgIGNvbnN0IHJyb3dzID0gW107XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuY29sdW1uV2lkdGhzKHJvdyk7XG4gICAgICAgIGxldCB3cmFwcGVkO1xuICAgICAgICAvLyB3b3JkIHdyYXAgYWxsIGNvbHVtbnMsIGFuZCBjcmVhdGVcbiAgICAgICAgLy8gYSBkYXRhLXN0cnVjdHVyZSB0aGF0IGlzIGVhc3kgdG8gcmFzdGVyaXplLlxuICAgICAgICByb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAvLyBsZWF2ZSByb29tIGZvciBsZWZ0IGFuZCByaWdodCBwYWRkaW5nLlxuICAgICAgICAgICAgY29sLndpZHRoID0gd2lkdGhzW2NdO1xuICAgICAgICAgICAgaWYgKHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBtaXhpbi53cmFwKGNvbC50ZXh0LCB0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSwgeyBoYXJkOiB0cnVlIH0pLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBjb2wudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCgnLicgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyAnLicpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaChcIidcIiArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nLlxuICAgICAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1t0b3BdIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW2JvdHRvbV0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcHBlZC5mb3JFYWNoKChzdHIsIHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJyb3dzW3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJyb3dzLnB1c2goW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycm93ID0gcnJvd3Nbcl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJyb3dbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnJvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBycm93LnB1c2goc3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJyb3dzO1xuICAgIH1cbiAgICBuZWdhdGVQYWRkaW5nKGNvbCkge1xuICAgICAgICBsZXQgd3JhcFdpZHRoID0gY29sLndpZHRoIHx8IDA7XG4gICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IChjb2wucGFkZGluZ1tsZWZ0XSB8fCAwKSArIChjb2wucGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwV2lkdGg7XG4gICAgfVxuICAgIGNvbHVtbldpZHRocyhyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHJldHVybiByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aCB8fCBtaXhpbi5zdHJpbmdXaWR0aChjb2wudGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdW5zZXQgPSByb3cubGVuZ3RoO1xuICAgICAgICBsZXQgcmVtYWluaW5nV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAvLyBjb2x1bW4gd2lkdGhzIGNhbiBiZSBzZXQgaW4gY29uZmlnLlxuICAgICAgICBjb25zdCB3aWR0aHMgPSByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQtLTtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSBjb2wud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbnkgdW5zZXQgd2lkdGhzIHNob3VsZCBiZSBjYWxjdWxhdGVkLlxuICAgICAgICBjb25zdCB1bnNldFdpZHRoID0gdW5zZXQgPyBNYXRoLmZsb29yKHJlbWFpbmluZ1dpZHRoIC8gdW5zZXQpIDogMDtcbiAgICAgICAgcmV0dXJuIHdpZHRocy5tYXAoKHcsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodW5zZXRXaWR0aCwgX21pbldpZHRoKHJvd1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEJvcmRlcihjb2wsIHRzLCBzdHlsZSkge1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIGlmICgvWy4nXS0rWy4nXS8udGVzdCh0cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHMudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnICAnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4vLyBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHdpZHRoIG9mXG4vLyBhIGNvbHVtbiwgYmFzZWQgb24gcGFkZGluZyBwcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIF9taW5XaWR0aChjb2wpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29sLnBhZGRpbmcgfHwgW107XG4gICAgY29uc3QgbWluV2lkdGggPSAxICsgKHBhZGRpbmdbbGVmdF0gfHwgMCkgKyAocGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG1pbldpZHRoICsgNDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbldpZHRoO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHN0cldpZHRoID49IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiAnICcucmVwZWF0KCh3aWR0aCAtIHN0cldpZHRoKSA+PiAxKSArIHN0cjtcbn1cbmxldCBtaXhpbjtcbmZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cblxuLy8gQm9vdHN0cmFwIGNsaXVpIHdpdGggQ29tbW9uSlMgZGVwZW5kZW5jaWVzOlxuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdyYXAgPSByZXF1aXJlKCd3cmFwLWFuc2knKTtcbmZ1bmN0aW9uIHVpKG9wdHMpIHtcbiAgICByZXR1cm4gY2xpdWkob3B0cywge1xuICAgICAgICBzdHJpbmdXaWR0aCxcbiAgICAgICAgc3RyaXBBbnNpLFxuICAgICAgICB3cmFwXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdWk7XG4iLCAiY29uc3QgeyBkaXJuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9ID0gcmVxdWlyZSgnZnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhcnQsIGNhbGxiYWNrKSB7XG5cdGxldCBkaXIgPSByZXNvbHZlKCcuJywgc3RhcnQpO1xuXHRsZXQgdG1wLCBzdGF0cyA9IHN0YXRTeW5jKGRpcik7XG5cblx0aWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0ZGlyID0gZGlybmFtZShkaXIpO1xuXHR9XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHR0bXAgPSBjYWxsYmFjayhkaXIsIHJlYWRkaXJTeW5jKGRpcikpO1xuXHRcdGlmICh0bXApIHJldHVybiByZXNvbHZlKGRpciwgdG1wKTtcblx0XHRkaXIgPSBkaXJuYW1lKHRtcCA9IGRpcik7XG5cdFx0aWYgKHRtcCA9PT0gZGlyKSBicmVhaztcblx0fVxufVxuIiwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKSxcbiAgam9pbiA9IHJlcXVpcmUoJ3BhdGgnKS5qb2luLFxuICByZXNvbHZlID0gcmVxdWlyZSgncGF0aCcpLnJlc29sdmUsXG4gIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZSxcbiAgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZXh0ZW5zaW9uczogWydqcycsICdqc29uJywgJ2NvZmZlZSddLFxuICAgIHJlY3Vyc2U6IHRydWUsXG4gICAgcmVuYW1lOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcbiAgICB2aXNpdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG5cbmZ1bmN0aW9uIGNoZWNrRmlsZUluY2x1c2lvbihwYXRoLCBmaWxlbmFtZSwgb3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIC8vIHZlcmlmeSBmaWxlIGhhcyB2YWxpZCBleHRlbnNpb25cbiAgICAobmV3IFJlZ0V4cCgnXFxcXC4oJyArIG9wdGlvbnMuZXh0ZW5zaW9ucy5qb2luKCd8JykgKyAnKSQnLCAnaScpLnRlc3QoZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5pbmNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIG9wdGlvbnMuaW5jbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhb3B0aW9ucy5pbmNsdWRlLnRlc3QocGF0aCkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBmdW5jdGlvbiwgZXZhbHVhdGUgaXQgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aCBwYXNzZXNcbiAgICAhKG9wdGlvbnMuaW5jbHVkZSAmJiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSAnZnVuY3Rpb24nICYmICFvcHRpb25zLmluY2x1ZGUocGF0aCwgZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIG9wdGlvbnMuZXhjbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBvcHRpb25zLmV4Y2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuZXhjbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmV4Y2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5leGNsdWRlKHBhdGgsIGZpbGVuYW1lKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZURpcmVjdG9yeShtLCBwYXRoLCBvcHRpb25zKSB7XG4gIHZhciByZXR2YWwgPSB7fTtcblxuICAvLyBwYXRoIGlzIG9wdGlvbmFsXG4gIGlmIChwYXRoICYmICFvcHRpb25zICYmIHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBwYXRoO1xuICAgIHBhdGggPSBudWxsO1xuICB9XG5cbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW3Byb3BdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRPcHRpb25zW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vIHBhdGggd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoZSBlcXVpdmVsYW50IG9mIF9fZGlybmFtZSBmcm9tIGNhbGxlclxuICAvLyBvdGhlcndpc2UsIHJlc29sdmUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZXF1aXZhbGVudCBvZiBfX2Rpcm5hbWVcbiAgcGF0aCA9ICFwYXRoID8gZGlybmFtZShtLmZpbGVuYW1lKSA6IHJlc29sdmUoZGlybmFtZShtLmZpbGVuYW1lKSwgcGF0aCk7XG5cbiAgLy8gZ2V0IHRoZSBwYXRoIG9mIGVhY2ggZmlsZSBpbiBzcGVjaWZpZWQgZGlyZWN0b3J5LCBhcHBlbmQgdG8gY3VycmVudCB0cmVlIG5vZGUsIHJlY3Vyc2VcbiAgZnMucmVhZGRpclN5bmMocGF0aCkuZm9yRWFjaChmdW5jdGlvbiAoZmlsZW5hbWUpIHtcbiAgICB2YXIgam9pbmVkID0gam9pbihwYXRoLCBmaWxlbmFtZSksXG4gICAgICBmaWxlcyxcbiAgICAgIGtleSxcbiAgICAgIG9iajtcblxuICAgIGlmIChmcy5zdGF0U3luYyhqb2luZWQpLmlzRGlyZWN0b3J5KCkgJiYgb3B0aW9ucy5yZWN1cnNlKSB7XG4gICAgICAvLyB0aGlzIG5vZGUgaXMgYSBkaXJlY3Rvcnk7IHJlY3Vyc2VcbiAgICAgIGZpbGVzID0gcmVxdWlyZURpcmVjdG9yeShtLCBqb2luZWQsIG9wdGlvbnMpO1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBkaXJlY3Rvcmllc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbGVzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dmFsW29wdGlvbnMucmVuYW1lKGZpbGVuYW1lLCBqb2luZWQsIGZpbGVuYW1lKV0gPSBmaWxlcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGpvaW5lZCAhPT0gbS5maWxlbmFtZSAmJiBjaGVja0ZpbGVJbmNsdXNpb24oam9pbmVkLCBmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICAgICAgLy8gaGFzaCBub2RlIGtleSBzaG91bGRuJ3QgaW5jbHVkZSBmaWxlIGV4dGVuc2lvblxuICAgICAgICBrZXkgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgICAgIG9iaiA9IG0ucmVxdWlyZShqb2luZWQpO1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoa2V5LCBqb2luZWQsIGZpbGVuYW1lKV0gPSBvcHRpb25zLnZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkgfHwgb2JqO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJldHZhbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRGlyZWN0b3J5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9ucztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcblxuY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBZRXJyb3IpO1xuICAgIH1cbn1cblxubGV0IHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xubGV0IHNoaW07XG5mdW5jdGlvbiBhcHBseUV4dGVuZHMoY29uZmlnLCBjd2QsIG1lcmdlRXh0ZW5kcywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgbGV0IGRlZmF1bHRDb25maWcgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2V4dGVuZHMnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5leHRlbmRzICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgICAgICBjb25zdCBpc1BhdGggPSAvXFwuanNvbnxcXC4uKnJjJC8udGVzdChjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGxldCBwYXRoVG9EZWZhdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpc1BhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IHJlcXVpcmUucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiByZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbWFuZChjbWQpIHtcbiAgICBjb25zdCBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZCA9IGNtZC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgY29uc3Qgc3BsaXRDb21tYW5kID0gZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQuc3BsaXQoL1xccysoPyFbXltdKl18W148XSo+KS8pO1xuICAgIGNvbnN0IGJyZWdleCA9IC9cXC4qW1xcXVs8Pl0vZztcbiAgICBjb25zdCBmaXJzdENvbW1hbmQgPSBzcGxpdENvbW1hbmQuc2hpZnQoKTtcbiAgICBpZiAoIWZpcnN0Q29tbWFuZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGZvdW5kIGluOiAke2NtZH1gKTtcbiAgICBjb25zdCBwYXJzZWRDb21tYW5kID0ge1xuICAgICAgICBjbWQ6IGZpcnN0Q29tbWFuZC5yZXBsYWNlKGJyZWdleCwgJycpLFxuICAgICAgICBkZW1hbmRlZDogW10sXG4gICAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9O1xuICAgIHNwbGl0Q29tbWFuZC5mb3JFYWNoKChjbWQsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoL1xcLitbXFxdPl0vLnRlc3QoY21kKSAmJiBpID09PSBzcGxpdENvbW1hbmQubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICAgICAgaWYgKC9eXFxbLy50ZXN0KGNtZCkpIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQub3B0aW9uYWwucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZENvbW1hbmQ7XG59XG5cbmNvbnN0IHBvc2l0aW9uTmFtZSA9IFsnZmlyc3QnLCAnc2Vjb25kJywgJ3RoaXJkJywgJ2ZvdXJ0aCcsICdmaWZ0aCcsICdzaXh0aCddO1xuZnVuY3Rpb24gYXJnc2VydChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFt7IGRlbWFuZGVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sIGFyZzEsIGFyZzJdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNvbW1hbmQoYGNtZCAke2FyZzF9YCksXG4gICAgICAgICAgICAgICAgYXJnMixcbiAgICAgICAgICAgICAgICBhcmczLFxuICAgICAgICAgICAgXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgW3BhcnNlZCwgY2FsbGVyQXJndW1lbnRzLCBfbGVuZ3RoXSA9IHBhcnNlQXJncygpO1xuICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChjYWxsZXJBcmd1bWVudHMpO1xuICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGggJiYgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBfbGVuZ3RoIHx8IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgTm90IGVub3VnaCBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkICR7cGFyc2VkLmRlbWFuZGVkLmxlbmd0aH0gYnV0IHJlY2VpdmVkICR7YXJncy5sZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsQ29tbWFuZHMgPSBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoICsgcGFyc2VkLm9wdGlvbmFsLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IHRvdGFsQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgbWF4ICR7dG90YWxDb21tYW5kc30gYnV0IHJlY2VpdmVkICR7bGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkZW1hbmRlZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBkZW1hbmRlZC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBkZW1hbmRlZC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvcHRpb25hbCA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gb3B0aW9uYWwuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgb3B0aW9uYWwuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG59XG5mdW5jdGlvbiBndWVzc1R5cGUoYXJnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgYXJnO1xufVxuZnVuY3Rpb24gYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBhbGxvd2VkVHlwZXMsIHBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IFlFcnJvcihgSW52YWxpZCAke3Bvc2l0aW9uTmFtZVtwb3NpdGlvbl0gfHwgJ21hbnlpdGgnfSBhcmd1bWVudC4gRXhwZWN0ZWQgJHthbGxvd2VkVHlwZXMuam9pbignIG9yICcpfSBidXQgcmVjZWl2ZWQgJHtvYnNlcnZlZFR5cGV9LmApO1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHNoaW0sIG1lc3NhZ2UpIHtcbiAgICBzaGltLmFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5mdW5jdGlvbiBvYmplY3RLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBvYmpGaWx0ZXIob3JpZ2luYWwgPSB7fSwgZmlsdGVyID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIG9iamVjdEtleXMob3JpZ2luYWwpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcihrZXksIG9yaWdpbmFsW2tleV0pKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnbG9iYWxNaWRkbGV3YXJlRmFjdG9yeShnbG9iYWxNaWRkbGV3YXJlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gZmFsc2UpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrW2ldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdtaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFja1tpXS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnbG9iYWxNaWRkbGV3YXJlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBnbG9iYWxNaWRkbGV3YXJlLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpIHtcbiAgICBpZiAoIWNvbW1hbmRNaWRkbGV3YXJlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIGNvbW1hbmRNaWRkbGV3YXJlLm1hcChtaWRkbGV3YXJlID0+IHtcbiAgICAgICAgbWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgY29uc3QgYmVmb3JlVmFsaWRhdGlvbkVycm9yID0gbmV3IEVycm9yKCdtaWRkbGV3YXJlIGNhbm5vdCByZXR1cm4gYSBwcm9taXNlIHdoZW4gYXBwbHlCZWZvcmVWYWxpZGF0aW9uIGlzIHRydWUnKTtcbiAgICByZXR1cm4gbWlkZGxld2FyZXMucmVkdWNlKChhY2MsIG1pZGRsZXdhcmUpID0+IHtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uICE9PSBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGluaXRpYWxPYmosXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZShpbml0aWFsT2JqLCB5YXJncyksXG4gICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAudGhlbigoW2luaXRpYWxPYmosIG1pZGRsZXdhcmVPYmpdKSA9PiBPYmplY3QuYXNzaWduKGluaXRpYWxPYmosIG1pZGRsZXdhcmVPYmopKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZXdhcmUoYWNjLCB5YXJncyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlVmFsaWRhdGlvbiAmJiBpc1Byb21pc2UocmVzdWx0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBiZWZvcmVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50aGVuKG1pZGRsZXdhcmVPYmogPT4gT2JqZWN0LmFzc2lnbihhY2MsIG1pZGRsZXdhcmVPYmopKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9LCBhcmd2KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5mdW5jdGlvbiBoaWRlQmluKGFyZ3YpIHtcbiAgICByZXR1cm4gYXJndi5zbGljZShnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkgKyAxKTtcbn1cbmZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpXTtcbn1cblxudmFyIHByb2Nlc3NBcmd2ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhpZGVCaW46IGhpZGVCaW4sXG4gIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpblxufSk7XG5cbmZ1bmN0aW9uIHdoaWNoTW9kdWxlKGV4cG9ydGVkKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDAsIGZpbGVzID0gT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSksIG1vZDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZXNbaV1dO1xuICAgICAgICBpZiAobW9kLmV4cG9ydHMgPT09IGV4cG9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmZ1bmN0aW9uIGNvbW1hbmQoeWFyZ3MsIHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlID0gW10sIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGhhbmRsZXJzID0ge307XG4gICAgbGV0IGFsaWFzTWFwID0ge307XG4gICAgbGV0IGRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYuYWRkSGFuZGxlciA9IGZ1bmN0aW9uIGFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgY29tbWFuZE1pZGRsZXdhcmUsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlciB8fCAoKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSkge1xuICAgICAgICAgICAgICAgIFtjbWQsIC4uLmFsaWFzZXNdID0gY21kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkpIHtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShjbWQuY29tbWFuZCkgfHwgdHlwZW9mIGNtZC5jb21tYW5kID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY21kLmNvbW1hbmRcbiAgICAgICAgICAgICAgICA6IG1vZHVsZU5hbWUoY21kKTtcbiAgICAgICAgICAgIGlmIChjbWQuYWxpYXNlcylcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gW10uY29uY2F0KGNvbW1hbmQpLmNvbmNhdChjbWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCwgZXh0cmFjdERlc2MoY21kKSwgY21kLmJ1aWxkZXIsIGNtZC5oYW5kbGVyLCBjbWQubWlkZGxld2FyZXMsIGNtZC5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgc2VsZi5hZGRIYW5kbGVyKFtjbWRdLmNvbmNhdChhbGlhc2VzKSwgZGVzY3JpcHRpb24sIGJ1aWxkZXIuYnVpbGRlciwgYnVpbGRlci5oYW5kbGVyLCBidWlsZGVyLm1pZGRsZXdhcmVzLCBidWlsZGVyLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHBhcnNlQ29tbWFuZChjbWQpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGFsaWFzZXMubWFwKGFsaWFzID0+IHBhcnNlQ29tbWFuZChhbGlhcykuY21kKTtcbiAgICAgICAgICAgIGxldCBpc0RlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFsaWFzZXMgPSBbcGFyc2VkQ29tbWFuZC5jbWRdLmNvbmNhdChhbGlhc2VzKS5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKERFRkFVTFRfTUFSS0VSLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEFsaWFzZXMubGVuZ3RoID09PSAwICYmIGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBwYXJzZWRBbGlhc2VzLnB1c2goJyQwJyk7XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5jbWQgPSBwYXJzZWRBbGlhc2VzWzBdO1xuICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBwYXJzZWRBbGlhc2VzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCBwYXJzZWRDb21tYW5kLmNtZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBjbWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIHx8IHt9LFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmVzLFxuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQsXG4gICAgICAgICAgICAgICAgZGVtYW5kZWQ6IHBhcnNlZENvbW1hbmQuZGVtYW5kZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHBhcnNlZENvbW1hbmQub3B0aW9uYWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IGhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5hZGREaXJlY3RvcnkgPSBmdW5jdGlvbiBhZGREaXJlY3RvcnkoZGlyLCBjb250ZXh0LCByZXEsIGNhbGxlckZpbGUsIG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5yZWN1cnNlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICBvcHRzLnJlY3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdHMuZXh0ZW5zaW9ucykpXG4gICAgICAgICAgICBvcHRzLmV4dGVuc2lvbnMgPSBbJ2pzJ107XG4gICAgICAgIGNvbnN0IHBhcmVudFZpc2l0ID0gdHlwZW9mIG9wdHMudmlzaXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnZpc2l0IDogKG8pID0+IG87XG4gICAgICAgIG9wdHMudmlzaXQgPSBmdW5jdGlvbiB2aXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBwYXJlbnRWaXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAofmNvbnRleHQuZmlsZXMuaW5kZXhPZihqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGVzLnB1c2goam9pbmVkKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIodmlzaXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgfTtcbiAgICAgICAgc2hpbS5yZXF1aXJlRGlyZWN0b3J5KHsgcmVxdWlyZTogcmVxLCBmaWxlbmFtZTogY2FsbGVyRmlsZSB9LCBkaXIsIG9wdHMpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbW9kdWxlTmFtZShvYmopIHtcbiAgICAgICAgY29uc3QgbW9kID0gd2hpY2hNb2R1bGUob2JqKTtcbiAgICAgICAgaWYgKCFtb2QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgbmFtZSBnaXZlbiBmb3IgbW9kdWxlOiAke3NoaW0uaW5zcGVjdChvYmopfWApO1xuICAgICAgICByZXR1cm4gY29tbWFuZEZyb21GaWxlbmFtZShtb2QuZmlsZW5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21tYW5kRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiBzaGltLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHNoaW0ucGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjLCB9KSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdCBvZiBbZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJyB8fCB0ZXN0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRlc3QsIHRydWUsIHNoaW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IE9iamVjdC5rZXlzKGhhbmRsZXJzKS5jb25jYXQoT2JqZWN0LmtleXMoYWxpYXNNYXApKTtcbiAgICBzZWxmLmdldENvbW1hbmRIYW5kbGVycyA9ICgpID0+IGhhbmRsZXJzO1xuICAgIHNlbGYuaGFzRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAhIWRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYucnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4KSB7XG4gICAgICAgIGxldCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRIYW5kbGVyID0gaGFuZGxlcnNbY29tbWFuZF0gfHwgaGFuZGxlcnNbYWxpYXNNYXBbY29tbWFuZF1dIHx8IGRlZmF1bHRDb21tYW5kO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgbGV0IG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGxldCBpbm5lckFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJPdXRwdXQgPSBidWlsZGVyKHlhcmdzLnJlc2V0KHBhcnNlZC5hbGlhc2VzKSk7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0gaXNZYXJnc0luc3RhbmNlKGJ1aWxkZXJPdXRwdXQpID8gYnVpbGRlck91dHB1dCA6IHlhcmdzO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0geWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXAgPSBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGdsb2JhbE1pZGRsZXdhcmVcbiAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgLmNvbmNhdChjb21tYW5kSGFuZGxlci5taWRkbGV3YXJlcyk7XG4gICAgICAgIGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgdHJ1ZSk7XG4gICAgICAgIGlmICgheWFyZ3MuX2hhc091dHB1dCgpKSB7XG4gICAgICAgICAgICB5YXJncy5fcnVuVmFsaWRhdGlvbihpbm5lckFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHlhcmdzLnBhcnNlZC5lcnJvciwgIWNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kSGFuZGxlci5oYW5kbGVyICYmICF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9zZXRIYXNPdXRwdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEheWFyZ3MuZ2V0T3B0aW9ucygpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgICAgIHlhcmdzLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyUmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGlubmVyQXJndi50aGVuKGFyZ3YgPT4gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihhcmd2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihpbm5lckFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZpbmlzaENvbW1hbmQgPSB5YXJncy5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jYWNoZUhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5mYWlsKG51bGwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jbGVhckNhY2hlZEhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckZpbmlzaENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQoaGFuZGxlclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wb3AoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBudW1GaWxlcyA9IGN1cnJlbnRDb250ZXh0LmZpbGVzLmxlbmd0aCAtIG51bUZpbGVzO1xuICAgICAgICBpZiAobnVtRmlsZXMgPiAwKVxuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZmlsZXMuc3BsaWNlKG51bUZpbGVzICogLTEsIG51bUZpbGVzKTtcbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSB7XG4gICAgICAgIHJldHVybiAoIXlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZURpc2FibGVkKCkgJiZcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGMgPSBERUZBVUxUX01BUktFUi50ZXN0KGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKVxuICAgICAgICAgICAgPyBjb21tYW5kSGFuZGxlci5vcmlnaW5hbC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCAnJykudHJpbSgpXG4gICAgICAgICAgICA6IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsO1xuICAgICAgICBjb25zdCBwYyA9IHBhcmVudENvbW1hbmRzLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhREVGQVVMVF9NQVJLRVIudGVzdChjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBjLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBgJDAgJHtwYy5qb2luKCcgJyl9YDtcbiAgICB9XG4gICAgc2VsZi5ydW5EZWZhdWx0QnVpbGRlck9uID0gZnVuY3Rpb24gKHlhcmdzKSB7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGRlZmF1bHRDb21tYW5kLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdChkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS51c2FnZShjb21tYW5kU3RyaW5nLCBkZWZhdWx0Q29tbWFuZC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGRlZmF1bHRDb21tYW5kLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIoeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHlhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgYXJndiwgY29udGV4dCkge1xuICAgICAgICBhcmd2Ll8gPSBhcmd2Ll8uc2xpY2UoY29udGV4dC5jb21tYW5kcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZCA9IGNvbW1hbmRIYW5kbGVyLmRlbWFuZGVkLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IGNvbW1hbmRIYW5kbGVyLm9wdGlvbmFsLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIHZhbGlkYXRpb24ucG9zaXRpb25hbENvdW50KGRlbWFuZGVkLmxlbmd0aCwgYXJndi5fLmxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChkZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IGRlbWFuZGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwobWF5YmUsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3YuXyA9IGNvbnRleHQuY29tbWFuZHMuY29uY2F0KGFyZ3YuXy5tYXAoYSA9PiAnJyArIGEpKTtcbiAgICAgICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBzZWxmLmNtZFRvUGFyc2VPcHRpb25zKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbmFsTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWwocG9zaXRpb25hbCwgYXJndiwgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBjb25zdCBjbWQgPSBwb3NpdGlvbmFsLmNtZFswXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uYWwudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IGFyZ3YuXy5zcGxpY2UoMCkubWFwKFN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aClcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBbU3RyaW5nKGFyZ3YuXy5zaGlmdCgpKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHlhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdCA9IE9iamVjdC5hc3NpZ24ocGFyc2VPcHRpb25zLmRlZmF1bHQsIG9wdGlvbnMuZGVmYXVsdCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlT3B0aW9ucy5hbGlhcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XSA9IChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pLmNvbmNhdChwYXJzZU9wdGlvbnMuYWxpYXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5hcnJheSA9IG9wdGlvbnMuYXJyYXkuY29uY2F0KHBhcnNlT3B0aW9ucy5hcnJheSk7XG4gICAgICAgIG9wdGlvbnMuY29uZmlnID0ge307XG4gICAgICAgIGNvbnN0IHVucGFyc2VkID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XS5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10pXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2goYC0tJHtrZXl9YCk7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdW5wYXJzZWQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHNoaW0uUGFyc2VyLmRldGFpbGVkKHVucGFyc2VkLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHBhcnNlZC5lcnJvcikge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwocGFyc2VkLmVycm9yLm1lc3NhZ2UsIHBhcnNlZC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxLZXlzLnB1c2goLi4ucGFyc2VkLmFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZC5hcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmFsTWFwW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiAoY21kU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb21tYW5kKGNtZFN0cmluZyk7XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBkLmNtZDtcbiAgICAgICAgICAgIGlmIChkLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVtYW5kW2NtZF0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IG8uY21kO1xuICAgICAgICAgICAgaWYgKG8udmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGVycyA9IHt9O1xuICAgICAgICBhbGlhc01hcCA9IHt9O1xuICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSAoKSA9PiB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBoYW5kbGVycywgYWxpYXNNYXAsIGRlZmF1bHRDb21tYW5kIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIGlmIChjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNtZCk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB1c2FnZSh5YXJncywgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgY29uc3QgZmFpbHMgPSBbXTtcbiAgICBzZWxmLmZhaWxGbiA9IGZ1bmN0aW9uIGZhaWxGbihmKSB7XG4gICAgICAgIGZhaWxzLnB1c2goZik7XG4gICAgfTtcbiAgICBsZXQgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkFyZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtlbmFibGVkLCBtZXNzYWdlXSA9IHBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgc2hvd0hlbHBPbkZhaWwgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgc2VsZi5mYWlsID0gZnVuY3Rpb24gZmFpbChtc2csIGVycikge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5fZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgZmFpbHNbaV0obXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpXG4gICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0hlbHBPbkZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc2hvd0hlbHAoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZyB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChmYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5faGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IHVzYWdlcyA9IFtdO1xuICAgIGxldCB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgc2VsZi51c2FnZSA9IChtc2csIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcy5wdXNoKFttc2csIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlcztcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlRGlzYWJsZWQ7XG4gICAgfTtcbiAgICBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfXygnUG9zaXRpb25hbHM6Jyk7XG4gICAgfTtcbiAgICBsZXQgZXhhbXBsZXMgPSBbXTtcbiAgICBzZWxmLmV4YW1wbGUgPSAoY21kLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBleGFtcGxlcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMubWFwKGNtZEFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBjbWRBcnJheVsyXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWRBcnJheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJycsIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZF0pO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IGNvbW1hbmRzO1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSB7fTtcbiAgICBzZWxmLmRlc2NyaWJlID0gZnVuY3Rpb24gZGVzY3JpYmUoa2V5T3JLZXlzLCBkZXNjKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgICAgICAgIGtleU9yS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywgZGVzYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5T3JLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5T3JLZXlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywga2V5T3JLZXlzW2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2tleU9yS2V5c10gPSBkZXNjO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldERlc2NyaXB0aW9ucyA9ICgpID0+IGRlc2NyaXB0aW9ucztcbiAgICBsZXQgZXBpbG9ncyA9IFtdO1xuICAgIHNlbGYuZXBpbG9nID0gbXNnID0+IHtcbiAgICAgICAgZXBpbG9ncy5wdXNoKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgd3JhcFNldCA9IGZhbHNlO1xuICAgIGxldCB3cmFwO1xuICAgIHNlbGYud3JhcCA9IGNvbHMgPT4ge1xuICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgd3JhcCA9IGNvbHM7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRXcmFwKCkge1xuICAgICAgICBpZiAoIXdyYXBTZXQpIHtcbiAgICAgICAgICAgIHdyYXAgPSB3aW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXA7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyWTE4bkxvb2t1cFByZWZpeCA9ICdfX3lhcmdzU3RyaW5nX186JztcbiAgICBzZWxmLmRlZmVyWTE4bkxvb2t1cCA9IHN0ciA9PiBkZWZlclkxOG5Mb29rdXBQcmVmaXggKyBzdHI7XG4gICAgc2VsZi5oZWxwID0gZnVuY3Rpb24gaGVscCgpIHtcbiAgICAgICAgaWYgKGNhY2hlZEhlbHBNZXNzYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgICAgICBub3JtYWxpemVBbGlhc2VzKCk7XG4gICAgICAgIGNvbnN0IGJhc2UkMCA9IHlhcmdzLmN1c3RvbVNjcmlwdE5hbWVcbiAgICAgICAgICAgID8geWFyZ3MuJDBcbiAgICAgICAgICAgIDogc2hpbS5wYXRoLmJhc2VuYW1lKHlhcmdzLiQwKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0geWFyZ3MuZ2V0R3JvdXBzKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGxldCBrZXlzID0gW107XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZXNjcmlwdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRDb21tYW5kcykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0KSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKTtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ18nKVxuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGNvbnN0IHRoZVdyYXAgPSBnZXRXcmFwKCk7XG4gICAgICAgIGNvbnN0IHVpID0gc2hpbS5jbGl1aSh7XG4gICAgICAgICAgICB3aWR0aDogdGhlV3JhcCxcbiAgICAgICAgICAgIHdyYXA6ICEhdGhlV3JhcCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdXNhZ2VEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHVzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB1c2FnZXMuZm9yRWFjaCh1c2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdihgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMV19YCwgcGFkZGluZzogWzEsIDAsIDAsIDBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSA8JHtfXygnY29tbWFuZCcpfT5cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gWyR7X18oJ2NvbW1hbmQnKX1dXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWkuZGl2KGAke3V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdDb21tYW5kczonKSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjb250ZXh0LmNvbW1hbmRzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYCR7Y29udGV4dC5jb21tYW5kcy5qb2luKCcgJyl9IGBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc29ydC1jb21tYW5kcyddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gYCR7YmFzZSQwfSAke3BhcmVudENvbW1hbmRzfSR7Y29tbWFuZFswXS5yZXBsYWNlKC9eXFwkMCA/LywgJycpfWA7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbW1hbmRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGNvbW1hbmRzLCB0aGVXcmFwLCBgJHtiYXNlJDB9JHtwYXJlbnRDb21tYW5kc31gKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgeyB0ZXh0OiBjb21tYW5kWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpbnRzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbMl0pXG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZWZhdWx0Jyl9XWApO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzNdICYmIGNvbW1hbmRbM10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdhbGlhc2VzOicpfSAke2NvbW1hbmRbM10uam9pbignLCAnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZFs0XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkOiAlcycsIGNvbW1hbmRbNF0pfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkJyl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGhpbnRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAwLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNLZXlzID0gKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5jb25jYXQoT2JqZWN0LmtleXMoeWFyZ3MucGFyc2VkLm5ld0FsaWFzZXMpIHx8IFtdKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiAheWFyZ3MucGFyc2VkLm5ld0FsaWFzZXNba2V5XSAmJlxuICAgICAgICAgICAgYWxpYXNLZXlzLmV2ZXJ5KGFsaWFzID0+IChvcHRpb25zLmFsaWFzW2FsaWFzXSB8fCBbXSkuaW5kZXhPZihrZXkpID09PSAtMSkpO1xuICAgICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBfXygnT3B0aW9uczonKTtcbiAgICAgICAgaWYgKCFncm91cHNbZGVmYXVsdEdyb3VwXSlcbiAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdID0gW107XG4gICAgICAgIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgb3B0aW9ucy5hbGlhcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApO1xuICAgICAgICBjb25zdCBpc0xvbmdTd2l0Y2ggPSAoc3cpID0+IC9eLS0vLnRlc3QoZ2V0VGV4dChzdykpO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRHcm91cHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAuZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cHNbZ3JvdXBOYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSBncm91cHNbZ3JvdXBOYW1lXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5hbGlhc0tleXMuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhbGlhc0tleTsgKGFsaWFzS2V5ID0gYWxpYXNLZXlzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKH4ob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0tleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBub3JtYWxpemVkS2V5cyB9KSA9PiBub3JtYWxpemVkS2V5cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaGVzID0gbm9ybWFsaXplZEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lID09PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldJC8udGVzdChzdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3cubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLScpICsgc3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKHN3MSwgc3cyKSA9PiBpc0xvbmdTd2l0Y2goc3cxKSA9PT0gaXNMb25nU3dpdGNoKHN3MilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXNMb25nU3dpdGNoKHN3MSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaG9ydFN3aXRjaGVzVXNlZCA9IGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgIC5zb21lKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiAhbm9ybWFsaXplZEtleXMuZXZlcnkoa2V5ID0+IGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkpO1xuICAgICAgICBpZiAoc2hvcnRTd2l0Y2hlc1VzZWQpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzW2tleV0gPSBhZGRJbmRlbnRhdGlvbihzd2l0Y2hlc1trZXldLCAnLXgsICcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheWVkR3JvdXBzLmZvckVhY2goKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgdWkuZGl2KGdyb3VwTmFtZSk7XG4gICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga3N3aXRjaCA9IHN3aXRjaGVzW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkZXNjcmlwdGlvbnNba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKH5kZXNjLmxhc3RJbmRleE9mKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmNvdW50LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5hcnJheS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSlcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLnN0cmluZy5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5udW1iZXIuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgYWxpYXNlcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApIHtcbiAgICAgICAgbGV0IGdyb3VwZWRLZXlzID0gW107XG4gICAgICAgIGxldCB0b0NoZWNrID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwZWRLZXlzID0gZ3JvdXBlZEtleXMuY29uY2F0KGdyb3Vwc1tncm91cF0pO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0b0NoZWNrID0gW2tleV0uY29uY2F0KGFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXRvQ2hlY2suc29tZShrID0+IGdyb3VwZWRLZXlzLmluZGV4T2YoaykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cGVkS2V5cztcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlsdGVySGlkZGVuT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICh5YXJncy5nZXRPcHRpb25zKCkuaGlkZGVuT3B0aW9ucy5pbmRleE9mKGtleSkgPCAwIHx8XG4gICAgICAgICAgICB5YXJncy5wYXJzZWQuYXJndlt5YXJncy5nZXRPcHRpb25zKCkuc2hvd0hpZGRlbk9wdF0pO1xuICAgIH1cbiAgICBzZWxmLnNob3dIZWxwID0gKGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHNlbGYuaGVscCgpKTtcbiAgICB9O1xuICAgIHNlbGYuZnVuY3Rpb25EZXNjcmlwdGlvbiA9IGZuID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmbi5uYW1lXG4gICAgICAgICAgICA/IHNoaW0uUGFyc2VyLmRlY2FtZWxpemUoZm4ubmFtZSwgJy0nKVxuICAgICAgICAgICAgOiBfXygnZ2VuZXJhdGVkLXZhbHVlJyk7XG4gICAgICAgIHJldHVybiBbJygnLCBkZXNjcmlwdGlvbiwgJyknXS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHNlbGYuc3RyaW5naWZpZWRWYWx1ZXMgPSBmdW5jdGlvbiBzdHJpbmdpZmllZFZhbHVlcyh2YWx1ZXMsIHNlcGFyYXRvcikge1xuICAgICAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvciB8fCAnLCAnO1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCAhYXJyYXkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gc2VwO1xuICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyaW5nKHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IGBbJHtfXygnZGVmYXVsdDonKX0gYDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWRlZmF1bHREZXNjcmlwdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyaW5nfV1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aW5kb3dXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSA4MDtcbiAgICAgICAgaWYgKHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gICAgc2VsZi52ZXJzaW9uID0gdmVyID0+IHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcjtcbiAgICB9O1xuICAgIHNlbGYuc2hvd1ZlcnNpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBsb2dnZXIubG9nKHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0luZGVudGVkVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGFkZEluZGVudGF0aW9uKHRleHQsIGluZGVudCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KVxuICAgICAgICA/IHsgdGV4dDogdGV4dC50ZXh0LCBpbmRlbnRhdGlvbjogdGV4dC5pbmRlbnRhdGlvbiArIGluZGVudCB9XG4gICAgICAgIDogeyB0ZXh0LCBpbmRlbnRhdGlvbjogaW5kZW50IH07XG59XG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbih0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC5pbmRlbnRhdGlvbiA6IDA7XG59XG5mdW5jdGlvbiBnZXRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LnRleHQgOiB0ZXh0O1xufVxuXG5jb25zdCBjb21wbGV0aW9uU2hUZW1wbGF0ZSA9IGAjIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hfcHJvZmlsZSBvbiBPU1guXG4jXG5feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgIHR5cGVfbGlzdD0kKHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHthcmdzW0BdfVwiKVxuXG4gICAgQ09NUFJFUExZPSggJChjb21wZ2VuIC1XIFwiXFwke3R5cGVfbGlzdH1cIiAtLSBcXCR7Y3VyX3dvcmR9KSApXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGRlZmF1bHQgLUYgX3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuY29uc3QgY29tcGxldGlvblpzaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hfcHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgbG9jYWwgcmVwbHlcbiAgbG9jYWwgc2k9JElGU1xuICBJRlM9JCdcXG4nIHJlcGx5PSgkKENPTVBfQ1dPUkQ9XCIkKChDVVJSRU5ULTEpKVwiIENPTVBfTElORT1cIiRCVUZGRVJcIiBDT01QX1BPSU5UPVwiJENVUlNPUlwiIHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHt3b3Jkc1tAXX1cIikpXG4gIElGUz0kc2lcbiAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG59XG5jb21wZGVmIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5cbmZ1bmN0aW9uIGNvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgY29uc3Qgc2VsZiA9IHtcbiAgICAgICAgY29tcGxldGlvbktleTogJ2dldC15YXJncy1jb21wbGV0aW9ucycsXG4gICAgfTtcbiAgICBsZXQgYWxpYXNlcztcbiAgICBzZWxmLnNldFBhcnNlZCA9IGZ1bmN0aW9uIHNldFBhcnNlZChwYXJzZWQpIHtcbiAgICAgICAgYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH07XG4gICAgY29uc3QgenNoU2hlbGwgPSAoc2hpbS5nZXRFbnYoJ1NIRUxMJykgJiYgc2hpbS5nZXRFbnYoJ1NIRUxMJykuaW5kZXhPZignenNoJykgIT09IC0xKSB8fFxuICAgICAgICAoc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykgJiYgc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykuaW5kZXhPZignenNoJykgIT09IC0xKTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFyZ3MubGVuZ3RoID8gYXJnc1thcmdzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB5YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHM7XG4gICAgICAgIGZ1bmN0aW9uIHJ1bkNvbXBsZXRpb25GdW5jdGlvbihhcmd2KSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChjb21wbGV0aW9uRnVuY3Rpb24sIG51bGwsIHNoaW0pO1xuICAgICAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKGFyZ3YpXG4gICAgICAgICAgICAgICAgPyBhcmd2LnRoZW4ocnVuQ29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIDogcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gY29tbWFuZC5nZXRDb21tYW5kSGFuZGxlcnMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbYXJnc1tpXV0gJiYgaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHlhcmdzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIoeSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5LmFyZ3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgcGFyZW50Q29tbWFuZHNbcGFyZW50Q29tbWFuZHMubGVuZ3RoIC0gMV0gIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHVzYWdlLmdldENvbW1hbmRzKCkuZm9yRWFjaCh1c2FnZUNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcGFyc2VDb21tYW5kKHVzYWdlQ29tbWFuZFswXSkuY21kO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmluZGV4T2YoY29tbWFuZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB1c2FnZUNvbW1hbmRbMV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lLnJlcGxhY2UoLzovZywgJ1xcXFw6JykgKyAnOicgKyBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Lm1hdGNoKC9eLS8pIHx8IChjdXJyZW50ID09PSAnJyAmJiBjb21wbGV0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcyA9IHVzYWdlLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMua2V5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVnYWJsZSA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGtleUFuZEFsaWFzZXMgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSlcbiAgICAgICAgICAgICAgICAgICAga2V5QW5kQWxpYXNlcyA9IGtleUFuZEFsaWFzZXMuY29uY2F0KGtleUFuZEFsaWFzZXMubWFwKGtleSA9PiBgbm8tJHtrZXl9YCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlT3B0aW9uS2V5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RJbkFyZ3MgPSBrZXlBbmRBbGlhc2VzLmV2ZXJ5KHZhbCA9PiBhcmdzLmluZGV4T2YoYC0tJHt2YWx9YCkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdEluQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRzQnlUd29EYXNoZXMgPSAocykgPT4gL14tLS8udGVzdChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGFzaGVzID0gIXN0YXJ0c0J5VHdvRGFzaGVzKGN1cnJlbnQpICYmIGlzU2hvcnRPcHRpb24oa2V5KSA/ICctJyA6ICctLSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcGxldGVPcHRpb25LZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSAmJiAhIW9wdGlvbnMuZGVmYXVsdFtrZXldKVxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShgbm8tJHtrZXl9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICB9O1xuICAgIHNlbGYuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9IHpzaFNoZWxsXG4gICAgICAgICAgICA/IGNvbXBsZXRpb25ac2hUZW1wbGF0ZVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uU2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNoaW0ucGF0aC5iYXNlbmFtZSgkMCk7XG4gICAgICAgIGlmICgkMC5tYXRjaCgvXFwuanMkLykpXG4gICAgICAgICAgICAkMCA9IGAuLyR7JDB9YDtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX25hbWV9fS9nLCBuYW1lKTtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7Y29tcGxldGlvbl9jb21tYW5kfX0vZywgY21kKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5yZXBsYWNlKC97e2FwcF9wYXRofX0vZywgJDApO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25GdW5jdGlvbiA9IG51bGw7XG4gICAgc2VsZi5yZWdpc3RlckZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb21wbGV0aW9uRnVuY3Rpb24gPSBmbjtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cblxuZnVuY3Rpb24gbGV2ZW5zaHRlaW4oYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXRyaXhbaV0gPSBbaV07XG4gICAgfVxuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMSkpIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xufVxuXG5jb25zdCBzcGVjaWFsS2V5cyA9IFsnJDAnLCAnLS0nLCAnXyddO1xuZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHkxOG4sIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHkxOG4uX187XG4gICAgY29uc3QgX19uID0geTE4bi5fX247XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIHNlbGYubm9uT3B0aW9uQ291bnQgPSBmdW5jdGlvbiBub25PcHRpb25Db3VudChhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxDb3VudCA9IGFyZ3YuXy5sZW5ndGggKyAoYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10ubGVuZ3RoIDogMCk7XG4gICAgICAgIGNvbnN0IF9zID0gcG9zaXRpb25hbENvdW50IC0geWFyZ3MuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXyAmJlxuICAgICAgICAgICAgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbiB8fCBfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpKSB7XG4gICAgICAgICAgICBpZiAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucG9zaXRpb25hbENvdW50ID0gZnVuY3Rpb24gcG9zaXRpb25hbENvdW50KHJlcXVpcmVkLCBvYnNlcnZlZCkge1xuICAgICAgICBpZiAob2JzZXJ2ZWQgPCByZXF1aXJlZCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBvYnNlcnZlZCwgb2JzZXJ2ZWQgKyAnJywgcmVxdWlyZWQgKyAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVkQXJndW1lbnRzID0gZnVuY3Rpb24gcmVxdWlyZWRBcmd1bWVudHMoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IG1pc3NpbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyB8fCB7fTtcbiAgICAgICAgICAgICAgICBtaXNzaW5nW2tleV0gPSBkZW1hbmRlZE9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWlzc2luZykge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNncyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWlzc2luZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBtaXNzaW5nW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBjdXN0b21Nc2dzLmluZGV4T2YobXNnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tTXNncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNnID0gY3VzdG9tTXNncy5sZW5ndGggPyBgXFxuJHtjdXN0b21Nc2dzLmpvaW4oJ1xcbicpfWAgOiAnJztcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAlcycsICdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50czogJXMnLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5sZW5ndGgsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmpvaW4oJywgJykgKyBjdXN0b21Nc2cpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQXJndW1lbnRzID0gZnVuY3Rpb24gdW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kLCBjaGVja1Bvc2l0aW9uYWxzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwb3NpdGlvbmFsTWFwLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5YXJncy5fZ2V0UGFyc2VDb250ZXh0KCksIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgY29tbWFuZEtleXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzRGVmYXVsdENvbW1hbmQpKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGFyZ3VtZW50OiAlcycsICdVbmtub3duIGFyZ3VtZW50czogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkNvbW1hbmRzID0gZnVuY3Rpb24gdW5rbm93bkNvbW1hbmRzKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJncy5nZXRDb21tYW5kSW5zdGFuY2UoKS5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fCBjb21tYW5kS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGNvbW1hbmQ6ICVzJywgJ1Vua25vd24gY29tbWFuZHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24uam9pbignLCAnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3ID0gZnVuY3Rpb24gaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGlhc2VzLCBrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzO1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgW2tleSwgLi4uYWxpYXNlc1trZXldXSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3QWxpYXNlcywgYSkgfHxcbiAgICAgICAgICAgICAgICAhbmV3QWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBjaGVja3MgPSBbXTtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gY2hlY2soZiwgZ2xvYmFsKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGYsXG4gICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5jdXN0b21DaGVja3MgPSBmdW5jdGlvbiBjdXN0b21DaGVja3MoYXJndiwgYWxpYXNlcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjsgKGYgPSBjaGVja3NbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZnVuYyA9IGYuZnVuYztcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyciwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGZ1bmMudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKHJlc3VsdC50b1N0cmluZygpLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgaW1wbGllZCA9IHt9O1xuICAgIHNlbGYuaW1wbGllcyA9IGZ1bmN0aW9uIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fG51bWJlcnxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbXBsaWVzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFpbXBsaWVkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmltcGxpZXMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh2YWx1ZSwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0SW1wbGllZCA9IGZ1bmN0aW9uIGdldEltcGxpZWQoKSB7XG4gICAgICAgIHJldHVybiBpbXBsaWVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24ga2V5RXhpc3RzKGFyZ3YsIHZhbCkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICAgICAgdmFsID0gaXNOYU4obnVtKSA/IHZhbCA6IG51bTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWwgPSBhcmd2Ll8ubGVuZ3RoID49IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwubWF0Y2goL14tLW5vLS4rLykpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5tYXRjaCgvXi0tbm8tKC4rKS8pWzFdO1xuICAgICAgICAgICAgdmFsID0gIWFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBsZXZlbnNodGVpbihjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoYyA9PiBjLmdsb2JhbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNoZWNrcyxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjaGVja3MsIGNvbmZsaWN0aW5nIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5cbmxldCBzaGltJDE7XG5mdW5jdGlvbiBZYXJnc1dpdGhTaGltKF9zaGltKSB7XG4gICAgc2hpbSQxID0gX3NoaW07XG4gICAgcmV0dXJuIFlhcmdzO1xufVxuZnVuY3Rpb24gWWFyZ3MocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkID0gc2hpbSQxLnByb2Nlc3MuY3dkKCksIHBhcmVudFJlcXVpcmUpIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGNvbW1hbmQkMTtcbiAgICBsZXQgY29tcGxldGlvbiQxID0gbnVsbDtcbiAgICBsZXQgZ3JvdXBzID0ge307XG4gICAgY29uc3QgZ2xvYmFsTWlkZGxld2FyZSA9IFtdO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBjb25zdCBwcmVzZXJ2ZWRHcm91cHMgPSB7fTtcbiAgICBsZXQgdXNhZ2UkMTtcbiAgICBsZXQgdmFsaWRhdGlvbiQxO1xuICAgIGxldCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IG51bGw7XG4gICAgY29uc3QgeTE4biA9IHNoaW0kMS55MThuO1xuICAgIHNlbGYubWlkZGxld2FyZSA9IGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIHNlbGYpO1xuICAgIHNlbGYuc2NyaXB0TmFtZSA9IGZ1bmN0aW9uIChzY3JpcHROYW1lKSB7XG4gICAgICAgIHNlbGYuY3VzdG9tU2NyaXB0TmFtZSA9IHRydWU7XG4gICAgICAgIHNlbGYuJDAgPSBzY3JpcHROYW1lO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZWZhdWx0JDA7XG4gICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3Qoc2hpbSQxLnByb2Nlc3MuYXJndigpWzBdKSkge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMSwgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMCwgMSk7XG4gICAgfVxuICAgIHNlbGYuJDAgPSBkZWZhdWx0JDBcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHJlYmFzZShjd2QsIHgpO1xuICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIGlmIChzaGltJDEuZ2V0RW52KCdfJykgJiYgc2hpbSQxLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IHNoaW0kMS5nZXRFbnYoJ18nKSkge1xuICAgICAgICBzZWxmLiQwID0gc2hpbSQxXG4gICAgICAgICAgICAuZ2V0RW52KCdfJylcbiAgICAgICAgICAgIC5yZXBsYWNlKGAke3NoaW0kMS5wYXRoLmRpcm5hbWUoc2hpbSQxLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHsgcmVzZXRzOiAtMSwgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdLCBmaWxlczogW10gfTtcbiAgICBzZWxmLmdldENvbnRleHQgPSAoKSA9PiBjb250ZXh0O1xuICAgIGxldCBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICBsZXQgZXhpdEVycm9yID0gbnVsbDtcbiAgICBzZWxmLmV4aXQgPSAoY29kZSwgZXJyKSA9PiB7XG4gICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgIGV4aXRFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgc2hpbSQxLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIGxldCBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgc2VsZi5jb21wbGV0aW9uID0gZnVuY3Rpb24gKGNtZCwgZGVzYywgZm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ3xib29sZWFufGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2NtZCwgZGVzYywgZm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbiA9IGRlc2M7XG4gICAgICAgICAgICBkZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRpb25Db21tYW5kID0gY21kIHx8IGNvbXBsZXRpb25Db21tYW5kIHx8ICdjb21wbGV0aW9uJztcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmNvbW1hbmQoY29tcGxldGlvbkNvbW1hbmQsIGRlc2MpO1xuICAgICAgICBpZiAoZm4pXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgc2VsZi5yZXNldE9wdGlvbnMgPSBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXRPcHRpb25zKGFsaWFzZXMgPSB7fSkge1xuICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdG1wT3B0aW9ucyA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbCA/IG9wdGlvbnMubG9jYWwgOiBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA/IG9wdGlvbnMuY29uZmlnT2JqZWN0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXNlcnZlZEdyb3VwcywgT2JqZWN0LmtleXMoZ3JvdXBzKS5yZWR1Y2UoKGFjYywgZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGdyb3VwcyA9IHt9O1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnY29lcmNlJyxcbiAgICAgICAgICAgICdkZXByZWNhdGVkT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGFycmF5T3B0aW9ucy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IChvcHRpb25zW2tdIHx8IFtdKS5maWx0ZXIoKGspID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RPcHRpb25zLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSBvYmpGaWx0ZXIob3B0aW9uc1trXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgb3B0aW9ucyA9IHRtcE9wdGlvbnM7XG4gICAgICAgIHVzYWdlJDEgPSB1c2FnZSQxID8gdXNhZ2UkMS5yZXNldChsb2NhbExvb2t1cCkgOiB1c2FnZShzZWxmLCB5MThuLCBzaGltJDEpO1xuICAgICAgICB2YWxpZGF0aW9uJDEgPSB2YWxpZGF0aW9uJDFcbiAgICAgICAgICAgID8gdmFsaWRhdGlvbiQxLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiB2YWxpZGF0aW9uKHNlbGYsIHVzYWdlJDEsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIGNvbW1hbmQkMSA9IGNvbW1hbmQkMVxuICAgICAgICAgICAgPyBjb21tYW5kJDEucmVzZXQoKVxuICAgICAgICAgICAgOiBjb21tYW5kKHNlbGYsIHVzYWdlJDEsIHZhbGlkYXRpb24kMSwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSQxKTtcbiAgICAgICAgaWYgKCFjb21wbGV0aW9uJDEpXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEgPSBjb21wbGV0aW9uKHNlbGYsIHVzYWdlJDEsIGNvbW1hbmQkMSwgc2hpbSQxKTtcbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBudWxsO1xuICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZXhpdEVycm9yID0gbnVsbDtcbiAgICAgICAgaGFzT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHNlbGYucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5yZXNldE9wdGlvbnMoKTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IG9wdGlvbnMuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UkMS5mcmVlemUoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEuZnJlZXplKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSQxKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgICh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cyxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgZXhpdEVycm9yLFxuICAgICAgICAgICAgaGFzT3V0cHV0LFxuICAgICAgICAgICAgcGFyc2VkOiBzZWxmLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdCxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gY29uZmlnT2JqZWN0cztcbiAgICAgICAgdXNhZ2UkMS51bmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEudW5mcmVlemUoKTtcbiAgICAgICAgY29tbWFuZCQxLnVuZnJlZXplKCk7XG4gICAgfVxuICAgIHNlbGYuYm9vbGVhbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2Jvb2xlYW4nLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFycmF5ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYXJyYXknLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm51bWJlciA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ251bWJlcicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubm9ybWFsaXplID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbm9ybWFsaXplJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb3VudCA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2NvdW50Jywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdzdHJpbmcnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVzQXJnID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZ3xvYmplY3Q+IFtudW1iZXJdJywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYucmVxdWlyZXNBcmcsICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuc2tpcFZhbGlkYXRpb24gPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludEFycmF5KHR5cGUsIGtleXMpIHtcbiAgICAgICAga2V5cyA9IFtdLmNvbmNhdChrZXlzKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxmLm5hcmdzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3R8YXJyYXk+IFtudW1iZXJdJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYubmFyZ3MsICduYXJnJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jaG9pY2VzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuY2hvaWNlcywgJ2Nob2ljZXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFsaWFzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuYWxpYXMsICdhbGlhcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVmYXVsdCA9IHNlbGYuZGVmYXVsdHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbKl0gW3N0cmluZ10nLCBba2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IHVzYWdlJDEuZnVuY3Rpb25EZXNjcmlwdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZWZhdWx0LCAnZGVmYXVsdCcsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiAoa2V5LCBkZXNjKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXksIGRlc2NdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc2V0S2V5KGtleSwgdHJ1ZSk7XG4gICAgICAgIHVzYWdlJDEuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBzZXRLZXkoa2V5LCBzZXQpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNldEtleSwgJ2tleScsIGtleSwgc2V0KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZW1hbmRPcHRpb24sICdkZW1hbmRlZE9wdGlvbnMnLCBrZXlzLCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgc2VsZi5kZW1hbmRPcHRpb24gPSBkZW1hbmRPcHRpb247XG4gICAgc2VsZi5jb2VyY2UgPSBmdW5jdGlvbiAoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYuY29lcmNlLCAnY29lcmNlJywga2V5cywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnNbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gKG9wdGlvbnNbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgc2FuaXRpemVLZXkoa2V5KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhbml0aXplS2V5KGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdChvcHRpb25LZXkpIHtcbiAgICAgICAgb2JqZWN0S2V5cyhvcHRpb25zKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gb3B0aW9uc1toaW50S2V5XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKH5oaW50LmluZGV4T2Yob3B0aW9uS2V5KSlcbiAgICAgICAgICAgICAgICAgICAgaGludC5zcGxpY2UoaGludC5pbmRleE9mKG9wdGlvbktleSksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhpbnRbb3B0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSB1c2FnZSQxLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIHNlbGYuY29uZmlnID0gZnVuY3Rpb24gY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdba10gPSBwYXJzZUZuIHx8IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZXhhbXBsZSA9IGZ1bmN0aW9uIChjbWQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgY21kLmZvckVhY2goZXhhbXBsZVBhcmFtcyA9PiBzZWxmLmV4YW1wbGUoLi4uZXhhbXBsZVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXNhZ2UkMS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb21tYW5kID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbW1hbmQkMS5hZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmREaXIgPSBmdW5jdGlvbiAoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBwYXJlbnRSZXF1aXJlIHx8IHNoaW0kMS5yZXF1aXJlO1xuICAgICAgICBjb21tYW5kJDEuYWRkRGlyZWN0b3J5KGRpciwgc2VsZi5nZXRDb250ZXh0KCksIHJlcSwgc2hpbSQxLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmQgPSBzZWxmLnJlcXVpcmVkID0gc2VsZi5yZXF1aXJlID0gZnVuY3Rpb24gZGVtYW5kKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1heCkpIHtcbiAgICAgICAgICAgIG1heC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICBzZWxmLmRlbWFuZENvbW1hbmQoa2V5cywgbWF4LCBtc2csIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnID09PSB0cnVlIHx8IHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmRDb21tYW5kID0gZnVuY3Rpb24gZGVtYW5kQ29tbWFuZChtaW4gPSAxLCBtYXgsIG1pbk1zZywgbWF4TXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tudW1iZXJdIFtudW1iZXJ8c3RyaW5nXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXScsIFttaW4sIG1heCwgbWluTXNnLCBtYXhNc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtaW5Nc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmdsb2JhbCgnXycsIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzLl8gPSB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBtaW5Nc2csXG4gICAgICAgICAgICBtYXhNc2csXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZW1hbmRlZE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkQ29tbWFuZHMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH07XG4gICAgc2VsZi5kZXByZWNhdGVPcHRpb24gPSBmdW5jdGlvbiBkZXByZWNhdGVPcHRpb24ob3B0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmd8Ym9vbGVhbl0nLCBbb3B0aW9uLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXByZWNhdGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlcHJlY2F0ZWRPcHRpb25zO1xuICAgIH07XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtudW1iZXJ8c3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29uZmxpY3RzID0gZnVuY3Rpb24gKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmNvbmZsaWN0cyhrZXkxLCBrZXkyKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVzYWdlID0gZnVuY3Rpb24gKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICgobXNnIHx8ICcnKS5tYXRjaCgvXlxcJDAoIHwkKS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZChtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy51c2FnZSgpIGRlc2NyaXB0aW9uIG11c3Qgc3RhcnQgd2l0aCAkMCBpZiBiZWluZyB1c2VkIGFzIGFsaWFzIGZvciAuY29tbWFuZCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLnVzYWdlKG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5lcGlsb2d1ZSA9IHNlbGYuZXBpbG9nID0gZnVuY3Rpb24gKG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFttc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5lcGlsb2cobXNnKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5mYWlsRm4oZik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5vbkZpbmlzaENvbW1hbmQgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQgPSBmO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0SGFuZGxlckZpbmlzaENvbW1hbmQgPSAoKSA9PiBoYW5kbGVyRmluaXNoQ29tbWFuZDtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gKGYsIF9nbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgX2dsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY2hlY2soZiwgX2dsb2JhbCAhPT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2xvYmFsID0gZnVuY3Rpb24gZ2xvYmFsKGdsb2JhbHMsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbYm9vbGVhbl0nLCBbZ2xvYmFscywgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGdsb2JhbHMgPSBbXS5jb25jYXQoZ2xvYmFscyk7XG4gICAgICAgIGlmIChnbG9iYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NhbC5pbmRleE9mKGcpID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnBrZ0NvbmYgPSBmdW5jdGlvbiBwa2dDb25mKGtleSwgcm9vdFBhdGgpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ10nLCBba2V5LCByb290UGF0aF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBsZXQgY29uZiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBrZ1VwKHJvb3RQYXRoIHx8IGN3ZCk7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25mID0gYXBwbHlFeHRlbmRzKG9ialtrZXldLCByb290UGF0aCB8fCBjd2QsIHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBzaGltJDEpO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gKG9wdGlvbnMuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGNvbmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgcGtncyA9IHt9O1xuICAgIGZ1bmN0aW9uIHBrZ1VwKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAocGtnc1tucGF0aF0pXG4gICAgICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzdGFydERpciA9IHJvb3RQYXRoIHx8IHNoaW0kMS5tYWluRmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAoIXJvb3RQYXRoICYmIHNoaW0kMS5wYXRoLmV4dG5hbWUoc3RhcnREaXIpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnREaXIgPSBzaGltJDEucGF0aC5kaXJuYW1lKHN0YXJ0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gc2hpbSQxLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShzaGltJDEucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX25vb3ApIHsgfVxuICAgICAgICBwa2dzW25wYXRoXSA9IG9iaiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHBrZ3NbbnBhdGhdO1xuICAgIH1cbiAgICBsZXQgcGFyc2VGbiA9IG51bGw7XG4gICAgbGV0IHBhcnNlQ29udGV4dCA9IG51bGw7XG4gICAgc2VsZi5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZnJlZXplKCk7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3YgPSBzZWxmLl9wYXJzZUFyZ3MocHJvY2Vzc0FyZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gc2VsZi5wYXJzZWQ7XG4gICAgICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCA9IHNob3J0Q2lyY3VpdDtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IF9wYXJzZUZuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG9ydENpcmN1aXQpXG4gICAgICAgICAgICBwcm9jZXNzQXJncyA9IGFyZ3M7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgZXhpdFByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2VsZi5fcGFyc2VBcmdzKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29tcGxldGlvbiQxLnNldFBhcnNlZChzZWxmLnBhcnNlZCk7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgcGFyc2VGbihleGl0RXJyb3IsIHBhcnNlZCwgb3V0cHV0KTtcbiAgICAgICAgdW5mcmVlemUoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9O1xuICAgIHNlbGYuX2dldFBhcnNlQ29udGV4dCA9ICgpID0+IHBhcnNlQ29udGV4dCB8fCB7fTtcbiAgICBzZWxmLl9oYXNQYXJzZUNhbGxiYWNrID0gKCkgPT4gISFwYXJzZUZuO1xuICAgIHNlbGYub3B0aW9uID0gc2VsZi5vcHRpb25zID0gZnVuY3Rpb24gb3B0aW9uKGtleSwgb3B0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbb2JqZWN0XScsIFtrZXksIG9wdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgc2VsZi5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlbGYuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBvcHQuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5za2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2tpcFZhbGlkYXRpb24oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBvcHQuZGVzY3JpYmUgfHwgb3B0LmRlc2NyaXB0aW9uIHx8IG9wdC5kZXNjO1xuICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICAgICAgaWYgKG9wdC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhpZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQucmVxdWlyZXNBcmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlcXVpcmVzQXJnKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldE9wdGlvbnMgPSAoKSA9PiBvcHRpb25zO1xuICAgIHNlbGYucG9zaXRpb25hbCA9IGZ1bmN0aW9uIChrZXksIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gPG9iamVjdD4nLCBba2V5LCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChjb250ZXh0LnJlc2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIi5wb3NpdGlvbmFsKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGluIGEgY29tbWFuZCdzIGJ1aWxkZXIgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkT3B0cyA9IFtcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2ltcGxpZXMnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnY29uZmxpY3RzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgJ2Rlc2NyaWJlJyxcbiAgICAgICAgICAgICdkZXNjJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICBdO1xuICAgICAgICBvcHRzID0gb2JqRmlsdGVyKG9wdHMsIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBsZXQgYWNjZXB0ID0gc3VwcG9ydGVkT3B0cy5pbmRleE9mKGspICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHYpID09PSAtMSlcbiAgICAgICAgICAgICAgICBhY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IGNvbnRleHQuZnVsbENvbW1hbmRzW2NvbnRleHQuZnVsbENvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSBmdWxsQ29tbWFuZFxuICAgICAgICAgICAgPyBjb21tYW5kJDEuY21kVG9QYXJzZU9wdGlvbnMoZnVsbENvbW1hbmQpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICBvYmplY3RLZXlzKHBhcnNlT3B0aW9ucykuZm9yRWFjaChwayA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZU9wdGlvbiA9IHBhcnNlT3B0aW9uc1twa107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZU9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb24uaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uW2tleV0gJiYgIShwayBpbiBvcHRzKSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSBwYXJzZU9wdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ncm91cChrZXksIHVzYWdlJDEuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfTtcbiAgICBzZWxmLmdyb3VwID0gZnVuY3Rpb24gZ3JvdXAob3B0cywgZ3JvdXBOYW1lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IDxzdHJpbmc+JywgW29wdHMsIGdyb3VwTmFtZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdIHx8IGdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICBpZiAocHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0ge307XG4gICAgICAgIGdyb3Vwc1tncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0R3JvdXBzID0gKCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZ3JvdXBzLCBwcmVzZXJ2ZWRHcm91cHMpO1xuICAgIHNlbGYuZW52ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dJywgW3ByZWZpeF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAocHJlZml4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0aW9ucy5lbnZQcmVmaXggPSBwcmVmaXggfHwgJyc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi53cmFwID0gZnVuY3Rpb24gKGNvbHMpIHtcbiAgICAgICAgYXJnc2VydCgnPG51bWJlcnxudWxsfHVuZGVmaW5lZD4nLCBbY29sc10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHN0cmljdCA9IGZhbHNlO1xuICAgIHNlbGYuc3RyaWN0ID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0ID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3QgPSAoKSA9PiBzdHJpY3Q7XG4gICAgbGV0IHN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RDb21tYW5kcyA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHN0cmljdENvbW1hbmRzID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RDb21tYW5kcyA9ICgpID0+IHN0cmljdENvbW1hbmRzO1xuICAgIGxldCBzdHJpY3RPcHRpb25zID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RPcHRpb25zID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0T3B0aW9ucyA9IGVuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0U3RyaWN0T3B0aW9ucyA9ICgpID0+IHN0cmljdE9wdGlvbnM7XG4gICAgbGV0IHBhcnNlckNvbmZpZyA9IHt9O1xuICAgIHNlbGYucGFyc2VyQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlckNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwYXJzZXJDb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uID0gKCkgPT4gcGFyc2VyQ29uZmlnO1xuICAgIHNlbGYuc2hvd0hlbHAgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFzZWxmLnBhcnNlZClcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXNldHMrKztcbiAgICAgICAgICAgIGNvbW1hbmQkMS5ydW5EZWZhdWx0QnVpbGRlck9uKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uT3B0ID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSBmdW5jdGlvbiB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodmVyc2lvbk9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QodmVyc2lvbk9wdCk7XG4gICAgICAgICAgICB1c2FnZSQxLnZlcnNpb24odW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHZlcnNpb25PcHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2ZXIgPSBndWVzc1ZlcnNpb24oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmVyc2lvbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIG1zZyA9IG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyB2ZXJzaW9uIG51bWJlcicpO1xuICAgICAgICB1c2FnZSQxLnZlcnNpb24odmVyIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIHNlbGYuYm9vbGVhbih2ZXJzaW9uT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZSh2ZXJzaW9uT3B0LCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzVmVyc2lvbigpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAoKTtcbiAgICAgICAgcmV0dXJuIG9iai52ZXJzaW9uIHx8ICd1bmtub3duJztcbiAgICB9XG4gICAgbGV0IGhlbHBPcHQgPSBudWxsO1xuICAgIHNlbGYuYWRkSGVscE9wdCA9IHNlbGYuaGVscCA9IGZ1bmN0aW9uIGFkZEhlbHBPcHQob3B0LCBtc2cpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhlbHBPcHQgPSAnaGVscCc7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KGhlbHBPcHQpO1xuICAgICAgICAgICAgaGVscE9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGhlbHBPcHQgPSB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRIZWxwT3B0O1xuICAgICAgICBzZWxmLmJvb2xlYW4oaGVscE9wdCk7XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoaGVscE9wdCwgbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IGhlbHAnKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFNob3dIaWRkZW5PcHQgPSAnc2hvdy1oaWRkZW4nO1xuICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IGRlZmF1bHRTaG93SGlkZGVuT3B0O1xuICAgIHNlbGYuYWRkU2hvd0hpZGRlbk9wdCA9IHNlbGYuc2hvd0hpZGRlbiA9IGZ1bmN0aW9uIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvd0hpZGRlbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGlkZGVuIG9wdGlvbnMnKSk7XG4gICAgICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5oaWRlID0gZnVuY3Rpb24gaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuaGlkZGVuT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGV4aXRQcm9jZXNzID0gdHJ1ZTtcbiAgICBzZWxmLmV4aXRQcm9jZXNzID0gZnVuY3Rpb24gKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGV4aXRQcm9jZXNzID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldEV4aXRQcm9jZXNzID0gKCkgPT4gZXhpdFByb2Nlc3M7XG4gICAgc2VsZi5zaG93Q29tcGxldGlvblNjcmlwdCA9IGZ1bmN0aW9uICgkMCwgY21kKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmddJywgWyQwLCBjbWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgJDAgPSAkMCB8fCBzZWxmLiQwO1xuICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uJDEuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21wbGV0aW9uID0gZnVuY3Rpb24gKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiA8ZnVuY3Rpb24+JywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcGxldGlvbiQxLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgfTtcbiAgICBzZWxmLmxvY2FsZSA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10nLCBbbG9jYWxlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICghbG9jYWxlKSB7XG4gICAgICAgICAgICBndWVzc0xvY2FsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHkxOG4uZ2V0TG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0TG9jYWxlID0gZmFsc2U7XG4gICAgICAgIHkxOG4uc2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi51cGRhdGVTdHJpbmdzID0gc2VsZi51cGRhdGVMb2NhbGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZGV0ZWN0TG9jYWxlID0gdHJ1ZTtcbiAgICBzZWxmLmRldGVjdExvY2FsZSA9IGZ1bmN0aW9uIChkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBkZXRlY3Q7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXRlY3RMb2NhbGUgPSAoKSA9PiBkZXRlY3RMb2NhbGU7XG4gICAgY29uc3QgX2xvZ2dlciA9IHtcbiAgICAgICAgbG9nKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5faGFzUGFyc2VDYWxsYmFjaygpKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xcbic7XG4gICAgICAgICAgICBvdXRwdXQgKz0gYXJncy5qb2luKCcgJyk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBzZWxmLl9nZXRMb2dnZXJJbnN0YW5jZSA9ICgpID0+IF9sb2dnZXI7XG4gICAgc2VsZi5faGFzT3V0cHV0ID0gKCkgPT4gaGFzT3V0cHV0O1xuICAgIHNlbGYuX3NldEhhc091dHB1dCA9ICgpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGxldCByZWNvbW1lbmRDb21tYW5kcztcbiAgICBzZWxmLnJlY29tbWVuZENvbW1hbmRzID0gZnVuY3Rpb24gKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICByZWNvbW1lbmRDb21tYW5kcyA9IHJlY29tbWVuZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlSW5zdGFuY2UgPSAoKSA9PiB1c2FnZSQxO1xuICAgIHNlbGYuZ2V0VmFsaWRhdGlvbkluc3RhbmNlID0gKCkgPT4gdmFsaWRhdGlvbiQxO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEluc3RhbmNlID0gKCkgPT4gY29tbWFuZCQxO1xuICAgIHNlbGYudGVybWluYWxXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBzaGltJDEucHJvY2Vzcy5zdGRDb2x1bW5zO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICdhcmd2Jywge1xuICAgICAgICBnZXQ6ICgpID0+IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgc2VsZi5fcGFyc2VBcmdzID0gZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX2NhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFfY2FsbGVkRnJvbUNvbW1hbmQ7XG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IHByb2Nlc3NBcmdzO1xuICAgICAgICBvcHRpb25zLl9fID0geTE4bi5fXztcbiAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbSQxLlBhcnNlci5kZXRhaWxlZChhcmdzLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBPYmplY3QuYXNzaWduKHsgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IGZhbHNlIH0sIGNvbmZpZyksXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgaWYgKHBhcnNlQ29udGV4dClcbiAgICAgICAgICAgIGFyZ3YgPSBPYmplY3QuYXNzaWduKHt9LCBhcmd2LCBwYXJzZUNvbnRleHQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGFyZ3YuJDAgPSBzZWxmLiQwO1xuICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICBpZiAoc2hvcnRDaXJjdWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWxwT3B0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbaGVscE9wdF1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhbGlhc2VzW2hlbHBPcHRdIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5sZW5ndGggPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAofmhlbHBDbWRzLmluZGV4T2YoJycgKyBhcmd2Ll9bYXJndi5fLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3ZbaGVscE9wdF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJLZXlzID0gY29tbWFuZCQxLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSBjb21wbGV0aW9uJDEuY29tcGxldGlvbktleSBpbiBhcmd2O1xuICAgICAgICAgICAgY29uc3Qgc2tpcFJlY29tbWVuZGF0aW9uID0gYXJndltoZWxwT3B0XSB8fCByZXF1ZXN0Q29tcGxldGlvbnM7XG4gICAgICAgICAgICBjb25zdCBza2lwRGVmYXVsdENvbW1hbmQgPSBza2lwUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICAgICAgICAoaGFuZGxlcktleXMubGVuZ3RoID4gMSB8fCBoYW5kbGVyS2V5c1swXSAhPT0gJyQwJyk7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0VW5rbm93bkNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tYW5kSW5kZXggfHwgMCwgY21kOyBhcmd2Ll9baV0gIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBTdHJpbmcoYXJndi5fW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+aGFuZGxlcktleXMuaW5kZXhPZihjbWQpICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChjbWQsIHNlbGYsIHBhcnNlZCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RVbmtub3duQ29tbWFuZCAmJiBjbWQgIT09IGNvbXBsZXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCQxLmhhc0RlZmF1bHRDb21tYW5kKCkgJiYgIXNraXBEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29tbWVuZENvbW1hbmRzICYmIGZpcnN0VW5rbm93bkNvbW1hbmQgJiYgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGlvbkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgfmFyZ3YuXy5pbmRleE9mKGNvbXBsZXRpb25Db21tYW5kKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uQXJncyA9IGFyZ3Muc2xpY2UoYXJncy5pbmRleE9mKGAtLSR7Y29tcGxldGlvbiQxLmNvbXBsZXRpb25LZXl9YCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgIXBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoZWxwT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93SGVscCgnbG9nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSB2ZXJzaW9uT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UkMS5zaG93VmVyc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIG9wdGlvbnMuc2tpcFZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gT2JqZWN0LmtleXMoYXJndikuc29tZShrZXkgPT4gb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywge30sIHBhcnNlZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgdXNhZ2UkMS5mYWlsKGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgIH07XG4gICAgc2VsZi5fcG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBjYWxsZWRGcm9tQ29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmICghcG9wdWxhdGVEb3VibGVEYXNoKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fY29weURvdWJsZURhc2goYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSB8fFxuICAgICAgICAgICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZVBvc2l0aW9uYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fcGFyc2VQb3NpdGlvbmFsTnVtYmVycyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX2NvcHlEb3VibGVEYXNoID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfTtcbiAgICBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddIDogYXJndi5fO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyAoYXJnID0gYXJnc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpbSQxLlBhcnNlci5sb29rc0xpa2VOdW1iZXIoYXJnKSAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHthcmd9YCkpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBOdW1iZXIoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3J1blZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5WYWxpZGF0aW9uKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHBhcnNlRXJyb3JzLCBpc0RlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHBhcnNlRXJyb3JzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEucmVxdWlyZWRBcmd1bWVudHMoYXJndik7XG4gICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyaWN0Q29tbWFuZHMpIHtcbiAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gdmFsaWRhdGlvbiQxLnVua25vd25Db21tYW5kcyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmICFmYWlsZWRTdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RyaWN0T3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywge30sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGlvbiQxLmN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmxpbWl0ZWRDaG9pY2VzKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuaW1wbGljYXRpb25zKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RpbmcoYXJndik7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBndWVzc0xvY2FsZSgpIHtcbiAgICAgICAgaWYgKCFkZXRlY3RMb2NhbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHNoaW0kMS5nZXRFbnYoJ0xDX0FMTCcpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQ19NRVNTQUdFUycpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkdVQUdFJykgfHxcbiAgICAgICAgICAgICdlbl9VUyc7XG4gICAgICAgIHNlbGYubG9jYWxlKGxvY2FsZS5yZXBsYWNlKC9bLjpdLiovLCAnJykpO1xuICAgIH1cbiAgICBzZWxmLmhlbHAoKTtcbiAgICBzZWxmLnZlcnNpb24oKTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmNvbnN0IHJlYmFzZSA9IChiYXNlLCBkaXIpID0+IHNoaW0kMS5wYXRoLnJlbGF0aXZlKGJhc2UsIGRpcik7XG5mdW5jdGlvbiBpc1lhcmdzSW5zdGFuY2UoeSkge1xuICAgIHJldHVybiAhIXkgJiYgdHlwZW9mIHkuX3BhcnNlQXJncyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9hLCBfYjtcbmNvbnN0IHsgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHkxOG4gPSByZXF1aXJlKCd5MThuJyk7XG5jb25zdCBQYXJzZXIgPSByZXF1aXJlKCd5YXJncy1wYXJzZXInKTtcbnZhciBjanNQbGF0Zm9ybVNoaW0gPSB7XG4gICAgYXNzZXJ0OiB7XG4gICAgICAgIG5vdFN0cmljdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gICAgICAgIHN0cmljdEVxdWFsOiBhc3NlcnQuc3RyaWN0RXF1YWwsXG4gICAgfSxcbiAgICBjbGl1aTogcmVxdWlyZSgnY2xpdWknKSxcbiAgICBmaW5kVXA6IHJlcXVpcmUoJ2VzY2FsYWRlL3N5bmMnKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG4gICAgfSxcbiAgICBnZXRDYWxsZXJGaWxlOiByZXF1aXJlKCdnZXQtY2FsbGVyLWZpbGUnKSxcbiAgICBnZXRQcm9jZXNzQXJndkJpbjogZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gICAgaW5zcGVjdCxcbiAgICBtYWluRmlsZW5hbWU6IChfYiA9IChfYSA9IHJlcXVpcmUgPT09IG51bGwgfHwgcmVxdWlyZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWlyZS5tYWluKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZW5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuY3dkKCksXG4gICAgUGFyc2VyLFxuICAgIHBhdGg6IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBwcm9jZXNzOiB7XG4gICAgICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICAgICAgZXhlY1BhdGg6ICgpID0+IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgIGV4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRUaWNrOiBwcm9jZXNzLm5leHRUaWNrLFxuICAgICAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1uc1xuICAgICAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gICAgcmVhZEZpbGVTeW5jLFxuICAgIHJlcXVpcmU6IHJlcXVpcmUsXG4gICAgcmVxdWlyZURpcmVjdG9yeTogcmVxdWlyZSgncmVxdWlyZS1kaXJlY3RvcnknKSxcbiAgICBzdHJpbmdXaWR0aDogcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyksXG4gICAgeTE4bjogeTE4bih7XG4gICAgICAgIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9sb2NhbGVzJyksXG4gICAgICAgIHVwZGF0ZUZpbGVzOiBmYWxzZSxcbiAgICB9KSxcbn07XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gcHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OXG4gICAgPyBOdW1iZXIocHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA6IDEwO1xuaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9uKSB7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIocHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC92KFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3Mgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBQYXJzZXIkMSA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xuY29uc3QgWWFyZ3MkMSA9IFlhcmdzV2l0aFNoaW0oY2pzUGxhdGZvcm1TaGltKTtcbnZhciBjanMgPSB7XG4gICAgYXBwbHlFeHRlbmRzLFxuICAgIGNqc1BsYXRmb3JtU2hpbSxcbiAgICBZYXJnczogWWFyZ3MkMSxcbiAgICBhcmdzZXJ0LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5LFxuICAgIGlzUHJvbWlzZSxcbiAgICBvYmpGaWx0ZXIsXG4gICAgcGFyc2VDb21tYW5kLFxuICAgIFBhcnNlcjogUGFyc2VyJDEsXG4gICAgcHJvY2Vzc0FyZ3YsXG4gICAgcmViYXNlLFxuICAgIFlFcnJvcixcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2pzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGNsYXNzaWMgc2luZ2xldG9uIHlhcmdzIEFQSSwgdG8gdXNlIHlhcmdzXG4vLyB3aXRob3V0IHJ1bm5pbmcgYXMgYSBzaW5nbGV0b24gZG86XG4vLyByZXF1aXJlKCd5YXJncy95YXJncycpKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbmNvbnN0IHtZYXJncywgcHJvY2Vzc0FyZ3Z9ID0gcmVxdWlyZSgnLi9idWlsZC9pbmRleC5janMnKTtcblxuQXJndihwcm9jZXNzQXJndi5oaWRlQmluKHByb2Nlc3MuYXJndikpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFyZ3Y7XG5cbmZ1bmN0aW9uIEFyZ3YocHJvY2Vzc0FyZ3MsIGN3ZCkge1xuICBjb25zdCBhcmd2ID0gWWFyZ3MocHJvY2Vzc0FyZ3MsIGN3ZCwgcmVxdWlyZSk7XG4gIHNpbmdsZXRvbmlmeShhcmd2KTtcbiAgcmV0dXJuIGFyZ3Y7XG59XG5cbi8qICBIYWNrIGFuIGluc3RhbmNlIG9mIEFyZ3Ygd2l0aCBwcm9jZXNzLmFyZ3YgaW50byBBcmd2XG4gICAgc28gcGVvcGxlIGNhbiBkb1xuICAgIHJlcXVpcmUoJ3lhcmdzJykoWyctLWJlZWJsZT0xJywnLXonLCd6aXp6bGUnXSkuYXJndlxuICAgIHRvIHBhcnNlIGEgbGlzdCBvZiBhcmdzIGFuZFxuICAgIHJlcXVpcmUoJ3lhcmdzJykuYXJndlxuICAgIHRvIGdldCBhIHBhcnNlZCB2ZXJzaW9uIG9mIHByb2Nlc3MuYXJndi5cbiovXG5mdW5jdGlvbiBzaW5nbGV0b25pZnkoaW5zdCkge1xuICBPYmplY3Qua2V5cyhpbnN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2FyZ3YnKSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oa2V5LCBpbnN0Ll9fbG9va3VwR2V0dGVyX18oa2V5KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBBcmd2W2tleV0gPSBpbnN0W2tleV0uYmluZChpbnN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCckMCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc3QuJDA7XG4gICAgICB9KTtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXygncGFyc2VkJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC5wYXJzZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEludGVncmF0aW9uVGVzdHMsIEludGVnVGVzdEluZm8sIEludGVnVGVzdCB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IHJ1blNuYXBzaG90VGVzdHMsIHJ1bkludGVncmF0aW9uVGVzdHMsIEludGVnUnVubmVyTWV0cmljcywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4vd29ya2Vycyc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvMTkyOVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2VzYnVpbGQvaXNzdWVzLzE0OTJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCB5YXJncyA9IHJlcXVpcmUoJ3lhcmdzJyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignbGlzdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0xpc3QgdGVzdHMgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0nIH0pXG4gICAgLm9wdGlvbignY2xlYW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ1NraXBzIHN0YWNrIGNsZWFuIHVwIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGRlc2M6ICdWZXJib3NlIGxvZ3MgYW5kIG1ldHJpY3Mgb24gaW50ZWdyYXRpb24gdGVzdHMgZHVyYXRpb25zJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBuYXJnczogMSwgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnZGlyZWN0b3J5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogJ3Rlc3QnLCBkZXNjOiAnc3RhcnRpbmcgZGlyZWN0b3J5IHRvIGRpc2NvdmVyIGludGVncmF0aW9uIHRlc3RzLiBUZXN0cyB3aWxsIGJlIGRpc2NvdmVyZWQgcmVjdXJzaXZlbHkgZnJvbSB0aGlzIGRpcmVjdG9yeScgfSlcbiAgICAub3B0aW9ucygncHJvZmlsZXMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdsaXN0IG9mIEFXUyBwcm9maWxlcyB0byB1c2UuIFRlc3RzIHdpbGwgYmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyBlYWNoIHByb2ZpbGUrcmVnaW9ucycsIG5hcmdzOiAxLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdtYXgtd29ya2VycycsIHsgdHlwZTogJ251bWJlcicsIGRlc2M6ICdUaGUgbWF4IG51bWJlciBvZiB3b3JrZXJwb29sIHdvcmtlcnMgdG8gdXNlIHdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbCcsIGRlZmF1bHQ6IDE2IH0pXG4gICAgLm9wdGlvbnMoJ2V4Y2x1ZGUnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ1J1biBhbGwgdGVzdHMgaW4gdGhlIGRpcmVjdG9yeSwgZXhjZXB0IHRoZSBzcGVjaWZpZWQgVEVTVHMnLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb25zKCdmcm9tLWZpbGUnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnUmVhZCBURVNUIG5hbWVzIGZyb20gYSBmaWxlIChvbmUgVEVTVCBwZXIgbGluZSknIH0pXG4gICAgLm9wdGlvbignaW5zcGVjdC1mYWlsdXJlcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnS2VlcCB0aGUgaW50ZWcgdGVzdCBjbG91ZCBhc3NlbWJseSBpZiBhIGZhaWx1cmUgb2NjdXJzIGZvciBpbnNwZWN0aW9uJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0lmIHRoaXMgaXMgXCJ0cnVlXCIgdGhlbiB0aGUgc3RhY2sgdXBkYXRlIHdvcmtmbG93IHdpbGwgYmUgZGlzYWJsZWQnIH0pXG4gICAgLnN0cmljdCgpXG4gICAgLmFyZ3Y7XG5cbiAgY29uc3QgcG9vbCA9IHdvcmtlcnBvb2wucG9vbChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGliL3dvcmtlcnMvZXh0cmFjdC9pbmRleC5qcycpLCB7XG4gICAgbWF4V29ya2VyczogYXJndlsnbWF4LXdvcmtlcnMnXSxcbiAgfSk7XG5cbiAgLy8gbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWRcbiAgY29uc3QgdGVzdHNUb1J1bjogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgY29uc3QgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdID0gW107XG4gIGNvbnN0IHRlc3RzRnJvbUFyZ3M6IEludGVnVGVzdFtdID0gW107XG4gIGNvbnN0IHBhcmFsbGVsUmVnaW9ucyA9IGFycmF5RnJvbVlhcmdzKGFyZ3ZbJ3BhcmFsbGVsLXJlZ2lvbnMnXSk7XG4gIGNvbnN0IHRlc3RSZWdpb25zOiBzdHJpbmdbXSA9IHBhcmFsbGVsUmVnaW9ucyA/PyBbJ3VzLWVhc3QtMScsICd1cy1lYXN0LTInLCAndXMtd2VzdC0yJ107XG4gIGNvbnN0IHByb2ZpbGVzID0gYXJyYXlGcm9tWWFyZ3MoYXJndi5wcm9maWxlcyk7XG4gIGNvbnN0IHJ1blVwZGF0ZU9uRmFpbGVkID0gYXJndlsndXBkYXRlLW9uLWZhaWxlZCddID8/IGZhbHNlO1xuICBjb25zdCBmcm9tRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYXJndlsnZnJvbS1maWxlJ107XG4gIGNvbnN0IGV4Y2x1ZGU6IGJvb2xlYW4gPSBhcmd2LmV4Y2x1ZGU7XG5cbiAgbGV0IGZhaWxlZFNuYXBzaG90czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgaWYgKGFyZ3ZbJ21heC13b3JrZXJzJ10gPCB0ZXN0UmVnaW9ucy5sZW5ndGggKiAocHJvZmlsZXMgPz8gWzFdKS5sZW5ndGgpIHtcbiAgICBsb2dnZXIud2FybmluZygnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biAlcyB0ZXN0cyBpbiBwYXJhbGxlbCwgYnV0IG9ubHkgaGF2ZSAlcyB3b3JrZXJzLiBOb3QgYWxsIG9mIHlvdXIgcHJvZmlsZXMrcmVnaW9ucyB3aWxsIGJlIHV0aWxpemVkJywgYXJndi5wcm9maWxlcyAqIGFyZ3ZbJ3BhcmFsbGVsLXJlZ2lvbnMnXSwgYXJndlsnbWF4LXdvcmtlcnMnXSk7XG4gIH1cblxuICBsZXQgdGVzdHNTdWNjZWVkZWQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBpZiAoYXJndi5saXN0KSB7XG4gICAgICBjb25zdCB0ZXN0cyA9IGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKGFyZ3YuZGlyZWN0b3J5KS5mcm9tQ2xpQXJncygpO1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGVzdHMubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCdcXG4nKSArICdcXG4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5fLmxlbmd0aCA+IDAgJiYgZnJvbUZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBsaXN0IG9mIHRlc3RzIGNhbm5vdCBiZSBwcm92aWRlZCBpZiBcIi0tZnJvbS1maWxlXCIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdGVkVGVzdHMgPSBmcm9tRmlsZVxuICAgICAgPyAoYXdhaXQgZnMucmVhZEZpbGUoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSkuc3BsaXQoJ1xcbicpLmZpbHRlcih4ID0+IHgpXG4gICAgICA6IChhcmd2Ll8ubGVuZ3RoID4gMCA/IGFyZ3YuXyA6IHVuZGVmaW5lZCk7IC8vICd1bmRlZmluZWQnIG1lYW5zIG5vIHJlcXVlc3RcblxuICAgIHRlc3RzRnJvbUFyZ3MucHVzaCguLi4oYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMocGF0aC5yZXNvbHZlKGFyZ3YuZGlyZWN0b3J5KSkuZnJvbUNsaUFyZ3MocmVxdWVzdGVkVGVzdHMsIGV4Y2x1ZGUpKSk7XG5cbiAgICAvLyBhbHdheXMgcnVuIHNuYXBzaG90IHRlc3RzLCBidXQgaWYgJy0tZm9yY2UnIGlzIHBhc3NlZCB0aGVuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIG9uIGFsbCBmYWlsZWQgdGVzdHMsIG5vdCBqdXN0IHRob3NlIHRoYXRcbiAgICAvLyBmYWlsZWQgc25hcHNob3QgdGVzdHNcbiAgICBmYWlsZWRTbmFwc2hvdHMgPSBhd2FpdCBydW5TbmFwc2hvdFRlc3RzKHBvb2wsIHRlc3RzRnJvbUFyZ3MsIHtcbiAgICAgIHJldGFpbjogYXJndlsnaW5zcGVjdC1mYWlsdXJlcyddLFxuICAgICAgdmVyYm9zZTogYXJndi52ZXJib3NlLFxuICAgIH0pO1xuICAgIGZvciAoY29uc3QgZmFpbHVyZSBvZiBmYWlsZWRTbmFwc2hvdHMpIHtcbiAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKC4uLmZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzID8/IFtdKTtcbiAgICB9XG4gICAgaWYgKCFhcmd2LmZvcmNlKSB7XG4gICAgICB0ZXN0c1RvUnVuLnB1c2goLi4uZmFpbGVkU25hcHNob3RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAvLyBhbmQgbWVyZ2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgdGVzdHMgZnJvbSBhcmdzXG4gICAgICB0ZXN0c1RvUnVuLnB1c2goLi4ubWVyZ2VUZXN0cyh0ZXN0c0Zyb21BcmdzLm1hcCh0ID0+IHQuaW5mbyksIGZhaWxlZFNuYXBzaG90cykpO1xuICAgIH1cblxuICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBpZiBgLS11cGRhdGUtb24tZmFpbGVkYCBPUiBgLS1mb3JjZWAgaXMgdXNlZFxuICAgIGlmIChydW5VcGRhdGVPbkZhaWxlZCB8fCBhcmd2LmZvcmNlKSB7XG4gICAgICBjb25zdCB7IHN1Y2Nlc3MsIG1ldHJpY3MgfSA9IGF3YWl0IHJ1bkludGVncmF0aW9uVGVzdHMoe1xuICAgICAgICBwb29sLFxuICAgICAgICB0ZXN0czogdGVzdHNUb1J1bixcbiAgICAgICAgcmVnaW9uczogdGVzdFJlZ2lvbnMsXG4gICAgICAgIHByb2ZpbGVzLFxuICAgICAgICBjbGVhbjogYXJndi5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10sXG4gICAgICAgIHZlcmJvc2U6IGFyZ3YudmVyYm9zZSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6ICFhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddLFxuICAgICAgfSk7XG4gICAgICB0ZXN0c1N1Y2NlZWRlZCA9IHN1Y2Nlc3M7XG5cblxuICAgICAgaWYgKGFyZ3YuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdm9pZCBwb29sLnRlcm1pbmF0ZSgpO1xuICB9XG5cbiAgaWYgKGRlc3RydWN0aXZlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoZGVzdHJ1Y3RpdmVDaGFuZ2VzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFydW5VcGRhdGVPbkZhaWxlZCkge1xuICAgICAgbWVzc2FnZSA9ICdUbyByZS1ydW4gZmFpbGVkIHRlc3RzIHJ1bjogeWFybiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKCkge1xuICBtYWluKCkudGhlbigpLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuIiwgImV4cG9ydCB7IGNsaSB9IGZyb20gJy4vY2xpJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw4Q0FBQUEsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM5QixRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNwQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxNQUNqQixrQkFBa0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ2hDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ2xCLGNBQWMsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzNCLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ3JCLGFBQWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLGFBQWEsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzFCLGNBQWMsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQzFCLGFBQWEsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQzFCLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQ3RCLGtCQUFrQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDaEMsWUFBWSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDMUIsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQUEsTUFDdkIsUUFBUSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDcEIsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDdEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDeEIsaUJBQWlCLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUM5QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxNQUN2QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixlQUFlLENBQUMsS0FBSyxHQUFHLEdBQUc7QUFBQSxNQUMzQixrQkFBa0IsQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUFBLE1BQzlCLGNBQWMsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQzFCLGNBQWMsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzNCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQ3JCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEdBQUc7QUFBQSxNQUM3QixpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUFBLE1BQzVCLGlCQUFpQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQUEsTUFDNUIsaUJBQWlCLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUM3QixjQUFjLENBQUMsS0FBSyxHQUFHLEdBQUc7QUFBQSxNQUMxQixZQUFZLENBQUMsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUN6QixlQUFlLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUMzQixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixjQUFjLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN6QixlQUFlLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM3QixlQUFlLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFBQSxNQUMzQixXQUFXLENBQUMsS0FBSyxHQUFHLEdBQUc7QUFBQSxNQUN2QixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixRQUFRLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQSxNQUNwQixhQUFhLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUMxQixRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QixTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxNQUNuQixlQUFlLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUM1QixRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN6QixVQUFVLENBQUMsSUFBSSxHQUFHLEdBQUc7QUFBQSxNQUNyQixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixpQkFBaUIsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQy9CLGFBQWEsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQ3pCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0Isd0JBQXdCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QyxhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixlQUFlLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM3QixpQkFBaUIsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzlCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsa0JBQWtCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNoQyxrQkFBa0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ2hDLGtCQUFrQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDaEMsZUFBZSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDN0IsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsTUFDbEIsYUFBYSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQUEsTUFDekIsU0FBUyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdkIsV0FBVyxDQUFDLEtBQUssR0FBRyxHQUFHO0FBQUEsTUFDdkIsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDcEIsb0JBQW9CLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNsQyxjQUFjLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN4QixnQkFBZ0IsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzdCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsa0JBQWtCLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMvQixtQkFBbUIsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ2pDLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDakMsbUJBQW1CLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUNoQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQ2hDLGdCQUFnQixDQUFDLElBQUksSUFBSSxHQUFHO0FBQUEsTUFDNUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsWUFBWSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDMUIsZUFBZSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDN0IsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDbEIsV0FBVyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDekIsU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDckIsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDMUIsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDdEIsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDeEIsVUFBVSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDeEIsaUJBQWlCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMvQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixpQkFBaUIsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQy9CLGlCQUFpQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDL0IsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDckIsUUFBUSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdEIsUUFBUSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdEIsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHO0FBQUEsTUFDdEIsaUJBQWlCLENBQUMsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUM5QixPQUFPLENBQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUNqQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMxQixlQUFlLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUMzQixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixjQUFjLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUMzQixZQUFZLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFBQSxNQUN4QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN0QixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixhQUFhLENBQUMsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUMxQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QixlQUFlLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMxQixPQUFPLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNyQixRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNwQixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN0QixhQUFhLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMxQixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixVQUFVLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQSxNQUN0QixlQUFlLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxJQUM3QjtBQUFBO0FBQUE7OztBQ3ZKQTtBQUFBLHVEQUFBQyxVQUFBQyxTQUFBO0FBRUEsUUFBTSxjQUFjO0FBTXBCLFFBQU0sa0JBQWtCLENBQUM7QUFDekIsZUFBVyxPQUFPLE9BQU8sS0FBSyxXQUFXLEdBQUc7QUFDM0Msc0JBQWdCLFlBQVksUUFBUTtBQUFBLElBQ3JDO0FBRUEsUUFBTSxVQUFVO0FBQUEsTUFDZixLQUFLLEVBQUMsVUFBVSxHQUFHLFFBQVEsTUFBSztBQUFBLE1BQ2hDLEtBQUssRUFBQyxVQUFVLEdBQUcsUUFBUSxNQUFLO0FBQUEsTUFDaEMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLE1BQUs7QUFBQSxNQUNoQyxLQUFLLEVBQUMsVUFBVSxHQUFHLFFBQVEsTUFBSztBQUFBLE1BQ2hDLE1BQU0sRUFBQyxVQUFVLEdBQUcsUUFBUSxPQUFNO0FBQUEsTUFDbEMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLE1BQUs7QUFBQSxNQUNoQyxLQUFLLEVBQUMsVUFBVSxHQUFHLFFBQVEsTUFBSztBQUFBLE1BQ2hDLEtBQUssRUFBQyxVQUFVLEdBQUcsUUFBUSxNQUFLO0FBQUEsTUFDaEMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFDO0FBQUEsTUFDbEMsU0FBUyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFDO0FBQUEsTUFDMUMsUUFBUSxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFDO0FBQUEsTUFDeEMsU0FBUyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFDO0FBQUEsTUFDMUMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBQztBQUFBLE1BQzFDLE9BQU8sRUFBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sT0FBTyxLQUFLLEVBQUM7QUFBQSxNQUNsRCxNQUFNLEVBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUM7QUFBQSxJQUNyQztBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUdqQixlQUFXLFNBQVMsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN6QyxVQUFJLEVBQUUsY0FBYyxRQUFRLFNBQVM7QUFDcEMsY0FBTSxJQUFJLE1BQU0sZ0NBQWdDLEtBQUs7QUFBQSxNQUN0RDtBQUVBLFVBQUksRUFBRSxZQUFZLFFBQVEsU0FBUztBQUNsQyxjQUFNLElBQUksTUFBTSxzQ0FBc0MsS0FBSztBQUFBLE1BQzVEO0FBRUEsVUFBSSxRQUFRLE9BQU8sT0FBTyxXQUFXLFFBQVEsT0FBTyxVQUFVO0FBQzdELGNBQU0sSUFBSSxNQUFNLHdDQUF3QyxLQUFLO0FBQUEsTUFDOUQ7QUFFQSxZQUFNLEVBQUMsVUFBVSxPQUFNLElBQUksUUFBUTtBQUNuQyxhQUFPLFFBQVEsT0FBTztBQUN0QixhQUFPLFFBQVEsT0FBTztBQUN0QixhQUFPLGVBQWUsUUFBUSxRQUFRLFlBQVksRUFBQyxPQUFPLFNBQVEsQ0FBQztBQUNuRSxhQUFPLGVBQWUsUUFBUSxRQUFRLFVBQVUsRUFBQyxPQUFPLE9BQU0sQ0FBQztBQUFBLElBQ2hFO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sTUFBTSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUM7QUFDNUIsWUFBTSxNQUFNLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUM1QixZQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFJO0FBQ0osVUFBSTtBQUVKLFVBQUksUUFBUSxLQUFLO0FBQ2hCLFlBQUk7QUFBQSxNQUNMLFdBQVcsTUFBTSxLQUFLO0FBQ3JCLGFBQUssSUFBSSxLQUFLO0FBQUEsTUFDZixXQUFXLE1BQU0sS0FBSztBQUNyQixZQUFJLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDbkIsV0FBVyxNQUFNLEtBQUs7QUFDckIsWUFBSSxLQUFLLElBQUksS0FBSztBQUFBLE1BQ25CO0FBRUEsVUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUc7QUFFeEIsVUFBSSxJQUFJLEdBQUc7QUFDVixhQUFLO0FBQUEsTUFDTjtBQUVBLFlBQU0sS0FBSyxNQUFNLE9BQU87QUFFeEIsVUFBSSxRQUFRLEtBQUs7QUFDaEIsWUFBSTtBQUFBLE1BQ0wsV0FBVyxLQUFLLEtBQUs7QUFDcEIsWUFBSSxTQUFTLE1BQU07QUFBQSxNQUNwQixPQUFPO0FBQ04sWUFBSSxTQUFTLElBQUksTUFBTTtBQUFBLE1BQ3hCO0FBRUEsYUFBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQzVCO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFVBQUk7QUFDSixVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJO0FBRUosWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMxQixZQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakMsWUFBTSxRQUFRLFNBQVUsR0FBRztBQUMxQixnQkFBUSxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUk7QUFBQSxNQUNqQztBQUVBLFVBQUksU0FBUyxHQUFHO0FBQ2YsWUFBSTtBQUNKLFlBQUk7QUFBQSxNQUNMLE9BQU87QUFDTixZQUFJLE9BQU87QUFDWCxlQUFPLE1BQU0sQ0FBQztBQUNkLGVBQU8sTUFBTSxDQUFDO0FBQ2QsZUFBTyxNQUFNLENBQUM7QUFFZCxZQUFJLE1BQU0sR0FBRztBQUNaLGNBQUksT0FBTztBQUFBLFFBQ1osV0FBVyxNQUFNLEdBQUc7QUFDbkIsY0FBSyxJQUFJLElBQUssT0FBTztBQUFBLFFBQ3RCLFdBQVcsTUFBTSxHQUFHO0FBQ25CLGNBQUssSUFBSSxJQUFLLE9BQU87QUFBQSxRQUN0QjtBQUVBLFlBQUksSUFBSSxHQUFHO0FBQ1YsZUFBSztBQUFBLFFBQ04sV0FBVyxJQUFJLEdBQUc7QUFDakIsZUFBSztBQUFBLFFBQ047QUFBQSxNQUNEO0FBRUEsYUFBTztBQUFBLFFBQ04sSUFBSTtBQUFBLFFBQ0osSUFBSTtBQUFBLFFBQ0osSUFBSTtBQUFBLE1BQ0w7QUFBQSxJQUNEO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJLElBQUksSUFBSTtBQUNaLFlBQU0sSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDL0IsWUFBTSxJQUFJLElBQUksTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFFOUMsVUFBSSxJQUFJLElBQUksTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFFNUMsYUFBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQzVCO0FBRUEsWUFBUSxJQUFJLE9BQU8sU0FBVSxLQUFLO0FBQ2pDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBRW5CLFlBQU0sSUFBSSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdEMsWUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLElBQUksTUFBTTtBQUNuQyxZQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxNQUFNO0FBQ25DLFlBQU0sS0FBSyxJQUFJLElBQUksTUFBTSxJQUFJLE1BQU07QUFFbkMsYUFBTyxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQzNDO0FBRUEsYUFBUyxvQkFBb0IsR0FBRyxHQUFHO0FBSWxDLGNBQ0csRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUNoQixFQUFFLEtBQUssRUFBRSxPQUFPLEtBQ2hCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFBQSxJQUVwQjtBQUVBLFlBQVEsSUFBSSxVQUFVLFNBQVUsS0FBSztBQUNwQyxZQUFNLFdBQVcsZ0JBQWdCO0FBQ2pDLFVBQUksVUFBVTtBQUNiLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSx5QkFBeUI7QUFDN0IsVUFBSTtBQUVKLGlCQUFXLFdBQVcsT0FBTyxLQUFLLFdBQVcsR0FBRztBQUMvQyxjQUFNLFFBQVEsWUFBWTtBQUcxQixjQUFNLFdBQVcsb0JBQW9CLEtBQUssS0FBSztBQUcvQyxZQUFJLFdBQVcsd0JBQXdCO0FBQ3RDLG1DQUF5QjtBQUN6QixrQ0FBd0I7QUFBQSxRQUN6QjtBQUFBLE1BQ0Q7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUVBLFlBQVEsUUFBUSxNQUFNLFNBQVUsU0FBUztBQUN4QyxhQUFPLFlBQVk7QUFBQSxJQUNwQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxVQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pCLFVBQUksSUFBSSxJQUFJLEtBQUs7QUFDakIsVUFBSSxJQUFJLElBQUksS0FBSztBQUdqQixVQUFJLElBQUksWUFBYSxJQUFJLFNBQVMsVUFBVSxNQUFRLElBQUk7QUFDeEQsVUFBSSxJQUFJLFlBQWEsSUFBSSxTQUFTLFVBQVUsTUFBUSxJQUFJO0FBQ3hELFVBQUksSUFBSSxZQUFhLElBQUksU0FBUyxVQUFVLE1BQVEsSUFBSTtBQUV4RCxZQUFNLElBQUssSUFBSSxTQUFXLElBQUksU0FBVyxJQUFJO0FBQzdDLFlBQU0sSUFBSyxJQUFJLFNBQVcsSUFBSSxTQUFXLElBQUk7QUFDN0MsWUFBTSxJQUFLLElBQUksU0FBVyxJQUFJLFNBQVcsSUFBSTtBQUU3QyxhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLE1BQU0sUUFBUSxJQUFJLElBQUksR0FBRztBQUMvQixVQUFJLElBQUksSUFBSTtBQUNaLFVBQUksSUFBSSxJQUFJO0FBQ1osVUFBSSxJQUFJLElBQUk7QUFFWixXQUFLO0FBQ0wsV0FBSztBQUNMLFdBQUs7QUFFTCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUV4RCxZQUFNLElBQUssTUFBTSxJQUFLO0FBQ3RCLFlBQU0sSUFBSSxPQUFPLElBQUk7QUFDckIsWUFBTSxJQUFJLE9BQU8sSUFBSTtBQUVyQixhQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNoQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJLE1BQU0sR0FBRztBQUNaLGNBQU0sSUFBSTtBQUNWLGVBQU8sQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3RCO0FBRUEsVUFBSSxJQUFJLEtBQUs7QUFDWixhQUFLLEtBQUssSUFBSTtBQUFBLE1BQ2YsT0FBTztBQUNOLGFBQUssSUFBSSxJQUFJLElBQUk7QUFBQSxNQUNsQjtBQUVBLFlBQU0sS0FBSyxJQUFJLElBQUk7QUFFbkIsWUFBTSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsZUFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDM0IsYUFBSyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUk7QUFDdkIsWUFBSSxLQUFLLEdBQUc7QUFDWDtBQUFBLFFBQ0Q7QUFFQSxZQUFJLEtBQUssR0FBRztBQUNYO0FBQUEsUUFDRDtBQUVBLFlBQUksSUFBSSxLQUFLLEdBQUc7QUFDZixnQkFBTSxNQUFNLEtBQUssTUFBTSxJQUFJO0FBQUEsUUFDNUIsV0FBVyxJQUFJLEtBQUssR0FBRztBQUN0QixnQkFBTTtBQUFBLFFBQ1AsV0FBVyxJQUFJLEtBQUssR0FBRztBQUN0QixnQkFBTSxNQUFNLEtBQUssT0FBTyxJQUFJLElBQUksTUFBTTtBQUFBLFFBQ3ZDLE9BQU87QUFDTixnQkFBTTtBQUFBLFFBQ1A7QUFFQSxZQUFJLEtBQUssTUFBTTtBQUFBLE1BQ2hCO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pCLFVBQUksSUFBSSxJQUFJLEtBQUs7QUFDakIsVUFBSSxPQUFPO0FBQ1gsWUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHLElBQUk7QUFFN0IsV0FBSztBQUNMLFdBQU0sS0FBSyxJQUFLLElBQUksSUFBSTtBQUN4QixjQUFRLFFBQVEsSUFBSSxPQUFPLElBQUk7QUFDL0IsWUFBTSxLQUFLLElBQUksS0FBSztBQUNwQixZQUFNLEtBQUssTUFBTSxJQUFLLElBQUksUUFBUyxPQUFPLFFBQVMsSUFBSSxLQUFNLElBQUk7QUFFakUsYUFBTyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRztBQUFBLElBQzdCO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixVQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pCLFlBQU0sS0FBSyxLQUFLLE1BQU0sQ0FBQyxJQUFJO0FBRTNCLFlBQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDO0FBQzFCLFlBQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QixZQUFNLElBQUksTUFBTSxLQUFLLElBQUssSUFBSTtBQUM5QixZQUFNLElBQUksTUFBTSxLQUFLLElBQUssS0FBSyxJQUFJO0FBQ25DLFdBQUs7QUFFTCxjQUFRLElBQUk7QUFBQSxRQUNYLEtBQUs7QUFDSixpQkFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsUUFDaEIsS0FBSztBQUNKLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUNoQixLQUFLO0FBQ0osaUJBQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLFFBQ2hCLEtBQUs7QUFDSixpQkFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsUUFDaEIsS0FBSztBQUNKLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUNoQixLQUFLO0FBQ0osaUJBQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ2pCO0FBQUEsSUFDRDtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUM3QixVQUFJO0FBQ0osVUFBSTtBQUVKLFdBQUssSUFBSSxLQUFLO0FBQ2QsWUFBTSxRQUFRLElBQUksS0FBSztBQUN2QixXQUFLLElBQUk7QUFDVCxZQUFPLFFBQVEsSUFBSyxPQUFPLElBQUk7QUFDL0IsV0FBSyxNQUFNO0FBQ1gsV0FBSztBQUVMLGFBQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUM3QjtBQUdBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFVBQUksS0FBSyxJQUFJLEtBQUs7QUFDbEIsVUFBSSxLQUFLLElBQUksS0FBSztBQUNsQixZQUFNLFFBQVEsS0FBSztBQUNuQixVQUFJO0FBR0osVUFBSSxRQUFRLEdBQUc7QUFDZCxjQUFNO0FBQ04sY0FBTTtBQUFBLE1BQ1A7QUFFQSxZQUFNLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQztBQUMxQixZQUFNLElBQUksSUFBSTtBQUNkLFVBQUksSUFBSSxJQUFJO0FBRVosV0FBSyxJQUFJLE9BQVUsR0FBRztBQUNyQixZQUFJLElBQUk7QUFBQSxNQUNUO0FBRUEsWUFBTSxJQUFJLEtBQUssS0FBSyxJQUFJO0FBRXhCLFVBQUk7QUFDSixVQUFJO0FBQ0osVUFBSTtBQUVKLGNBQVEsR0FBRztBQUFBLFFBQ1Y7QUFBQSxRQUNBLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBSTtBQUFBLFFBQ2hDLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBSTtBQUFBLFFBQ2hDLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLFFBQy9CLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLFFBQy9CLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLFFBQy9CLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLE1BQ2hDO0FBR0EsYUFBTyxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDbEM7QUFFQSxZQUFRLEtBQUssTUFBTSxTQUFVLE1BQU07QUFDbEMsWUFBTSxJQUFJLEtBQUssS0FBSztBQUNwQixZQUFNLElBQUksS0FBSyxLQUFLO0FBQ3BCLFlBQU0sSUFBSSxLQUFLLEtBQUs7QUFDcEIsWUFBTSxJQUFJLEtBQUssS0FBSztBQUVwQixZQUFNLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ3pDLFlBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDekMsWUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUV6QyxhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFLLElBQUksU0FBVyxJQUFJLFVBQVksSUFBSTtBQUN4QyxVQUFLLElBQUksVUFBWSxJQUFJLFNBQVcsSUFBSTtBQUN4QyxVQUFLLElBQUksU0FBVyxJQUFJLFNBQVksSUFBSTtBQUd4QyxVQUFJLElBQUksV0FDSCxRQUFTLE1BQU0sSUFBTSxPQUFTLFFBQ2hDLElBQUk7QUFFUCxVQUFJLElBQUksV0FDSCxRQUFTLE1BQU0sSUFBTSxPQUFTLFFBQ2hDLElBQUk7QUFFUCxVQUFJLElBQUksV0FDSCxRQUFTLE1BQU0sSUFBTSxPQUFTLFFBQ2hDLElBQUk7QUFFUCxVQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUM5QixVQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUM5QixVQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUU5QixhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxVQUFJLElBQUksSUFBSTtBQUNaLFVBQUksSUFBSSxJQUFJO0FBQ1osVUFBSSxJQUFJLElBQUk7QUFFWixXQUFLO0FBQ0wsV0FBSztBQUNMLFdBQUs7QUFFTCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUV4RCxZQUFNLElBQUssTUFBTSxJQUFLO0FBQ3RCLFlBQU0sSUFBSSxPQUFPLElBQUk7QUFDckIsWUFBTSxJQUFJLE9BQU8sSUFBSTtBQUVyQixhQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNoQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixXQUFLLElBQUksTUFBTTtBQUNmLFVBQUksSUFBSSxNQUFNO0FBQ2QsVUFBSSxJQUFJLElBQUk7QUFFWixZQUFNLEtBQUssS0FBSztBQUNoQixZQUFNLEtBQUssS0FBSztBQUNoQixZQUFNLEtBQUssS0FBSztBQUNoQixVQUFJLEtBQUssVUFBVyxNQUFNLElBQUksS0FBSyxPQUFPO0FBQzFDLFVBQUksS0FBSyxVQUFXLE1BQU0sSUFBSSxLQUFLLE9BQU87QUFDMUMsVUFBSSxLQUFLLFVBQVcsTUFBTSxJQUFJLEtBQUssT0FBTztBQUUxQyxXQUFLO0FBQ0wsV0FBSztBQUNMLFdBQUs7QUFFTCxhQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNoQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJO0FBRUosWUFBTSxLQUFLLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDMUIsVUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLO0FBRXhCLFVBQUksSUFBSSxHQUFHO0FBQ1YsYUFBSztBQUFBLE1BQ047QUFFQSxZQUFNLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUM7QUFFakMsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUk7QUFDZCxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJO0FBRWQsWUFBTSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUs7QUFDOUIsWUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDekIsWUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFFekIsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksU0FBUyxTQUFVLE1BQU0sYUFBYSxNQUFNO0FBQ3ZELFlBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJO0FBQ2xCLFVBQUksUUFBUSxlQUFlLE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLEtBQUs7QUFFN0QsY0FBUSxLQUFLLE1BQU0sUUFBUSxFQUFFO0FBRTdCLFVBQUksVUFBVSxHQUFHO0FBQ2hCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxPQUFPLE1BQ04sS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLElBQ3hCLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUN4QixLQUFLLE1BQU0sSUFBSSxHQUFHO0FBRXJCLFVBQUksVUFBVSxHQUFHO0FBQ2hCLGdCQUFRO0FBQUEsTUFDVDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUSxJQUFJLFNBQVMsU0FBVSxNQUFNO0FBR3BDLGFBQU8sUUFBUSxJQUFJLE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRTtBQUFBLElBQ3pEO0FBRUEsWUFBUSxJQUFJLFVBQVUsU0FBVSxNQUFNO0FBQ3JDLFlBQU0sSUFBSSxLQUFLO0FBQ2YsWUFBTSxJQUFJLEtBQUs7QUFDZixZQUFNLElBQUksS0FBSztBQUlmLFVBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN2QixZQUFJLElBQUksR0FBRztBQUNWLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksSUFBSSxLQUFLO0FBQ1osaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTyxLQUFLLE9BQVEsSUFBSSxLQUFLLE1BQU8sRUFBRSxJQUFJO0FBQUEsTUFDM0M7QUFFQSxZQUFNLE9BQU8sS0FDVCxLQUFLLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUMzQixJQUFJLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUMzQixLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFFekIsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRLE9BQU8sTUFBTSxTQUFVLE1BQU07QUFDcEMsVUFBSSxRQUFRLE9BQU87QUFHbkIsVUFBSSxVQUFVLEtBQUssVUFBVSxHQUFHO0FBQy9CLFlBQUksT0FBTyxJQUFJO0FBQ2QsbUJBQVM7QUFBQSxRQUNWO0FBRUEsZ0JBQVEsUUFBUSxPQUFPO0FBRXZCLGVBQU8sQ0FBQyxPQUFPLE9BQU8sS0FBSztBQUFBLE1BQzVCO0FBRUEsWUFBTSxRQUFRLENBQUMsRUFBRSxPQUFPLE1BQU0sS0FBSztBQUNuQyxZQUFNLEtBQU0sUUFBUSxLQUFLLE9BQVE7QUFDakMsWUFBTSxLQUFPLFNBQVMsSUFBSyxLQUFLLE9BQVE7QUFDeEMsWUFBTSxLQUFPLFNBQVMsSUFBSyxLQUFLLE9BQVE7QUFFeEMsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLFFBQVEsTUFBTSxTQUFVLE1BQU07QUFFckMsVUFBSSxRQUFRLEtBQUs7QUFDaEIsY0FBTSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBQzlCLGVBQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ2hCO0FBRUEsY0FBUTtBQUVSLFVBQUk7QUFDSixZQUFNLElBQUksS0FBSyxNQUFNLE9BQU8sRUFBRSxJQUFJLElBQUk7QUFDdEMsWUFBTSxJQUFJLEtBQUssT0FBTyxNQUFNLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSTtBQUNsRCxZQUFNLElBQUssTUFBTSxJQUFLLElBQUk7QUFFMUIsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLE1BQU07QUFDakMsWUFBTSxZQUFZLEtBQUssTUFBTSxLQUFLLEVBQUUsSUFBSSxRQUFTLFFBQzVDLEtBQUssTUFBTSxLQUFLLEVBQUUsSUFBSSxRQUFTLE1BQ2hDLEtBQUssTUFBTSxLQUFLLEVBQUUsSUFBSTtBQUUxQixZQUFNLFNBQVMsUUFBUSxTQUFTLEVBQUUsRUFBRSxZQUFZO0FBQ2hELGFBQU8sU0FBUyxVQUFVLE9BQU8sTUFBTSxJQUFJO0FBQUEsSUFDNUM7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLE1BQU07QUFDakMsWUFBTSxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsTUFBTSwwQkFBMEI7QUFDaEUsVUFBSSxDQUFDLE9BQU87QUFDWCxlQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxNQUNoQjtBQUVBLFVBQUksY0FBYyxNQUFNO0FBRXhCLFVBQUksTUFBTSxHQUFHLFdBQVcsR0FBRztBQUMxQixzQkFBYyxZQUFZLE1BQU0sRUFBRSxFQUFFLElBQUksVUFBUTtBQUMvQyxpQkFBTyxPQUFPO0FBQUEsUUFDZixDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQUEsTUFDWDtBQUVBLFlBQU0sVUFBVSxTQUFTLGFBQWEsRUFBRTtBQUN4QyxZQUFNLElBQUssV0FBVyxLQUFNO0FBQzVCLFlBQU0sSUFBSyxXQUFXLElBQUs7QUFDM0IsWUFBTSxJQUFJLFVBQVU7QUFFcEIsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxNQUFNLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUN0QyxZQUFNLE1BQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3RDLFlBQU0sU0FBVSxNQUFNO0FBQ3RCLFVBQUk7QUFDSixVQUFJO0FBRUosVUFBSSxTQUFTLEdBQUc7QUFDZixvQkFBWSxPQUFPLElBQUk7QUFBQSxNQUN4QixPQUFPO0FBQ04sb0JBQVk7QUFBQSxNQUNiO0FBRUEsVUFBSSxVQUFVLEdBQUc7QUFDaEIsY0FBTTtBQUFBLE1BQ1AsV0FDSSxRQUFRLEdBQUc7QUFDZCxlQUFRLElBQUksS0FBSyxTQUFVO0FBQUEsTUFDNUIsV0FDSSxRQUFRLEdBQUc7QUFDZCxjQUFNLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDckIsT0FBTztBQUNOLGNBQU0sS0FBSyxJQUFJLEtBQUs7QUFBQSxNQUNyQjtBQUVBLGFBQU87QUFDUCxhQUFPO0FBRVAsYUFBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEtBQUssWUFBWSxHQUFHO0FBQUEsSUFDakQ7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBRW5CLFlBQU0sSUFBSSxJQUFJLE1BQU8sSUFBTSxJQUFJLElBQU0sSUFBTSxLQUFLLElBQU07QUFFdEQsVUFBSSxJQUFJO0FBQ1IsVUFBSSxJQUFJLEdBQUs7QUFDWixhQUFLLElBQUksTUFBTSxNQUFNLElBQU07QUFBQSxNQUM1QjtBQUVBLGFBQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQ2pDO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUVuQixZQUFNLElBQUksSUFBSTtBQUNkLFVBQUksSUFBSTtBQUVSLFVBQUksSUFBSSxHQUFLO0FBQ1osYUFBSyxJQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ3BCO0FBRUEsYUFBTyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDakM7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFFbkIsVUFBSSxNQUFNLEdBQUs7QUFDZCxlQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUNsQztBQUVBLFlBQU0sT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLFlBQU0sS0FBTSxJQUFJLElBQUs7QUFDckIsWUFBTSxJQUFJLEtBQUs7QUFDZixZQUFNLElBQUksSUFBSTtBQUNkLFVBQUksS0FBSztBQUdULGNBQVEsS0FBSyxNQUFNLEVBQUUsR0FBRztBQUFBLFFBQ3ZCLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDO0FBQ0MsZUFBSyxLQUFLO0FBQUcsZUFBSyxLQUFLO0FBQUcsZUFBSyxLQUFLO0FBQUEsTUFDdEM7QUFHQSxZQUFNLElBQU0sS0FBSztBQUVqQixhQUFPO0FBQUEsU0FDTCxJQUFJLEtBQUssS0FBSyxNQUFNO0FBQUEsU0FDcEIsSUFBSSxLQUFLLEtBQUssTUFBTTtBQUFBLFNBQ3BCLElBQUksS0FBSyxLQUFLLE1BQU07QUFBQSxNQUN0QjtBQUFBLElBQ0Q7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBRW5CLFlBQU0sSUFBSSxJQUFJLEtBQUssSUFBTTtBQUN6QixVQUFJLElBQUk7QUFFUixVQUFJLElBQUksR0FBSztBQUNaLFlBQUksSUFBSTtBQUFBLE1BQ1Q7QUFFQSxhQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNqQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFFbkIsWUFBTSxJQUFJLEtBQUssSUFBTSxLQUFLLE1BQU07QUFDaEMsVUFBSSxJQUFJO0FBRVIsVUFBSSxJQUFJLEtBQU8sSUFBSSxLQUFLO0FBQ3ZCLFlBQUksS0FBSyxJQUFJO0FBQUEsTUFDZCxXQUNJLEtBQUssT0FBTyxJQUFJLEdBQUs7QUFDeEIsWUFBSSxLQUFLLEtBQUssSUFBSTtBQUFBLE1BQ25CO0FBRUEsYUFBTyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDakM7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUssSUFBTTtBQUN6QixhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxHQUFHO0FBQUEsSUFDN0M7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJLElBQUk7QUFFUixVQUFJLElBQUksR0FBRztBQUNWLGFBQUssSUFBSSxNQUFNLElBQUk7QUFBQSxNQUNwQjtBQUVBLGFBQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQ2pDO0FBRUEsWUFBUSxNQUFNLE1BQU0sU0FBVSxPQUFPO0FBQ3BDLGFBQU8sQ0FBRSxNQUFNLEtBQUssUUFBUyxLQUFNLE1BQU0sS0FBSyxRQUFTLEtBQU0sTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQ3JGO0FBRUEsWUFBUSxJQUFJLFFBQVEsU0FBVSxLQUFLO0FBQ2xDLGFBQU8sQ0FBRSxJQUFJLEtBQUssTUFBTyxPQUFRLElBQUksS0FBSyxNQUFPLE9BQVEsSUFBSSxLQUFLLE1BQU8sS0FBSztBQUFBLElBQy9FO0FBRUEsWUFBUSxLQUFLLE1BQU0sU0FBVSxNQUFNO0FBQ2xDLGFBQU8sQ0FBQyxLQUFLLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssS0FBSyxLQUFLLE1BQU0sR0FBRztBQUFBLElBQ3RFO0FBRUEsWUFBUSxLQUFLLE1BQU0sU0FBVSxNQUFNO0FBQ2xDLGFBQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFO0FBQUEsSUFDdEI7QUFFQSxZQUFRLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFFaEMsWUFBUSxLQUFLLE1BQU0sU0FBVUMsT0FBTTtBQUNsQyxhQUFPLENBQUMsR0FBRyxLQUFLQSxNQUFLLEVBQUU7QUFBQSxJQUN4QjtBQUVBLFlBQVEsS0FBSyxPQUFPLFNBQVVBLE9BQU07QUFDbkMsYUFBTyxDQUFDLEdBQUcsR0FBRyxHQUFHQSxNQUFLLEVBQUU7QUFBQSxJQUN6QjtBQUVBLFlBQVEsS0FBSyxNQUFNLFNBQVVBLE9BQU07QUFDbEMsYUFBTyxDQUFDQSxNQUFLLElBQUksR0FBRyxDQUFDO0FBQUEsSUFDdEI7QUFFQSxZQUFRLEtBQUssTUFBTSxTQUFVQSxPQUFNO0FBQ2xDLFlBQU0sTUFBTSxLQUFLLE1BQU1BLE1BQUssS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUM5QyxZQUFNLFdBQVcsT0FBTyxPQUFPLE9BQU8sS0FBSztBQUUzQyxZQUFNLFNBQVMsUUFBUSxTQUFTLEVBQUUsRUFBRSxZQUFZO0FBQ2hELGFBQU8sU0FBUyxVQUFVLE9BQU8sTUFBTSxJQUFJO0FBQUEsSUFDNUM7QUFFQSxZQUFRLElBQUksT0FBTyxTQUFVLEtBQUs7QUFDakMsWUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNO0FBQ3pDLGFBQU8sQ0FBQyxNQUFNLE1BQU0sR0FBRztBQUFBLElBQ3hCO0FBQUE7QUFBQTs7O0FDdDBCQTtBQUFBLGlEQUFBQyxVQUFBQyxTQUFBO0FBQUEsUUFBTSxjQUFjO0FBYXBCLGFBQVMsYUFBYTtBQUNyQixZQUFNLFFBQVEsQ0FBQztBQUVmLFlBQU0sU0FBUyxPQUFPLEtBQUssV0FBVztBQUV0QyxlQUFTLE1BQU0sT0FBTyxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUNsRCxjQUFNLE9BQU8sTUFBTTtBQUFBLFVBR2xCLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBR0EsYUFBUyxVQUFVLFdBQVc7QUFDN0IsWUFBTSxRQUFRLFdBQVc7QUFDekIsWUFBTSxRQUFRLENBQUMsU0FBUztBQUV4QixZQUFNLFdBQVcsV0FBVztBQUU1QixhQUFPLE1BQU0sUUFBUTtBQUNwQixjQUFNLFVBQVUsTUFBTSxJQUFJO0FBQzFCLGNBQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxRQUFRO0FBRWxELGlCQUFTLE1BQU0sVUFBVSxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUNyRCxnQkFBTSxXQUFXLFVBQVU7QUFDM0IsZ0JBQU0sT0FBTyxNQUFNO0FBRW5CLGNBQUksS0FBSyxhQUFhLElBQUk7QUFDekIsaUJBQUssV0FBVyxNQUFNLFNBQVMsV0FBVztBQUMxQyxpQkFBSyxTQUFTO0FBQ2Qsa0JBQU0sUUFBUSxRQUFRO0FBQUEsVUFDdkI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsYUFBUyxLQUFLLE1BQU0sSUFBSTtBQUN2QixhQUFPLFNBQVUsTUFBTTtBQUN0QixlQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUNyQjtBQUFBLElBQ0Q7QUFFQSxhQUFTLGVBQWUsU0FBUyxPQUFPO0FBQ3ZDLFlBQU1DLFFBQU8sQ0FBQyxNQUFNLFNBQVMsUUFBUSxPQUFPO0FBQzVDLFVBQUksS0FBSyxZQUFZLE1BQU0sU0FBUyxRQUFRO0FBRTVDLFVBQUksTUFBTSxNQUFNLFNBQVM7QUFDekIsYUFBTyxNQUFNLEtBQUssUUFBUTtBQUN6QixRQUFBQSxNQUFLLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFDOUIsYUFBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFFBQVEsTUFBTSxFQUFFO0FBQ2pELGNBQU0sTUFBTSxLQUFLO0FBQUEsTUFDbEI7QUFFQSxTQUFHLGFBQWFBO0FBQ2hCLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUQsUUFBTyxVQUFVLFNBQVUsV0FBVztBQUNyQyxZQUFNLFFBQVEsVUFBVSxTQUFTO0FBQ2pDLFlBQU0sYUFBYSxDQUFDO0FBRXBCLFlBQU0sU0FBUyxPQUFPLEtBQUssS0FBSztBQUNoQyxlQUFTLE1BQU0sT0FBTyxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUNsRCxjQUFNLFVBQVUsT0FBTztBQUN2QixjQUFNLE9BQU8sTUFBTTtBQUVuQixZQUFJLEtBQUssV0FBVyxNQUFNO0FBRXpCO0FBQUEsUUFDRDtBQUVBLG1CQUFXLFdBQVcsZUFBZSxTQUFTLEtBQUs7QUFBQSxNQUNwRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTs7O0FDL0ZBO0FBQUEsaURBQUFFLFVBQUFDLFNBQUE7QUFBQSxRQUFNLGNBQWM7QUFDcEIsUUFBTSxRQUFRO0FBRWQsUUFBTSxVQUFVLENBQUM7QUFFakIsUUFBTSxTQUFTLE9BQU8sS0FBSyxXQUFXO0FBRXRDLGFBQVMsUUFBUSxJQUFJO0FBQ3BCLFlBQU0sWUFBWSxZQUFhLE1BQU07QUFDcEMsY0FBTSxPQUFPLEtBQUs7QUFDbEIsWUFBSSxTQUFTLFVBQWEsU0FBUyxNQUFNO0FBQ3hDLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksS0FBSyxTQUFTLEdBQUc7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTyxHQUFHLElBQUk7QUFBQSxNQUNmO0FBR0EsVUFBSSxnQkFBZ0IsSUFBSTtBQUN2QixrQkFBVSxhQUFhLEdBQUc7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsYUFBUyxZQUFZLElBQUk7QUFDeEIsWUFBTSxZQUFZLFlBQWEsTUFBTTtBQUNwQyxjQUFNLE9BQU8sS0FBSztBQUVsQixZQUFJLFNBQVMsVUFBYSxTQUFTLE1BQU07QUFDeEMsaUJBQU87QUFBQSxRQUNSO0FBRUEsWUFBSSxLQUFLLFNBQVMsR0FBRztBQUNwQixpQkFBTztBQUFBLFFBQ1I7QUFFQSxjQUFNLFNBQVMsR0FBRyxJQUFJO0FBS3RCLFlBQUksT0FBTyxXQUFXLFVBQVU7QUFDL0IsbUJBQVMsTUFBTSxPQUFPLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLO0FBQ2xELG1CQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sRUFBRTtBQUFBLFVBQ2pDO0FBQUEsUUFDRDtBQUVBLGVBQU87QUFBQSxNQUNSO0FBR0EsVUFBSSxnQkFBZ0IsSUFBSTtBQUN2QixrQkFBVSxhQUFhLEdBQUc7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTyxRQUFRLGVBQWE7QUFDM0IsY0FBUSxhQUFhLENBQUM7QUFFdEIsYUFBTyxlQUFlLFFBQVEsWUFBWSxZQUFZLEVBQUMsT0FBTyxZQUFZLFdBQVcsU0FBUSxDQUFDO0FBQzlGLGFBQU8sZUFBZSxRQUFRLFlBQVksVUFBVSxFQUFDLE9BQU8sWUFBWSxXQUFXLE9BQU0sQ0FBQztBQUUxRixZQUFNLFNBQVMsTUFBTSxTQUFTO0FBQzlCLFlBQU0sY0FBYyxPQUFPLEtBQUssTUFBTTtBQUV0QyxrQkFBWSxRQUFRLGFBQVc7QUFDOUIsY0FBTSxLQUFLLE9BQU87QUFFbEIsZ0JBQVEsV0FBVyxXQUFXLFlBQVksRUFBRTtBQUM1QyxnQkFBUSxXQUFXLFNBQVMsTUFBTSxRQUFRLEVBQUU7QUFBQSxNQUM3QyxDQUFDO0FBQUEsSUFDRixDQUFDO0FBRUQsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDaEZqQjtBQUFBLCtDQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLGFBQWEsQ0FBQyxJQUFJLFdBQVcsSUFBSSxTQUFTO0FBQy9DLFlBQU0sT0FBTyxHQUFHLEdBQUcsSUFBSTtBQUN2QixhQUFPLFFBQVUsT0FBTztBQUFBLElBQ3pCO0FBRUEsUUFBTSxjQUFjLENBQUMsSUFBSSxXQUFXLElBQUksU0FBUztBQUNoRCxZQUFNLE9BQU8sR0FBRyxHQUFHLElBQUk7QUFDdkIsYUFBTyxRQUFVLEtBQUssWUFBWTtBQUFBLElBQ25DO0FBRUEsUUFBTSxjQUFjLENBQUMsSUFBSSxXQUFXLElBQUksU0FBUztBQUNoRCxZQUFNLE1BQU0sR0FBRyxHQUFHLElBQUk7QUFDdEIsYUFBTyxRQUFVLEtBQUssWUFBWSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUk7QUFBQSxJQUMzRDtBQUVBLFFBQU0sWUFBWSxPQUFLO0FBQ3ZCLFFBQU0sVUFBVSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFFckMsUUFBTSxrQkFBa0IsQ0FBQyxRQUFRLFVBQVUsUUFBUTtBQUNsRCxhQUFPLGVBQWUsUUFBUSxVQUFVO0FBQUEsUUFDdkMsS0FBSyxNQUFNO0FBQ1YsZ0JBQU0sUUFBUSxJQUFJO0FBRWxCLGlCQUFPLGVBQWUsUUFBUSxVQUFVO0FBQUEsWUFDdkM7QUFBQSxZQUNBLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxVQUNmLENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNGO0FBR0EsUUFBSTtBQUNKLFFBQU0sb0JBQW9CLENBQUMsTUFBTSxhQUFhLFVBQVUsaUJBQWlCO0FBQ3hFLFVBQUksaUJBQWlCLFFBQVc7QUFDL0IsdUJBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sU0FBUyxlQUFlLEtBQUs7QUFDbkMsWUFBTSxTQUFTLENBQUM7QUFFaEIsaUJBQVcsQ0FBQyxhQUFhLEtBQUssS0FBSyxPQUFPLFFBQVEsWUFBWSxHQUFHO0FBQ2hFLGNBQU0sT0FBTyxnQkFBZ0IsV0FBVyxTQUFTO0FBQ2pELFlBQUksZ0JBQWdCLGFBQWE7QUFDaEMsaUJBQU8sUUFBUSxLQUFLLFVBQVUsTUFBTTtBQUFBLFFBQ3JDLFdBQVcsT0FBTyxVQUFVLFVBQVU7QUFDckMsaUJBQU8sUUFBUSxLQUFLLE1BQU0sY0FBYyxNQUFNO0FBQUEsUUFDL0M7QUFBQSxNQUNEO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxhQUFTLGlCQUFpQjtBQUN6QixZQUFNLFFBQVEsb0JBQUksSUFBSTtBQUN0QixZQUFNLFNBQVM7QUFBQSxRQUNkLFVBQVU7QUFBQSxVQUNULE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFBQSxVQUVaLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNaLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNYLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNkLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNqQixTQUFTLENBQUMsR0FBRyxFQUFFO0FBQUEsVUFDZixRQUFRLENBQUMsR0FBRyxFQUFFO0FBQUEsVUFDZCxlQUFlLENBQUMsR0FBRyxFQUFFO0FBQUEsUUFDdEI7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNOLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNaLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNkLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNmLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNiLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNoQixNQUFNLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDYixPQUFPLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFHZCxhQUFhLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDcEIsV0FBVyxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2xCLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNwQixjQUFjLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDckIsWUFBWSxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ25CLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUN0QixZQUFZLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDbkIsYUFBYSxDQUFDLElBQUksRUFBRTtBQUFBLFFBQ3JCO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUixTQUFTLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDaEIsT0FBTyxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2QsU0FBUyxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2hCLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNqQixRQUFRLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDZixXQUFXLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDbEIsUUFBUSxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2YsU0FBUyxDQUFDLElBQUksRUFBRTtBQUFBLFVBR2hCLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFBQSxVQUN2QixhQUFhLENBQUMsS0FBSyxFQUFFO0FBQUEsVUFDckIsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUFBLFVBQ3ZCLGdCQUFnQixDQUFDLEtBQUssRUFBRTtBQUFBLFVBQ3hCLGNBQWMsQ0FBQyxLQUFLLEVBQUU7QUFBQSxVQUN0QixpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFBQSxVQUN6QixjQUFjLENBQUMsS0FBSyxFQUFFO0FBQUEsVUFDdEIsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUFBLFFBQ3hCO0FBQUEsTUFDRDtBQUdBLGFBQU8sTUFBTSxPQUFPLE9BQU8sTUFBTTtBQUNqQyxhQUFPLFFBQVEsU0FBUyxPQUFPLFFBQVE7QUFDdkMsYUFBTyxNQUFNLE9BQU8sT0FBTyxNQUFNO0FBQ2pDLGFBQU8sUUFBUSxTQUFTLE9BQU8sUUFBUTtBQUV2QyxpQkFBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFDeEQsbUJBQVcsQ0FBQyxXQUFXLEtBQUssS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQ3ZELGlCQUFPLGFBQWE7QUFBQSxZQUNuQixNQUFNLFFBQVUsTUFBTTtBQUFBLFlBQ3RCLE9BQU8sUUFBVSxNQUFNO0FBQUEsVUFDeEI7QUFFQSxnQkFBTSxhQUFhLE9BQU87QUFFMUIsZ0JBQU0sSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO0FBQUEsUUFDN0I7QUFFQSxlQUFPLGVBQWUsUUFBUSxXQUFXO0FBQUEsVUFDeEMsT0FBTztBQUFBLFVBQ1AsWUFBWTtBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0Y7QUFFQSxhQUFPLGVBQWUsUUFBUSxTQUFTO0FBQUEsUUFDdEMsT0FBTztBQUFBLFFBQ1AsWUFBWTtBQUFBLE1BQ2IsQ0FBQztBQUVELGFBQU8sTUFBTSxRQUFRO0FBQ3JCLGFBQU8sUUFBUSxRQUFRO0FBRXZCLHNCQUFnQixPQUFPLE9BQU8sUUFBUSxNQUFNLGtCQUFrQixZQUFZLFVBQVUsV0FBVyxLQUFLLENBQUM7QUFDckcsc0JBQWdCLE9BQU8sT0FBTyxXQUFXLE1BQU0sa0JBQWtCLGFBQWEsV0FBVyxXQUFXLEtBQUssQ0FBQztBQUMxRyxzQkFBZ0IsT0FBTyxPQUFPLFdBQVcsTUFBTSxrQkFBa0IsYUFBYSxPQUFPLFNBQVMsS0FBSyxDQUFDO0FBQ3BHLHNCQUFnQixPQUFPLFNBQVMsUUFBUSxNQUFNLGtCQUFrQixZQUFZLFVBQVUsV0FBVyxJQUFJLENBQUM7QUFDdEcsc0JBQWdCLE9BQU8sU0FBUyxXQUFXLE1BQU0sa0JBQWtCLGFBQWEsV0FBVyxXQUFXLElBQUksQ0FBQztBQUMzRyxzQkFBZ0IsT0FBTyxTQUFTLFdBQVcsTUFBTSxrQkFBa0IsYUFBYSxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBRXJHLGFBQU87QUFBQSxJQUNSO0FBR0EsV0FBTyxlQUFlQSxTQUFRLFdBQVc7QUFBQSxNQUN4QyxZQUFZO0FBQUEsTUFDWixLQUFLO0FBQUEsSUFDTixDQUFDO0FBQUE7QUFBQTs7O0FDbEtEO0FBQUEsNENBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sT0FBTyxRQUFRLFNBQVM7QUFDL0MsWUFBTSxTQUFTLEtBQUssV0FBVyxHQUFHLElBQUksS0FBTSxLQUFLLFdBQVcsSUFBSSxNQUFNO0FBQ3RFLFlBQU0sV0FBVyxLQUFLLFFBQVEsU0FBUyxJQUFJO0FBQzNDLFlBQU0scUJBQXFCLEtBQUssUUFBUSxJQUFJO0FBQzVDLGFBQU8sYUFBYSxPQUFPLHVCQUF1QixNQUFNLFdBQVc7QUFBQSxJQUNwRTtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsa0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sS0FBSyxRQUFRO0FBQ25CLFFBQU0sTUFBTSxRQUFRO0FBQ3BCLFFBQU0sVUFBVTtBQUVoQixRQUFNLEVBQUMsSUFBRyxJQUFJO0FBRWQsUUFBSTtBQUNKLFFBQUksUUFBUSxVQUFVLEtBQ3JCLFFBQVEsV0FBVyxLQUNuQixRQUFRLGFBQWEsS0FDckIsUUFBUSxhQUFhLEdBQUc7QUFDeEIsbUJBQWE7QUFBQSxJQUNkLFdBQVcsUUFBUSxPQUFPLEtBQ3pCLFFBQVEsUUFBUSxLQUNoQixRQUFRLFlBQVksS0FDcEIsUUFBUSxjQUFjLEdBQUc7QUFDekIsbUJBQWE7QUFBQSxJQUNkO0FBRUEsUUFBSSxpQkFBaUIsS0FBSztBQUN6QixVQUFJLElBQUksZ0JBQWdCLFFBQVE7QUFDL0IscUJBQWE7QUFBQSxNQUNkLFdBQVcsSUFBSSxnQkFBZ0IsU0FBUztBQUN2QyxxQkFBYTtBQUFBLE1BQ2QsT0FBTztBQUNOLHFCQUFhLElBQUksWUFBWSxXQUFXLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUMxRjtBQUFBLElBQ0Q7QUFFQSxhQUFTLGVBQWUsT0FBTztBQUM5QixVQUFJLFVBQVUsR0FBRztBQUNoQixlQUFPO0FBQUEsTUFDUjtBQUVBLGFBQU87QUFBQSxRQUNOO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixRQUFRLFNBQVM7QUFBQSxRQUNqQixRQUFRLFNBQVM7QUFBQSxNQUNsQjtBQUFBLElBQ0Q7QUFFQSxhQUFTLGNBQWMsWUFBWSxhQUFhO0FBQy9DLFVBQUksZUFBZSxHQUFHO0FBQ3JCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxRQUFRLFdBQVcsS0FDdEIsUUFBUSxZQUFZLEtBQ3BCLFFBQVEsaUJBQWlCLEdBQUc7QUFDNUIsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3pCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxjQUFjLENBQUMsZUFBZSxlQUFlLFFBQVc7QUFDM0QsZUFBTztBQUFBLE1BQ1I7QUFFQSxZQUFNLE1BQU0sY0FBYztBQUUxQixVQUFJLElBQUksU0FBUyxRQUFRO0FBQ3hCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxRQUFRLGFBQWEsU0FBUztBQUdqQyxjQUFNLFlBQVksR0FBRyxRQUFRLEVBQUUsTUFBTSxHQUFHO0FBQ3hDLFlBQ0MsT0FBTyxVQUFVLEVBQUUsS0FBSyxNQUN4QixPQUFPLFVBQVUsRUFBRSxLQUFLLE9BQ3ZCO0FBQ0QsaUJBQU8sT0FBTyxVQUFVLEVBQUUsS0FBSyxRQUFRLElBQUk7QUFBQSxRQUM1QztBQUVBLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxRQUFRLEtBQUs7QUFDaEIsWUFBSSxDQUFDLFVBQVUsWUFBWSxZQUFZLGFBQWEsa0JBQWtCLFdBQVcsRUFBRSxLQUFLLFVBQVEsUUFBUSxHQUFHLEtBQUssSUFBSSxZQUFZLFlBQVk7QUFDM0ksaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLHNCQUFzQixLQUFLO0FBQzlCLGVBQU8sZ0NBQWdDLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxJQUFJO0FBQUEsTUFDekU7QUFFQSxVQUFJLElBQUksY0FBYyxhQUFhO0FBQ2xDLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxrQkFBa0IsS0FBSztBQUMxQixjQUFNLFVBQVUsVUFBVSxJQUFJLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRTtBQUUzRSxnQkFBUSxJQUFJLGNBQWM7QUFBQSxVQUN6QixLQUFLO0FBQ0osbUJBQU8sV0FBVyxJQUFJLElBQUk7QUFBQSxVQUMzQixLQUFLO0FBQ0osbUJBQU87QUFBQSxRQUVUO0FBQUEsTUFDRDtBQUVBLFVBQUksaUJBQWlCLEtBQUssSUFBSSxJQUFJLEdBQUc7QUFDcEMsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLDhEQUE4RCxLQUFLLElBQUksSUFBSSxHQUFHO0FBQ2pGLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxlQUFlLEtBQUs7QUFDdkIsZUFBTztBQUFBLE1BQ1I7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUVBLGFBQVMsZ0JBQWdCLFFBQVE7QUFDaEMsWUFBTSxRQUFRLGNBQWMsUUFBUSxVQUFVLE9BQU8sS0FBSztBQUMxRCxhQUFPLGVBQWUsS0FBSztBQUFBLElBQzVCO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEIsZUFBZTtBQUFBLE1BQ2YsUUFBUSxlQUFlLGNBQWMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUN6RCxRQUFRLGVBQWUsY0FBYyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBLElBQzFEO0FBQUE7QUFBQTs7O0FDdElBO0FBQUEsK0NBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sbUJBQW1CLENBQUMsUUFBUSxXQUFXLGFBQWE7QUFDekQsVUFBSSxRQUFRLE9BQU8sUUFBUSxTQUFTO0FBQ3BDLFVBQUksVUFBVSxJQUFJO0FBQ2pCLGVBQU87QUFBQSxNQUNSO0FBRUEsWUFBTSxrQkFBa0IsVUFBVTtBQUNsQyxVQUFJLFdBQVc7QUFDZixVQUFJLGNBQWM7QUFDbEIsU0FBRztBQUNGLHVCQUFlLE9BQU8sT0FBTyxVQUFVLFFBQVEsUUFBUSxJQUFJLFlBQVk7QUFDdkUsbUJBQVcsUUFBUTtBQUNuQixnQkFBUSxPQUFPLFFBQVEsV0FBVyxRQUFRO0FBQUEsTUFDM0MsU0FBUyxVQUFVO0FBRW5CLHFCQUFlLE9BQU8sT0FBTyxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBTSxpQ0FBaUMsQ0FBQyxRQUFRLFFBQVEsU0FBUyxVQUFVO0FBQzFFLFVBQUksV0FBVztBQUNmLFVBQUksY0FBYztBQUNsQixTQUFHO0FBQ0YsY0FBTSxRQUFRLE9BQU8sUUFBUSxPQUFPO0FBQ3BDLHVCQUFlLE9BQU8sT0FBTyxXQUFXLFFBQVEsUUFBUSxJQUFJLFNBQVMsUUFBUSxJQUFJLFVBQVUsUUFBUSxTQUFTLFFBQVE7QUFDcEgsbUJBQVcsUUFBUTtBQUNuQixnQkFBUSxPQUFPLFFBQVEsTUFBTSxRQUFRO0FBQUEsTUFDdEMsU0FBUyxVQUFVO0FBRW5CLHFCQUFlLE9BQU8sT0FBTyxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUFBO0FBQUE7OztBQ3RDQTtBQUFBLG9EQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLGlCQUFpQjtBQUN2QixRQUFNLGNBQWM7QUFDcEIsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZUFBZTtBQUVyQixRQUFNLFVBQVUsb0JBQUksSUFBSTtBQUFBLE1BQ3ZCLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDVixDQUFDLEtBQUssSUFBSTtBQUFBLE1BQ1YsQ0FBQyxLQUFLLEdBQUk7QUFBQSxNQUNWLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDVixDQUFDLEtBQUssSUFBSTtBQUFBLE1BQ1YsQ0FBQyxLQUFLLElBQUk7QUFBQSxNQUNWLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDVixDQUFDLE1BQU0sSUFBSTtBQUFBLE1BQ1gsQ0FBQyxLQUFLLE1BQVE7QUFBQSxNQUNkLENBQUMsS0FBSyxNQUFRO0FBQUEsSUFDZixDQUFDO0FBRUQsYUFBUyxTQUFTLEdBQUc7QUFDcEIsWUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixZQUFNLFVBQVUsRUFBRSxPQUFPO0FBRXpCLFVBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLEtBQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxXQUFXLEdBQUk7QUFDMUUsZUFBTyxPQUFPLGFBQWEsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUFBLE1BQ3BEO0FBRUEsVUFBSSxLQUFLLFNBQVM7QUFDakIsZUFBTyxPQUFPLGNBQWMsU0FBUyxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQUEsTUFDekQ7QUFFQSxhQUFPLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFBQSxJQUMxQjtBQUVBLGFBQVMsZUFBZSxNQUFNLFlBQVk7QUFDekMsWUFBTSxVQUFVLENBQUM7QUFDakIsWUFBTSxTQUFTLFdBQVcsS0FBSyxFQUFFLE1BQU0sVUFBVTtBQUNqRCxVQUFJO0FBRUosaUJBQVcsU0FBUyxRQUFRO0FBQzNCLGNBQU0sU0FBUyxPQUFPLEtBQUs7QUFDM0IsWUFBSSxDQUFDLE9BQU8sTUFBTSxNQUFNLEdBQUc7QUFDMUIsa0JBQVEsS0FBSyxNQUFNO0FBQUEsUUFDcEIsV0FBWSxVQUFVLE1BQU0sTUFBTSxZQUFZLEdBQUk7QUFDakQsa0JBQVEsS0FBSyxRQUFRLEdBQUcsUUFBUSxjQUFjLENBQUMsR0FBRyxRQUFRLGNBQWMsU0FBUyxTQUFTLE1BQU0sSUFBSSxTQUFTLENBQUM7QUFBQSxRQUMvRyxPQUFPO0FBQ04sZ0JBQU0sSUFBSSxNQUFNLDBDQUEwQyxvQkFBb0IsUUFBUTtBQUFBLFFBQ3ZGO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsYUFBUyxXQUFXLE9BQU87QUFDMUIsa0JBQVksWUFBWTtBQUV4QixZQUFNLFVBQVUsQ0FBQztBQUNqQixVQUFJO0FBRUosY0FBUSxVQUFVLFlBQVksS0FBSyxLQUFLLE9BQU8sTUFBTTtBQUNwRCxjQUFNLE9BQU8sUUFBUTtBQUVyQixZQUFJLFFBQVEsSUFBSTtBQUNmLGdCQUFNLE9BQU8sZUFBZSxNQUFNLFFBQVEsRUFBRTtBQUM1QyxrQkFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsUUFDakMsT0FBTztBQUNOLGtCQUFRLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFBQSxRQUNwQjtBQUFBLE1BQ0Q7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUVBLGFBQVMsV0FBV0MsUUFBTyxRQUFRO0FBQ2xDLFlBQU0sVUFBVSxDQUFDO0FBRWpCLGlCQUFXLFNBQVMsUUFBUTtBQUMzQixtQkFBVyxTQUFTLE1BQU0sUUFBUTtBQUNqQyxrQkFBUSxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sTUFBTSxNQUFNLENBQUM7QUFBQSxRQUN6RDtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFVBQVVBO0FBQ2QsaUJBQVcsQ0FBQyxXQUFXQyxPQUFNLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRztBQUMxRCxZQUFJLENBQUMsTUFBTSxRQUFRQSxPQUFNLEdBQUc7QUFDM0I7QUFBQSxRQUNEO0FBRUEsWUFBSSxFQUFFLGFBQWEsVUFBVTtBQUM1QixnQkFBTSxJQUFJLE1BQU0sd0JBQXdCLFdBQVc7QUFBQSxRQUNwRDtBQUVBLGtCQUFVQSxRQUFPLFNBQVMsSUFBSSxRQUFRLFdBQVcsR0FBR0EsT0FBTSxJQUFJLFFBQVE7QUFBQSxNQUN2RTtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUYsUUFBTyxVQUFVLENBQUNDLFFBQU8sY0FBYztBQUN0QyxZQUFNLFNBQVMsQ0FBQztBQUNoQixZQUFNLFNBQVMsQ0FBQztBQUNoQixVQUFJLFFBQVEsQ0FBQztBQUdiLGdCQUFVLFFBQVEsZ0JBQWdCLENBQUMsR0FBRyxpQkFBaUIsU0FBUyxPQUFPLE9BQU8sY0FBYztBQUMzRixZQUFJLGlCQUFpQjtBQUNwQixnQkFBTSxLQUFLLFNBQVMsZUFBZSxDQUFDO0FBQUEsUUFDckMsV0FBVyxPQUFPO0FBQ2pCLGdCQUFNLFNBQVMsTUFBTSxLQUFLLEVBQUU7QUFDNUIsa0JBQVEsQ0FBQztBQUNULGlCQUFPLEtBQUssT0FBTyxXQUFXLElBQUksU0FBUyxXQUFXQSxRQUFPLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDNUUsaUJBQU8sS0FBSyxFQUFDLFNBQVMsUUFBUSxXQUFXLEtBQUssRUFBQyxDQUFDO0FBQUEsUUFDakQsV0FBVyxPQUFPO0FBQ2pCLGNBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEIsa0JBQU0sSUFBSSxNQUFNLDhDQUE4QztBQUFBLFVBQy9EO0FBRUEsaUJBQU8sS0FBSyxXQUFXQSxRQUFPLE1BQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDckQsa0JBQVEsQ0FBQztBQUNULGlCQUFPLElBQUk7QUFBQSxRQUNaLE9BQU87QUFDTixnQkFBTSxLQUFLLFNBQVM7QUFBQSxRQUNyQjtBQUFBLE1BQ0QsQ0FBQztBQUVELGFBQU8sS0FBSyxNQUFNLEtBQUssRUFBRSxDQUFDO0FBRTFCLFVBQUksT0FBTyxTQUFTLEdBQUc7QUFDdEIsY0FBTSxhQUFhLHFDQUFxQyxPQUFPLHlCQUF5QixPQUFPLFdBQVcsSUFBSSxLQUFLO0FBQ25ILGNBQU0sSUFBSSxNQUFNLFVBQVU7QUFBQSxNQUMzQjtBQUVBLGFBQU8sT0FBTyxLQUFLLEVBQUU7QUFBQSxJQUN0QjtBQUFBO0FBQUE7OztBQ3JJQTtBQUFBLGdEQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLGFBQWE7QUFDbkIsUUFBTSxFQUFDLFFBQVEsYUFBYSxRQUFRLFlBQVcsSUFBSTtBQUNuRCxRQUFNO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNELElBQUk7QUFFSixRQUFNLEVBQUMsUUFBTyxJQUFJO0FBR2xCLFFBQU0sZUFBZTtBQUFBLE1BQ3BCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUVBLFFBQU0sU0FBUyx1QkFBTyxPQUFPLElBQUk7QUFFakMsUUFBTSxlQUFlLENBQUMsUUFBUSxVQUFVLENBQUMsTUFBTTtBQUM5QyxVQUFJLFFBQVEsU0FBUyxFQUFFLE9BQU8sVUFBVSxRQUFRLEtBQUssS0FBSyxRQUFRLFNBQVMsS0FBSyxRQUFRLFNBQVMsSUFBSTtBQUNwRyxjQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxNQUN0RTtBQUdBLFlBQU0sYUFBYSxjQUFjLFlBQVksUUFBUTtBQUNyRCxhQUFPLFFBQVEsUUFBUSxVQUFVLFNBQVksYUFBYSxRQUFRO0FBQUEsSUFDbkU7QUFFQSxRQUFNLGFBQU4sTUFBaUI7QUFBQSxNQUNoQixZQUFZLFNBQVM7QUFFcEIsZUFBTyxhQUFhLE9BQU87QUFBQSxNQUM1QjtBQUFBLElBQ0Q7QUFFQSxRQUFNLGVBQWUsYUFBVztBQUMvQixZQUFNQyxTQUFRLENBQUM7QUFDZixtQkFBYUEsUUFBTyxPQUFPO0FBRTNCLE1BQUFBLE9BQU0sV0FBVyxJQUFJLGVBQWUsU0FBU0EsT0FBTSxVQUFVLEdBQUcsVUFBVTtBQUUxRSxhQUFPLGVBQWVBLFFBQU8sTUFBTSxTQUFTO0FBQzVDLGFBQU8sZUFBZUEsT0FBTSxVQUFVQSxNQUFLO0FBRTNDLE1BQUFBLE9BQU0sU0FBUyxjQUFjLE1BQU07QUFDbEMsY0FBTSxJQUFJLE1BQU0sMEVBQTBFO0FBQUEsTUFDM0Y7QUFFQSxNQUFBQSxPQUFNLFNBQVMsV0FBVztBQUUxQixhQUFPQSxPQUFNO0FBQUEsSUFDZDtBQUVBLGFBQVMsTUFBTSxTQUFTO0FBQ3ZCLGFBQU8sYUFBYSxPQUFPO0FBQUEsSUFDNUI7QUFFQSxlQUFXLENBQUMsV0FBVyxLQUFLLEtBQUssT0FBTyxRQUFRLFVBQVUsR0FBRztBQUM1RCxhQUFPLGFBQWE7QUFBQSxRQUNuQixNQUFNO0FBQ0wsZ0JBQU0sVUFBVSxjQUFjLE1BQU0sYUFBYSxNQUFNLE1BQU0sTUFBTSxPQUFPLEtBQUssT0FBTyxHQUFHLEtBQUssUUFBUTtBQUN0RyxpQkFBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTyxVQUFVO0FBQUEsTUFDaEIsTUFBTTtBQUNMLGNBQU0sVUFBVSxjQUFjLE1BQU0sS0FBSyxTQUFTLElBQUk7QUFDdEQsZUFBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFFBQU0sYUFBYSxDQUFDLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxPQUFPLFFBQVEsU0FBUztBQUVuRixlQUFXLFNBQVMsWUFBWTtBQUMvQixhQUFPLFNBQVM7QUFBQSxRQUNmLE1BQU07QUFDTCxnQkFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixpQkFBTyxZQUFhLFlBQVk7QUFDL0Isa0JBQU0sU0FBUyxhQUFhLFdBQVcsTUFBTSxhQUFhLFFBQVEsT0FBTyxHQUFHLFVBQVUsR0FBRyxXQUFXLE1BQU0sT0FBTyxLQUFLLE9BQU87QUFDN0gsbUJBQU8sY0FBYyxNQUFNLFFBQVEsS0FBSyxRQUFRO0FBQUEsVUFDakQ7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxlQUFXLFNBQVMsWUFBWTtBQUMvQixZQUFNLFVBQVUsT0FBTyxNQUFNLEdBQUcsWUFBWSxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdELGFBQU8sV0FBVztBQUFBLFFBQ2pCLE1BQU07QUFDTCxnQkFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixpQkFBTyxZQUFhLFlBQVk7QUFDL0Isa0JBQU0sU0FBUyxhQUFhLFdBQVcsUUFBUSxhQUFhLFFBQVEsT0FBTyxHQUFHLFVBQVUsR0FBRyxXQUFXLFFBQVEsT0FBTyxLQUFLLE9BQU87QUFDakksbUJBQU8sY0FBYyxNQUFNLFFBQVEsS0FBSyxRQUFRO0FBQUEsVUFDakQ7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxRQUFNLFFBQVEsT0FBTyxpQkFBaUIsTUFBTTtBQUFBLElBQUMsR0FBRztBQUFBLE1BQy9DLEdBQUc7QUFBQSxNQUNILE9BQU87QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLE1BQU07QUFDTCxpQkFBTyxLQUFLLFdBQVc7QUFBQSxRQUN4QjtBQUFBLFFBQ0EsSUFBSSxPQUFPO0FBQ1YsZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUN6QjtBQUFBLE1BQ0Q7QUFBQSxJQUNELENBQUM7QUFFRCxRQUFNLGVBQWUsQ0FBQyxNQUFNLE9BQU8sV0FBVztBQUM3QyxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUksV0FBVyxRQUFXO0FBQ3pCLGtCQUFVO0FBQ1YsbUJBQVc7QUFBQSxNQUNaLE9BQU87QUFDTixrQkFBVSxPQUFPLFVBQVU7QUFDM0IsbUJBQVcsUUFBUSxPQUFPO0FBQUEsTUFDM0I7QUFFQSxhQUFPO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQU0sZ0JBQWdCLENBQUNDLE9BQU0sU0FBUyxhQUFhO0FBQ2xELFlBQU0sVUFBVSxJQUFJLGVBQWU7QUFDbEMsWUFBSSxRQUFRLFdBQVcsRUFBRSxLQUFLLFFBQVEsV0FBVyxHQUFHLEdBQUcsR0FBRztBQUV6RCxpQkFBTyxXQUFXLFNBQVMsU0FBUyxTQUFTLEdBQUcsVUFBVSxDQUFDO0FBQUEsUUFDNUQ7QUFJQSxlQUFPLFdBQVcsU0FBVSxXQUFXLFdBQVcsSUFBTSxLQUFLLFdBQVcsS0FBTSxXQUFXLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDbkc7QUFJQSxhQUFPLGVBQWUsU0FBUyxLQUFLO0FBRXBDLGNBQVEsYUFBYUE7QUFDckIsY0FBUSxVQUFVO0FBQ2xCLGNBQVEsV0FBVztBQUVuQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQU0sYUFBYSxDQUFDQSxPQUFNLFdBQVc7QUFDcEMsVUFBSUEsTUFBSyxTQUFTLEtBQUssQ0FBQyxRQUFRO0FBQy9CLGVBQU9BLE1BQUssV0FBVyxLQUFLO0FBQUEsTUFDN0I7QUFFQSxVQUFJLFNBQVNBLE1BQUs7QUFFbEIsVUFBSSxXQUFXLFFBQVc7QUFDekIsZUFBTztBQUFBLE1BQ1I7QUFFQSxZQUFNLEVBQUMsU0FBUyxTQUFRLElBQUk7QUFDNUIsVUFBSSxPQUFPLFFBQVEsTUFBUSxNQUFNLElBQUk7QUFDcEMsZUFBTyxXQUFXLFFBQVc7QUFJNUIsbUJBQVMsaUJBQWlCLFFBQVEsT0FBTyxPQUFPLE9BQU8sSUFBSTtBQUUzRCxtQkFBUyxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUNEO0FBS0EsWUFBTSxVQUFVLE9BQU8sUUFBUSxJQUFJO0FBQ25DLFVBQUksWUFBWSxJQUFJO0FBQ25CLGlCQUFTLCtCQUErQixRQUFRLFVBQVUsU0FBUyxPQUFPO0FBQUEsTUFDM0U7QUFFQSxhQUFPLFVBQVUsU0FBUztBQUFBLElBQzNCO0FBRUEsUUFBSTtBQUNKLFFBQU0sV0FBVyxDQUFDRCxXQUFVLFlBQVk7QUFDdkMsWUFBTSxDQUFDLFdBQVcsSUFBSTtBQUV0QixVQUFJLENBQUMsUUFBUSxXQUFXLEtBQUssQ0FBQyxRQUFRLFlBQVksR0FBRyxHQUFHO0FBR3ZELGVBQU8sUUFBUSxLQUFLLEdBQUc7QUFBQSxNQUN4QjtBQUVBLFlBQU0sYUFBYSxRQUFRLE1BQU0sQ0FBQztBQUNsQyxZQUFNLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRTtBQUVqQyxlQUFTLElBQUksR0FBRyxJQUFJLFlBQVksUUFBUSxLQUFLO0FBQzVDLGNBQU07QUFBQSxVQUNMLE9BQU8sV0FBVyxJQUFJLEVBQUUsRUFBRSxRQUFRLFdBQVcsTUFBTTtBQUFBLFVBQ25ELE9BQU8sWUFBWSxJQUFJLEVBQUU7QUFBQSxRQUMxQjtBQUFBLE1BQ0Q7QUFFQSxVQUFJLGFBQWEsUUFBVztBQUMzQixtQkFBVztBQUFBLE1BQ1o7QUFFQSxhQUFPLFNBQVNBLFFBQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUFBLElBQ3RDO0FBRUEsV0FBTyxpQkFBaUIsTUFBTSxXQUFXLE1BQU07QUFFL0MsUUFBTUEsU0FBUSxNQUFNO0FBQ3BCLElBQUFBLE9BQU0sZ0JBQWdCO0FBQ3RCLElBQUFBLE9BQU0sU0FBUyxNQUFNLEVBQUMsT0FBTyxjQUFjLFlBQVksUUFBUSxFQUFDLENBQUM7QUFDakUsSUFBQUEsT0FBTSxPQUFPLGdCQUFnQjtBQUU3QixJQUFBRCxRQUFPLFVBQVVDO0FBQUE7QUFBQTs7O0FDcE9qQjtBQUFBO0FBQ0EsUUFBSSxxQkFBcUI7QUFBQSxNQUNyQjtBQUFBLElBR0o7QUFFQSxXQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNQakI7QUFBQSx3REFBQUUsVUFBQUMsU0FBQTtBQUFBLFFBQUlDLHNCQUFxQjtBQUd6QixRQUFJLFNBQVMsU0FBVSxhQUFhO0FBQ2xDLGFBQ0UsT0FBTyxnQkFBZ0IsZUFDdkIsWUFBWSxZQUFZLFFBQ3hCLFlBQVksU0FBUyxRQUFRO0FBQUEsSUFFakM7QUFDQSxJQUFBRCxRQUFPLFFBQVEsU0FBUztBQUd4QixJQUFBQSxRQUFPLFFBQVEsV0FBVyxPQUFPLFlBQVksZUFBZSxPQUFPLE9BQU8sSUFDdEUsU0FDQTtBQUlKLFFBQUksaUJBQWlCLHNCQUFzQixnQkFBZ0I7QUFDM0QsSUFBQUEsUUFBTyxRQUFRLGVBQWVBLFFBQU8sUUFBUSxhQUFhLFVBQ3BELENBQUMsa0JBQWtCLGVBQWUsaUJBQWlCLENBQUMsUUFBUSxZQUM5RCxPQUFPLFdBQVc7QUFHdEIsSUFBQUEsUUFBTyxRQUFRLE9BQU9BLFFBQU8sUUFBUSxhQUFhLFlBQzlDLEtBQUssVUFBVSxzQkFDZkMsb0JBQW1CLElBQUksRUFBRSxLQUFLLEVBQUU7QUFFcEMsYUFBUyxzQkFBdUJELFNBQVE7QUFDdEMsVUFBSTtBQUNGLGVBQU9DLG9CQUFtQkQsT0FBTTtBQUFBLE1BQ2xDLFNBQVEsS0FBTjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ25DQTtBQUFBLG9EQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFVQSxhQUFTQyxTQUFRLFNBQVMsUUFBUTtBQUNoQyxVQUFJLEtBQUs7QUFFVCxVQUFJLEVBQUUsZ0JBQWdCQSxXQUFVO0FBQzlCLGNBQU0sSUFBSSxZQUFZLGtEQUFrRDtBQUFBLE1BQzFFO0FBRUEsVUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxjQUFNLElBQUksWUFBWSxxREFBcUQ7QUFBQSxNQUM3RTtBQUVBLFVBQUksYUFBYSxDQUFDO0FBQ2xCLFVBQUksVUFBVSxDQUFDO0FBR2YsV0FBSyxXQUFXO0FBQ2hCLFdBQUssV0FBVztBQUNoQixXQUFLLFVBQVU7QUFTZixVQUFJLFdBQVcsU0FBVSxXQUFXLFFBQVE7QUFDMUMsbUJBQVcsS0FBSyxTQUFTO0FBQ3pCLGdCQUFRLEtBQUssTUFBTTtBQUFBLE1BQ3JCO0FBUUEsV0FBSyxPQUFPLFNBQVUsV0FBVyxRQUFRO0FBQ3ZDLGVBQU8sSUFBSUEsU0FBUSxTQUFVQyxVQUFTLFFBQVE7QUFDNUMsY0FBSSxJQUFJLFlBQVksTUFBTSxXQUFXQSxVQUFTLE1BQU0sSUFBSUE7QUFDeEQsY0FBSSxJQUFJLFNBQVksTUFBTSxRQUFXQSxVQUFTLE1BQU0sSUFBSTtBQUV4RCxtQkFBUyxHQUFHLENBQUM7QUFBQSxRQUNmLEdBQUcsRUFBRTtBQUFBLE1BQ1A7QUFPQSxVQUFJLFdBQVcsU0FBVSxRQUFRO0FBRS9CLFdBQUcsV0FBVztBQUNkLFdBQUcsV0FBVztBQUNkLFdBQUcsVUFBVTtBQUViLG1CQUFXLFFBQVEsU0FBVSxJQUFJO0FBQy9CLGFBQUcsTUFBTTtBQUFBLFFBQ1gsQ0FBQztBQUVELG1CQUFXLFNBQVUsV0FBVyxRQUFRO0FBQ3RDLG9CQUFVLE1BQU07QUFBQSxRQUNsQjtBQUVBLG1CQUFXLFVBQVUsV0FBWTtBQUFBLFFBQUU7QUFFbkMsZUFBTztBQUFBLE1BQ1Q7QUFPQSxVQUFJLFVBQVUsU0FBVUMsUUFBTztBQUU3QixXQUFHLFdBQVc7QUFDZCxXQUFHLFdBQVc7QUFDZCxXQUFHLFVBQVU7QUFFYixnQkFBUSxRQUFRLFNBQVUsSUFBSTtBQUM1QixhQUFHQSxNQUFLO0FBQUEsUUFDVixDQUFDO0FBRUQsbUJBQVcsU0FBVSxXQUFXLFFBQVE7QUFDdEMsaUJBQU9BLE1BQUs7QUFBQSxRQUNkO0FBRUEsbUJBQVcsVUFBVSxXQUFZO0FBQUEsUUFBRTtBQUVuQyxlQUFPO0FBQUEsTUFDVDtBQU1BLFdBQUssU0FBUyxXQUFZO0FBQ3hCLFlBQUksUUFBUTtBQUNWLGlCQUFPLE9BQU87QUFBQSxRQUNoQixPQUNLO0FBQ0gsa0JBQVEsSUFBSSxrQkFBa0IsQ0FBQztBQUFBLFFBQ2pDO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFTQSxXQUFLLFVBQVUsU0FBVSxPQUFPO0FBQzlCLFlBQUksUUFBUTtBQUNWLGlCQUFPLFFBQVEsS0FBSztBQUFBLFFBQ3RCLE9BQ0s7QUFDSCxjQUFJLFFBQVEsV0FBVyxXQUFZO0FBQ2pDLG9CQUFRLElBQUksYUFBYSw2QkFBNkIsUUFBUSxLQUFLLENBQUM7QUFBQSxVQUN0RSxHQUFHLEtBQUs7QUFFUixhQUFHLE9BQU8sV0FBWTtBQUNwQix5QkFBYSxLQUFLO0FBQUEsVUFDcEIsQ0FBQztBQUFBLFFBQ0g7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUdBLGNBQVEsU0FBVSxRQUFRO0FBQ3hCLGlCQUFTLE1BQU07QUFBQSxNQUNqQixHQUFHLFNBQVVBLFFBQU87QUFDbEIsZ0JBQVFBLE1BQUs7QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNIO0FBVUEsYUFBUyxNQUFNLFVBQVVELFVBQVMsUUFBUTtBQUN4QyxhQUFPLFNBQVUsUUFBUTtBQUN2QixZQUFJO0FBQ0YsY0FBSSxNQUFNLFNBQVMsTUFBTTtBQUN6QixjQUFJLE9BQU8sT0FBTyxJQUFJLFNBQVMsY0FBYyxPQUFPLElBQUksYUFBYSxZQUFZO0FBRS9FLGdCQUFJLEtBQUtBLFVBQVMsTUFBTTtBQUFBLFVBQzFCLE9BQ0s7QUFDSCxZQUFBQSxTQUFRLEdBQUc7QUFBQSxVQUNiO0FBQUEsUUFDRixTQUNPQyxRQUFQO0FBQ0UsaUJBQU9BLE1BQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFPQSxJQUFBRixTQUFRLFVBQVUsV0FBVyxTQUFVLFFBQVE7QUFDN0MsYUFBTyxLQUFLLEtBQUssTUFBTSxNQUFNO0FBQUEsSUFDL0I7QUFVQSxJQUFBQSxTQUFRLFVBQVUsU0FBUyxTQUFVLElBQUk7QUFDdkMsYUFBTyxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQUEsSUFDekI7QUFRQSxJQUFBQSxTQUFRLE1BQU0sU0FBVSxVQUFTO0FBQy9CLGFBQU8sSUFBSUEsU0FBUSxTQUFVQyxVQUFTLFFBQVE7QUFDNUMsWUFBSSxZQUFZLFNBQVMsUUFDckIsVUFBVSxDQUFDO0FBRWYsWUFBSSxXQUFXO0FBQ2IsbUJBQVMsUUFBUSxTQUFVLEdBQUcsR0FBRztBQUMvQixjQUFFLEtBQUssU0FBVSxRQUFRO0FBQ3ZCLHNCQUFRLEtBQUs7QUFDYjtBQUNBLGtCQUFJLGFBQWEsR0FBRztBQUNsQixnQkFBQUEsU0FBUSxPQUFPO0FBQUEsY0FDakI7QUFBQSxZQUNGLEdBQUcsU0FBVUMsUUFBTztBQUNsQiwwQkFBWTtBQUNaLHFCQUFPQSxNQUFLO0FBQUEsWUFDZCxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSCxPQUNLO0FBQ0gsVUFBQUQsU0FBUSxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBTUEsSUFBQUQsU0FBUSxRQUFRLFdBQVk7QUFDMUIsVUFBSSxXQUFXLENBQUM7QUFFaEIsZUFBUyxVQUFVLElBQUlBLFNBQVEsU0FBVUMsVUFBUyxRQUFRO0FBQ3hELGlCQUFTLFVBQVVBO0FBQ25CLGlCQUFTLFNBQVM7QUFBQSxNQUNwQixDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFPQSxhQUFTLGtCQUFrQixTQUFTO0FBQ2xDLFdBQUssVUFBVSxXQUFXO0FBQzFCLFdBQUssUUFBUyxJQUFJLE1BQU0sRUFBRztBQUFBLElBQzdCO0FBRUEsc0JBQWtCLFlBQVksSUFBSSxNQUFNO0FBQ3hDLHNCQUFrQixVQUFVLGNBQWM7QUFDMUMsc0JBQWtCLFVBQVUsT0FBTztBQUVuQyxJQUFBRCxTQUFRLG9CQUFvQjtBQVE1QixhQUFTLGFBQWEsU0FBUztBQUM3QixXQUFLLFVBQVUsV0FBVztBQUMxQixXQUFLLFFBQVMsSUFBSSxNQUFNLEVBQUc7QUFBQSxJQUM3QjtBQUVBLGlCQUFhLFlBQVksSUFBSSxNQUFNO0FBQ25DLGlCQUFhLFVBQVUsY0FBYztBQUNyQyxpQkFBYSxVQUFVLE9BQU87QUFFOUIsSUFBQUEsU0FBUSxlQUFlO0FBR3ZCLElBQUFELFFBQU8sVUFBVUM7QUFBQTtBQUFBOzs7QUN0UmpCO0FBQUEscUVBQUFHLFVBQUFDLFNBQUE7QUFLQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNMakI7QUFBQSwwREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSUMsV0FBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJQyxzQkFBcUI7QUFNekIsUUFBSUMsdUJBQXNCO0FBTTFCLFFBQUksNkJBQTZCO0FBRWpDLGFBQVMsc0JBQXNCO0FBQzdCLFVBQUlDLGlCQUFnQix3QkFBd0I7QUFDNUMsVUFBSSxDQUFDQSxnQkFBZTtBQUNsQixjQUFNLElBQUksTUFBTSw2RUFBK0U7QUFBQSxNQUNqRztBQUVBLGFBQU9BO0FBQUEsSUFDVDtBQUdBLGFBQVMsa0JBQWtCO0FBRXpCLFVBQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxXQUFXLFlBQVksT0FBTyxPQUFPLFVBQVUsZ0JBQWdCLGFBQWE7QUFDdEgsY0FBTSxJQUFJLE1BQU0sdUNBQXVDO0FBQUEsTUFDekQ7QUFBQSxJQUNGO0FBRUEsYUFBUywwQkFBMEI7QUFDakMsVUFBSTtBQUNGLGVBQU9GLG9CQUFtQixnQkFBZ0I7QUFBQSxNQUM1QyxTQUFRRyxRQUFOO0FBQ0EsWUFBSSxPQUFPQSxXQUFVLFlBQVlBLFdBQVUsUUFBUUEsT0FBTSxTQUFTLG9CQUFvQjtBQUVwRixpQkFBTztBQUFBLFFBQ1QsT0FBTztBQUNMLGdCQUFNQTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUdBLGFBQVMsbUJBQW1CO0FBQzFCLFVBQUksWUFBWSxhQUFhLFdBQVc7QUFFdEMsWUFBSSxPQUFPLFNBQVMsYUFBYTtBQUMvQixnQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsUUFDckQ7QUFDQSxZQUFJLENBQUMsT0FBTyxPQUFPLE9BQU8sT0FBTyxJQUFJLG9CQUFvQixZQUFZO0FBQ25FLGdCQUFNLElBQUksTUFBTSxrREFBa0Q7QUFBQSxRQUNwRTtBQUdBLFlBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyx3QkFBcUMsR0FBRyxFQUFDLE1BQU0sa0JBQWlCLENBQUM7QUFDdEYsZUFBTyxPQUFPLElBQUksZ0JBQWdCLElBQUk7QUFBQSxNQUN4QyxPQUNLO0FBRUgsZUFBTyxZQUFZO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBRUEsYUFBUyxZQUFZLFFBQVEsU0FBUztBQUNwQyxVQUFJLFFBQVEsZUFBZSxPQUFPO0FBQ2hDLHdCQUFnQjtBQUNoQixlQUFPLG1CQUFtQixRQUFRLE1BQU07QUFBQSxNQUMxQyxXQUFXLFFBQVEsZUFBZSxVQUFVO0FBQzFDLFFBQUFELGlCQUFnQixvQkFBb0I7QUFDcEMsZUFBTyx3QkFBd0IsUUFBUUEsZ0JBQWUsUUFBUSxnQkFBZ0I7QUFBQSxNQUNoRixXQUFXLFFBQVEsZUFBZSxhQUFhLENBQUMsUUFBUSxZQUFZO0FBQ2xFLGVBQU8sbUJBQW1CLFFBQVEsbUJBQW1CLE9BQU8sR0FBR0Ysb0JBQW1CLGVBQWUsQ0FBQztBQUFBLE1BQ3BHLE9BQU87QUFDTCxZQUFJLFlBQVksYUFBYSxXQUFXO0FBQ3RDLDBCQUFnQjtBQUNoQixpQkFBTyxtQkFBbUIsUUFBUSxNQUFNO0FBQUEsUUFDMUMsT0FDSztBQUNILGNBQUlFLGlCQUFnQix3QkFBd0I7QUFDNUMsY0FBSUEsZ0JBQWU7QUFDakIsbUJBQU8sd0JBQXdCLFFBQVFBLGNBQWE7QUFBQSxVQUN0RCxPQUFPO0FBQ0wsbUJBQU8sbUJBQW1CLFFBQVEsbUJBQW1CLE9BQU8sR0FBR0Ysb0JBQW1CLGVBQWUsQ0FBQztBQUFBLFVBQ3BHO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsYUFBUyxtQkFBbUIsUUFBUUksU0FBUTtBQUUxQyxVQUFJQyxVQUFTLElBQUlELFFBQU8sTUFBTTtBQUU5QixNQUFBQyxRQUFPLGtCQUFrQjtBQUV6QixNQUFBQSxRQUFPLEtBQUssU0FBVSxPQUFPLFVBQVU7QUFDckMsYUFBSyxpQkFBaUIsT0FBTyxTQUFVLFNBQVM7QUFDOUMsbUJBQVMsUUFBUSxJQUFJO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BQ0g7QUFDQSxNQUFBQSxRQUFPLE9BQU8sU0FBVSxTQUFTO0FBQy9CLGFBQUssWUFBWSxPQUFPO0FBQUEsTUFDMUI7QUFDQSxhQUFPQTtBQUFBLElBQ1Q7QUFFQSxhQUFTLHdCQUF3QixRQUFRSCxnQkFBZSxxQkFBcUI7QUFDM0UsVUFBSUcsVUFBUyxJQUFJSCxlQUFjLE9BQU8sUUFBUTtBQUFBLFFBQzVDLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLEdBQUc7QUFBQSxNQUNMLENBQUM7QUFDRCxNQUFBRyxRQUFPLGlCQUFpQjtBQUV4QixNQUFBQSxRQUFPLE9BQU8sU0FBUyxTQUFTO0FBQzlCLGFBQUssWUFBWSxPQUFPO0FBQUEsTUFDMUI7QUFFQSxNQUFBQSxRQUFPLE9BQU8sV0FBVztBQUN2QixhQUFLLFVBQVU7QUFDZixlQUFPO0FBQUEsTUFDVDtBQUVBLE1BQUFBLFFBQU8sYUFBYSxXQUFXO0FBQzdCLGFBQUssVUFBVTtBQUFBLE1BQ2pCO0FBRUEsYUFBT0E7QUFBQSxJQUNUO0FBRUEsYUFBUyxtQkFBbUIsUUFBUSxTQUFTLGVBQWU7QUFFMUQsVUFBSUEsVUFBUyxjQUFjO0FBQUEsUUFDekI7QUFBQSxRQUNBLFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxNQUNWO0FBRUEsTUFBQUEsUUFBTyxpQkFBaUI7QUFDeEIsYUFBT0E7QUFBQSxJQUNUO0FBR0EsYUFBUyxtQkFBbUIsTUFBTTtBQUNoQyxhQUFPLFFBQVEsQ0FBQztBQUVoQixVQUFJLGtCQUFrQixRQUFRLFNBQVMsS0FBSyxHQUFHO0FBQy9DLFVBQUksa0JBQWtCLGdCQUFnQixRQUFRLFdBQVcsTUFBTTtBQUMvRCxVQUFJLFdBQVcsZ0JBQWdCLFFBQVEsYUFBYSxNQUFNO0FBRTFELFVBQUksV0FBVyxDQUFDO0FBQ2hCLFVBQUksaUJBQWlCO0FBQ25CLGlCQUFTLEtBQUssZUFBZSxLQUFLLFNBQVM7QUFFM0MsWUFBSSxVQUFVO0FBQ1osbUJBQVMsS0FBSyxhQUFhO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBRUEsY0FBUSxTQUFTLFFBQVEsU0FBUyxLQUFLO0FBQ3JDLFlBQUksSUFBSSxRQUFRLHNCQUFzQixJQUFJLElBQUk7QUFDNUMsbUJBQVMsS0FBSyxHQUFHO0FBQUEsUUFDbkI7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTTtBQUFBLFFBQzdCLFVBQVUsS0FBSztBQUFBLFFBQ2YsVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssVUFBVTtBQUFBLFVBQ3pDLFdBQVcsS0FBSyxZQUFZLEtBQUssU0FBUyxZQUFZLENBQUMsR0FDdEQsT0FBTyxRQUFRO0FBQUEsUUFDbEIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFPQSxhQUFTLGNBQWUsS0FBSztBQUMzQixVQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUU7QUFDdkIsVUFBSSxRQUFRLE9BQU8sS0FBSyxHQUFHO0FBRTNCLGVBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDckMsYUFBSyxNQUFNLE1BQU0sSUFBSSxNQUFNO0FBQUEsTUFDN0I7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQVVBLGFBQVMsY0FBYyxRQUFRLFVBQVU7QUFDdkMsVUFBSSxLQUFLO0FBQ1QsVUFBSSxVQUFVLFlBQVksQ0FBQztBQUUzQixXQUFLLFNBQVMsVUFBVSxpQkFBaUI7QUFDekMsV0FBSyxTQUFTLFlBQVksS0FBSyxRQUFRLE9BQU87QUFDOUMsV0FBSyxZQUFZLFFBQVE7QUFDekIsV0FBSyxXQUFXLFFBQVE7QUFDeEIsV0FBSyxXQUFXLFFBQVE7QUFDeEIsV0FBSyxtQkFBbUIsUUFBUTtBQUdoQyxVQUFJLENBQUMsUUFBUTtBQUNYLGFBQUssT0FBTyxRQUFRO0FBQUEsTUFDdEI7QUFHQSxXQUFLLGVBQWUsQ0FBQztBQUNyQixXQUFLLE9BQU8sR0FBRyxXQUFXLFNBQVUsVUFBVTtBQUM1QyxZQUFJLEdBQUcsWUFBWTtBQUNqQjtBQUFBLFFBQ0Y7QUFDQSxZQUFJLE9BQU8sYUFBYSxZQUFZLGFBQWEsU0FBUztBQUN4RCxhQUFHLE9BQU8sUUFBUTtBQUNsQixpQ0FBdUI7QUFBQSxRQUN6QixPQUFPO0FBRUwsY0FBSSxLQUFLLFNBQVM7QUFDbEIsY0FBSSxPQUFPLEdBQUcsV0FBVztBQUN6QixjQUFJLFNBQVMsUUFBVztBQUN0QixnQkFBSSxTQUFTLFNBQVM7QUFDcEIsa0JBQUksS0FBSyxXQUFXLE9BQU8sS0FBSyxRQUFRLE9BQU8sWUFBWTtBQUN6RCxxQkFBSyxRQUFRLEdBQUcsU0FBUyxPQUFPO0FBQUEsY0FDbEM7QUFBQSxZQUNGLE9BQU87QUFFTCxxQkFBTyxHQUFHLFdBQVc7QUFHckIsa0JBQUksR0FBRyxnQkFBZ0IsTUFBTTtBQUUzQixtQkFBRyxVQUFVO0FBQUEsY0FDZjtBQUdBLGtCQUFJLFNBQVMsT0FBTztBQUNsQixxQkFBSyxTQUFTLE9BQU8sY0FBYyxTQUFTLEtBQUssQ0FBQztBQUFBLGNBQ3BELE9BQ0s7QUFDSCxxQkFBSyxTQUFTLFFBQVEsU0FBUyxNQUFNO0FBQUEsY0FDdkM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFHRCxlQUFTLFFBQVFGLFFBQU87QUFDdEIsV0FBRyxhQUFhO0FBRWhCLGlCQUFTLE1BQU0sR0FBRyxZQUFZO0FBQzVCLGNBQUksR0FBRyxXQUFXLFFBQVEsUUFBVztBQUNuQyxlQUFHLFdBQVcsSUFBSSxTQUFTLE9BQU9BLE1BQUs7QUFBQSxVQUN6QztBQUFBLFFBQ0Y7QUFDQSxXQUFHLGFBQWEsdUJBQU8sT0FBTyxJQUFJO0FBQUEsTUFDcEM7QUFHQSxlQUFTLHlCQUNUO0FBQ0UsbUJBQVUsV0FBVyxHQUFHLGFBQWEsT0FBTyxDQUFDLEdBQUc7QUFDOUMsYUFBRyxPQUFPLEtBQUssT0FBTztBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUVBLFVBQUlFLFVBQVMsS0FBSztBQUVsQixXQUFLLE9BQU8sR0FBRyxTQUFTLE9BQU87QUFDL0IsV0FBSyxPQUFPLEdBQUcsUUFBUSxTQUFVLFVBQVUsWUFBWTtBQUNyRCxZQUFJLFVBQVU7QUFFZCxtQkFBVyxvQkFBb0IsV0FBVztBQUMxQyxtQkFBVyxzQkFBc0IsYUFBYTtBQUU5QyxtQkFBVyw2QkFBOEIsR0FBRyxTQUFTO0FBQ3JELG1CQUFXLHFCQUFzQkEsUUFBTyxZQUFZO0FBQ3BELG1CQUFXLHFCQUFxQkEsUUFBTyxZQUFZO0FBRW5ELG1CQUFXLGtCQUFrQkEsUUFBTyxTQUFTO0FBQzdDLG1CQUFXLGtCQUFrQkEsUUFBTyxTQUFTO0FBRTdDLGdCQUFRLElBQUksTUFBTSxPQUFPLENBQUM7QUFBQSxNQUM1QixDQUFDO0FBRUQsV0FBSyxhQUFhLHVCQUFPLE9BQU8sSUFBSTtBQUVwQyxXQUFLLGNBQWM7QUFDbkIsV0FBSyxhQUFhO0FBQ2xCLFdBQUsscUJBQXFCO0FBQzFCLFdBQUssU0FBUztBQUFBLElBQ2hCO0FBTUEsa0JBQWMsVUFBVSxVQUFVLFdBQVk7QUFDNUMsYUFBTyxLQUFLLEtBQUssU0FBUztBQUFBLElBQzVCO0FBVUEsa0JBQWMsVUFBVSxPQUFPLFNBQVMsUUFBUSxRQUFRLFVBQVUsU0FBUztBQUN6RSxVQUFJLENBQUMsVUFBVTtBQUNiLG1CQUFXTixTQUFRLE1BQU07QUFBQSxNQUMzQjtBQUdBLFVBQUksS0FBSyxFQUFFLEtBQUs7QUFHaEIsV0FBSyxXQUFXLE1BQU07QUFBQSxRQUNwQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUdBLFVBQUksVUFBVTtBQUFBLFFBQ1o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUssWUFBWTtBQUNuQixpQkFBUyxPQUFPLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUFBLE1BQ25ELFdBQVcsS0FBSyxPQUFPLE9BQU87QUFFNUIsYUFBSyxPQUFPLEtBQUssT0FBTztBQUFBLE1BQzFCLE9BQU87QUFDTCxhQUFLLGFBQWEsS0FBSyxPQUFPO0FBQUEsTUFDaEM7QUFHQSxVQUFJLEtBQUs7QUFDVCxhQUFPLFNBQVMsUUFBUSxNQUFNLFNBQVVJLFFBQU87QUFDN0MsWUFBSUEsa0JBQWlCSixTQUFRLHFCQUFxQkksa0JBQWlCSixTQUFRLGNBQWM7QUFHdkYsaUJBQU8sR0FBRyxXQUFXO0FBR3JCLGlCQUFPLEdBQUcsbUJBQW1CLElBQUksRUFDOUIsS0FBSyxXQUFXO0FBQ2Ysa0JBQU1JO0FBQUEsVUFDUixHQUFHLFNBQVMsS0FBSztBQUNmLGtCQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDTCxPQUFPO0FBQ0wsZ0JBQU1BO0FBQUEsUUFDUjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFNQSxrQkFBYyxVQUFVLE9BQU8sV0FBWTtBQUN6QyxhQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxTQUFTO0FBQUEsSUFDL0M7QUFVQSxrQkFBYyxVQUFVLFlBQVksU0FBVSxPQUFPLFVBQVU7QUFDN0QsVUFBSSxLQUFLO0FBQ1QsVUFBSSxPQUFPO0FBRVQsaUJBQVMsTUFBTSxLQUFLLFlBQVk7QUFDOUIsY0FBSSxLQUFLLFdBQVcsUUFBUSxRQUFXO0FBQ3JDLGlCQUFLLFdBQVcsSUFBSSxTQUFTLE9BQU8sSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQUEsVUFDcEU7QUFBQSxRQUNGO0FBQ0EsYUFBSyxhQUFhLHVCQUFPLE9BQU8sSUFBSTtBQUFBLE1BQ3RDO0FBRUEsVUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxhQUFLLHFCQUFxQjtBQUFBLE1BQzVCO0FBQ0EsVUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBRWhCLFlBQUksVUFBVSxTQUFTLEtBQUs7QUFDMUIsYUFBRyxhQUFhO0FBQ2hCLGNBQUksR0FBRyxVQUFVLFFBQVEsR0FBRyxPQUFPLG9CQUFvQjtBQUVyRCxlQUFHLE9BQU8sbUJBQW1CLFNBQVM7QUFBQSxVQUN4QztBQUNBLGFBQUcsU0FBUztBQUNaLGFBQUcsY0FBYztBQUNqQixjQUFJLEdBQUcsb0JBQW9CO0FBQ3pCLGVBQUcsbUJBQW1CLEtBQUssRUFBRTtBQUFBLFVBQy9CLFdBQVcsS0FBSztBQUNkLGtCQUFNO0FBQUEsVUFDUjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLEtBQUssUUFBUTtBQUNmLGNBQUksT0FBTyxLQUFLLE9BQU8sU0FBUyxZQUFZO0FBQzFDLGdCQUFJLEtBQUssT0FBTyxRQUFRO0FBQ3RCLHNCQUFRLElBQUksTUFBTSx3QkFBd0IsQ0FBQztBQUMzQztBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxLQUFLLE9BQU8sZ0JBQWdCO0FBQzlCLGtCQUFJLG1CQUFtQixXQUFXLFdBQVc7QUFDM0Msb0JBQUksR0FBRyxRQUFRO0FBQ2IscUJBQUcsT0FBTyxLQUFLO0FBQUEsZ0JBQ2pCO0FBQUEsY0FDRixHQUFHLDBCQUEwQjtBQUU3QixtQkFBSyxPQUFPLEtBQUssUUFBUSxXQUFXO0FBQ2xDLDZCQUFhLGdCQUFnQjtBQUM3QixvQkFBSSxHQUFHLFFBQVE7QUFDYixxQkFBRyxPQUFPLFNBQVM7QUFBQSxnQkFDckI7QUFDQSx3QkFBUTtBQUFBLGNBQ1YsQ0FBQztBQUVELGtCQUFJLEtBQUssT0FBTyxPQUFPO0FBQ3JCLHFCQUFLLE9BQU8sS0FBS0Ysb0JBQW1CO0FBQUEsY0FDdEMsT0FBTztBQUNMLHFCQUFLLGFBQWEsS0FBS0Esb0JBQW1CO0FBQUEsY0FDNUM7QUFBQSxZQUNGLE9BQU87QUFFTCxtQkFBSyxPQUFPLEtBQUs7QUFDakIsbUJBQUssT0FBTyxTQUFTO0FBQ3JCLHNCQUFRO0FBQUEsWUFDVjtBQUNBO0FBQUEsVUFDRixXQUNTLE9BQU8sS0FBSyxPQUFPLGNBQWMsWUFBWTtBQUNwRCxpQkFBSyxPQUFPLFVBQVU7QUFDdEIsaUJBQUssT0FBTyxTQUFTO0FBQUEsVUFDdkIsT0FDSztBQUNILGtCQUFNLElBQUksTUFBTSw0QkFBNEI7QUFBQSxVQUM5QztBQUFBLFFBQ0Y7QUFDQSxnQkFBUTtBQUFBLE1BQ1YsT0FDSztBQUVILGFBQUssY0FBYztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQVlBLGtCQUFjLFVBQVUscUJBQXFCLFNBQVUsT0FBTyxTQUFTO0FBQ3JFLFVBQUksV0FBV0YsU0FBUSxNQUFNO0FBQzdCLFVBQUksU0FBUztBQUNYLGlCQUFTLFFBQVEsVUFBVTtBQUFBLE1BQzdCO0FBQ0EsV0FBSyxVQUFVLE9BQU8sU0FBUyxLQUFLTSxTQUFRO0FBQzFDLFlBQUksS0FBSztBQUNQLG1CQUFTLE9BQU8sR0FBRztBQUFBLFFBQ3JCLE9BQU87QUFDTCxtQkFBUyxRQUFRQSxPQUFNO0FBQUEsUUFDekI7QUFBQSxNQUNGLENBQUM7QUFDRCxhQUFPLFNBQVM7QUFBQSxJQUNsQjtBQUVBLElBQUFQLFFBQU8sVUFBVTtBQUNqQixJQUFBQSxRQUFPLFFBQVEsMkJBQTJCO0FBQzFDLElBQUFBLFFBQU8sUUFBUSxzQkFBc0I7QUFDckMsSUFBQUEsUUFBTyxRQUFRLHNCQUFzQjtBQUNyQyxJQUFBQSxRQUFPLFFBQVEsMkJBQTJCO0FBQzFDLElBQUFBLFFBQU8sUUFBUSxzQkFBc0I7QUFBQTtBQUFBOzs7QUN2ZnJDO0FBQUEsaUVBQUFRLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksWUFBWTtBQUNoQixJQUFBQSxRQUFPLFVBQVU7QUFDakIsYUFBUyxxQkFBcUI7QUFDNUIsV0FBSyxRQUFRLHVCQUFPLE9BQU8sSUFBSTtBQUMvQixXQUFLLFNBQVM7QUFBQSxJQUNoQjtBQUVBLHVCQUFtQixVQUFVLDBCQUEwQixTQUFTLFVBQVU7QUFDeEUsYUFBTyxLQUFLLE1BQU0sY0FBYyxNQUFNO0FBQ3BDO0FBQUEsTUFDRjtBQUVBLFVBQUksWUFBWSxXQUFXO0FBQ3pCLGNBQU0sSUFBSSxNQUFNLDBDQUEwQyxXQUFXLFFBQVEsU0FBVTtBQUFBLE1BQ3pGO0FBRUEsV0FBSyxNQUFNLFlBQVk7QUFDdkIsV0FBSztBQUNMLGFBQU87QUFBQSxJQUNUO0FBRUEsdUJBQW1CLFVBQVUsY0FBYyxTQUFTLE1BQU07QUFDeEQsYUFBTyxLQUFLLE1BQU07QUFDbEIsV0FBSztBQUFBLElBQ1A7QUFBQTtBQUFBOzs7QUMxQkE7QUFBQSxpREFBQUMsVUFBQUMsU0FBQTtBQUFBLFFBQUlDLFdBQVU7QUFDZCxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGNBQWM7QUFDbEIsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSx1QkFBdUIsSUFBSSxtQkFBbUI7QUFPbEQsYUFBUyxLQUFLLFFBQVEsU0FBUztBQUM3QixVQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLGFBQUssU0FBUyxVQUFVO0FBQUEsTUFDMUIsT0FDSztBQUNILGFBQUssU0FBUztBQUNkLGtCQUFVO0FBQUEsTUFDWjtBQUVBLFdBQUssVUFBVSxDQUFDO0FBQ2hCLFdBQUssUUFBUSxDQUFDO0FBRWQsZ0JBQVUsV0FBVyxDQUFDO0FBRXRCLFdBQUssV0FBVyxPQUFPLE9BQU8sUUFBUSxZQUFZLENBQUMsQ0FBQztBQUNwRCxXQUFLLFdBQVcsT0FBTyxPQUFPLFFBQVEsWUFBWSxDQUFDLENBQUM7QUFDcEQsV0FBSyxtQkFBbUIsT0FBTyxPQUFPLFFBQVEsb0JBQW9CLENBQUMsQ0FBQztBQUNwRSxXQUFLLGlCQUFrQixRQUFRLGtCQUFrQjtBQUNqRCxXQUFLLGFBQWEsUUFBUTtBQUMxQixXQUFLLGFBQWEsUUFBUSxjQUFjLFFBQVEsY0FBYztBQUM5RCxXQUFLLGVBQWUsUUFBUSxnQkFBZ0I7QUFFNUMsV0FBSyxpQkFBaUIsUUFBUSxtQkFBbUIsTUFBTTtBQUN2RCxXQUFLLG9CQUFvQixRQUFRLHNCQUFzQixNQUFNO0FBRzdELFVBQUksV0FBVyxnQkFBZ0IsU0FBUztBQUN0QywyQkFBbUIsUUFBUSxVQUFVO0FBQ3JDLGFBQUssYUFBYSxRQUFRO0FBQUEsTUFDNUIsT0FDSztBQUNILGFBQUssYUFBYSxLQUFLLEtBQUssWUFBWSxRQUFRLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDM0Q7QUFFQSxVQUFJLFdBQVcsZ0JBQWdCLFNBQVM7QUFDdEMsWUFBRyxRQUFRLGVBQWUsT0FBTztBQUMvQixlQUFLLGFBQWEsS0FBSztBQUFBLFFBQ3pCLE9BQU87QUFDTCw2QkFBbUIsUUFBUSxVQUFVO0FBQ3JDLGVBQUssYUFBYSxRQUFRO0FBQzFCLGVBQUssYUFBYSxLQUFLLElBQUksS0FBSyxZQUFZLEtBQUssVUFBVTtBQUFBLFFBQzdEO0FBQ0EsYUFBSyxrQkFBa0I7QUFBQSxNQUN6QjtBQUVBLFdBQUssYUFBYSxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBR3RDLFVBQUksS0FBSyxlQUFlLFVBQVU7QUFDaEMsc0JBQWMsb0JBQW9CO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBbUNBLFNBQUssVUFBVSxPQUFPLFNBQVUsUUFBUSxRQUFRLFNBQVM7QUFFdkQsVUFBSSxVQUFVLENBQUMsTUFBTSxRQUFRLE1BQU0sR0FBRztBQUNwQyxjQUFNLElBQUksVUFBVSxxQ0FBcUM7QUFBQSxNQUMzRDtBQUVBLFVBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsWUFBSSxXQUFXQSxTQUFRLE1BQU07QUFFN0IsWUFBSSxLQUFLLE1BQU0sVUFBVSxLQUFLLGNBQWM7QUFDMUMsZ0JBQU0sSUFBSSxNQUFNLHVCQUF1QixLQUFLLGVBQWUsVUFBVTtBQUFBLFFBQ3ZFO0FBR0EsWUFBSSxRQUFRLEtBQUs7QUFDakIsWUFBSSxPQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFDQSxjQUFNLEtBQUssSUFBSTtBQUlmLFlBQUksa0JBQWtCLFNBQVMsUUFBUTtBQUN2QyxpQkFBUyxRQUFRLFVBQVUsU0FBUyxRQUFTLE9BQU87QUFDbEQsY0FBSSxNQUFNLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFFOUIsaUJBQUssVUFBVTtBQUNmLG1CQUFPLFNBQVM7QUFBQSxVQUNsQixPQUNLO0FBRUgsbUJBQU8sZ0JBQWdCLEtBQUssU0FBUyxTQUFTLEtBQUs7QUFBQSxVQUNyRDtBQUFBLFFBQ0Y7QUFHQSxhQUFLLE1BQU07QUFFWCxlQUFPLFNBQVM7QUFBQSxNQUNsQixXQUNTLE9BQU8sV0FBVyxZQUFZO0FBRXJDLGVBQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFBQSxNQUNsRCxPQUNLO0FBQ0gsY0FBTSxJQUFJLFVBQVUsa0RBQWtEO0FBQUEsTUFDeEU7QUFBQSxJQUNGO0FBUUEsU0FBSyxVQUFVLFFBQVEsV0FBWTtBQUNqQyxVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGNBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLE1BQ3pDO0FBRUEsVUFBSUMsUUFBTztBQUNYLGFBQU8sS0FBSyxLQUFLLFNBQVMsRUFDckIsS0FBSyxTQUFVLFNBQVM7QUFDdkIsWUFBSSxRQUFRLENBQUM7QUFFYixnQkFBUSxRQUFRLFNBQVUsUUFBUTtBQUNoQyxnQkFBTSxVQUFVLFdBQVk7QUFDMUIsbUJBQU9BLE1BQUssS0FBSyxRQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDaEU7QUFBQSxRQUNGLENBQUM7QUFFRCxlQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDUDtBQXNCQSxTQUFLLFVBQVUsUUFBUSxXQUFZO0FBQ2pDLFVBQUksS0FBSyxNQUFNLFNBQVMsR0FBRztBQUl6QixZQUFJQyxVQUFTLEtBQUssV0FBVztBQUM3QixZQUFJQSxTQUFRO0FBRVYsY0FBSSxLQUFLO0FBQ1QsY0FBSSxPQUFPLEtBQUssTUFBTSxNQUFNO0FBRzVCLGNBQUksS0FBSyxTQUFTLFFBQVEsU0FBUztBQUVqQyxnQkFBSSxVQUFVQSxRQUFPLEtBQUssS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLLFVBQVUsS0FBSyxPQUFPLEVBQzVFLEtBQUssR0FBRyxVQUFVLEVBQ2xCLE1BQU0sV0FBWTtBQUVqQixrQkFBSUEsUUFBTyxZQUFZO0FBQ3JCLHVCQUFPLEdBQUcsY0FBY0EsT0FBTTtBQUFBLGNBQ2hDO0FBQUEsWUFDRixDQUFDLEVBQUUsS0FBSyxXQUFXO0FBQ2pCLGlCQUFHLE1BQU07QUFBQSxZQUNYLENBQUM7QUFHSCxnQkFBSSxPQUFPLEtBQUssWUFBWSxVQUFVO0FBQ3BDLHNCQUFRLFFBQVEsS0FBSyxPQUFPO0FBQUEsWUFDOUI7QUFBQSxVQUNGLE9BQU87QUFFTCxlQUFHLE1BQU07QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBV0EsU0FBSyxVQUFVLGFBQWEsV0FBVztBQUVyQyxVQUFJLFVBQVUsS0FBSztBQUNuQixlQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3ZDLFlBQUlBLFVBQVMsUUFBUTtBQUNyQixZQUFJQSxRQUFPLEtBQUssTUFBTSxPQUFPO0FBQzNCLGlCQUFPQTtBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsVUFBSSxRQUFRLFNBQVMsS0FBSyxZQUFZO0FBRXBDLFFBQUFBLFVBQVMsS0FBSyxxQkFBcUI7QUFDbkMsZ0JBQVEsS0FBS0EsT0FBTTtBQUNuQixlQUFPQTtBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQVVBLFNBQUssVUFBVSxnQkFBZ0IsU0FBU0EsU0FBUTtBQUM5QyxVQUFJLEtBQUs7QUFFVCwyQkFBcUIsWUFBWUEsUUFBTyxTQUFTO0FBRWpELFdBQUssc0JBQXNCQSxPQUFNO0FBRWpDLFdBQUssa0JBQWtCO0FBRXZCLGFBQU8sSUFBSUYsU0FBUSxTQUFTRyxVQUFTLFFBQVE7QUFDM0MsUUFBQUQsUUFBTyxVQUFVLE9BQU8sU0FBUyxLQUFLO0FBQ3BDLGFBQUcsa0JBQWtCO0FBQUEsWUFDbkIsVUFBVUEsUUFBTztBQUFBLFlBQ2pCLFVBQVVBLFFBQU87QUFBQSxZQUNqQixRQUFRQSxRQUFPO0FBQUEsVUFDakIsQ0FBQztBQUNELGNBQUksS0FBSztBQUNQLG1CQUFPLEdBQUc7QUFBQSxVQUNaLE9BQU87QUFDTCxZQUFBQyxTQUFRRCxPQUFNO0FBQUEsVUFDaEI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBT0EsU0FBSyxVQUFVLHdCQUF3QixTQUFTQSxTQUFRO0FBRXRELFVBQUksUUFBUSxLQUFLLFFBQVEsUUFBUUEsT0FBTTtBQUN2QyxVQUFJLFVBQVUsSUFBSTtBQUNoQixhQUFLLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFZQSxTQUFLLFVBQVUsWUFBWSxTQUFVLE9BQU8sU0FBUztBQUNuRCxVQUFJLEtBQUs7QUFHVCxXQUFLLE1BQU0sUUFBUSxTQUFVLE1BQU07QUFDakMsYUFBSyxTQUFTLE9BQU8sSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQUEsTUFDbkQsQ0FBQztBQUNELFdBQUssTUFBTSxTQUFTO0FBRXBCLFVBQUksSUFBSSxTQUFVQSxTQUFRO0FBQ3hCLDZCQUFxQixZQUFZQSxRQUFPLFNBQVM7QUFDakQsYUFBSyxzQkFBc0JBLE9BQU07QUFBQSxNQUNuQztBQUNBLFVBQUksZUFBZSxFQUFFLEtBQUssSUFBSTtBQUU5QixVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFJLFVBQVUsS0FBSyxRQUFRLE1BQU07QUFDakMsY0FBUSxRQUFRLFNBQVVBLFNBQVE7QUFDaEMsWUFBSSxjQUFjQSxRQUFPLG1CQUFtQixPQUFPLE9BQU8sRUFDdkQsS0FBSyxZQUFZLEVBQ2pCLE9BQU8sV0FBVztBQUNqQixhQUFHLGtCQUFrQjtBQUFBLFlBQ25CLFVBQVVBLFFBQU87QUFBQSxZQUNqQixVQUFVQSxRQUFPO0FBQUEsWUFDakIsUUFBUUEsUUFBTztBQUFBLFVBQ2pCLENBQUM7QUFBQSxRQUNILENBQUM7QUFDSCxpQkFBUyxLQUFLLFdBQVc7QUFBQSxNQUMzQixDQUFDO0FBQ0QsYUFBT0YsU0FBUSxJQUFJLFFBQVE7QUFBQSxJQUM3QjtBQU1BLFNBQUssVUFBVSxRQUFRLFdBQVk7QUFDakMsVUFBSSxlQUFlLEtBQUssUUFBUTtBQUNoQyxVQUFJLGNBQWMsS0FBSyxRQUFRLE9BQU8sU0FBVUUsU0FBUTtBQUN0RCxlQUFPQSxRQUFPLEtBQUs7QUFBQSxNQUNyQixDQUFDLEVBQUU7QUFFSCxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBLGFBQWUsZUFBZTtBQUFBLFFBRTlCLGNBQWUsS0FBSyxNQUFNO0FBQUEsUUFDMUIsYUFBZTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQU1BLFNBQUssVUFBVSxvQkFBb0IsV0FBVztBQUM1QyxVQUFJLEtBQUssWUFBWTtBQUNuQixpQkFBUSxJQUFJLEtBQUssUUFBUSxRQUFRLElBQUksS0FBSyxZQUFZLEtBQUs7QUFDekQsZUFBSyxRQUFRLEtBQUssS0FBSyxxQkFBcUIsQ0FBQztBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFPQSxTQUFLLFVBQVUsdUJBQXVCLFdBQVk7QUFDaEQsWUFBTSxrQkFBa0IsS0FBSyxlQUFlO0FBQUEsUUFDMUMsVUFBVSxLQUFLO0FBQUEsUUFDZixVQUFVLEtBQUs7QUFBQSxRQUNmLGtCQUFrQixLQUFLO0FBQUEsUUFDdkIsUUFBUSxLQUFLO0FBQUEsTUFDZixDQUFDLEtBQUssQ0FBQztBQUVQLGFBQU8sSUFBSSxjQUFjLGdCQUFnQixVQUFVLEtBQUssUUFBUTtBQUFBLFFBQzlELFVBQVUsZ0JBQWdCLFlBQVksS0FBSztBQUFBLFFBQzNDLFVBQVUsZ0JBQWdCLFlBQVksS0FBSztBQUFBLFFBQzNDLGtCQUFrQixnQkFBZ0Isb0JBQW9CLEtBQUs7QUFBQSxRQUMzRCxXQUFXLHFCQUFxQix3QkFBd0IsS0FBSyxjQUFjO0FBQUEsUUFDM0UsWUFBWSxLQUFLO0FBQUEsTUFDbkIsQ0FBQztBQUFBLElBQ0g7QUFPQSxhQUFTLG1CQUFtQixZQUFZO0FBQ3RDLFVBQUksQ0FBQyxTQUFTLFVBQVUsS0FBSyxDQUFDLFVBQVUsVUFBVSxLQUFLLGFBQWEsR0FBRztBQUNyRSxjQUFNLElBQUksVUFBVSxrREFBa0Q7QUFBQSxNQUN4RTtBQUFBLElBQ0Y7QUFPQSxhQUFTLG1CQUFtQixZQUFZO0FBQ3RDLFVBQUksQ0FBQyxTQUFTLFVBQVUsS0FBSyxDQUFDLFVBQVUsVUFBVSxLQUFLLGFBQWEsR0FBRztBQUNyRSxjQUFNLElBQUksVUFBVSxrREFBa0Q7QUFBQSxNQUN4RTtBQUFBLElBQ0Y7QUFPQSxhQUFTLFNBQVMsT0FBTztBQUN2QixhQUFPLE9BQU8sVUFBVTtBQUFBLElBQzFCO0FBT0EsYUFBUyxVQUFVLE9BQU87QUFDeEIsYUFBTyxLQUFLLE1BQU0sS0FBSyxLQUFLO0FBQUEsSUFDOUI7QUFFQSxJQUFBSCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUM1YmpCO0FBQUE7QUFNQSxRQUFJLHFCQUFxQjtBQUFBLE1BQ3JCO0FBQUEsSUFHSjtBQU1BLFFBQUksc0JBQXNCO0FBTTFCLFFBQUksU0FBUztBQUFBLE1BQ1gsTUFBTSxXQUFXO0FBQUEsTUFBQztBQUFBLElBQ3BCO0FBQ0EsUUFBSSxPQUFPLFNBQVMsZUFBZSxPQUFPLGdCQUFnQixjQUFjLE9BQU8scUJBQXFCLFlBQVk7QUFFOUcsYUFBTyxLQUFLLFNBQVUsT0FBTyxVQUFVO0FBQ3JDLHlCQUFpQixPQUFPLFNBQVUsU0FBUztBQUN6QyxtQkFBUyxRQUFRLElBQUk7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDSDtBQUNBLGFBQU8sT0FBTyxTQUFVLFNBQVM7QUFDL0Isb0JBQVksT0FBTztBQUFBLE1BQ3JCO0FBQUEsSUFDRixXQUNTLE9BQU8sWUFBWSxhQUFhO0FBSXZDLFVBQUk7QUFDRix3QkFBZ0IsbUJBQW1CLGdCQUFnQjtBQUFBLE1BQ3JELFNBQVFLLFFBQU47QUFDQSxZQUFJLE9BQU9BLFdBQVUsWUFBWUEsV0FBVSxRQUFRQSxPQUFNLFNBQVMsb0JBQW9CO0FBQUEsUUFFdEYsT0FBTztBQUNMLGdCQUFNQTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBRUEsVUFBSSxpQkFFRixjQUFjLGVBQWUsTUFBTTtBQUMvQixxQkFBYyxjQUFjO0FBQ2hDLGVBQU8sT0FBTyxXQUFXLFlBQVksS0FBSyxVQUFVO0FBQ3BELGVBQU8sS0FBSyxXQUFXLEdBQUcsS0FBSyxVQUFVO0FBQUEsTUFDM0MsT0FBTztBQUNMLGVBQU8sS0FBSyxRQUFRLEdBQUcsS0FBSyxPQUFPO0FBQ25DLGVBQU8sT0FBTyxRQUFRLEtBQUssS0FBSyxPQUFPO0FBRXZDLGVBQU8sR0FBRyxjQUFjLFdBQVk7QUFDbEMsa0JBQVEsS0FBSyxDQUFDO0FBQUEsUUFDaEIsQ0FBQztBQUNELGVBQU8sT0FBTyxRQUFRLEtBQUssS0FBSyxPQUFPO0FBQUEsTUFDekM7QUFBQSxJQUNGLE9BQ0s7QUFDSCxZQUFNLElBQUksTUFBTSxxQ0FBcUM7QUFBQSxJQUN2RDtBQTdCTTtBQWNFO0FBaUJSLGFBQVMsYUFBYUEsUUFBTztBQUMzQixhQUFPLE9BQU8sb0JBQW9CQSxNQUFLLEVBQUUsT0FBTyxTQUFTLFNBQVMsTUFBTTtBQUN0RSxlQUFPLE9BQU8sZUFBZSxTQUFTLE1BQU07QUFBQSxVQUMvQyxPQUFPQSxPQUFNO0FBQUEsVUFDYixZQUFZO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDSCxHQUFHLENBQUMsQ0FBQztBQUFBLElBQ1A7QUFRQSxhQUFTLFVBQVUsT0FBTztBQUN4QixhQUFPLFNBQVUsT0FBTyxNQUFNLFNBQVMsY0FBZ0IsT0FBTyxNQUFNLFVBQVU7QUFBQSxJQUNoRjtBQUdBLFdBQU8sVUFBVSxDQUFDO0FBUWxCLFdBQU8sUUFBUSxNQUFNLFNBQVMsSUFBSSxJQUFJLE1BQU07QUFDMUMsVUFBSSxJQUFJLElBQUksU0FBUyxhQUFhLEtBQUssMkJBQTJCO0FBQ2xFLGFBQU8sRUFBRSxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQ3hCO0FBTUEsV0FBTyxRQUFRLFVBQVUsU0FBUyxVQUFVO0FBQzFDLGFBQU8sT0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLElBQ25DO0FBRUEsUUFBSSxtQkFBbUI7QUFFdkIsV0FBTyxHQUFHLFdBQVcsU0FBVSxTQUFTO0FBQ3RDLFVBQUksWUFBWSxxQkFBcUI7QUFDbkMsZUFBTyxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQ3RCO0FBQ0EsVUFBSTtBQUNGLFlBQUksU0FBUyxPQUFPLFFBQVEsUUFBUTtBQUVwQyxZQUFJLFFBQVE7QUFDViw2QkFBbUIsUUFBUTtBQUczQixjQUFJLFNBQVMsT0FBTyxNQUFNLFFBQVEsUUFBUSxNQUFNO0FBRWhELGNBQUksVUFBVSxNQUFNLEdBQUc7QUFFckIsbUJBQ0ssS0FBSyxTQUFVQyxTQUFRO0FBQ3RCLHFCQUFPLEtBQUs7QUFBQSxnQkFDVixJQUFJLFFBQVE7QUFBQSxnQkFDWixRQUFRQTtBQUFBLGdCQUNSLE9BQU87QUFBQSxjQUNULENBQUM7QUFDRCxpQ0FBbUI7QUFBQSxZQUNyQixDQUFDLEVBQ0EsTUFBTSxTQUFVLEtBQUs7QUFDcEIscUJBQU8sS0FBSztBQUFBLGdCQUNWLElBQUksUUFBUTtBQUFBLGdCQUNaLFFBQVE7QUFBQSxnQkFDUixPQUFPLGFBQWEsR0FBRztBQUFBLGNBQ3pCLENBQUM7QUFDRCxpQ0FBbUI7QUFBQSxZQUNyQixDQUFDO0FBQUEsVUFDUCxPQUNLO0FBRUgsbUJBQU8sS0FBSztBQUFBLGNBQ1YsSUFBSSxRQUFRO0FBQUEsY0FDWjtBQUFBLGNBQ0EsT0FBTztBQUFBLFlBQ1QsQ0FBQztBQUVELCtCQUFtQjtBQUFBLFVBQ3JCO0FBQUEsUUFDRixPQUNLO0FBQ0gsZ0JBQU0sSUFBSSxNQUFNLHFCQUFxQixRQUFRLFNBQVMsR0FBRztBQUFBLFFBQzNEO0FBQUEsTUFDRixTQUNPLEtBQVA7QUFDRSxlQUFPLEtBQUs7QUFBQSxVQUNWLElBQUksUUFBUTtBQUFBLFVBQ1osUUFBUTtBQUFBLFVBQ1IsT0FBTyxhQUFhLEdBQUc7QUFBQSxRQUN6QixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQztBQU1ELFdBQU8sV0FBVyxTQUFVLFNBQVM7QUFFbkMsVUFBSSxTQUFTO0FBQ1gsaUJBQVMsUUFBUSxTQUFTO0FBQ3hCLGNBQUksUUFBUSxlQUFlLElBQUksR0FBRztBQUNoQyxtQkFBTyxRQUFRLFFBQVEsUUFBUTtBQUFBLFVBQ2pDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLEtBQUssT0FBTztBQUFBLElBRXJCO0FBRUEsV0FBTyxPQUFPLFNBQVUsU0FBUztBQUMvQixVQUFJLGtCQUFrQjtBQUNwQixlQUFPLEtBQUs7QUFBQSxVQUNWLElBQUk7QUFBQSxVQUNKLFNBQVM7QUFBQSxVQUNUO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxRQUFJLE9BQU8sWUFBWSxhQUFhO0FBQ2xDLGNBQVEsTUFBTSxPQUFPO0FBQ3JCLGNBQVEsT0FBTyxPQUFPO0FBQUEsSUFDeEI7QUFBQTtBQUFBOzs7QUN6TUE7QUFBQSxrREFBQUMsVUFBQTtBQUFBLFFBQUksY0FBYztBQVFsQixJQUFBQSxTQUFRLE9BQU8sU0FBU0MsTUFBSyxRQUFRLFNBQVM7QUFDNUMsVUFBSSxPQUFPO0FBRVgsYUFBTyxJQUFJLEtBQUssUUFBUSxPQUFPO0FBQUEsSUFDakM7QUFNQSxJQUFBRCxTQUFRLFNBQVMsU0FBU0UsUUFBTyxTQUFTO0FBQ3hDLFVBQUlBLFVBQVM7QUFDYixNQUFBQSxRQUFPLElBQUksT0FBTztBQUFBLElBQ3BCO0FBTUEsSUFBQUYsU0FBUSxhQUFhLFNBQVMsV0FBVyxTQUFTO0FBQ2hELFVBQUlFLFVBQVM7QUFDYixNQUFBQSxRQUFPLEtBQUssT0FBTztBQUFBLElBQ3JCO0FBTUEsSUFBQUYsU0FBUSxVQUFVO0FBRWxCLElBQUFBLFNBQVEsV0FBVyxZQUFZO0FBQy9CLElBQUFBLFNBQVEsZUFBZSxZQUFZO0FBQ25DLElBQUFBLFNBQVEsT0FBTyxZQUFZO0FBQUE7QUFBQTs7O0FDeEMzQixJQUNBLE1BQ0EsT0FHUSxRQUVGLFFBUU8sT0FDQSxPQUNBLFNBQ0EsU0FDQTtBQW5CYjtBQUFBO0FBQUE7QUFDQSxXQUFzQjtBQUN0QixZQUF1QjtBQUd2QixLQUFNLEVBQUUsV0FBVztBQUVuQixJQUFNLFNBQVMsQ0FBQyxRQUFrQixXQUF1QixDQUFDLFFBQWdCLFNBQWdCO0FBQ3hGLFVBQUksTUFBVyxZQUFPLEtBQUssR0FBRyxJQUFJO0FBQ2xDLFVBQUksVUFBVSxPQUFPLFFBQVE7QUFDM0IsY0FBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLEdBQUcsR0FBRztBQUFBLE1BQ2pEO0FBQ0EsYUFBTyxNQUFNLE1BQU0sSUFBSTtBQUFBLElBQ3pCO0FBRU8sSUFBTSxRQUFRLE9BQU8sTUFBTTtBQUMzQixJQUFNLFFBQVEsT0FBTyxRQUFRLENBQU8sU0FBRyxDQUFDO0FBQ3hDLElBQU0sVUFBVSxPQUFPLFFBQVEsQ0FBTyxZQUFNLENBQUM7QUFDN0MsSUFBTSxVQUFVLE9BQU8sUUFBUSxDQUFPLFdBQUssQ0FBQztBQUM1QyxJQUFNLFlBQVksT0FBTyxRQUFRLENBQU8sVUFBSSxDQUFDO0FBQUE7QUFBQTs7O0FDbkJwRDtBQUFBLGdEQUFBRyxVQUFBO0FBQUE7QUFFQSxJQUFBQSxTQUFRLGVBQWUsU0FBVSxJQUFJO0FBQ25DLGFBQU8sT0FBTyxlQUFlLFlBQWEsTUFBTTtBQUM5QyxZQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsT0FBTztBQUFZLGFBQUcsTUFBTSxNQUFNLElBQUk7QUFBQSxhQUMvRDtBQUNILGlCQUFPLElBQUksUUFBUSxDQUFDQyxVQUFTLFdBQVc7QUFDdEMsZUFBRztBQUFBLGNBQ0Q7QUFBQSxjQUNBLEdBQUc7QUFBQSxjQUNILENBQUMsS0FBSyxRQUFTLE9BQU8sT0FBUSxPQUFPLEdBQUcsSUFBSUEsU0FBUSxHQUFHO0FBQUEsWUFDekQ7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixHQUFHLFFBQVEsRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0I7QUFFQSxJQUFBRCxTQUFRLGNBQWMsU0FBVSxJQUFJO0FBQ2xDLGFBQU8sT0FBTyxlQUFlLFlBQWEsTUFBTTtBQUM5QyxjQUFNLEtBQUssS0FBSyxLQUFLLFNBQVM7QUFDOUIsWUFBSSxPQUFPLE9BQU87QUFBWSxpQkFBTyxHQUFHLE1BQU0sTUFBTSxJQUFJO0FBQUE7QUFDbkQsYUFBRyxNQUFNLE1BQU0sS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxPQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUFBLE1BQ2xFLEdBQUcsUUFBUSxFQUFFLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFBQSxJQUMvQjtBQUFBO0FBQUE7OztBQ3ZCQTtBQUFBLG1EQUFBRSxVQUFBQyxTQUFBO0FBQUEsUUFBSSxZQUFZLFFBQVE7QUFFeEIsUUFBSSxVQUFVLFFBQVE7QUFDdEIsUUFBSSxNQUFNO0FBRVYsUUFBSSxXQUFXLFFBQVEsSUFBSSx3QkFBd0IsUUFBUTtBQUUzRCxZQUFRLE1BQU0sV0FBVztBQUN2QixVQUFJLENBQUM7QUFDSCxjQUFNLFFBQVEsS0FBSyxPQUFPO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSTtBQUNGLGNBQVEsSUFBSTtBQUFBLElBQ2QsU0FBUyxJQUFQO0FBQUEsSUFBWTtBQUdkLFFBQUksT0FBTyxRQUFRLFVBQVUsWUFBWTtBQUNuQyxjQUFRLFFBQVE7QUFDcEIsY0FBUSxRQUFRLFNBQVUsR0FBRztBQUMzQixjQUFNO0FBQ04sY0FBTSxLQUFLLFNBQVMsQ0FBQztBQUFBLE1BQ3ZCO0FBQ0EsVUFBSSxPQUFPO0FBQWdCLGVBQU8sZUFBZSxRQUFRLE9BQU8sS0FBSztBQUFBLElBQ3ZFO0FBTk07QUFRTixJQUFBQSxRQUFPLFVBQVU7QUFFakIsYUFBUyxNQUFPQyxLQUFJO0FBS2xCLFVBQUksVUFBVSxlQUFlLFdBQVcsS0FDcEMsUUFBUSxRQUFRLE1BQU0sd0JBQXdCLEdBQUc7QUFDbkQsb0JBQVlBLEdBQUU7QUFBQSxNQUNoQjtBQUdBLFVBQUksQ0FBQ0EsSUFBRyxTQUFTO0FBQ2YscUJBQWFBLEdBQUU7QUFBQSxNQUNqQjtBQU9BLE1BQUFBLElBQUcsUUFBUSxTQUFTQSxJQUFHLEtBQUs7QUFDNUIsTUFBQUEsSUFBRyxTQUFTLFNBQVNBLElBQUcsTUFBTTtBQUM5QixNQUFBQSxJQUFHLFNBQVMsU0FBU0EsSUFBRyxNQUFNO0FBRTlCLE1BQUFBLElBQUcsUUFBUSxTQUFTQSxJQUFHLEtBQUs7QUFDNUIsTUFBQUEsSUFBRyxTQUFTLFNBQVNBLElBQUcsTUFBTTtBQUM5QixNQUFBQSxJQUFHLFNBQVMsU0FBU0EsSUFBRyxNQUFNO0FBRTlCLE1BQUFBLElBQUcsWUFBWSxhQUFhQSxJQUFHLFNBQVM7QUFDeEMsTUFBQUEsSUFBRyxhQUFhLGFBQWFBLElBQUcsVUFBVTtBQUMxQyxNQUFBQSxJQUFHLGFBQWEsYUFBYUEsSUFBRyxVQUFVO0FBRTFDLE1BQUFBLElBQUcsWUFBWSxhQUFhQSxJQUFHLFNBQVM7QUFDeEMsTUFBQUEsSUFBRyxhQUFhLGFBQWFBLElBQUcsVUFBVTtBQUMxQyxNQUFBQSxJQUFHLGFBQWEsYUFBYUEsSUFBRyxVQUFVO0FBRTFDLE1BQUFBLElBQUcsT0FBTyxRQUFRQSxJQUFHLElBQUk7QUFDekIsTUFBQUEsSUFBRyxRQUFRLFFBQVFBLElBQUcsS0FBSztBQUMzQixNQUFBQSxJQUFHLFFBQVEsUUFBUUEsSUFBRyxLQUFLO0FBRTNCLE1BQUFBLElBQUcsV0FBVyxZQUFZQSxJQUFHLFFBQVE7QUFDckMsTUFBQUEsSUFBRyxZQUFZLFlBQVlBLElBQUcsU0FBUztBQUN2QyxNQUFBQSxJQUFHLFlBQVksWUFBWUEsSUFBRyxTQUFTO0FBR3ZDLFVBQUlBLElBQUcsU0FBUyxDQUFDQSxJQUFHLFFBQVE7QUFDMUIsUUFBQUEsSUFBRyxTQUFTLFNBQVVDLE9BQU0sTUFBTSxJQUFJO0FBQ3BDLGNBQUk7QUFBSSxvQkFBUSxTQUFTLEVBQUU7QUFBQSxRQUM3QjtBQUNBLFFBQUFELElBQUcsYUFBYSxXQUFZO0FBQUEsUUFBQztBQUFBLE1BQy9CO0FBQ0EsVUFBSUEsSUFBRyxTQUFTLENBQUNBLElBQUcsUUFBUTtBQUMxQixRQUFBQSxJQUFHLFNBQVMsU0FBVUMsT0FBTSxLQUFLLEtBQUssSUFBSTtBQUN4QyxjQUFJO0FBQUksb0JBQVEsU0FBUyxFQUFFO0FBQUEsUUFDN0I7QUFDQSxRQUFBRCxJQUFHLGFBQWEsV0FBWTtBQUFBLFFBQUM7QUFBQSxNQUMvQjtBQVdBLFVBQUksYUFBYSxTQUFTO0FBQ3hCLFFBQUFBLElBQUcsU0FBUyxPQUFPQSxJQUFHLFdBQVcsYUFBYUEsSUFBRyxTQUM5QyxTQUFVLFdBQVc7QUFDdEIsbUJBQVMsT0FBUSxNQUFNLElBQUksSUFBSTtBQUM3QixnQkFBSSxRQUFRLEtBQUssSUFBSTtBQUNyQixnQkFBSSxVQUFVO0FBQ2Qsc0JBQVUsTUFBTSxJQUFJLFNBQVMsR0FBSSxJQUFJO0FBQ25DLGtCQUFJLE9BQ0ksR0FBRyxTQUFTLFlBQVksR0FBRyxTQUFTLFlBQ3JDLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBTztBQUNqQywyQkFBVyxXQUFXO0FBQ3BCLGtCQUFBQSxJQUFHLEtBQUssSUFBSSxTQUFVLFFBQVEsSUFBSTtBQUNoQyx3QkFBSSxVQUFVLE9BQU8sU0FBUztBQUM1QixnQ0FBVSxNQUFNLElBQUksRUFBRTtBQUFBO0FBRXRCLHlCQUFHLEVBQUU7QUFBQSxrQkFDVCxDQUFDO0FBQUEsZ0JBQ0gsR0FBRyxPQUFPO0FBQ1Ysb0JBQUksVUFBVTtBQUNaLDZCQUFXO0FBQ2I7QUFBQSxjQUNGO0FBQ0Esa0JBQUk7QUFBSSxtQkFBRyxFQUFFO0FBQUEsWUFDZixDQUFDO0FBQUEsVUFDSDtBQUNBLGNBQUksT0FBTztBQUFnQixtQkFBTyxlQUFlLFFBQVEsU0FBUztBQUNsRSxpQkFBTztBQUFBLFFBQ1QsRUFBR0EsSUFBRyxNQUFNO0FBQUEsTUFDZDtBQUdBLE1BQUFBLElBQUcsT0FBTyxPQUFPQSxJQUFHLFNBQVMsYUFBYUEsSUFBRyxPQUMxQyxTQUFVLFNBQVM7QUFDcEIsaUJBQVMsS0FBTSxJQUFJLFFBQVEsUUFBUSxRQUFRLFVBQVUsV0FBVztBQUM5RCxjQUFJO0FBQ0osY0FBSSxhQUFhLE9BQU8sY0FBYyxZQUFZO0FBQ2hELGdCQUFJLGFBQWE7QUFDakIsdUJBQVcsU0FBVSxJQUFJLEdBQUcsSUFBSTtBQUM5QixrQkFBSSxNQUFNLEdBQUcsU0FBUyxZQUFZLGFBQWEsSUFBSTtBQUNqRDtBQUNBLHVCQUFPLFFBQVEsS0FBS0EsS0FBSSxJQUFJLFFBQVEsUUFBUSxRQUFRLFVBQVUsUUFBUTtBQUFBLGNBQ3hFO0FBQ0Esd0JBQVUsTUFBTSxNQUFNLFNBQVM7QUFBQSxZQUNqQztBQUFBLFVBQ0Y7QUFDQSxpQkFBTyxRQUFRLEtBQUtBLEtBQUksSUFBSSxRQUFRLFFBQVEsUUFBUSxVQUFVLFFBQVE7QUFBQSxRQUN4RTtBQUdBLFlBQUksT0FBTztBQUFnQixpQkFBTyxlQUFlLE1BQU0sT0FBTztBQUM5RCxlQUFPO0FBQUEsTUFDVCxFQUFHQSxJQUFHLElBQUk7QUFFVixNQUFBQSxJQUFHLFdBQVcsT0FBT0EsSUFBRyxhQUFhLGFBQWFBLElBQUcsV0FDbEQsU0FBVSxhQUFhO0FBQUUsZUFBTyxTQUFVLElBQUksUUFBUSxRQUFRLFFBQVEsVUFBVTtBQUNqRixjQUFJLGFBQWE7QUFDakIsaUJBQU8sTUFBTTtBQUNYLGdCQUFJO0FBQ0YscUJBQU8sWUFBWSxLQUFLQSxLQUFJLElBQUksUUFBUSxRQUFRLFFBQVEsUUFBUTtBQUFBLFlBQ2xFLFNBQVMsSUFBUDtBQUNBLGtCQUFJLEdBQUcsU0FBUyxZQUFZLGFBQWEsSUFBSTtBQUMzQztBQUNBO0FBQUEsY0FDRjtBQUNBLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFBQyxFQUFHQSxJQUFHLFFBQVE7QUFFZixlQUFTLFlBQWFBLEtBQUk7QUFDeEIsUUFBQUEsSUFBRyxTQUFTLFNBQVVDLE9BQU0sTUFBTSxVQUFVO0FBQzFDLFVBQUFELElBQUc7QUFBQSxZQUFNQztBQUFBLFlBQ0EsVUFBVSxXQUFXLFVBQVU7QUFBQSxZQUMvQjtBQUFBLFlBQ0EsU0FBVSxLQUFLLElBQUk7QUFDMUIsa0JBQUksS0FBSztBQUNQLG9CQUFJO0FBQVUsMkJBQVMsR0FBRztBQUMxQjtBQUFBLGNBQ0Y7QUFHQSxjQUFBRCxJQUFHLE9BQU8sSUFBSSxNQUFNLFNBQVVFLE1BQUs7QUFDakMsZ0JBQUFGLElBQUcsTUFBTSxJQUFJLFNBQVNHLE9BQU07QUFDMUIsc0JBQUk7QUFBVSw2QkFBU0QsUUFBT0MsS0FBSTtBQUFBLGdCQUNwQyxDQUFDO0FBQUEsY0FDSCxDQUFDO0FBQUEsWUFDSDtBQUFBLFVBQUM7QUFBQSxRQUNIO0FBRUEsUUFBQUgsSUFBRyxhQUFhLFNBQVVDLE9BQU0sTUFBTTtBQUNwQyxjQUFJLEtBQUtELElBQUcsU0FBU0MsT0FBTSxVQUFVLFdBQVcsVUFBVSxXQUFXLElBQUk7QUFJekUsY0FBSSxRQUFRO0FBQ1osY0FBSTtBQUNKLGNBQUk7QUFDRixrQkFBTUQsSUFBRyxXQUFXLElBQUksSUFBSTtBQUM1QixvQkFBUTtBQUFBLFVBQ1YsVUFBRTtBQUNBLGdCQUFJLE9BQU87QUFDVCxrQkFBSTtBQUNGLGdCQUFBQSxJQUFHLFVBQVUsRUFBRTtBQUFBLGNBQ2pCLFNBQVMsSUFBUDtBQUFBLGNBQVk7QUFBQSxZQUNoQixPQUFPO0FBQ0wsY0FBQUEsSUFBRyxVQUFVLEVBQUU7QUFBQSxZQUNqQjtBQUFBLFVBQ0Y7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsZUFBUyxhQUFjQSxLQUFJO0FBQ3pCLFlBQUksVUFBVSxlQUFlLFdBQVcsS0FBS0EsSUFBRyxTQUFTO0FBQ3ZELFVBQUFBLElBQUcsVUFBVSxTQUFVQyxPQUFNLElBQUksSUFBSSxJQUFJO0FBQ3ZDLFlBQUFELElBQUcsS0FBS0MsT0FBTSxVQUFVLFdBQVcsU0FBVSxJQUFJLElBQUk7QUFDbkQsa0JBQUksSUFBSTtBQUNOLG9CQUFJO0FBQUkscUJBQUcsRUFBRTtBQUNiO0FBQUEsY0FDRjtBQUNBLGNBQUFELElBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxTQUFVSSxLQUFJO0FBQ25DLGdCQUFBSixJQUFHLE1BQU0sSUFBSSxTQUFVSyxNQUFLO0FBQzFCLHNCQUFJO0FBQUksdUJBQUdELE9BQU1DLElBQUc7QUFBQSxnQkFDdEIsQ0FBQztBQUFBLGNBQ0gsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUFBLFVBQ0g7QUFFQSxVQUFBTCxJQUFHLGNBQWMsU0FBVUMsT0FBTSxJQUFJLElBQUk7QUFDdkMsZ0JBQUksS0FBS0QsSUFBRyxTQUFTQyxPQUFNLFVBQVUsU0FBUztBQUM5QyxnQkFBSTtBQUNKLGdCQUFJLFFBQVE7QUFDWixnQkFBSTtBQUNGLG9CQUFNRCxJQUFHLFlBQVksSUFBSSxJQUFJLEVBQUU7QUFDL0Isc0JBQVE7QUFBQSxZQUNWLFVBQUU7QUFDQSxrQkFBSSxPQUFPO0FBQ1Qsb0JBQUk7QUFDRixrQkFBQUEsSUFBRyxVQUFVLEVBQUU7QUFBQSxnQkFDakIsU0FBUyxJQUFQO0FBQUEsZ0JBQVk7QUFBQSxjQUNoQixPQUFPO0FBQ0wsZ0JBQUFBLElBQUcsVUFBVSxFQUFFO0FBQUEsY0FDakI7QUFBQSxZQUNGO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFFRixXQUFXQSxJQUFHLFNBQVM7QUFDckIsVUFBQUEsSUFBRyxVQUFVLFNBQVUsSUFBSSxJQUFJLElBQUksSUFBSTtBQUFFLGdCQUFJO0FBQUksc0JBQVEsU0FBUyxFQUFFO0FBQUEsVUFBRTtBQUN0RSxVQUFBQSxJQUFHLGNBQWMsV0FBWTtBQUFBLFVBQUM7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFFQSxlQUFTLFNBQVUsTUFBTTtBQUN2QixZQUFJLENBQUM7QUFBTSxpQkFBTztBQUNsQixlQUFPLFNBQVUsUUFBUSxNQUFNLElBQUk7QUFDakMsaUJBQU8sS0FBSyxLQUFLQSxLQUFJLFFBQVEsTUFBTSxTQUFVLElBQUk7QUFDL0MsZ0JBQUksVUFBVSxFQUFFO0FBQUcsbUJBQUs7QUFDeEIsZ0JBQUk7QUFBSSxpQkFBRyxNQUFNLE1BQU0sU0FBUztBQUFBLFVBQ2xDLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLGVBQVMsYUFBYyxNQUFNO0FBQzNCLFlBQUksQ0FBQztBQUFNLGlCQUFPO0FBQ2xCLGVBQU8sU0FBVSxRQUFRLE1BQU07QUFDN0IsY0FBSTtBQUNGLG1CQUFPLEtBQUssS0FBS0EsS0FBSSxRQUFRLElBQUk7QUFBQSxVQUNuQyxTQUFTLElBQVA7QUFDQSxnQkFBSSxDQUFDLFVBQVUsRUFBRTtBQUFHLG9CQUFNO0FBQUEsVUFDNUI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUdBLGVBQVMsU0FBVSxNQUFNO0FBQ3ZCLFlBQUksQ0FBQztBQUFNLGlCQUFPO0FBQ2xCLGVBQU8sU0FBVSxRQUFRLEtBQUssS0FBSyxJQUFJO0FBQ3JDLGlCQUFPLEtBQUssS0FBS0EsS0FBSSxRQUFRLEtBQUssS0FBSyxTQUFVLElBQUk7QUFDbkQsZ0JBQUksVUFBVSxFQUFFO0FBQUcsbUJBQUs7QUFDeEIsZ0JBQUk7QUFBSSxpQkFBRyxNQUFNLE1BQU0sU0FBUztBQUFBLFVBQ2xDLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLGVBQVMsYUFBYyxNQUFNO0FBQzNCLFlBQUksQ0FBQztBQUFNLGlCQUFPO0FBQ2xCLGVBQU8sU0FBVSxRQUFRLEtBQUssS0FBSztBQUNqQyxjQUFJO0FBQ0YsbUJBQU8sS0FBSyxLQUFLQSxLQUFJLFFBQVEsS0FBSyxHQUFHO0FBQUEsVUFDdkMsU0FBUyxJQUFQO0FBQ0EsZ0JBQUksQ0FBQyxVQUFVLEVBQUU7QUFBRyxvQkFBTTtBQUFBLFVBQzVCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFFBQVMsTUFBTTtBQUN0QixZQUFJLENBQUM7QUFBTSxpQkFBTztBQUdsQixlQUFPLFNBQVUsUUFBUSxTQUFTLElBQUk7QUFDcEMsY0FBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxpQkFBSztBQUNMLHNCQUFVO0FBQUEsVUFDWjtBQUNBLG1CQUFTLFNBQVUsSUFBSSxPQUFPO0FBQzVCLGdCQUFJLE9BQU87QUFDVCxrQkFBSSxNQUFNLE1BQU07QUFBRyxzQkFBTSxPQUFPO0FBQ2hDLGtCQUFJLE1BQU0sTUFBTTtBQUFHLHNCQUFNLE9BQU87QUFBQSxZQUNsQztBQUNBLGdCQUFJO0FBQUksaUJBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQSxVQUNsQztBQUNBLGlCQUFPLFVBQVUsS0FBSyxLQUFLQSxLQUFJLFFBQVEsU0FBUyxRQUFRLElBQ3BELEtBQUssS0FBS0EsS0FBSSxRQUFRLFFBQVE7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFFQSxlQUFTLFlBQWEsTUFBTTtBQUMxQixZQUFJLENBQUM7QUFBTSxpQkFBTztBQUdsQixlQUFPLFNBQVUsUUFBUSxTQUFTO0FBQ2hDLGNBQUksUUFBUSxVQUFVLEtBQUssS0FBS0EsS0FBSSxRQUFRLE9BQU8sSUFDL0MsS0FBSyxLQUFLQSxLQUFJLE1BQU07QUFDeEIsY0FBSSxPQUFPO0FBQ1QsZ0JBQUksTUFBTSxNQUFNO0FBQUcsb0JBQU0sT0FBTztBQUNoQyxnQkFBSSxNQUFNLE1BQU07QUFBRyxvQkFBTSxPQUFPO0FBQUEsVUFDbEM7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBY0EsZUFBUyxVQUFXLElBQUk7QUFDdEIsWUFBSSxDQUFDO0FBQ0gsaUJBQU87QUFFVCxZQUFJLEdBQUcsU0FBUztBQUNkLGlCQUFPO0FBRVQsWUFBSSxVQUFVLENBQUMsUUFBUSxVQUFVLFFBQVEsT0FBTyxNQUFNO0FBQ3RELFlBQUksU0FBUztBQUNYLGNBQUksR0FBRyxTQUFTLFlBQVksR0FBRyxTQUFTO0FBQ3RDLG1CQUFPO0FBQUEsUUFDWDtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ2xXQTtBQUFBLHdEQUFBTSxVQUFBQyxTQUFBO0FBQUEsUUFBSSxTQUFTLFFBQVEsVUFBVTtBQUUvQixJQUFBQSxRQUFPLFVBQVU7QUFFakIsYUFBUyxPQUFRQyxLQUFJO0FBQ25CLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFdBQVlDLE9BQU0sU0FBUztBQUNsQyxZQUFJLEVBQUUsZ0JBQWdCO0FBQWEsaUJBQU8sSUFBSSxXQUFXQSxPQUFNLE9BQU87QUFFdEUsZUFBTyxLQUFLLElBQUk7QUFFaEIsWUFBSUMsUUFBTztBQUVYLGFBQUssT0FBT0Q7QUFDWixhQUFLLEtBQUs7QUFDVixhQUFLLFdBQVc7QUFDaEIsYUFBSyxTQUFTO0FBRWQsYUFBSyxRQUFRO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxhQUFhLEtBQUs7QUFFdkIsa0JBQVUsV0FBVyxDQUFDO0FBR3RCLFlBQUksT0FBTyxPQUFPLEtBQUssT0FBTztBQUM5QixpQkFBUyxRQUFRLEdBQUcsU0FBUyxLQUFLLFFBQVEsUUFBUSxRQUFRLFNBQVM7QUFDakUsY0FBSSxNQUFNLEtBQUs7QUFDZixlQUFLLE9BQU8sUUFBUTtBQUFBLFFBQ3RCO0FBRUEsWUFBSSxLQUFLO0FBQVUsZUFBSyxZQUFZLEtBQUssUUFBUTtBQUVqRCxZQUFJLEtBQUssVUFBVSxRQUFXO0FBQzVCLGNBQUksYUFBYSxPQUFPLEtBQUssT0FBTztBQUNsQyxrQkFBTSxVQUFVLHdCQUF3QjtBQUFBLFVBQzFDO0FBQ0EsY0FBSSxLQUFLLFFBQVEsUUFBVztBQUMxQixpQkFBSyxNQUFNO0FBQUEsVUFDYixXQUFXLGFBQWEsT0FBTyxLQUFLLEtBQUs7QUFDdkMsa0JBQU0sVUFBVSxzQkFBc0I7QUFBQSxVQUN4QztBQUVBLGNBQUksS0FBSyxRQUFRLEtBQUssS0FBSztBQUN6QixrQkFBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsVUFDeEM7QUFFQSxlQUFLLE1BQU0sS0FBSztBQUFBLFFBQ2xCO0FBRUEsWUFBSSxLQUFLLE9BQU8sTUFBTTtBQUNwQixrQkFBUSxTQUFTLFdBQVc7QUFDMUIsWUFBQUMsTUFBSyxNQUFNO0FBQUEsVUFDYixDQUFDO0FBQ0Q7QUFBQSxRQUNGO0FBRUEsUUFBQUYsSUFBRyxLQUFLLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxNQUFNLFNBQVUsS0FBSyxJQUFJO0FBQzNELGNBQUksS0FBSztBQUNQLFlBQUFFLE1BQUssS0FBSyxTQUFTLEdBQUc7QUFDdEIsWUFBQUEsTUFBSyxXQUFXO0FBQ2hCO0FBQUEsVUFDRjtBQUVBLFVBQUFBLE1BQUssS0FBSztBQUNWLFVBQUFBLE1BQUssS0FBSyxRQUFRLEVBQUU7QUFDcEIsVUFBQUEsTUFBSyxNQUFNO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSDtBQUVBLGVBQVMsWUFBYUQsT0FBTSxTQUFTO0FBQ25DLFlBQUksRUFBRSxnQkFBZ0I7QUFBYyxpQkFBTyxJQUFJLFlBQVlBLE9BQU0sT0FBTztBQUV4RSxlQUFPLEtBQUssSUFBSTtBQUVoQixhQUFLLE9BQU9BO0FBQ1osYUFBSyxLQUFLO0FBQ1YsYUFBSyxXQUFXO0FBRWhCLGFBQUssUUFBUTtBQUNiLGFBQUssV0FBVztBQUNoQixhQUFLLE9BQU87QUFDWixhQUFLLGVBQWU7QUFFcEIsa0JBQVUsV0FBVyxDQUFDO0FBR3RCLFlBQUksT0FBTyxPQUFPLEtBQUssT0FBTztBQUM5QixpQkFBUyxRQUFRLEdBQUcsU0FBUyxLQUFLLFFBQVEsUUFBUSxRQUFRLFNBQVM7QUFDakUsY0FBSSxNQUFNLEtBQUs7QUFDZixlQUFLLE9BQU8sUUFBUTtBQUFBLFFBQ3RCO0FBRUEsWUFBSSxLQUFLLFVBQVUsUUFBVztBQUM1QixjQUFJLGFBQWEsT0FBTyxLQUFLLE9BQU87QUFDbEMsa0JBQU0sVUFBVSx3QkFBd0I7QUFBQSxVQUMxQztBQUNBLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbEIsa0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFVBQ3pDO0FBRUEsZUFBSyxNQUFNLEtBQUs7QUFBQSxRQUNsQjtBQUVBLGFBQUssT0FBTztBQUNaLGFBQUssU0FBUyxDQUFDO0FBRWYsWUFBSSxLQUFLLE9BQU8sTUFBTTtBQUNwQixlQUFLLFFBQVFELElBQUc7QUFDaEIsZUFBSyxPQUFPLEtBQUssQ0FBQyxLQUFLLE9BQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLE1BQU0sTUFBUyxDQUFDO0FBQzFFLGVBQUssTUFBTTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3JIQTtBQUFBLCtDQUFBRyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFFakIsUUFBSSxpQkFBaUIsT0FBTyxrQkFBa0IsU0FBVSxLQUFLO0FBQzNELGFBQU8sSUFBSTtBQUFBLElBQ2I7QUFFQSxhQUFTLE1BQU8sS0FBSztBQUNuQixVQUFJLFFBQVEsUUFBUSxPQUFPLFFBQVE7QUFDakMsZUFBTztBQUVULFVBQUksZUFBZTtBQUNqQixZQUFJLE9BQU8sRUFBRSxXQUFXLGVBQWUsR0FBRyxFQUFFO0FBQUE7QUFFNUMsWUFBSSxPQUFPLHVCQUFPLE9BQU8sSUFBSTtBQUUvQixhQUFPLG9CQUFvQixHQUFHLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDckQsZUFBTyxlQUFlLE1BQU0sS0FBSyxPQUFPLHlCQUF5QixLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQzVFLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3RCQTtBQUFBLHFEQUFBQyxVQUFBQyxTQUFBO0FBQUEsUUFBSUMsTUFBSyxRQUFRO0FBQ2pCLFFBQUksWUFBWTtBQUNoQixRQUFJLFNBQVM7QUFDYixRQUFJLFFBQVE7QUFFWixRQUFJQyxRQUFPLFFBQVE7QUFHbkIsUUFBSTtBQUNKLFFBQUk7QUFHSixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxRQUFRLFlBQVk7QUFDcEUsc0JBQWdCLE9BQU8sSUFBSSxtQkFBbUI7QUFFOUMsdUJBQWlCLE9BQU8sSUFBSSxzQkFBc0I7QUFBQSxJQUNwRCxPQUFPO0FBQ0wsc0JBQWdCO0FBQ2hCLHVCQUFpQjtBQUFBLElBQ25CO0FBRUEsYUFBUyxPQUFRO0FBQUEsSUFBQztBQUVsQixhQUFTLGFBQWEsU0FBU0MsUUFBTztBQUNwQyxhQUFPLGVBQWUsU0FBUyxlQUFlO0FBQUEsUUFDNUMsS0FBSyxXQUFXO0FBQ2QsaUJBQU9BO0FBQUEsUUFDVDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFFBQVE7QUFDWixRQUFJRCxNQUFLO0FBQ1AsY0FBUUEsTUFBSyxTQUFTLE1BQU07QUFBQSxhQUNyQixZQUFZLEtBQUssUUFBUSxJQUFJLGNBQWMsRUFBRTtBQUNwRCxjQUFRLFdBQVc7QUFDakIsWUFBSSxJQUFJQSxNQUFLLE9BQU8sTUFBTUEsT0FBTSxTQUFTO0FBQ3pDLFlBQUksV0FBVyxFQUFFLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVTtBQUM1QyxnQkFBUSxNQUFNLENBQUM7QUFBQSxNQUNqQjtBQUdGLFFBQUksQ0FBQ0QsSUFBRyxnQkFBZ0I7QUFFbEIsY0FBUSxPQUFPLGtCQUFrQixDQUFDO0FBQ3RDLG1CQUFhQSxLQUFJLEtBQUs7QUFNdEIsTUFBQUEsSUFBRyxRQUFTLFNBQVUsVUFBVTtBQUM5QixpQkFBUyxNQUFPLElBQUksSUFBSTtBQUN0QixpQkFBTyxTQUFTLEtBQUtBLEtBQUksSUFBSSxTQUFVLEtBQUs7QUFFMUMsZ0JBQUksQ0FBQyxLQUFLO0FBQ1IseUJBQVc7QUFBQSxZQUNiO0FBRUEsZ0JBQUksT0FBTyxPQUFPO0FBQ2hCLGlCQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsVUFDNUIsQ0FBQztBQUFBLFFBQ0g7QUFFQSxlQUFPLGVBQWUsT0FBTyxnQkFBZ0I7QUFBQSxVQUMzQyxPQUFPO0FBQUEsUUFDVCxDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1QsRUFBR0EsSUFBRyxLQUFLO0FBRVgsTUFBQUEsSUFBRyxZQUFhLFNBQVUsY0FBYztBQUN0QyxpQkFBUyxVQUFXLElBQUk7QUFFdEIsdUJBQWEsTUFBTUEsS0FBSSxTQUFTO0FBQ2hDLHFCQUFXO0FBQUEsUUFDYjtBQUVBLGVBQU8sZUFBZSxXQUFXLGdCQUFnQjtBQUFBLFVBQy9DLE9BQU87QUFBQSxRQUNULENBQUM7QUFDRCxlQUFPO0FBQUEsTUFDVCxFQUFHQSxJQUFHLFNBQVM7QUFFZixVQUFJLFlBQVksS0FBSyxRQUFRLElBQUksY0FBYyxFQUFFLEdBQUc7QUFDbEQsZ0JBQVEsR0FBRyxRQUFRLFdBQVc7QUFDNUIsZ0JBQU1BLElBQUcsY0FBYztBQUN2QixrQkFBUSxVQUFVLE1BQU1BLElBQUcsZUFBZSxRQUFRLENBQUM7QUFBQSxRQUNyRCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUE3Q007QUErQ04sUUFBSSxDQUFDLE9BQU8sZ0JBQWdCO0FBQzFCLG1CQUFhLFFBQVFBLElBQUcsY0FBYztBQUFBLElBQ3hDO0FBRUEsSUFBQUQsUUFBTyxVQUFVLE1BQU0sTUFBTUMsR0FBRSxDQUFDO0FBQ2hDLFFBQUksUUFBUSxJQUFJLGlDQUFpQyxDQUFDQSxJQUFHLFdBQVc7QUFDNUQsTUFBQUQsUUFBTyxVQUFVLE1BQU1DLEdBQUU7QUFDekIsTUFBQUEsSUFBRyxZQUFZO0FBQUEsSUFDbkI7QUFFQSxhQUFTLE1BQU9BLEtBQUk7QUFFbEIsZ0JBQVVBLEdBQUU7QUFDWixNQUFBQSxJQUFHLGNBQWM7QUFFakIsTUFBQUEsSUFBRyxtQkFBbUI7QUFDdEIsTUFBQUEsSUFBRyxvQkFBb0I7QUFDdkIsVUFBSSxjQUFjQSxJQUFHO0FBQ3JCLE1BQUFBLElBQUcsV0FBVztBQUNkLGVBQVMsU0FBVUcsT0FBTSxTQUFTLElBQUk7QUFDcEMsWUFBSSxPQUFPLFlBQVk7QUFDckIsZUFBSyxTQUFTLFVBQVU7QUFFMUIsZUFBTyxZQUFZQSxPQUFNLFNBQVMsRUFBRTtBQUVwQyxpQkFBUyxZQUFhQSxPQUFNQyxVQUFTQyxLQUFJLFdBQVc7QUFDbEQsaUJBQU8sWUFBWUYsT0FBTUMsVUFBUyxTQUFVLEtBQUs7QUFDL0MsZ0JBQUksUUFBUSxJQUFJLFNBQVMsWUFBWSxJQUFJLFNBQVM7QUFDaEQsc0JBQVEsQ0FBQyxhQUFhLENBQUNELE9BQU1DLFVBQVNDLEdBQUUsR0FBRyxLQUFLLGFBQWEsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUFBLGlCQUNqRjtBQUNILGtCQUFJLE9BQU9BLFFBQU87QUFDaEIsZ0JBQUFBLElBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQSxZQUM1QjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBRUEsVUFBSSxlQUFlTCxJQUFHO0FBQ3RCLE1BQUFBLElBQUcsWUFBWTtBQUNmLGVBQVMsVUFBV0csT0FBTSxNQUFNLFNBQVMsSUFBSTtBQUMzQyxZQUFJLE9BQU8sWUFBWTtBQUNyQixlQUFLLFNBQVMsVUFBVTtBQUUxQixlQUFPLGFBQWFBLE9BQU0sTUFBTSxTQUFTLEVBQUU7QUFFM0MsaUJBQVMsYUFBY0EsT0FBTUcsT0FBTUYsVUFBU0MsS0FBSSxXQUFXO0FBQ3pELGlCQUFPLGFBQWFGLE9BQU1HLE9BQU1GLFVBQVMsU0FBVSxLQUFLO0FBQ3RELGdCQUFJLFFBQVEsSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQ2hELHNCQUFRLENBQUMsY0FBYyxDQUFDRCxPQUFNRyxPQUFNRixVQUFTQyxHQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxpQkFDeEY7QUFDSCxrQkFBSSxPQUFPQSxRQUFPO0FBQ2hCLGdCQUFBQSxJQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsWUFDNUI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLFVBQUksZ0JBQWdCTCxJQUFHO0FBQ3ZCLFVBQUk7QUFDRixRQUFBQSxJQUFHLGFBQWE7QUFDbEIsZUFBUyxXQUFZRyxPQUFNLE1BQU0sU0FBUyxJQUFJO0FBQzVDLFlBQUksT0FBTyxZQUFZO0FBQ3JCLGVBQUssU0FBUyxVQUFVO0FBRTFCLGVBQU8sY0FBY0EsT0FBTSxNQUFNLFNBQVMsRUFBRTtBQUU1QyxpQkFBUyxjQUFlQSxPQUFNRyxPQUFNRixVQUFTQyxLQUFJLFdBQVc7QUFDMUQsaUJBQU8sY0FBY0YsT0FBTUcsT0FBTUYsVUFBUyxTQUFVLEtBQUs7QUFDdkQsZ0JBQUksUUFBUSxJQUFJLFNBQVMsWUFBWSxJQUFJLFNBQVM7QUFDaEQsc0JBQVEsQ0FBQyxlQUFlLENBQUNELE9BQU1HLE9BQU1GLFVBQVNDLEdBQUUsR0FBRyxLQUFLLGFBQWEsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUFBLGlCQUN6RjtBQUNILGtCQUFJLE9BQU9BLFFBQU87QUFDaEIsZ0JBQUFBLElBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQSxZQUM1QjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBRUEsVUFBSSxjQUFjTCxJQUFHO0FBQ3JCLFVBQUk7QUFDRixRQUFBQSxJQUFHLFdBQVc7QUFDaEIsZUFBUyxTQUFVLEtBQUssTUFBTSxPQUFPLElBQUk7QUFDdkMsWUFBSSxPQUFPLFVBQVUsWUFBWTtBQUMvQixlQUFLO0FBQ0wsa0JBQVE7QUFBQSxRQUNWO0FBQ0EsZUFBTyxZQUFZLEtBQUssTUFBTSxPQUFPLEVBQUU7QUFFdkMsaUJBQVMsWUFBYU8sTUFBS0MsT0FBTUMsUUFBT0osS0FBSSxXQUFXO0FBQ3JELGlCQUFPLFlBQVlFLE1BQUtDLE9BQU1DLFFBQU8sU0FBVSxLQUFLO0FBQ2xELGdCQUFJLFFBQVEsSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQ2hELHNCQUFRLENBQUMsYUFBYSxDQUFDRixNQUFLQyxPQUFNQyxRQUFPSixHQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxpQkFDcEY7QUFDSCxrQkFBSSxPQUFPQSxRQUFPO0FBQ2hCLGdCQUFBQSxJQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsWUFDNUI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLFVBQUksYUFBYUwsSUFBRztBQUNwQixNQUFBQSxJQUFHLFVBQVVVO0FBQ2IsVUFBSSwwQkFBMEI7QUFDOUIsZUFBU0EsU0FBU1AsT0FBTSxTQUFTLElBQUk7QUFDbkMsWUFBSSxPQUFPLFlBQVk7QUFDckIsZUFBSyxTQUFTLFVBQVU7QUFFMUIsWUFBSSxhQUFhLHdCQUF3QixLQUFLLFFBQVEsT0FBTyxJQUN6RCxTQUFTUSxZQUFZUixPQUFNQyxVQUFTQyxLQUFJLFdBQVc7QUFDbkQsaUJBQU8sV0FBV0YsT0FBTTtBQUFBLFlBQ3RCQTtBQUFBLFlBQU1DO0FBQUEsWUFBU0M7QUFBQSxZQUFJO0FBQUEsVUFDckIsQ0FBQztBQUFBLFFBQ0gsSUFDRSxTQUFTTSxZQUFZUixPQUFNQyxVQUFTQyxLQUFJLFdBQVc7QUFDbkQsaUJBQU8sV0FBV0YsT0FBTUMsVUFBUztBQUFBLFlBQy9CRDtBQUFBLFlBQU1DO0FBQUEsWUFBU0M7QUFBQSxZQUFJO0FBQUEsVUFDckIsQ0FBQztBQUFBLFFBQ0g7QUFFRixlQUFPLFdBQVdGLE9BQU0sU0FBUyxFQUFFO0FBRW5DLGlCQUFTLG1CQUFvQkEsT0FBTUMsVUFBU0MsS0FBSSxXQUFXO0FBQ3pELGlCQUFPLFNBQVUsS0FBSyxPQUFPO0FBQzNCLGdCQUFJLFFBQVEsSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQ2hELHNCQUFRO0FBQUEsZ0JBQ047QUFBQSxnQkFDQSxDQUFDRixPQUFNQyxVQUFTQyxHQUFFO0FBQUEsZ0JBQ2xCO0FBQUEsZ0JBQ0EsYUFBYSxLQUFLLElBQUk7QUFBQSxnQkFDdEIsS0FBSyxJQUFJO0FBQUEsY0FDWCxDQUFDO0FBQUEsaUJBQ0U7QUFDSCxrQkFBSSxTQUFTLE1BQU07QUFDakIsc0JBQU0sS0FBSztBQUViLGtCQUFJLE9BQU9BLFFBQU87QUFDaEIsZ0JBQUFBLElBQUcsS0FBSyxNQUFNLEtBQUssS0FBSztBQUFBLFlBQzVCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxRQUFRLFFBQVEsT0FBTyxHQUFHLENBQUMsTUFBTSxRQUFRO0FBQzNDLFlBQUksYUFBYSxPQUFPTCxHQUFFO0FBQzFCLHFCQUFhLFdBQVc7QUFDeEIsc0JBQWMsV0FBVztBQUFBLE1BQzNCO0FBRUEsVUFBSSxnQkFBZ0JBLElBQUc7QUFDdkIsVUFBSSxlQUFlO0FBQ2pCLG1CQUFXLFlBQVksT0FBTyxPQUFPLGNBQWMsU0FBUztBQUM1RCxtQkFBVyxVQUFVLE9BQU87QUFBQSxNQUM5QjtBQUVBLFVBQUksaUJBQWlCQSxJQUFHO0FBQ3hCLFVBQUksZ0JBQWdCO0FBQ2xCLG9CQUFZLFlBQVksT0FBTyxPQUFPLGVBQWUsU0FBUztBQUM5RCxvQkFBWSxVQUFVLE9BQU87QUFBQSxNQUMvQjtBQUVBLGFBQU8sZUFBZUEsS0FBSSxjQUFjO0FBQUEsUUFDdEMsS0FBSyxXQUFZO0FBQ2YsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFDQSxLQUFLLFNBQVUsS0FBSztBQUNsQix1QkFBYTtBQUFBLFFBQ2Y7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxNQUNoQixDQUFDO0FBQ0QsYUFBTyxlQUFlQSxLQUFJLGVBQWU7QUFBQSxRQUN2QyxLQUFLLFdBQVk7QUFDZixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBLEtBQUssU0FBVSxLQUFLO0FBQ2xCLHdCQUFjO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxNQUNoQixDQUFDO0FBR0QsVUFBSSxpQkFBaUI7QUFDckIsYUFBTyxlQUFlQSxLQUFJLGtCQUFrQjtBQUFBLFFBQzFDLEtBQUssV0FBWTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBQ0EsS0FBSyxTQUFVLEtBQUs7QUFDbEIsMkJBQWlCO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxNQUNoQixDQUFDO0FBQ0QsVUFBSSxrQkFBa0I7QUFDdEIsYUFBTyxlQUFlQSxLQUFJLG1CQUFtQjtBQUFBLFFBQzNDLEtBQUssV0FBWTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBQ0EsS0FBSyxTQUFVLEtBQUs7QUFDbEIsNEJBQWtCO0FBQUEsUUFDcEI7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxNQUNoQixDQUFDO0FBRUQsZUFBUyxXQUFZRyxPQUFNLFNBQVM7QUFDbEMsWUFBSSxnQkFBZ0I7QUFDbEIsaUJBQU8sY0FBYyxNQUFNLE1BQU0sU0FBUyxHQUFHO0FBQUE7QUFFN0MsaUJBQU8sV0FBVyxNQUFNLE9BQU8sT0FBTyxXQUFXLFNBQVMsR0FBRyxTQUFTO0FBQUEsTUFDMUU7QUFFQSxlQUFTLGtCQUFtQjtBQUMxQixZQUFJLE9BQU87QUFDWCxhQUFLLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxNQUFNLFNBQVUsS0FBSyxJQUFJO0FBQ3hELGNBQUksS0FBSztBQUNQLGdCQUFJLEtBQUs7QUFDUCxtQkFBSyxRQUFRO0FBRWYsaUJBQUssS0FBSyxTQUFTLEdBQUc7QUFBQSxVQUN4QixPQUFPO0FBQ0wsaUJBQUssS0FBSztBQUNWLGlCQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3BCLGlCQUFLLEtBQUs7QUFBQSxVQUNaO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUVBLGVBQVMsWUFBYUEsT0FBTSxTQUFTO0FBQ25DLFlBQUksZ0JBQWdCO0FBQ2xCLGlCQUFPLGVBQWUsTUFBTSxNQUFNLFNBQVMsR0FBRztBQUFBO0FBRTlDLGlCQUFPLFlBQVksTUFBTSxPQUFPLE9BQU8sWUFBWSxTQUFTLEdBQUcsU0FBUztBQUFBLE1BQzVFO0FBRUEsZUFBUyxtQkFBb0I7QUFDM0IsWUFBSSxPQUFPO0FBQ1gsYUFBSyxLQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUssTUFBTSxTQUFVLEtBQUssSUFBSTtBQUN4RCxjQUFJLEtBQUs7QUFDUCxpQkFBSyxRQUFRO0FBQ2IsaUJBQUssS0FBSyxTQUFTLEdBQUc7QUFBQSxVQUN4QixPQUFPO0FBQ0wsaUJBQUssS0FBSztBQUNWLGlCQUFLLEtBQUssUUFBUSxFQUFFO0FBQUEsVUFDdEI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBRUEsZUFBUyxpQkFBa0JBLE9BQU0sU0FBUztBQUN4QyxlQUFPLElBQUlILElBQUcsV0FBV0csT0FBTSxPQUFPO0FBQUEsTUFDeEM7QUFFQSxlQUFTLGtCQUFtQkEsT0FBTSxTQUFTO0FBQ3pDLGVBQU8sSUFBSUgsSUFBRyxZQUFZRyxPQUFNLE9BQU87QUFBQSxNQUN6QztBQUVBLFVBQUksVUFBVUgsSUFBRztBQUNqQixNQUFBQSxJQUFHLE9BQU87QUFDVixlQUFTLEtBQU1HLE9BQU0sT0FBTyxNQUFNLElBQUk7QUFDcEMsWUFBSSxPQUFPLFNBQVM7QUFDbEIsZUFBSyxNQUFNLE9BQU87QUFFcEIsZUFBTyxRQUFRQSxPQUFNLE9BQU8sTUFBTSxFQUFFO0FBRXBDLGlCQUFTLFFBQVNBLE9BQU1NLFFBQU9HLE9BQU1QLEtBQUksV0FBVztBQUNsRCxpQkFBTyxRQUFRRixPQUFNTSxRQUFPRyxPQUFNLFNBQVUsS0FBSyxJQUFJO0FBQ25ELGdCQUFJLFFBQVEsSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQ2hELHNCQUFRLENBQUMsU0FBUyxDQUFDVCxPQUFNTSxRQUFPRyxPQUFNUCxHQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxpQkFDakY7QUFDSCxrQkFBSSxPQUFPQSxRQUFPO0FBQ2hCLGdCQUFBQSxJQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsWUFDNUI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLGFBQU9MO0FBQUEsSUFDVDtBQUVBLGFBQVMsUUFBUyxNQUFNO0FBQ3RCLFlBQU0sV0FBVyxLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUU7QUFDdEMsTUFBQUEsSUFBRyxlQUFlLEtBQUssSUFBSTtBQUMzQixZQUFNO0FBQUEsSUFDUjtBQUdBLFFBQUk7QUFLSixhQUFTLGFBQWM7QUFDckIsVUFBSSxNQUFNLEtBQUssSUFBSTtBQUNuQixlQUFTLElBQUksR0FBRyxJQUFJQSxJQUFHLGVBQWUsUUFBUSxFQUFFLEdBQUc7QUFHakQsWUFBSUEsSUFBRyxlQUFlLEdBQUcsU0FBUyxHQUFHO0FBQ25DLFVBQUFBLElBQUcsZUFBZSxHQUFHLEtBQUs7QUFDMUIsVUFBQUEsSUFBRyxlQUFlLEdBQUcsS0FBSztBQUFBLFFBQzVCO0FBQUEsTUFDRjtBQUVBLFlBQU07QUFBQSxJQUNSO0FBRUEsYUFBUyxRQUFTO0FBRWhCLG1CQUFhLFVBQVU7QUFDdkIsbUJBQWE7QUFFYixVQUFJQSxJQUFHLGVBQWUsV0FBVztBQUMvQjtBQUVGLFVBQUksT0FBT0EsSUFBRyxlQUFlLE1BQU07QUFDbkMsVUFBSSxLQUFLLEtBQUs7QUFDZCxVQUFJLE9BQU8sS0FBSztBQUVoQixVQUFJLE1BQU0sS0FBSztBQUNmLFVBQUksWUFBWSxLQUFLO0FBQ3JCLFVBQUksV0FBVyxLQUFLO0FBSXBCLFVBQUksY0FBYyxRQUFXO0FBQzNCLGNBQU0sU0FBUyxHQUFHLE1BQU0sSUFBSTtBQUM1QixXQUFHLE1BQU0sTUFBTSxJQUFJO0FBQUEsTUFDckIsV0FBVyxLQUFLLElBQUksSUFBSSxhQUFhLEtBQU87QUFFMUMsY0FBTSxXQUFXLEdBQUcsTUFBTSxJQUFJO0FBQzlCLFlBQUksS0FBSyxLQUFLLElBQUk7QUFDbEIsWUFBSSxPQUFPLE9BQU87QUFDaEIsYUFBRyxLQUFLLE1BQU0sR0FBRztBQUFBLE1BQ3JCLE9BQU87QUFFTCxZQUFJLGVBQWUsS0FBSyxJQUFJLElBQUk7QUFHaEMsWUFBSSxhQUFhLEtBQUssSUFBSSxXQUFXLFdBQVcsQ0FBQztBQUdqRCxZQUFJLGVBQWUsS0FBSyxJQUFJLGFBQWEsS0FBSyxHQUFHO0FBRWpELFlBQUksZ0JBQWdCLGNBQWM7QUFDaEMsZ0JBQU0sU0FBUyxHQUFHLE1BQU0sSUFBSTtBQUM1QixhQUFHLE1BQU0sTUFBTSxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUFBLFFBQ3pDLE9BQU87QUFHTCxVQUFBQSxJQUFHLGVBQWUsS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBR0EsVUFBSSxlQUFlLFFBQVc7QUFDNUIscUJBQWEsV0FBVyxPQUFPLENBQUM7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUMvYkE7QUFBQSxtREFBQWEsVUFBQTtBQUFBO0FBR0EsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNQyxNQUFLO0FBRVgsUUFBTSxNQUFNO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsRUFBRSxPQUFPLFNBQU87QUFLZCxhQUFPLE9BQU9BLElBQUcsU0FBUztBQUFBLElBQzVCLENBQUM7QUFHRCxXQUFPLEtBQUtBLEdBQUUsRUFBRSxRQUFRLFNBQU87QUFDN0IsVUFBSSxRQUFRLFlBQVk7QUFHdEI7QUFBQSxNQUNGO0FBQ0EsTUFBQUQsU0FBUSxPQUFPQyxJQUFHO0FBQUEsSUFDcEIsQ0FBQztBQUdELFFBQUksUUFBUSxZQUFVO0FBQ3BCLE1BQUFELFNBQVEsVUFBVSxFQUFFQyxJQUFHLE9BQU87QUFBQSxJQUNoQyxDQUFDO0FBSUQsSUFBQUQsU0FBUSxTQUFTLFNBQVUsVUFBVSxVQUFVO0FBQzdDLFVBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsZUFBT0MsSUFBRyxPQUFPLFVBQVUsUUFBUTtBQUFBLE1BQ3JDO0FBQ0EsYUFBTyxJQUFJLFFBQVEsQ0FBQUMsYUFBVztBQUM1QixlQUFPRCxJQUFHLE9BQU8sVUFBVUMsUUFBTztBQUFBLE1BQ3BDLENBQUM7QUFBQSxJQUNIO0FBSUEsSUFBQUYsU0FBUSxPQUFPLFNBQVUsSUFBSSxRQUFRLFFBQVEsUUFBUSxVQUFVLFVBQVU7QUFDdkUsVUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxlQUFPQyxJQUFHLEtBQUssSUFBSSxRQUFRLFFBQVEsUUFBUSxVQUFVLFFBQVE7QUFBQSxNQUMvRDtBQUNBLGFBQU8sSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUN0QyxRQUFBRCxJQUFHLEtBQUssSUFBSSxRQUFRLFFBQVEsUUFBUSxVQUFVLENBQUMsS0FBSyxXQUFXRSxZQUFXO0FBQ3hFLGNBQUk7QUFBSyxtQkFBTyxPQUFPLEdBQUc7QUFDMUIsVUFBQUQsU0FBUSxFQUFFLFdBQVcsUUFBQUMsUUFBTyxDQUFDO0FBQUEsUUFDL0IsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFPQSxJQUFBSCxTQUFRLFFBQVEsU0FBVSxJQUFJLFdBQVcsTUFBTTtBQUM3QyxVQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsT0FBTyxZQUFZO0FBQy9DLGVBQU9DLElBQUcsTUFBTSxJQUFJLFFBQVEsR0FBRyxJQUFJO0FBQUEsTUFDckM7QUFFQSxhQUFPLElBQUksUUFBUSxDQUFDQyxVQUFTLFdBQVc7QUFDdEMsUUFBQUQsSUFBRyxNQUFNLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLGNBQWNFLFlBQVc7QUFDM0QsY0FBSTtBQUFLLG1CQUFPLE9BQU8sR0FBRztBQUMxQixVQUFBRCxTQUFRLEVBQUUsY0FBYyxRQUFBQyxRQUFPLENBQUM7QUFBQSxRQUNsQyxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUdBLFFBQUksT0FBT0YsSUFBRyxXQUFXLFlBQVk7QUFJbkMsTUFBQUQsU0FBUSxTQUFTLFNBQVUsSUFBSSxZQUFZLE1BQU07QUFDL0MsWUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLE9BQU8sWUFBWTtBQUMvQyxpQkFBT0MsSUFBRyxPQUFPLElBQUksU0FBUyxHQUFHLElBQUk7QUFBQSxRQUN2QztBQUVBLGVBQU8sSUFBSSxRQUFRLENBQUNDLFVBQVMsV0FBVztBQUN0QyxVQUFBRCxJQUFHLE9BQU8sSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssY0FBY0csYUFBWTtBQUM5RCxnQkFBSTtBQUFLLHFCQUFPLE9BQU8sR0FBRztBQUMxQixZQUFBRixTQUFRLEVBQUUsY0FBYyxTQUFBRSxTQUFRLENBQUM7QUFBQSxVQUNuQyxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFHQSxRQUFJLE9BQU9ILElBQUcsU0FBUyxXQUFXLFlBQVk7QUFDNUMsTUFBQUQsU0FBUSxTQUFTLFNBQVMsRUFBRUMsSUFBRyxTQUFTLE1BQU07QUFBQSxJQUNoRDtBQUFBO0FBQUE7OztBQ2pJQTtBQUFBLGlEQUFBSSxVQUFBQyxTQUFBO0FBQUEsSUFBQUEsUUFBTyxVQUFVLE9BQUs7QUFDcEIsWUFBTSxJQUFJLFFBQVEsU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksT0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ25FLFVBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLE9BQUssU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN6QyxhQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFBQSxJQUN0RjtBQUFBO0FBQUE7OztBQ0pBO0FBQUEsMERBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQU1BLFFBQU1DLE1BQUs7QUFDWCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTSxjQUFjO0FBRXBCLFFBQU0sMkJBQTJCLFlBQVksU0FBUztBQUl0RCxRQUFNLFlBQVksU0FBTztBQUN2QixVQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLGNBQU0sOEJBQThCLFlBQVksS0FBSyxJQUFJLFFBQVFBLE1BQUssTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFMUYsWUFBSSw2QkFBNkI7QUFDL0IsZ0JBQU1DLFNBQVEsSUFBSSxNQUFNLHFDQUFxQyxLQUFLO0FBQ2xFLFVBQUFBLE9BQU0sT0FBTztBQUNiLGdCQUFNQTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQU0saUJBQWlCLGFBQVc7QUFDaEMsWUFBTSxXQUFXLEVBQUUsTUFBTSxJQUFNO0FBQy9CLFVBQUksT0FBTyxZQUFZO0FBQVUsa0JBQVUsRUFBRSxNQUFNLFFBQVE7QUFDM0QsYUFBTyxFQUFFLEdBQUcsVUFBVSxHQUFHLFFBQVE7QUFBQSxJQUNuQztBQUVBLFFBQU0sa0JBQWtCLFNBQU87QUFHN0IsWUFBTUEsU0FBUSxJQUFJLE1BQU0sbUNBQW1DLE1BQU07QUFDakUsTUFBQUEsT0FBTSxPQUFPO0FBQ2IsTUFBQUEsT0FBTSxRQUFRO0FBQ2QsTUFBQUEsT0FBTSxPQUFPO0FBQ2IsTUFBQUEsT0FBTSxVQUFVO0FBQ2hCLGFBQU9BO0FBQUEsSUFDVDtBQUVBLElBQUFILFFBQU8sUUFBUSxVQUFVLE9BQU8sT0FBTyxZQUFZO0FBQ2pELGdCQUFVLEtBQUs7QUFDZixnQkFBVSxlQUFlLE9BQU87QUFFaEMsVUFBSSwwQkFBMEI7QUFDNUIsY0FBTSxNQUFNRSxNQUFLLFFBQVEsS0FBSztBQUU5QixlQUFPRCxJQUFHLE1BQU0sS0FBSztBQUFBLFVBQ25CLE1BQU0sUUFBUTtBQUFBLFVBQ2QsV0FBVztBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0g7QUFFQSxZQUFNLE9BQU8sT0FBTSxRQUFPO0FBQ3hCLFlBQUk7QUFDRixnQkFBTUEsSUFBRyxNQUFNLEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDbEMsU0FBU0UsUUFBUDtBQUNBLGNBQUlBLE9BQU0sU0FBUyxTQUFTO0FBQzFCLGtCQUFNQTtBQUFBLFVBQ1I7QUFFQSxjQUFJQSxPQUFNLFNBQVMsVUFBVTtBQUMzQixnQkFBSUQsTUFBSyxRQUFRLEdBQUcsTUFBTSxLQUFLO0FBQzdCLG9CQUFNLGdCQUFnQixHQUFHO0FBQUEsWUFDM0I7QUFFQSxnQkFBSUMsT0FBTSxRQUFRLFNBQVMsWUFBWSxHQUFHO0FBQ3hDLG9CQUFNQTtBQUFBLFlBQ1I7QUFFQSxrQkFBTSxLQUFLRCxNQUFLLFFBQVEsR0FBRyxDQUFDO0FBQzVCLG1CQUFPLEtBQUssR0FBRztBQUFBLFVBQ2pCO0FBRUEsY0FBSTtBQUNGLGtCQUFNLFFBQVEsTUFBTUQsSUFBRyxLQUFLLEdBQUc7QUFDL0IsZ0JBQUksQ0FBQyxNQUFNLFlBQVksR0FBRztBQUd4QixvQkFBTSxJQUFJLE1BQU0sNkJBQTZCO0FBQUEsWUFDL0M7QUFBQSxVQUNGLFFBQUU7QUFDQSxrQkFBTUU7QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLEtBQUtELE1BQUssUUFBUSxLQUFLLENBQUM7QUFBQSxJQUNqQztBQUVBLElBQUFGLFFBQU8sUUFBUSxjQUFjLENBQUMsT0FBTyxZQUFZO0FBQy9DLGdCQUFVLEtBQUs7QUFDZixnQkFBVSxlQUFlLE9BQU87QUFFaEMsVUFBSSwwQkFBMEI7QUFDNUIsY0FBTSxNQUFNRSxNQUFLLFFBQVEsS0FBSztBQUU5QixlQUFPRCxJQUFHLFVBQVUsS0FBSztBQUFBLFVBQ3ZCLE1BQU0sUUFBUTtBQUFBLFVBQ2QsV0FBVztBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0g7QUFFQSxZQUFNLE9BQU8sU0FBTztBQUNsQixZQUFJO0FBQ0YsVUFBQUEsSUFBRyxVQUFVLEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDaEMsU0FBU0UsUUFBUDtBQUNBLGNBQUlBLE9BQU0sU0FBUyxTQUFTO0FBQzFCLGtCQUFNQTtBQUFBLFVBQ1I7QUFFQSxjQUFJQSxPQUFNLFNBQVMsVUFBVTtBQUMzQixnQkFBSUQsTUFBSyxRQUFRLEdBQUcsTUFBTSxLQUFLO0FBQzdCLG9CQUFNLGdCQUFnQixHQUFHO0FBQUEsWUFDM0I7QUFFQSxnQkFBSUMsT0FBTSxRQUFRLFNBQVMsWUFBWSxHQUFHO0FBQ3hDLG9CQUFNQTtBQUFBLFlBQ1I7QUFFQSxpQkFBS0QsTUFBSyxRQUFRLEdBQUcsQ0FBQztBQUN0QixtQkFBTyxLQUFLLEdBQUc7QUFBQSxVQUNqQjtBQUVBLGNBQUk7QUFDRixnQkFBSSxDQUFDRCxJQUFHLFNBQVMsR0FBRyxFQUFFLFlBQVksR0FBRztBQUduQyxvQkFBTSxJQUFJLE1BQU0sNkJBQTZCO0FBQUEsWUFDL0M7QUFBQSxVQUNGLFFBQUU7QUFDQSxrQkFBTUU7QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLEtBQUtELE1BQUssUUFBUSxLQUFLLENBQUM7QUFBQSxJQUNqQztBQUFBO0FBQUE7OztBQzVJQTtBQUFBLHVEQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLFFBQU0sRUFBRSxTQUFTLFVBQVUsWUFBWSxJQUFJO0FBQzNDLFFBQU0sVUFBVSxFQUFFLFFBQVE7QUFFMUIsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZixRQUFRO0FBQUEsTUFDUixZQUFZO0FBQUEsTUFFWixRQUFRO0FBQUEsTUFDUixZQUFZO0FBQUEsTUFDWixXQUFXO0FBQUEsTUFDWCxlQUFlO0FBQUEsSUFDakI7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLHNEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxNQUFLO0FBRVgsYUFBUyxhQUFjQyxPQUFNLE9BQU8sT0FBTyxVQUFVO0FBRW5ELE1BQUFELElBQUcsS0FBS0MsT0FBTSxNQUFNLENBQUMsS0FBSyxPQUFPO0FBQy9CLFlBQUk7QUFBSyxpQkFBTyxTQUFTLEdBQUc7QUFDNUIsUUFBQUQsSUFBRyxRQUFRLElBQUksT0FBTyxPQUFPLGdCQUFjO0FBQ3pDLFVBQUFBLElBQUcsTUFBTSxJQUFJLGNBQVk7QUFDdkIsZ0JBQUk7QUFBVSx1QkFBUyxjQUFjLFFBQVE7QUFBQSxVQUMvQyxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsaUJBQWtCQyxPQUFNLE9BQU8sT0FBTztBQUM3QyxZQUFNLEtBQUtELElBQUcsU0FBU0MsT0FBTSxJQUFJO0FBQ2pDLE1BQUFELElBQUcsWUFBWSxJQUFJLE9BQU8sS0FBSztBQUMvQixhQUFPQSxJQUFHLFVBQVUsRUFBRTtBQUFBLElBQ3hCO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDekJBO0FBQUEsb0RBQUFHLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU1DLE1BQUs7QUFDWCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sY0FBYztBQUVwQixRQUFNLHFCQUFxQixZQUFZLFFBQVE7QUFDL0MsUUFBTUMsUUFBTyxDQUFDLFNBQVMscUJBQXFCSCxJQUFHLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDLElBQUlBLElBQUcsS0FBSyxJQUFJO0FBQzFGLFFBQU0sV0FBVyxDQUFDLFNBQVMscUJBQXFCQSxJQUFHLFNBQVMsTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDLElBQUlBLElBQUcsU0FBUyxJQUFJO0FBRXRHLGFBQVMsU0FBVSxLQUFLLE1BQU07QUFDNUIsYUFBTyxRQUFRLElBQUk7QUFBQSxRQUNqQkcsTUFBSyxHQUFHO0FBQUEsUUFDUkEsTUFBSyxJQUFJLEVBQUUsTUFBTSxTQUFPO0FBQ3RCLGNBQUksSUFBSSxTQUFTO0FBQVUsbUJBQU87QUFDbEMsZ0JBQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUNILENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxTQUFTLFFBQVEsT0FBTyxFQUFFLFNBQVMsU0FBUyxFQUFFO0FBQUEsSUFDMUQ7QUFFQSxhQUFTLGFBQWMsS0FBSyxNQUFNO0FBQ2hDLFVBQUk7QUFDSixZQUFNLFVBQVUsU0FBUyxHQUFHO0FBQzVCLFVBQUk7QUFDRixtQkFBVyxTQUFTLElBQUk7QUFBQSxNQUMxQixTQUFTLEtBQVA7QUFDQSxZQUFJLElBQUksU0FBUztBQUFVLGlCQUFPLEVBQUUsU0FBUyxVQUFVLEtBQUs7QUFDNUQsY0FBTTtBQUFBLE1BQ1I7QUFDQSxhQUFPLEVBQUUsU0FBUyxTQUFTO0FBQUEsSUFDN0I7QUFFQSxhQUFTLFdBQVksS0FBSyxNQUFNLFVBQVUsSUFBSTtBQUM1QyxNQUFBRCxNQUFLLFlBQVksUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLEtBQUssVUFBVTtBQUNwRCxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGNBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSTtBQUM5QixZQUFJLFlBQVksYUFBYSxTQUFTLFFBQVEsR0FBRztBQUMvQyxpQkFBTyxHQUFHLElBQUksTUFBTSw4Q0FBOEMsQ0FBQztBQUFBLFFBQ3JFO0FBQ0EsWUFBSSxRQUFRLFlBQVksS0FBSyxZQUFZLEtBQUssSUFBSSxHQUFHO0FBQ25ELGlCQUFPLEdBQUcsSUFBSSxNQUFNLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQUEsUUFDbEQ7QUFDQSxlQUFPLEdBQUcsTUFBTSxFQUFFLFNBQVMsU0FBUyxDQUFDO0FBQUEsTUFDdkMsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLGVBQWdCLEtBQUssTUFBTSxVQUFVO0FBQzVDLFlBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSSxhQUFhLEtBQUssSUFBSTtBQUNwRCxVQUFJLFlBQVksYUFBYSxTQUFTLFFBQVEsR0FBRztBQUMvQyxjQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFBQSxNQUNoRTtBQUNBLFVBQUksUUFBUSxZQUFZLEtBQUssWUFBWSxLQUFLLElBQUksR0FBRztBQUNuRCxjQUFNLElBQUksTUFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUM7QUFBQSxNQUM3QztBQUNBLGFBQU8sRUFBRSxTQUFTLFNBQVM7QUFBQSxJQUM3QjtBQU1BLGFBQVMsaUJBQWtCLEtBQUssU0FBUyxNQUFNLFVBQVUsSUFBSTtBQUMzRCxZQUFNLFlBQVlELE1BQUssUUFBUUEsTUFBSyxRQUFRLEdBQUcsQ0FBQztBQUNoRCxZQUFNLGFBQWFBLE1BQUssUUFBUUEsTUFBSyxRQUFRLElBQUksQ0FBQztBQUNsRCxVQUFJLGVBQWUsYUFBYSxlQUFlQSxNQUFLLE1BQU0sVUFBVSxFQUFFO0FBQU0sZUFBTyxHQUFHO0FBQ3RGLFlBQU0sV0FBVyxDQUFDLEtBQUssYUFBYTtBQUNsQyxZQUFJLEtBQUs7QUFDUCxjQUFJLElBQUksU0FBUztBQUFVLG1CQUFPLEdBQUc7QUFDckMsaUJBQU8sR0FBRyxHQUFHO0FBQUEsUUFDZjtBQUNBLFlBQUksYUFBYSxTQUFTLFFBQVEsR0FBRztBQUNuQyxpQkFBTyxHQUFHLElBQUksTUFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsQ0FBQztBQUFBLFFBQ2xEO0FBQ0EsZUFBTyxpQkFBaUIsS0FBSyxTQUFTLFlBQVksVUFBVSxFQUFFO0FBQUEsTUFDaEU7QUFDQSxVQUFJO0FBQW9CLFFBQUFELElBQUcsS0FBSyxZQUFZLEVBQUUsUUFBUSxLQUFLLEdBQUcsUUFBUTtBQUFBO0FBQ2pFLFFBQUFBLElBQUcsS0FBSyxZQUFZLFFBQVE7QUFBQSxJQUNuQztBQUVBLGFBQVMscUJBQXNCLEtBQUssU0FBUyxNQUFNLFVBQVU7QUFDM0QsWUFBTSxZQUFZQyxNQUFLLFFBQVFBLE1BQUssUUFBUSxHQUFHLENBQUM7QUFDaEQsWUFBTSxhQUFhQSxNQUFLLFFBQVFBLE1BQUssUUFBUSxJQUFJLENBQUM7QUFDbEQsVUFBSSxlQUFlLGFBQWEsZUFBZUEsTUFBSyxNQUFNLFVBQVUsRUFBRTtBQUFNO0FBQzVFLFVBQUk7QUFDSixVQUFJO0FBQ0YsbUJBQVcsU0FBUyxVQUFVO0FBQUEsTUFDaEMsU0FBUyxLQUFQO0FBQ0EsWUFBSSxJQUFJLFNBQVM7QUFBVTtBQUMzQixjQUFNO0FBQUEsTUFDUjtBQUNBLFVBQUksYUFBYSxTQUFTLFFBQVEsR0FBRztBQUNuQyxjQUFNLElBQUksTUFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUM7QUFBQSxNQUM3QztBQUNBLGFBQU8scUJBQXFCLEtBQUssU0FBUyxZQUFZLFFBQVE7QUFBQSxJQUNoRTtBQUVBLGFBQVMsYUFBYyxTQUFTLFVBQVU7QUFDeEMsVUFBSSxTQUFTLE9BQU8sU0FBUyxPQUFPLFNBQVMsUUFBUSxRQUFRLE9BQU8sU0FBUyxRQUFRLFFBQVEsS0FBSztBQUNoRyxZQUFJLHNCQUFzQixTQUFTLE1BQU0sT0FBTyxrQkFBa0I7QUFFaEUsaUJBQU87QUFBQSxRQUNUO0FBSUEsWUFBSSxTQUFTLFNBQVMsUUFBUSxRQUMxQixTQUFTLFNBQVMsUUFBUSxRQUMxQixTQUFTLFVBQVUsUUFBUSxTQUMzQixTQUFTLFlBQVksUUFBUSxXQUM3QixTQUFTLFlBQVksUUFBUSxXQUM3QixTQUFTLFlBQVksUUFBUSxXQUM3QixTQUFTLGdCQUFnQixRQUFRLGFBQWE7QUFFaEQsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBSUEsYUFBUyxZQUFhLEtBQUssTUFBTTtBQUMvQixZQUFNLFNBQVNBLE1BQUssUUFBUSxHQUFHLEVBQUUsTUFBTUEsTUFBSyxHQUFHLEVBQUUsT0FBTyxPQUFLLENBQUM7QUFDOUQsWUFBTSxVQUFVQSxNQUFLLFFBQVEsSUFBSSxFQUFFLE1BQU1BLE1BQUssR0FBRyxFQUFFLE9BQU8sT0FBSyxDQUFDO0FBQ2hFLGFBQU8sT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLE1BQU0sT0FBTyxRQUFRLE9BQU8sS0FBSyxJQUFJO0FBQUEsSUFDdkU7QUFFQSxhQUFTLE9BQVEsS0FBSyxNQUFNLFVBQVU7QUFDcEMsYUFBTyxVQUFVLGFBQWEsc0NBQXNDO0FBQUEsSUFDdEU7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUMxSUE7QUFBQSw4REFBQUssVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTUMsTUFBSztBQUNYLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLGFBQWEsaUJBQXFCO0FBQ3hDLFFBQU0sbUJBQW1CLGlCQUEwQjtBQUNuRCxRQUFNQyxRQUFPO0FBRWIsYUFBUyxTQUFVLEtBQUssTUFBTSxNQUFNO0FBQ2xDLFVBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsZUFBTyxFQUFFLFFBQVEsS0FBSztBQUFBLE1BQ3hCO0FBRUEsYUFBTyxRQUFRLENBQUM7QUFDaEIsV0FBSyxVQUFVLGFBQWEsT0FBTyxDQUFDLENBQUMsS0FBSyxVQUFVO0FBQ3BELFdBQUssWUFBWSxlQUFlLE9BQU8sQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLO0FBRy9ELFVBQUksS0FBSyxzQkFBc0IsUUFBUSxTQUFTLFFBQVE7QUFDdEQsZ0JBQVEsS0FBSztBQUFBO0FBQUEsaUVBQ2dEO0FBQUEsTUFDL0Q7QUFFQSxZQUFNLEVBQUUsU0FBUyxTQUFTLElBQUlBLE1BQUssZUFBZSxLQUFLLE1BQU0sTUFBTTtBQUNuRSxNQUFBQSxNQUFLLHFCQUFxQixLQUFLLFNBQVMsTUFBTSxNQUFNO0FBQ3BELGFBQU8sb0JBQW9CLFVBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUN0RDtBQUVBLGFBQVMsb0JBQXFCLFVBQVUsS0FBSyxNQUFNLE1BQU07QUFDdkQsVUFBSSxLQUFLLFVBQVUsQ0FBQyxLQUFLLE9BQU8sS0FBSyxJQUFJO0FBQUc7QUFDNUMsWUFBTSxhQUFhRCxNQUFLLFFBQVEsSUFBSTtBQUNwQyxVQUFJLENBQUNELElBQUcsV0FBVyxVQUFVO0FBQUcsbUJBQVcsVUFBVTtBQUNyRCxhQUFPLFVBQVUsVUFBVSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzVDO0FBRUEsYUFBUyxVQUFXLFVBQVUsS0FBSyxNQUFNLE1BQU07QUFDN0MsVUFBSSxLQUFLLFVBQVUsQ0FBQyxLQUFLLE9BQU8sS0FBSyxJQUFJO0FBQUc7QUFDNUMsYUFBTyxTQUFTLFVBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUMzQztBQUVBLGFBQVMsU0FBVSxVQUFVLEtBQUssTUFBTSxNQUFNO0FBQzVDLFlBQU0sV0FBVyxLQUFLLGNBQWNBLElBQUcsV0FBV0EsSUFBRztBQUNyRCxZQUFNLFVBQVUsU0FBUyxHQUFHO0FBRTVCLFVBQUksUUFBUSxZQUFZO0FBQUcsZUFBTyxNQUFNLFNBQVMsVUFBVSxLQUFLLE1BQU0sSUFBSTtBQUFBLGVBQ2pFLFFBQVEsT0FBTyxLQUNmLFFBQVEsa0JBQWtCLEtBQzFCLFFBQVEsY0FBYztBQUFHLGVBQU8sT0FBTyxTQUFTLFVBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxlQUN6RSxRQUFRLGVBQWU7QUFBRyxlQUFPLE9BQU8sVUFBVSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzVFO0FBRUEsYUFBUyxPQUFRLFNBQVMsVUFBVSxLQUFLLE1BQU0sTUFBTTtBQUNuRCxVQUFJLENBQUM7QUFBVSxlQUFPLFNBQVMsU0FBUyxLQUFLLE1BQU0sSUFBSTtBQUN2RCxhQUFPLFlBQVksU0FBUyxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzdDO0FBRUEsYUFBUyxZQUFhLFNBQVMsS0FBSyxNQUFNLE1BQU07QUFDOUMsVUFBSSxLQUFLLFdBQVc7QUFDbEIsUUFBQUEsSUFBRyxXQUFXLElBQUk7QUFDbEIsZUFBTyxTQUFTLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFBQSxNQUMxQyxXQUFXLEtBQUssY0FBYztBQUM1QixjQUFNLElBQUksTUFBTSxJQUFJLHNCQUFzQjtBQUFBLE1BQzVDO0FBQUEsSUFDRjtBQUVBLGFBQVMsU0FBVSxTQUFTLEtBQUssTUFBTSxNQUFNO0FBQzNDLE1BQUFBLElBQUcsYUFBYSxLQUFLLElBQUk7QUFDekIsVUFBSSxLQUFLO0FBQW9CLHlCQUFpQixRQUFRLE1BQU0sS0FBSyxJQUFJO0FBQ3JFLGFBQU8sWUFBWSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ3ZDO0FBRUEsYUFBUyxpQkFBa0IsU0FBUyxLQUFLLE1BQU07QUFJN0MsVUFBSSxrQkFBa0IsT0FBTztBQUFHLHlCQUFpQixNQUFNLE9BQU87QUFDOUQsYUFBTyxrQkFBa0IsS0FBSyxJQUFJO0FBQUEsSUFDcEM7QUFFQSxhQUFTLGtCQUFtQixTQUFTO0FBQ25DLGNBQVEsVUFBVSxTQUFXO0FBQUEsSUFDL0I7QUFFQSxhQUFTLGlCQUFrQixNQUFNLFNBQVM7QUFDeEMsYUFBTyxZQUFZLE1BQU0sVUFBVSxHQUFLO0FBQUEsSUFDMUM7QUFFQSxhQUFTLFlBQWEsTUFBTSxTQUFTO0FBQ25DLGFBQU9BLElBQUcsVUFBVSxNQUFNLE9BQU87QUFBQSxJQUNuQztBQUVBLGFBQVMsa0JBQW1CLEtBQUssTUFBTTtBQUlyQyxZQUFNLGlCQUFpQkEsSUFBRyxTQUFTLEdBQUc7QUFDdEMsYUFBTyxpQkFBaUIsTUFBTSxlQUFlLE9BQU8sZUFBZSxLQUFLO0FBQUEsSUFDMUU7QUFFQSxhQUFTLE1BQU8sU0FBUyxVQUFVLEtBQUssTUFBTSxNQUFNO0FBQ2xELFVBQUksQ0FBQztBQUFVLGVBQU8sYUFBYSxRQUFRLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFDaEUsVUFBSSxZQUFZLENBQUMsU0FBUyxZQUFZLEdBQUc7QUFDdkMsY0FBTSxJQUFJLE1BQU0sbUNBQW1DLHlCQUF5QixPQUFPO0FBQUEsTUFDckY7QUFDQSxhQUFPLFFBQVEsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUNoQztBQUVBLGFBQVMsYUFBYyxTQUFTLEtBQUssTUFBTSxNQUFNO0FBQy9DLE1BQUFBLElBQUcsVUFBVSxJQUFJO0FBQ2pCLGNBQVEsS0FBSyxNQUFNLElBQUk7QUFDdkIsYUFBTyxZQUFZLE1BQU0sT0FBTztBQUFBLElBQ2xDO0FBRUEsYUFBUyxRQUFTLEtBQUssTUFBTSxNQUFNO0FBQ2pDLE1BQUFBLElBQUcsWUFBWSxHQUFHLEVBQUUsUUFBUSxVQUFRLFlBQVksTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDeEU7QUFFQSxhQUFTLFlBQWEsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUMzQyxZQUFNLFVBQVVDLE1BQUssS0FBSyxLQUFLLElBQUk7QUFDbkMsWUFBTSxXQUFXQSxNQUFLLEtBQUssTUFBTSxJQUFJO0FBQ3JDLFlBQU0sRUFBRSxTQUFTLElBQUlDLE1BQUssZUFBZSxTQUFTLFVBQVUsTUFBTTtBQUNsRSxhQUFPLFVBQVUsVUFBVSxTQUFTLFVBQVUsSUFBSTtBQUFBLElBQ3BEO0FBRUEsYUFBUyxPQUFRLFVBQVUsS0FBSyxNQUFNLE1BQU07QUFDMUMsVUFBSSxjQUFjRixJQUFHLGFBQWEsR0FBRztBQUNyQyxVQUFJLEtBQUssYUFBYTtBQUNwQixzQkFBY0MsTUFBSyxRQUFRLFFBQVEsSUFBSSxHQUFHLFdBQVc7QUFBQSxNQUN2RDtBQUVBLFVBQUksQ0FBQyxVQUFVO0FBQ2IsZUFBT0QsSUFBRyxZQUFZLGFBQWEsSUFBSTtBQUFBLE1BQ3pDLE9BQU87QUFDTCxZQUFJO0FBQ0osWUFBSTtBQUNGLHlCQUFlQSxJQUFHLGFBQWEsSUFBSTtBQUFBLFFBQ3JDLFNBQVMsS0FBUDtBQUlBLGNBQUksSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQVcsbUJBQU9BLElBQUcsWUFBWSxhQUFhLElBQUk7QUFDNUYsZ0JBQU07QUFBQSxRQUNSO0FBQ0EsWUFBSSxLQUFLLGFBQWE7QUFDcEIseUJBQWVDLE1BQUssUUFBUSxRQUFRLElBQUksR0FBRyxZQUFZO0FBQUEsUUFDekQ7QUFDQSxZQUFJQyxNQUFLLFlBQVksYUFBYSxZQUFZLEdBQUc7QUFDL0MsZ0JBQU0sSUFBSSxNQUFNLGdCQUFnQiw4Q0FBOEMsZ0JBQWdCO0FBQUEsUUFDaEc7QUFLQSxZQUFJRixJQUFHLFNBQVMsSUFBSSxFQUFFLFlBQVksS0FBS0UsTUFBSyxZQUFZLGNBQWMsV0FBVyxHQUFHO0FBQ2xGLGdCQUFNLElBQUksTUFBTSxxQkFBcUIsdUJBQXVCLGVBQWU7QUFBQSxRQUM3RTtBQUNBLGVBQU8sU0FBUyxhQUFhLElBQUk7QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFFQSxhQUFTLFNBQVUsYUFBYSxNQUFNO0FBQ3BDLE1BQUFGLElBQUcsV0FBVyxJQUFJO0FBQ2xCLGFBQU9BLElBQUcsWUFBWSxhQUFhLElBQUk7QUFBQSxJQUN6QztBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3JLakIsSUFBQUkscUJBQUE7QUFBQSwwREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZixVQUFVO0FBQUEsSUFDWjtBQUFBO0FBQUE7OztBQ0pBO0FBQUEsNERBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsUUFBTUMsTUFBSztBQUVYLGFBQVMsV0FBWUMsT0FBTTtBQUN6QixhQUFPRCxJQUFHLE9BQU9DLEtBQUksRUFBRSxLQUFLLE1BQU0sSUFBSSxFQUFFLE1BQU0sTUFBTSxLQUFLO0FBQUEsSUFDM0Q7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmLFlBQVksRUFBRSxVQUFVO0FBQUEsTUFDeEIsZ0JBQWdCQyxJQUFHO0FBQUEsSUFDckI7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLG9EQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sU0FBUyxpQkFBcUI7QUFDcEMsUUFBTSxhQUFhLHNCQUEwQjtBQUM3QyxRQUFNLGVBQWUsaUJBQTBCO0FBQy9DLFFBQU1DLFFBQU87QUFFYixhQUFTLEtBQU0sS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUNsQyxVQUFJLE9BQU8sU0FBUyxjQUFjLENBQUMsSUFBSTtBQUNyQyxhQUFLO0FBQ0wsZUFBTyxDQUFDO0FBQUEsTUFDVixXQUFXLE9BQU8sU0FBUyxZQUFZO0FBQ3JDLGVBQU8sRUFBRSxRQUFRLEtBQUs7QUFBQSxNQUN4QjtBQUVBLFdBQUssTUFBTSxXQUFZO0FBQUEsTUFBQztBQUN4QixhQUFPLFFBQVEsQ0FBQztBQUVoQixXQUFLLFVBQVUsYUFBYSxPQUFPLENBQUMsQ0FBQyxLQUFLLFVBQVU7QUFDcEQsV0FBSyxZQUFZLGVBQWUsT0FBTyxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUs7QUFHL0QsVUFBSSxLQUFLLHNCQUFzQixRQUFRLFNBQVMsUUFBUTtBQUN0RCxnQkFBUSxLQUFLO0FBQUE7QUFBQSxpRUFDZ0Q7QUFBQSxNQUMvRDtBQUVBLE1BQUFBLE1BQUssV0FBVyxLQUFLLE1BQU0sUUFBUSxDQUFDLEtBQUssVUFBVTtBQUNqRCxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGNBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSTtBQUM5QixRQUFBQSxNQUFLLGlCQUFpQixLQUFLLFNBQVMsTUFBTSxRQUFRLENBQUFDLFNBQU87QUFDdkQsY0FBSUE7QUFBSyxtQkFBTyxHQUFHQSxJQUFHO0FBQ3RCLGNBQUksS0FBSztBQUFRLG1CQUFPLGFBQWEsZ0JBQWdCLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUNsRixpQkFBTyxlQUFlLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLFFBQ3JELENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxlQUFnQixVQUFVLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDdEQsWUFBTSxhQUFhRixNQUFLLFFBQVEsSUFBSTtBQUNwQyxpQkFBVyxZQUFZLENBQUMsS0FBSyxjQUFjO0FBQ3pDLFlBQUk7QUFBSyxpQkFBTyxHQUFHLEdBQUc7QUFDdEIsWUFBSTtBQUFXLGlCQUFPLFVBQVUsVUFBVSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQzdELGVBQU8sWUFBWSxDQUFBRSxTQUFPO0FBQ3hCLGNBQUlBO0FBQUssbUJBQU8sR0FBR0EsSUFBRztBQUN0QixpQkFBTyxVQUFVLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLFFBQ2hELENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxhQUFjLFdBQVcsVUFBVSxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQy9ELGNBQVEsUUFBUSxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFLLGFBQVc7QUFDdEQsWUFBSTtBQUFTLGlCQUFPLFVBQVUsVUFBVSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQzNELGVBQU8sR0FBRztBQUFBLE1BQ1osR0FBRyxDQUFBQyxXQUFTLEdBQUdBLE1BQUssQ0FBQztBQUFBLElBQ3ZCO0FBRUEsYUFBUyxVQUFXLFVBQVUsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUNqRCxVQUFJLEtBQUs7QUFBUSxlQUFPLGFBQWEsVUFBVSxVQUFVLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFDNUUsYUFBTyxTQUFTLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLElBQy9DO0FBRUEsYUFBUyxTQUFVLFVBQVUsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUNoRCxZQUFNRixRQUFPLEtBQUssY0FBY0YsSUFBRyxPQUFPQSxJQUFHO0FBQzdDLE1BQUFFLE1BQUssS0FBSyxDQUFDLEtBQUssWUFBWTtBQUMxQixZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBRXRCLFlBQUksUUFBUSxZQUFZO0FBQUcsaUJBQU8sTUFBTSxTQUFTLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLGlCQUNyRSxRQUFRLE9BQU8sS0FDZixRQUFRLGtCQUFrQixLQUMxQixRQUFRLGNBQWM7QUFBRyxpQkFBTyxPQUFPLFNBQVMsVUFBVSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQUEsaUJBQzdFLFFBQVEsZUFBZTtBQUFHLGlCQUFPLE9BQU8sVUFBVSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQUEsTUFDaEYsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLE9BQVEsU0FBUyxVQUFVLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDdkQsVUFBSSxDQUFDO0FBQVUsZUFBTyxTQUFTLFNBQVMsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUMzRCxhQUFPLFlBQVksU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQUEsSUFDakQ7QUFFQSxhQUFTLFlBQWEsU0FBUyxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQ2xELFVBQUksS0FBSyxXQUFXO0FBQ2xCLFFBQUFGLElBQUcsT0FBTyxNQUFNLFNBQU87QUFDckIsY0FBSTtBQUFLLG1CQUFPLEdBQUcsR0FBRztBQUN0QixpQkFBTyxTQUFTLFNBQVMsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLFFBQzlDLENBQUM7QUFBQSxNQUNILFdBQVcsS0FBSyxjQUFjO0FBQzVCLGVBQU8sR0FBRyxJQUFJLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQztBQUFBLE1BQ2pEO0FBQU8sZUFBTyxHQUFHO0FBQUEsSUFDbkI7QUFFQSxhQUFTLFNBQVUsU0FBUyxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQy9DLE1BQUFBLElBQUcsU0FBUyxLQUFLLE1BQU0sU0FBTztBQUM1QixZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLFlBQUksS0FBSztBQUFvQixpQkFBTyx3QkFBd0IsUUFBUSxNQUFNLEtBQUssTUFBTSxFQUFFO0FBQ3ZGLGVBQU8sWUFBWSxNQUFNLFFBQVEsTUFBTSxFQUFFO0FBQUEsTUFDM0MsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLHdCQUF5QixTQUFTLEtBQUssTUFBTSxJQUFJO0FBSXhELFVBQUksa0JBQWtCLE9BQU8sR0FBRztBQUM5QixlQUFPLGlCQUFpQixNQUFNLFNBQVMsU0FBTztBQUM1QyxjQUFJO0FBQUssbUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGlCQUFPLHlCQUF5QixTQUFTLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDeEQsQ0FBQztBQUFBLE1BQ0g7QUFDQSxhQUFPLHlCQUF5QixTQUFTLEtBQUssTUFBTSxFQUFFO0FBQUEsSUFDeEQ7QUFFQSxhQUFTLGtCQUFtQixTQUFTO0FBQ25DLGNBQVEsVUFBVSxTQUFXO0FBQUEsSUFDL0I7QUFFQSxhQUFTLGlCQUFrQixNQUFNLFNBQVMsSUFBSTtBQUM1QyxhQUFPLFlBQVksTUFBTSxVQUFVLEtBQU8sRUFBRTtBQUFBLElBQzlDO0FBRUEsYUFBUyx5QkFBMEIsU0FBUyxLQUFLLE1BQU0sSUFBSTtBQUN6RCx3QkFBa0IsS0FBSyxNQUFNLFNBQU87QUFDbEMsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixlQUFPLFlBQVksTUFBTSxTQUFTLEVBQUU7QUFBQSxNQUN0QyxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsWUFBYSxNQUFNLFNBQVMsSUFBSTtBQUN2QyxhQUFPQSxJQUFHLE1BQU0sTUFBTSxTQUFTLEVBQUU7QUFBQSxJQUNuQztBQUVBLGFBQVMsa0JBQW1CLEtBQUssTUFBTSxJQUFJO0FBSXpDLE1BQUFBLElBQUcsS0FBSyxLQUFLLENBQUMsS0FBSyxtQkFBbUI7QUFDcEMsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixlQUFPLGFBQWEsTUFBTSxlQUFlLE9BQU8sZUFBZSxPQUFPLEVBQUU7QUFBQSxNQUMxRSxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsTUFBTyxTQUFTLFVBQVUsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUN0RCxVQUFJLENBQUM7QUFBVSxlQUFPLGFBQWEsUUFBUSxNQUFNLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFDcEUsVUFBSSxZQUFZLENBQUMsU0FBUyxZQUFZLEdBQUc7QUFDdkMsZUFBTyxHQUFHLElBQUksTUFBTSxtQ0FBbUMseUJBQXlCLE9BQU8sQ0FBQztBQUFBLE1BQzFGO0FBQ0EsYUFBTyxRQUFRLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxJQUNwQztBQUVBLGFBQVMsYUFBYyxTQUFTLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDbkQsTUFBQUEsSUFBRyxNQUFNLE1BQU0sU0FBTztBQUNwQixZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGdCQUFRLEtBQUssTUFBTSxNQUFNLENBQUFHLFNBQU87QUFDOUIsY0FBSUE7QUFBSyxtQkFBTyxHQUFHQSxJQUFHO0FBQ3RCLGlCQUFPLFlBQVksTUFBTSxTQUFTLEVBQUU7QUFBQSxRQUN0QyxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsUUFBUyxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQ3JDLE1BQUFILElBQUcsUUFBUSxLQUFLLENBQUMsS0FBSyxVQUFVO0FBQzlCLFlBQUk7QUFBSyxpQkFBTyxHQUFHLEdBQUc7QUFDdEIsZUFBTyxhQUFhLE9BQU8sS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLE1BQ2hELENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxhQUFjLE9BQU8sS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUNqRCxZQUFNLE9BQU8sTUFBTSxJQUFJO0FBQ3ZCLFVBQUksQ0FBQztBQUFNLGVBQU8sR0FBRztBQUNyQixhQUFPLFlBQVksT0FBTyxNQUFNLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxJQUNyRDtBQUVBLGFBQVMsWUFBYSxPQUFPLE1BQU0sS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUN0RCxZQUFNLFVBQVVDLE1BQUssS0FBSyxLQUFLLElBQUk7QUFDbkMsWUFBTSxXQUFXQSxNQUFLLEtBQUssTUFBTSxJQUFJO0FBQ3JDLE1BQUFDLE1BQUssV0FBVyxTQUFTLFVBQVUsUUFBUSxDQUFDLEtBQUssVUFBVTtBQUN6RCxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGNBQU0sRUFBRSxTQUFTLElBQUk7QUFDckIsa0JBQVUsVUFBVSxTQUFTLFVBQVUsTUFBTSxDQUFBQyxTQUFPO0FBQ2xELGNBQUlBO0FBQUssbUJBQU8sR0FBR0EsSUFBRztBQUN0QixpQkFBTyxhQUFhLE9BQU8sS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLFFBQ2hELENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxPQUFRLFVBQVUsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUM5QyxNQUFBSCxJQUFHLFNBQVMsS0FBSyxDQUFDLEtBQUssZ0JBQWdCO0FBQ3JDLFlBQUk7QUFBSyxpQkFBTyxHQUFHLEdBQUc7QUFDdEIsWUFBSSxLQUFLLGFBQWE7QUFDcEIsd0JBQWNDLE1BQUssUUFBUSxRQUFRLElBQUksR0FBRyxXQUFXO0FBQUEsUUFDdkQ7QUFFQSxZQUFJLENBQUMsVUFBVTtBQUNiLGlCQUFPRCxJQUFHLFFBQVEsYUFBYSxNQUFNLEVBQUU7QUFBQSxRQUN6QyxPQUFPO0FBQ0wsVUFBQUEsSUFBRyxTQUFTLE1BQU0sQ0FBQ0csTUFBSyxpQkFBaUI7QUFDdkMsZ0JBQUlBLE1BQUs7QUFJUCxrQkFBSUEsS0FBSSxTQUFTLFlBQVlBLEtBQUksU0FBUztBQUFXLHVCQUFPSCxJQUFHLFFBQVEsYUFBYSxNQUFNLEVBQUU7QUFDNUYscUJBQU8sR0FBR0csSUFBRztBQUFBLFlBQ2Y7QUFDQSxnQkFBSSxLQUFLLGFBQWE7QUFDcEIsNkJBQWVGLE1BQUssUUFBUSxRQUFRLElBQUksR0FBRyxZQUFZO0FBQUEsWUFDekQ7QUFDQSxnQkFBSUMsTUFBSyxZQUFZLGFBQWEsWUFBWSxHQUFHO0FBQy9DLHFCQUFPLEdBQUcsSUFBSSxNQUFNLGdCQUFnQiw4Q0FBOEMsZ0JBQWdCLENBQUM7QUFBQSxZQUNyRztBQUtBLGdCQUFJLFNBQVMsWUFBWSxLQUFLQSxNQUFLLFlBQVksY0FBYyxXQUFXLEdBQUc7QUFDekUscUJBQU8sR0FBRyxJQUFJLE1BQU0scUJBQXFCLHVCQUF1QixlQUFlLENBQUM7QUFBQSxZQUNsRjtBQUNBLG1CQUFPLFNBQVMsYUFBYSxNQUFNLEVBQUU7QUFBQSxVQUN2QyxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLFNBQVUsYUFBYSxNQUFNLElBQUk7QUFDeEMsTUFBQUYsSUFBRyxPQUFPLE1BQU0sU0FBTztBQUNyQixZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGVBQU9BLElBQUcsUUFBUSxhQUFhLE1BQU0sRUFBRTtBQUFBLE1BQ3pDLENBQUM7QUFBQSxJQUNIO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDdk9qQixJQUFBTSxnQkFBQTtBQUFBLHFEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2YsTUFBTSxFQUFFLGNBQWlCO0FBQUEsSUFDM0I7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLHdEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sU0FBUyxRQUFRO0FBRXZCLFFBQU0sWUFBYSxRQUFRLGFBQWE7QUFFeEMsYUFBUyxTQUFVLFNBQVM7QUFDMUIsWUFBTSxVQUFVO0FBQUEsUUFDZDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUNBLGNBQVEsUUFBUSxPQUFLO0FBQ25CLGdCQUFRLEtBQUssUUFBUSxNQUFNRCxJQUFHO0FBQzlCLFlBQUksSUFBSTtBQUNSLGdCQUFRLEtBQUssUUFBUSxNQUFNQSxJQUFHO0FBQUEsTUFDaEMsQ0FBQztBQUVELGNBQVEsZUFBZSxRQUFRLGdCQUFnQjtBQUFBLElBQ2pEO0FBRUEsYUFBUyxPQUFRLEdBQUcsU0FBUyxJQUFJO0FBQy9CLFVBQUksWUFBWTtBQUVoQixVQUFJLE9BQU8sWUFBWSxZQUFZO0FBQ2pDLGFBQUs7QUFDTCxrQkFBVSxDQUFDO0FBQUEsTUFDYjtBQUVBLGFBQU8sR0FBRyxzQkFBc0I7QUFDaEMsYUFBTyxZQUFZLE9BQU8sR0FBRyxVQUFVLGlDQUFpQztBQUN4RSxhQUFPLFlBQVksT0FBTyxJQUFJLFlBQVksb0NBQW9DO0FBQzlFLGFBQU8sU0FBUywyQ0FBMkM7QUFDM0QsYUFBTyxZQUFZLE9BQU8sU0FBUyxVQUFVLGtDQUFrQztBQUUvRSxlQUFTLE9BQU87QUFFaEIsY0FBUSxHQUFHLFNBQVMsU0FBUyxHQUFJLElBQUk7QUFDbkMsWUFBSSxJQUFJO0FBQ04sZUFBSyxHQUFHLFNBQVMsV0FBVyxHQUFHLFNBQVMsZUFBZSxHQUFHLFNBQVMsWUFDL0QsWUFBWSxRQUFRLGNBQWM7QUFDcEM7QUFDQSxrQkFBTSxPQUFPLFlBQVk7QUFFekIsbUJBQU8sV0FBVyxNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUUsR0FBRyxJQUFJO0FBQUEsVUFDdkQ7QUFHQSxjQUFJLEdBQUcsU0FBUztBQUFVLGlCQUFLO0FBQUEsUUFDakM7QUFFQSxXQUFHLEVBQUU7QUFBQSxNQUNQLENBQUM7QUFBQSxJQUNIO0FBYUEsYUFBUyxRQUFTLEdBQUcsU0FBUyxJQUFJO0FBQ2hDLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUNkLGFBQU8sT0FBTyxPQUFPLFVBQVU7QUFJL0IsY0FBUSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU87QUFDM0IsWUFBSSxNQUFNLEdBQUcsU0FBUyxVQUFVO0FBQzlCLGlCQUFPLEdBQUcsSUFBSTtBQUFBLFFBQ2hCO0FBR0EsWUFBSSxNQUFNLEdBQUcsU0FBUyxXQUFXLFdBQVc7QUFDMUMsaUJBQU8sWUFBWSxHQUFHLFNBQVMsSUFBSSxFQUFFO0FBQUEsUUFDdkM7QUFFQSxZQUFJLE1BQU0sR0FBRyxZQUFZLEdBQUc7QUFDMUIsaUJBQU8sTUFBTSxHQUFHLFNBQVMsSUFBSSxFQUFFO0FBQUEsUUFDakM7QUFFQSxnQkFBUSxPQUFPLEdBQUcsQ0FBQUUsUUFBTTtBQUN0QixjQUFJQSxLQUFJO0FBQ04sZ0JBQUlBLElBQUcsU0FBUyxVQUFVO0FBQ3hCLHFCQUFPLEdBQUcsSUFBSTtBQUFBLFlBQ2hCO0FBQ0EsZ0JBQUlBLElBQUcsU0FBUyxTQUFTO0FBQ3ZCLHFCQUFRLFlBQ0osWUFBWSxHQUFHLFNBQVNBLEtBQUksRUFBRSxJQUM5QixNQUFNLEdBQUcsU0FBU0EsS0FBSSxFQUFFO0FBQUEsWUFDOUI7QUFDQSxnQkFBSUEsSUFBRyxTQUFTLFVBQVU7QUFDeEIscUJBQU8sTUFBTSxHQUFHLFNBQVNBLEtBQUksRUFBRTtBQUFBLFlBQ2pDO0FBQUEsVUFDRjtBQUNBLGlCQUFPLEdBQUdBLEdBQUU7QUFBQSxRQUNkLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxZQUFhLEdBQUcsU0FBUyxJQUFJLElBQUk7QUFDeEMsYUFBTyxDQUFDO0FBQ1IsYUFBTyxPQUFPO0FBQ2QsYUFBTyxPQUFPLE9BQU8sVUFBVTtBQUUvQixjQUFRLE1BQU0sR0FBRyxLQUFPLFNBQU87QUFDN0IsWUFBSSxLQUFLO0FBQ1AsYUFBRyxJQUFJLFNBQVMsV0FBVyxPQUFPLEVBQUU7QUFBQSxRQUN0QyxPQUFPO0FBQ0wsa0JBQVEsS0FBSyxHQUFHLENBQUMsS0FBSyxVQUFVO0FBQzlCLGdCQUFJLEtBQUs7QUFDUCxpQkFBRyxJQUFJLFNBQVMsV0FBVyxPQUFPLEVBQUU7QUFBQSxZQUN0QyxXQUFXLE1BQU0sWUFBWSxHQUFHO0FBQzlCLG9CQUFNLEdBQUcsU0FBUyxJQUFJLEVBQUU7QUFBQSxZQUMxQixPQUFPO0FBQ0wsc0JBQVEsT0FBTyxHQUFHLEVBQUU7QUFBQSxZQUN0QjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxnQkFBaUIsR0FBRyxTQUFTLElBQUk7QUFDeEMsVUFBSTtBQUVKLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUVkLFVBQUk7QUFDRixnQkFBUSxVQUFVLEdBQUcsR0FBSztBQUFBLE1BQzVCLFNBQVMsS0FBUDtBQUNBLFlBQUksSUFBSSxTQUFTLFVBQVU7QUFDekI7QUFBQSxRQUNGLE9BQU87QUFDTCxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBRUEsVUFBSTtBQUNGLGdCQUFRLFFBQVEsU0FBUyxDQUFDO0FBQUEsTUFDNUIsU0FBUyxLQUFQO0FBQ0EsWUFBSSxJQUFJLFNBQVMsVUFBVTtBQUN6QjtBQUFBLFFBQ0YsT0FBTztBQUNMLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLE1BQU0sWUFBWSxHQUFHO0FBQ3ZCLGtCQUFVLEdBQUcsU0FBUyxFQUFFO0FBQUEsTUFDMUIsT0FBTztBQUNMLGdCQUFRLFdBQVcsQ0FBQztBQUFBLE1BQ3RCO0FBQUEsSUFDRjtBQUVBLGFBQVMsTUFBTyxHQUFHLFNBQVMsWUFBWSxJQUFJO0FBQzFDLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUNkLGFBQU8sT0FBTyxPQUFPLFVBQVU7QUFLL0IsY0FBUSxNQUFNLEdBQUcsUUFBTTtBQUNyQixZQUFJLE9BQU8sR0FBRyxTQUFTLGVBQWUsR0FBRyxTQUFTLFlBQVksR0FBRyxTQUFTLFVBQVU7QUFDbEYsaUJBQU8sR0FBRyxTQUFTLEVBQUU7QUFBQSxRQUN2QixXQUFXLE1BQU0sR0FBRyxTQUFTLFdBQVc7QUFDdEMsYUFBRyxVQUFVO0FBQUEsUUFDZixPQUFPO0FBQ0wsYUFBRyxFQUFFO0FBQUEsUUFDUDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLE9BQVEsR0FBRyxTQUFTLElBQUk7QUFDL0IsYUFBTyxDQUFDO0FBQ1IsYUFBTyxPQUFPO0FBQ2QsYUFBTyxPQUFPLE9BQU8sVUFBVTtBQUUvQixjQUFRLFFBQVEsR0FBRyxDQUFDLElBQUksVUFBVTtBQUNoQyxZQUFJO0FBQUksaUJBQU8sR0FBRyxFQUFFO0FBRXBCLFlBQUksSUFBSSxNQUFNO0FBQ2QsWUFBSTtBQUVKLFlBQUksTUFBTTtBQUFHLGlCQUFPLFFBQVEsTUFBTSxHQUFHLEVBQUU7QUFFdkMsY0FBTSxRQUFRLE9BQUs7QUFDakIsaUJBQU9ELE1BQUssS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUFDLFFBQU07QUFDckMsZ0JBQUksVUFBVTtBQUNaO0FBQUEsWUFDRjtBQUNBLGdCQUFJQTtBQUFJLHFCQUFPLEdBQUcsV0FBV0EsR0FBRTtBQUMvQixnQkFBSSxFQUFFLE1BQU0sR0FBRztBQUNiLHNCQUFRLE1BQU0sR0FBRyxFQUFFO0FBQUEsWUFDckI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBS0EsYUFBUyxXQUFZLEdBQUcsU0FBUztBQUMvQixVQUFJO0FBRUosZ0JBQVUsV0FBVyxDQUFDO0FBQ3RCLGVBQVMsT0FBTztBQUVoQixhQUFPLEdBQUcsc0JBQXNCO0FBQ2hDLGFBQU8sWUFBWSxPQUFPLEdBQUcsVUFBVSxpQ0FBaUM7QUFDeEUsYUFBTyxTQUFTLHlCQUF5QjtBQUN6QyxhQUFPLFlBQVksT0FBTyxTQUFTLFVBQVUsa0NBQWtDO0FBRS9FLFVBQUk7QUFDRixhQUFLLFFBQVEsVUFBVSxDQUFDO0FBQUEsTUFDMUIsU0FBUyxJQUFQO0FBQ0EsWUFBSSxHQUFHLFNBQVMsVUFBVTtBQUN4QjtBQUFBLFFBQ0Y7QUFHQSxZQUFJLEdBQUcsU0FBUyxXQUFXLFdBQVc7QUFDcEMsMEJBQWdCLEdBQUcsU0FBUyxFQUFFO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBRUEsVUFBSTtBQUVGLFlBQUksTUFBTSxHQUFHLFlBQVksR0FBRztBQUMxQixvQkFBVSxHQUFHLFNBQVMsSUFBSTtBQUFBLFFBQzVCLE9BQU87QUFDTCxrQkFBUSxXQUFXLENBQUM7QUFBQSxRQUN0QjtBQUFBLE1BQ0YsU0FBUyxJQUFQO0FBQ0EsWUFBSSxHQUFHLFNBQVMsVUFBVTtBQUN4QjtBQUFBLFFBQ0YsV0FBVyxHQUFHLFNBQVMsU0FBUztBQUM5QixpQkFBTyxZQUFZLGdCQUFnQixHQUFHLFNBQVMsRUFBRSxJQUFJLFVBQVUsR0FBRyxTQUFTLEVBQUU7QUFBQSxRQUMvRSxXQUFXLEdBQUcsU0FBUyxVQUFVO0FBQy9CLGdCQUFNO0FBQUEsUUFDUjtBQUNBLGtCQUFVLEdBQUcsU0FBUyxFQUFFO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBRUEsYUFBUyxVQUFXLEdBQUcsU0FBUyxZQUFZO0FBQzFDLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUVkLFVBQUk7QUFDRixnQkFBUSxVQUFVLENBQUM7QUFBQSxNQUNyQixTQUFTLElBQVA7QUFDQSxZQUFJLEdBQUcsU0FBUyxXQUFXO0FBQ3pCLGdCQUFNO0FBQUEsUUFDUixXQUFXLEdBQUcsU0FBUyxlQUFlLEdBQUcsU0FBUyxZQUFZLEdBQUcsU0FBUyxTQUFTO0FBQ2pGLHFCQUFXLEdBQUcsT0FBTztBQUFBLFFBQ3ZCLFdBQVcsR0FBRyxTQUFTLFVBQVU7QUFDL0IsZ0JBQU07QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLFdBQVksR0FBRyxTQUFTO0FBQy9CLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUNkLGNBQVEsWUFBWSxDQUFDLEVBQUUsUUFBUSxPQUFLLFdBQVdELE1BQUssS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7QUFFeEUsVUFBSSxXQUFXO0FBT2IsY0FBTSxZQUFZLEtBQUssSUFBSTtBQUMzQixXQUFHO0FBQ0QsY0FBSTtBQUNGLGtCQUFNLE1BQU0sUUFBUSxVQUFVLEdBQUcsT0FBTztBQUN4QyxtQkFBTztBQUFBLFVBQ1QsUUFBRTtBQUFBLFVBQU87QUFBQSxRQUNYLFNBQVMsS0FBSyxJQUFJLElBQUksWUFBWTtBQUFBLE1BQ3BDLE9BQU87QUFDTCxjQUFNLE1BQU0sUUFBUSxVQUFVLEdBQUcsT0FBTztBQUN4QyxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFDakIsV0FBTyxPQUFPO0FBQUE7QUFBQTs7O0FDN1NkO0FBQUEsdURBQUFJLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsUUFBTSxTQUFTO0FBRWYsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZixRQUFRLEVBQUUsTUFBTTtBQUFBLE1BQ2hCLFlBQVksT0FBTztBQUFBLElBQ3JCO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxzREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sUUFBUTtBQUNkLFFBQU0sU0FBUztBQUVmLFFBQU0sV0FBVyxFQUFFLFNBQVNDLFVBQVUsS0FBSyxVQUFVO0FBQ25ELGlCQUFXLFlBQVksV0FBWTtBQUFBLE1BQUM7QUFDcEMsTUFBQUYsSUFBRyxRQUFRLEtBQUssQ0FBQyxLQUFLLFVBQVU7QUFDOUIsWUFBSTtBQUFLLGlCQUFPLE1BQU0sT0FBTyxLQUFLLFFBQVE7QUFFMUMsZ0JBQVEsTUFBTSxJQUFJLFVBQVFDLE1BQUssS0FBSyxLQUFLLElBQUksQ0FBQztBQUU5QyxtQkFBVztBQUVYLGlCQUFTLGFBQWM7QUFDckIsZ0JBQU0sT0FBTyxNQUFNLElBQUk7QUFDdkIsY0FBSSxDQUFDO0FBQU0sbUJBQU8sU0FBUztBQUMzQixpQkFBTyxPQUFPLE1BQU0sQ0FBQUUsU0FBTztBQUN6QixnQkFBSUE7QUFBSyxxQkFBTyxTQUFTQSxJQUFHO0FBQzVCLHVCQUFXO0FBQUEsVUFDYixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELGFBQVMsYUFBYyxLQUFLO0FBQzFCLFVBQUk7QUFDSixVQUFJO0FBQ0YsZ0JBQVFILElBQUcsWUFBWSxHQUFHO0FBQUEsTUFDNUIsUUFBRTtBQUNBLGVBQU8sTUFBTSxXQUFXLEdBQUc7QUFBQSxNQUM3QjtBQUVBLFlBQU0sUUFBUSxVQUFRO0FBQ3BCLGVBQU9DLE1BQUssS0FBSyxLQUFLLElBQUk7QUFDMUIsZUFBTyxXQUFXLElBQUk7QUFBQSxNQUN4QixDQUFDO0FBQUEsSUFDSDtBQUVBLElBQUFGLFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkO0FBQUEsTUFDQSxVQUFVO0FBQUEsSUFDWjtBQUFBO0FBQUE7OztBQy9DQTtBQUFBLHNEQUFBSyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNQyxNQUFLO0FBQ1gsUUFBTSxRQUFRO0FBRWQsYUFBUyxXQUFZLE1BQU0sVUFBVTtBQUNuQyxlQUFTLFdBQVk7QUFDbkIsUUFBQUEsSUFBRyxVQUFVLE1BQU0sSUFBSSxTQUFPO0FBQzVCLGNBQUk7QUFBSyxtQkFBTyxTQUFTLEdBQUc7QUFDNUIsbUJBQVM7QUFBQSxRQUNYLENBQUM7QUFBQSxNQUNIO0FBRUEsTUFBQUEsSUFBRyxLQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVU7QUFDNUIsWUFBSSxDQUFDLE9BQU8sTUFBTSxPQUFPO0FBQUcsaUJBQU8sU0FBUztBQUM1QyxjQUFNLE1BQU1ELE1BQUssUUFBUSxJQUFJO0FBQzdCLFFBQUFDLElBQUcsS0FBSyxLQUFLLENBQUNDLE1BQUtDLFdBQVU7QUFDM0IsY0FBSUQsTUFBSztBQUVQLGdCQUFJQSxLQUFJLFNBQVMsVUFBVTtBQUN6QixxQkFBTyxNQUFNLE9BQU8sS0FBSyxDQUFBQSxTQUFPO0FBQzlCLG9CQUFJQTtBQUFLLHlCQUFPLFNBQVNBLElBQUc7QUFDNUIseUJBQVM7QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNIO0FBQ0EsbUJBQU8sU0FBU0EsSUFBRztBQUFBLFVBQ3JCO0FBRUEsY0FBSUMsT0FBTSxZQUFZO0FBQUcscUJBQVM7QUFBQSxlQUM3QjtBQUdILFlBQUFGLElBQUcsUUFBUSxLQUFLLENBQUFDLFNBQU87QUFDckIsa0JBQUlBO0FBQUssdUJBQU8sU0FBU0EsSUFBRztBQUFBLFlBQzlCLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsZUFBZ0IsTUFBTTtBQUM3QixVQUFJO0FBQ0osVUFBSTtBQUNGLGdCQUFRRCxJQUFHLFNBQVMsSUFBSTtBQUFBLE1BQzFCLFFBQUU7QUFBQSxNQUFPO0FBQ1QsVUFBSSxTQUFTLE1BQU0sT0FBTztBQUFHO0FBRTdCLFlBQU0sTUFBTUQsTUFBSyxRQUFRLElBQUk7QUFDN0IsVUFBSTtBQUNGLFlBQUksQ0FBQ0MsSUFBRyxTQUFTLEdBQUcsRUFBRSxZQUFZLEdBQUc7QUFHbkMsVUFBQUEsSUFBRyxZQUFZLEdBQUc7QUFBQSxRQUNwQjtBQUFBLE1BQ0YsU0FBUyxLQUFQO0FBRUEsWUFBSSxPQUFPLElBQUksU0FBUztBQUFVLGdCQUFNLFdBQVcsR0FBRztBQUFBO0FBQ2pELGdCQUFNO0FBQUEsTUFDYjtBQUVBLE1BQUFBLElBQUcsY0FBYyxNQUFNLEVBQUU7QUFBQSxJQUMzQjtBQUVBLElBQUFGLFFBQU8sVUFBVTtBQUFBLE1BQ2YsWUFBWSxFQUFFLFVBQVU7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNwRUE7QUFBQSxzREFBQUssVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTUMsTUFBSztBQUNYLFFBQU0sUUFBUTtBQUNkLFFBQU0sYUFBYSxzQkFBMEI7QUFFN0MsYUFBUyxXQUFZLFNBQVMsU0FBUyxVQUFVO0FBQy9DLGVBQVMsU0FBVUMsVUFBU0MsVUFBUztBQUNuQyxRQUFBRixJQUFHLEtBQUtDLFVBQVNDLFVBQVMsU0FBTztBQUMvQixjQUFJO0FBQUssbUJBQU8sU0FBUyxHQUFHO0FBQzVCLG1CQUFTLElBQUk7QUFBQSxRQUNmLENBQUM7QUFBQSxNQUNIO0FBRUEsaUJBQVcsU0FBUyxDQUFDLEtBQUssc0JBQXNCO0FBQzlDLFlBQUk7QUFBSyxpQkFBTyxTQUFTLEdBQUc7QUFDNUIsWUFBSTtBQUFtQixpQkFBTyxTQUFTLElBQUk7QUFDM0MsUUFBQUYsSUFBRyxNQUFNLFNBQVMsQ0FBQ0csU0FBUTtBQUN6QixjQUFJQSxNQUFLO0FBQ1AsWUFBQUEsS0FBSSxVQUFVQSxLQUFJLFFBQVEsUUFBUSxTQUFTLFlBQVk7QUFDdkQsbUJBQU8sU0FBU0EsSUFBRztBQUFBLFVBQ3JCO0FBRUEsZ0JBQU0sTUFBTUosTUFBSyxRQUFRLE9BQU87QUFDaEMscUJBQVcsS0FBSyxDQUFDSSxNQUFLLGNBQWM7QUFDbEMsZ0JBQUlBO0FBQUsscUJBQU8sU0FBU0EsSUFBRztBQUM1QixnQkFBSTtBQUFXLHFCQUFPLFNBQVMsU0FBUyxPQUFPO0FBQy9DLGtCQUFNLE9BQU8sS0FBSyxDQUFBQSxTQUFPO0FBQ3ZCLGtCQUFJQTtBQUFLLHVCQUFPLFNBQVNBLElBQUc7QUFDNUIsdUJBQVMsU0FBUyxPQUFPO0FBQUEsWUFDM0IsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLGVBQWdCLFNBQVMsU0FBUztBQUN6QyxZQUFNLG9CQUFvQkgsSUFBRyxXQUFXLE9BQU87QUFDL0MsVUFBSTtBQUFtQixlQUFPO0FBRTlCLFVBQUk7QUFDRixRQUFBQSxJQUFHLFVBQVUsT0FBTztBQUFBLE1BQ3RCLFNBQVMsS0FBUDtBQUNBLFlBQUksVUFBVSxJQUFJLFFBQVEsUUFBUSxTQUFTLFlBQVk7QUFDdkQsY0FBTTtBQUFBLE1BQ1I7QUFFQSxZQUFNLE1BQU1ELE1BQUssUUFBUSxPQUFPO0FBQ2hDLFlBQU0sWUFBWUMsSUFBRyxXQUFXLEdBQUc7QUFDbkMsVUFBSTtBQUFXLGVBQU9BLElBQUcsU0FBUyxTQUFTLE9BQU87QUFDbEQsWUFBTSxXQUFXLEdBQUc7QUFFcEIsYUFBT0EsSUFBRyxTQUFTLFNBQVMsT0FBTztBQUFBLElBQ3JDO0FBRUEsSUFBQUYsUUFBTyxVQUFVO0FBQUEsTUFDZixZQUFZLEVBQUUsVUFBVTtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQzVEQTtBQUFBLCtEQUFBTSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTUMsTUFBSztBQUNYLFFBQU0sYUFBYSxzQkFBMEI7QUF3QjdDLGFBQVMsYUFBYyxTQUFTLFNBQVMsVUFBVTtBQUNqRCxVQUFJRCxNQUFLLFdBQVcsT0FBTyxHQUFHO0FBQzVCLGVBQU9DLElBQUcsTUFBTSxTQUFTLENBQUMsUUFBUTtBQUNoQyxjQUFJLEtBQUs7QUFDUCxnQkFBSSxVQUFVLElBQUksUUFBUSxRQUFRLFNBQVMsZUFBZTtBQUMxRCxtQkFBTyxTQUFTLEdBQUc7QUFBQSxVQUNyQjtBQUNBLGlCQUFPLFNBQVMsTUFBTTtBQUFBLFlBQ3BCLE9BQU87QUFBQSxZQUNQLE9BQU87QUFBQSxVQUNULENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILE9BQU87QUFDTCxjQUFNLFNBQVNELE1BQUssUUFBUSxPQUFPO0FBQ25DLGNBQU0sZ0JBQWdCQSxNQUFLLEtBQUssUUFBUSxPQUFPO0FBQy9DLGVBQU8sV0FBVyxlQUFlLENBQUMsS0FBSyxXQUFXO0FBQ2hELGNBQUk7QUFBSyxtQkFBTyxTQUFTLEdBQUc7QUFDNUIsY0FBSSxRQUFRO0FBQ1YsbUJBQU8sU0FBUyxNQUFNO0FBQUEsY0FDcEIsT0FBTztBQUFBLGNBQ1AsT0FBTztBQUFBLFlBQ1QsQ0FBQztBQUFBLFVBQ0gsT0FBTztBQUNMLG1CQUFPQyxJQUFHLE1BQU0sU0FBUyxDQUFDQyxTQUFRO0FBQ2hDLGtCQUFJQSxNQUFLO0FBQ1AsZ0JBQUFBLEtBQUksVUFBVUEsS0FBSSxRQUFRLFFBQVEsU0FBUyxlQUFlO0FBQzFELHVCQUFPLFNBQVNBLElBQUc7QUFBQSxjQUNyQjtBQUNBLHFCQUFPLFNBQVMsTUFBTTtBQUFBLGdCQUNwQixPQUFPO0FBQUEsZ0JBQ1AsT0FBT0YsTUFBSyxTQUFTLFFBQVEsT0FBTztBQUFBLGNBQ3RDLENBQUM7QUFBQSxZQUNILENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxhQUFTLGlCQUFrQixTQUFTLFNBQVM7QUFDM0MsVUFBSTtBQUNKLFVBQUlBLE1BQUssV0FBVyxPQUFPLEdBQUc7QUFDNUIsaUJBQVNDLElBQUcsV0FBVyxPQUFPO0FBQzlCLFlBQUksQ0FBQztBQUFRLGdCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFDOUQsZUFBTztBQUFBLFVBQ0wsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGLE9BQU87QUFDTCxjQUFNLFNBQVNELE1BQUssUUFBUSxPQUFPO0FBQ25DLGNBQU0sZ0JBQWdCQSxNQUFLLEtBQUssUUFBUSxPQUFPO0FBQy9DLGlCQUFTQyxJQUFHLFdBQVcsYUFBYTtBQUNwQyxZQUFJLFFBQVE7QUFDVixpQkFBTztBQUFBLFlBQ0wsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGLE9BQU87QUFDTCxtQkFBU0EsSUFBRyxXQUFXLE9BQU87QUFDOUIsY0FBSSxDQUFDO0FBQVEsa0JBQU0sSUFBSSxNQUFNLGlDQUFpQztBQUM5RCxpQkFBTztBQUFBLFlBQ0wsT0FBTztBQUFBLFlBQ1AsT0FBT0QsTUFBSyxTQUFTLFFBQVEsT0FBTztBQUFBLFVBQ3RDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDbEdBO0FBQUEsOERBQUFJLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU1DLE1BQUs7QUFFWCxhQUFTLFlBQWEsU0FBUyxNQUFNLFVBQVU7QUFDN0MsaUJBQVksT0FBTyxTQUFTLGFBQWMsT0FBTztBQUNqRCxhQUFRLE9BQU8sU0FBUyxhQUFjLFFBQVE7QUFDOUMsVUFBSTtBQUFNLGVBQU8sU0FBUyxNQUFNLElBQUk7QUFDcEMsTUFBQUEsSUFBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLFVBQVU7QUFDaEMsWUFBSTtBQUFLLGlCQUFPLFNBQVMsTUFBTSxNQUFNO0FBQ3JDLGVBQVEsU0FBUyxNQUFNLFlBQVksSUFBSyxRQUFRO0FBQ2hELGlCQUFTLE1BQU0sSUFBSTtBQUFBLE1BQ3JCLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxnQkFBaUIsU0FBUyxNQUFNO0FBQ3ZDLFVBQUk7QUFFSixVQUFJO0FBQU0sZUFBTztBQUNqQixVQUFJO0FBQ0YsZ0JBQVFBLElBQUcsVUFBVSxPQUFPO0FBQUEsTUFDOUIsUUFBRTtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBUSxTQUFTLE1BQU0sWUFBWSxJQUFLLFFBQVE7QUFBQSxJQUNsRDtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQzlCQTtBQUFBLHlEQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNQyxNQUFLO0FBQ1gsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sU0FBUyxRQUFRO0FBQ3ZCLFFBQU0sYUFBYSxRQUFRO0FBRTNCLFFBQU0sZ0JBQWdCO0FBQ3RCLFFBQU0sZUFBZSxjQUFjO0FBQ25DLFFBQU0sbUJBQW1CLGNBQWM7QUFFdkMsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sY0FBYyxhQUFhO0FBQ2pDLFFBQU0sa0JBQWtCLGFBQWE7QUFFckMsUUFBTSxhQUFhLHNCQUEwQjtBQUU3QyxhQUFTLGNBQWUsU0FBUyxTQUFTLE1BQU0sVUFBVTtBQUN4RCxpQkFBWSxPQUFPLFNBQVMsYUFBYyxPQUFPO0FBQ2pELGFBQVEsT0FBTyxTQUFTLGFBQWMsUUFBUTtBQUU5QyxpQkFBVyxTQUFTLENBQUMsS0FBSyxzQkFBc0I7QUFDOUMsWUFBSTtBQUFLLGlCQUFPLFNBQVMsR0FBRztBQUM1QixZQUFJO0FBQW1CLGlCQUFPLFNBQVMsSUFBSTtBQUMzQyxxQkFBYSxTQUFTLFNBQVMsQ0FBQ0MsTUFBS0MsY0FBYTtBQUNoRCxjQUFJRDtBQUFLLG1CQUFPLFNBQVNBLElBQUc7QUFDNUIsb0JBQVVDLFVBQVM7QUFDbkIsc0JBQVlBLFVBQVMsT0FBTyxNQUFNLENBQUNELE1BQUtFLFVBQVM7QUFDL0MsZ0JBQUlGO0FBQUsscUJBQU8sU0FBU0EsSUFBRztBQUM1QixrQkFBTSxNQUFNRixNQUFLLFFBQVEsT0FBTztBQUNoQyx1QkFBVyxLQUFLLENBQUNFLE1BQUssY0FBYztBQUNsQyxrQkFBSUE7QUFBSyx1QkFBTyxTQUFTQSxJQUFHO0FBQzVCLGtCQUFJO0FBQVcsdUJBQU9ELElBQUcsUUFBUSxTQUFTLFNBQVNHLE9BQU0sUUFBUTtBQUNqRSxxQkFBTyxLQUFLLENBQUFGLFNBQU87QUFDakIsb0JBQUlBO0FBQUsseUJBQU8sU0FBU0EsSUFBRztBQUM1QixnQkFBQUQsSUFBRyxRQUFRLFNBQVMsU0FBU0csT0FBTSxRQUFRO0FBQUEsY0FDN0MsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLGtCQUFtQixTQUFTLFNBQVMsTUFBTTtBQUNsRCxZQUFNLG9CQUFvQkgsSUFBRyxXQUFXLE9BQU87QUFDL0MsVUFBSTtBQUFtQixlQUFPO0FBRTlCLFlBQU1FLFlBQVcsaUJBQWlCLFNBQVMsT0FBTztBQUNsRCxnQkFBVUEsVUFBUztBQUNuQixhQUFPLGdCQUFnQkEsVUFBUyxPQUFPLElBQUk7QUFDM0MsWUFBTSxNQUFNSCxNQUFLLFFBQVEsT0FBTztBQUNoQyxZQUFNLFNBQVNDLElBQUcsV0FBVyxHQUFHO0FBQ2hDLFVBQUk7QUFBUSxlQUFPQSxJQUFHLFlBQVksU0FBUyxTQUFTLElBQUk7QUFDeEQsaUJBQVcsR0FBRztBQUNkLGFBQU9BLElBQUcsWUFBWSxTQUFTLFNBQVMsSUFBSTtBQUFBLElBQzlDO0FBRUEsSUFBQUYsUUFBTyxVQUFVO0FBQUEsTUFDZixlQUFlLEVBQUUsYUFBYTtBQUFBLE1BQzlCO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQzlEQTtBQUFBLHVEQUFBTSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLE9BQU87QUFDYixRQUFNLE9BQU87QUFDYixRQUFNLFVBQVU7QUFFaEIsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFFZixZQUFZLEtBQUs7QUFBQSxNQUNqQixnQkFBZ0IsS0FBSztBQUFBLE1BQ3JCLFlBQVksS0FBSztBQUFBLE1BQ2pCLGdCQUFnQixLQUFLO0FBQUEsTUFFckIsWUFBWSxLQUFLO0FBQUEsTUFDakIsZ0JBQWdCLEtBQUs7QUFBQSxNQUNyQixZQUFZLEtBQUs7QUFBQSxNQUNqQixnQkFBZ0IsS0FBSztBQUFBLE1BRXJCLGVBQWUsUUFBUTtBQUFBLE1BQ3ZCLG1CQUFtQixRQUFRO0FBQUEsTUFDM0IsZUFBZSxRQUFRO0FBQUEsTUFDdkIsbUJBQW1CLFFBQVE7QUFBQSxJQUM3QjtBQUFBO0FBQUE7OztBQ3RCQTtBQUFBLGtFQUFBQyxVQUFBQyxTQUFBO0FBQUEsYUFBUyxVQUFXLEtBQUssRUFBRSxNQUFNLE1BQU0sV0FBVyxNQUFNLFdBQVcsTUFBTSxPQUFPLElBQUksQ0FBQyxHQUFHO0FBQ3RGLFlBQU0sTUFBTSxXQUFXLE1BQU07QUFDN0IsWUFBTSxNQUFNLEtBQUssVUFBVSxLQUFLLFVBQVUsTUFBTTtBQUVoRCxhQUFPLElBQUksUUFBUSxPQUFPLEdBQUcsSUFBSTtBQUFBLElBQ25DO0FBRUEsYUFBUyxTQUFVLFNBQVM7QUFFMUIsVUFBSSxPQUFPLFNBQVMsT0FBTztBQUFHLGtCQUFVLFFBQVEsU0FBUyxNQUFNO0FBQy9ELGFBQU8sUUFBUSxRQUFRLFdBQVcsRUFBRTtBQUFBLElBQ3RDO0FBRUEsSUFBQUEsUUFBTyxVQUFVLEVBQUUsV0FBVyxTQUFTO0FBQUE7QUFBQTs7O0FDYnZDO0FBQUEsa0VBQUFDLFVBQUFDLFNBQUE7QUFBQSxRQUFJO0FBQ0osUUFBSTtBQUNGLFlBQU07QUFBQSxJQUNSLFNBQVMsR0FBUDtBQUNBLFlBQU0sUUFBUTtBQUFBLElBQ2hCO0FBQ0EsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sRUFBRSxXQUFXLFNBQVMsSUFBSTtBQUVoQyxtQkFBZSxVQUFXLE1BQU0sVUFBVSxDQUFDLEdBQUc7QUFDNUMsVUFBSSxPQUFPLFlBQVksVUFBVTtBQUMvQixrQkFBVSxFQUFFLFVBQVUsUUFBUTtBQUFBLE1BQ2hDO0FBRUEsWUFBTUMsTUFBSyxRQUFRLE1BQU07QUFFekIsWUFBTSxjQUFjLFlBQVksVUFBVSxRQUFRLFNBQVM7QUFFM0QsVUFBSSxPQUFPLE1BQU0sYUFBYSxhQUFhQSxJQUFHLFFBQVEsRUFBRSxNQUFNLE9BQU87QUFFckUsYUFBTyxTQUFTLElBQUk7QUFFcEIsVUFBSTtBQUNKLFVBQUk7QUFDRixjQUFNLEtBQUssTUFBTSxNQUFNLFVBQVUsUUFBUSxVQUFVLElBQUk7QUFBQSxNQUN6RCxTQUFTLEtBQVA7QUFDQSxZQUFJLGFBQWE7QUFDZixjQUFJLFVBQVUsR0FBRyxTQUFTLElBQUk7QUFDOUIsZ0JBQU07QUFBQSxRQUNSLE9BQU87QUFDTCxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFNLFdBQVcsYUFBYSxZQUFZLFNBQVM7QUFFbkQsYUFBU0MsY0FBYyxNQUFNLFVBQVUsQ0FBQyxHQUFHO0FBQ3pDLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFDL0Isa0JBQVUsRUFBRSxVQUFVLFFBQVE7QUFBQSxNQUNoQztBQUVBLFlBQU1ELE1BQUssUUFBUSxNQUFNO0FBRXpCLFlBQU0sY0FBYyxZQUFZLFVBQVUsUUFBUSxTQUFTO0FBRTNELFVBQUk7QUFDRixZQUFJLFVBQVVBLElBQUcsYUFBYSxNQUFNLE9BQU87QUFDM0Msa0JBQVUsU0FBUyxPQUFPO0FBQzFCLGVBQU8sS0FBSyxNQUFNLFNBQVMsUUFBUSxPQUFPO0FBQUEsTUFDNUMsU0FBUyxLQUFQO0FBQ0EsWUFBSSxhQUFhO0FBQ2YsY0FBSSxVQUFVLEdBQUcsU0FBUyxJQUFJO0FBQzlCLGdCQUFNO0FBQUEsUUFDUixPQUFPO0FBQ0wsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxtQkFBZSxXQUFZLE1BQU0sS0FBSyxVQUFVLENBQUMsR0FBRztBQUNsRCxZQUFNQSxNQUFLLFFBQVEsTUFBTTtBQUV6QixZQUFNLE1BQU0sVUFBVSxLQUFLLE9BQU87QUFFbEMsWUFBTSxhQUFhLGFBQWFBLElBQUcsU0FBUyxFQUFFLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDbEU7QUFFQSxRQUFNLFlBQVksYUFBYSxZQUFZLFVBQVU7QUFFckQsYUFBUyxjQUFlLE1BQU0sS0FBSyxVQUFVLENBQUMsR0FBRztBQUMvQyxZQUFNQSxNQUFLLFFBQVEsTUFBTTtBQUV6QixZQUFNLE1BQU0sVUFBVSxLQUFLLE9BQU87QUFFbEMsYUFBT0EsSUFBRyxjQUFjLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDNUM7QUFFQSxRQUFNLFdBQVc7QUFBQSxNQUNmO0FBQUEsTUFDQSxjQUFBQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUVBLElBQUFGLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3ZGakIsSUFBQUcsb0JBQUE7QUFBQSx3REFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxXQUFXO0FBRWpCLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BRWYsVUFBVSxTQUFTO0FBQUEsTUFDbkIsY0FBYyxTQUFTO0FBQUEsTUFDdkIsV0FBVyxTQUFTO0FBQUEsTUFDcEIsZUFBZSxTQUFTO0FBQUEsSUFDMUI7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHVEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLFFBQU1DLE1BQUs7QUFDWCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTSxRQUFRO0FBQ2QsUUFBTSxhQUFhLHNCQUEwQjtBQUU3QyxhQUFTLFdBQVksTUFBTSxNQUFNLFVBQVUsVUFBVTtBQUNuRCxVQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLG1CQUFXO0FBQ1gsbUJBQVc7QUFBQSxNQUNiO0FBRUEsWUFBTSxNQUFNQSxNQUFLLFFBQVEsSUFBSTtBQUM3QixpQkFBVyxLQUFLLENBQUMsS0FBSyxXQUFXO0FBQy9CLFlBQUk7QUFBSyxpQkFBTyxTQUFTLEdBQUc7QUFDNUIsWUFBSTtBQUFRLGlCQUFPRCxJQUFHLFVBQVUsTUFBTSxNQUFNLFVBQVUsUUFBUTtBQUU5RCxjQUFNLE9BQU8sS0FBSyxDQUFBRSxTQUFPO0FBQ3ZCLGNBQUlBO0FBQUssbUJBQU8sU0FBU0EsSUFBRztBQUU1QixVQUFBRixJQUFHLFVBQVUsTUFBTSxNQUFNLFVBQVUsUUFBUTtBQUFBLFFBQzdDLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxlQUFnQixTQUFTLE1BQU07QUFDdEMsWUFBTSxNQUFNQyxNQUFLLFFBQVEsSUFBSTtBQUM3QixVQUFJRCxJQUFHLFdBQVcsR0FBRyxHQUFHO0FBQ3RCLGVBQU9BLElBQUcsY0FBYyxNQUFNLEdBQUcsSUFBSTtBQUFBLE1BQ3ZDO0FBQ0EsWUFBTSxXQUFXLEdBQUc7QUFDcEIsTUFBQUEsSUFBRyxjQUFjLE1BQU0sR0FBRyxJQUFJO0FBQUEsSUFDaEM7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQSxNQUNmLFlBQVksRUFBRSxVQUFVO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdkNBO0FBQUEsMkRBQUFJLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsUUFBTSxFQUFFLFdBQVcsSUFBSTtBQUV2QixtQkFBZSxXQUFZLE1BQU0sTUFBTSxVQUFVLENBQUMsR0FBRztBQUNuRCxZQUFNLE1BQU0sVUFBVSxNQUFNLE9BQU87QUFFbkMsWUFBTSxXQUFXLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDckM7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNYakI7QUFBQSxnRUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixRQUFNLEVBQUUsZUFBZSxJQUFJO0FBRTNCLGFBQVMsZUFBZ0IsTUFBTSxNQUFNLFNBQVM7QUFDNUMsWUFBTSxNQUFNLFVBQVUsTUFBTSxPQUFPO0FBRW5DLHFCQUFlLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDbkM7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNYakI7QUFBQSxxREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNLFdBQVc7QUFFakIsYUFBUyxhQUFhLEVBQUUscUJBQXdCO0FBQ2hELGFBQVMsaUJBQWlCO0FBRTFCLGFBQVMsYUFBYSxTQUFTO0FBQy9CLGFBQVMsaUJBQWlCLFNBQVM7QUFDbkMsYUFBUyxZQUFZLFNBQVM7QUFDOUIsYUFBUyxnQkFBZ0IsU0FBUztBQUNsQyxhQUFTLFdBQVcsU0FBUztBQUM3QixhQUFTLGVBQWUsU0FBUztBQUVqQyxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNmakI7QUFBQSw4REFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTUMsTUFBSztBQUNYLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFdBQVcscUJBQXdCO0FBQ3pDLFFBQU0sYUFBYSxpQkFBcUI7QUFDeEMsUUFBTSxhQUFhLGlCQUFxQjtBQUN4QyxRQUFNQyxRQUFPO0FBRWIsYUFBUyxTQUFVLEtBQUssTUFBTSxNQUFNO0FBQ2xDLGFBQU8sUUFBUSxDQUFDO0FBQ2hCLFlBQU0sWUFBWSxLQUFLLGFBQWEsS0FBSyxXQUFXO0FBRXBELFlBQU0sRUFBRSxRQUFRLElBQUlBLE1BQUssZUFBZSxLQUFLLE1BQU0sTUFBTTtBQUN6RCxNQUFBQSxNQUFLLHFCQUFxQixLQUFLLFNBQVMsTUFBTSxNQUFNO0FBQ3BELGlCQUFXRCxNQUFLLFFBQVEsSUFBSSxDQUFDO0FBQzdCLGFBQU8sU0FBUyxLQUFLLE1BQU0sU0FBUztBQUFBLElBQ3RDO0FBRUEsYUFBUyxTQUFVLEtBQUssTUFBTSxXQUFXO0FBQ3ZDLFVBQUksV0FBVztBQUNiLG1CQUFXLElBQUk7QUFDZixlQUFPLE9BQU8sS0FBSyxNQUFNLFNBQVM7QUFBQSxNQUNwQztBQUNBLFVBQUlELElBQUcsV0FBVyxJQUFJO0FBQUcsY0FBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQy9ELGFBQU8sT0FBTyxLQUFLLE1BQU0sU0FBUztBQUFBLElBQ3BDO0FBRUEsYUFBUyxPQUFRLEtBQUssTUFBTSxXQUFXO0FBQ3JDLFVBQUk7QUFDRixRQUFBQSxJQUFHLFdBQVcsS0FBSyxJQUFJO0FBQUEsTUFDekIsU0FBUyxLQUFQO0FBQ0EsWUFBSSxJQUFJLFNBQVM7QUFBUyxnQkFBTTtBQUNoQyxlQUFPLGlCQUFpQixLQUFLLE1BQU0sU0FBUztBQUFBLE1BQzlDO0FBQUEsSUFDRjtBQUVBLGFBQVMsaUJBQWtCLEtBQUssTUFBTSxXQUFXO0FBQy9DLFlBQU0sT0FBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGNBQWM7QUFBQSxNQUNoQjtBQUNBLGVBQVMsS0FBSyxNQUFNLElBQUk7QUFDeEIsYUFBTyxXQUFXLEdBQUc7QUFBQSxJQUN2QjtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzlDakIsSUFBQUkscUJBQUE7QUFBQSwwREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZixVQUFVO0FBQUEsSUFDWjtBQUFBO0FBQUE7OztBQ0pBO0FBQUEsb0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU1DLE1BQUs7QUFDWCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTSxPQUFPLGdCQUFtQjtBQUNoQyxRQUFNLFNBQVMsaUJBQXFCO0FBQ3BDLFFBQU0sU0FBUyxpQkFBcUI7QUFDcEMsUUFBTSxhQUFhLHNCQUEwQjtBQUM3QyxRQUFNQyxRQUFPO0FBRWIsYUFBUyxLQUFNLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDbEMsVUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixhQUFLO0FBQ0wsZUFBTyxDQUFDO0FBQUEsTUFDVjtBQUVBLFlBQU0sWUFBWSxLQUFLLGFBQWEsS0FBSyxXQUFXO0FBRXBELE1BQUFBLE1BQUssV0FBVyxLQUFLLE1BQU0sUUFBUSxDQUFDLEtBQUssVUFBVTtBQUNqRCxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGNBQU0sRUFBRSxRQUFRLElBQUk7QUFDcEIsUUFBQUEsTUFBSyxpQkFBaUIsS0FBSyxTQUFTLE1BQU0sUUFBUSxDQUFBQyxTQUFPO0FBQ3ZELGNBQUlBO0FBQUssbUJBQU8sR0FBR0EsSUFBRztBQUN0QixpQkFBT0YsTUFBSyxRQUFRLElBQUksR0FBRyxDQUFBRSxTQUFPO0FBQ2hDLGdCQUFJQTtBQUFLLHFCQUFPLEdBQUdBLElBQUc7QUFDdEIsbUJBQU8sU0FBUyxLQUFLLE1BQU0sV0FBVyxFQUFFO0FBQUEsVUFDMUMsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLFNBQVUsS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUMzQyxVQUFJLFdBQVc7QUFDYixlQUFPLE9BQU8sTUFBTSxTQUFPO0FBQ3pCLGNBQUk7QUFBSyxtQkFBTyxHQUFHLEdBQUc7QUFDdEIsaUJBQU8sT0FBTyxLQUFLLE1BQU0sV0FBVyxFQUFFO0FBQUEsUUFDeEMsQ0FBQztBQUFBLE1BQ0g7QUFDQSxpQkFBVyxNQUFNLENBQUMsS0FBSyxlQUFlO0FBQ3BDLFlBQUk7QUFBSyxpQkFBTyxHQUFHLEdBQUc7QUFDdEIsWUFBSTtBQUFZLGlCQUFPLEdBQUcsSUFBSSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELGVBQU8sT0FBTyxLQUFLLE1BQU0sV0FBVyxFQUFFO0FBQUEsTUFDeEMsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLE9BQVEsS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUN6QyxNQUFBSCxJQUFHLE9BQU8sS0FBSyxNQUFNLFNBQU87QUFDMUIsWUFBSSxDQUFDO0FBQUssaUJBQU8sR0FBRztBQUNwQixZQUFJLElBQUksU0FBUztBQUFTLGlCQUFPLEdBQUcsR0FBRztBQUN2QyxlQUFPLGlCQUFpQixLQUFLLE1BQU0sV0FBVyxFQUFFO0FBQUEsTUFDbEQsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLGlCQUFrQixLQUFLLE1BQU0sV0FBVyxJQUFJO0FBQ25ELFlBQU0sT0FBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGNBQWM7QUFBQSxNQUNoQjtBQUNBLFdBQUssS0FBSyxNQUFNLE1BQU0sU0FBTztBQUMzQixZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGVBQU8sT0FBTyxLQUFLLEVBQUU7QUFBQSxNQUN2QixDQUFDO0FBQUEsSUFDSDtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2hFakIsSUFBQUssZ0JBQUE7QUFBQSxxREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmLE1BQU0sRUFBRSxjQUFpQjtBQUFBLElBQzNCO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSxnREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFFZixHQUFHO0FBQUEsTUFFSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsSUFDTDtBQUlBLFFBQU1DLE1BQUssUUFBUTtBQUNuQixRQUFJLE9BQU8seUJBQXlCQSxLQUFJLFVBQVUsR0FBRztBQUNuRCxhQUFPLGVBQWVELFFBQU8sU0FBUyxZQUFZO0FBQUEsUUFDaEQsTUFBTztBQUFFLGlCQUFPQyxJQUFHO0FBQUEsUUFBUztBQUFBLE1BQzlCLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7O0FDMUJBLFVBQ0EsSUFFTSxtQkEyQk8sV0E2R0E7QUEzSWI7QUFBQTtBQUFBO0FBQUEsV0FBc0I7QUFDdEIsU0FBb0I7QUFFcEIsSUFBTSxvQkFBb0I7QUEyQm5CLElBQU0sWUFBTixNQUFnQjtBQUFBLE1BNENyQixZQUE0QixNQUFxQjtBQUFyQjtBQUMxQixhQUFLLG1CQUF3QixhQUFRLEtBQUssUUFBUTtBQUNsRCxhQUFLLFdBQWdCLGNBQVMsUUFBUSxJQUFJLEdBQUcsS0FBSyxRQUFRO0FBRTFELGNBQU0sU0FBYyxXQUFNLEtBQUssUUFBUTtBQUN2QyxhQUFLLDRCQUFpQyxjQUFTLEtBQUssZUFBZSxLQUFLLFFBQVE7QUFDaEYsYUFBSyxZQUFZLE9BQU87QUFPeEIsY0FBTSxtQkFBd0IsY0FBUyxRQUFRLElBQUksR0FBRyxLQUFLLGFBQWE7QUFDeEUsYUFBSyxXQUFXLEtBQUssY0FBbUIsVUFBSyxrQkFBa0IsTUFBTSxLQUFLLEtBQUssY0FBbUIsVUFBSyxnQkFBZ0IsSUFDbkgsT0FBTyxPQUNGLFVBQVUsY0FBUyxLQUFLLEtBQUssZUFBZSxPQUFPLEdBQUcsR0FBRyxPQUFPLElBQUk7QUFFN0UsY0FBTSxnQkFBZ0IsT0FBTyxLQUFLLE1BQU0sQ0FBQztBQUN6QyxhQUFLLGNBQW1CLFVBQUssS0FBSyxXQUFXLEdBQUcsOEJBQThCO0FBQzlFLGFBQUsscUJBQTBCLFVBQUssS0FBSyxXQUFXLEdBQUcscUJBQXFCLGVBQWU7QUFBQSxNQUM3RjtBQUFBLE1BWU8sUUFBUSxNQUFjO0FBQzNCLGVBQU87QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxRQUNQLEVBQUUsU0FBUyxJQUFJO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBd0JPLElBQU0sbUJBQU4sTUFBdUI7QUFBQSxNQUM1QixZQUE2QixXQUFtQjtBQUFuQjtBQUFBLE1BQzdCO0FBQUEsTUFNQSxNQUFhLFNBQVMsVUFBd0M7QUFDNUQsY0FBTSxPQUFrQyxLQUFLLE1BQVMsZ0JBQWEsVUFBVSxFQUFFLFVBQVUsUUFBUSxDQUFDLENBQUM7QUFDbkcsY0FBTSxhQUFhLE1BQU0sS0FBSyxTQUFTO0FBRXZDLGNBQU0sV0FBVyxLQUFLLFlBQVksWUFBWSxLQUFLLE9BQU8sS0FBSyxPQUFPO0FBRXRFLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFTUSxZQUFZLGlCQUE4QixnQkFBMkIsU0FBZ0M7QUFDM0csWUFBSSxDQUFDLGdCQUFnQjtBQUNuQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxjQUFNLFdBQVcsZ0JBQWdCLE9BQU8sT0FBSztBQUMzQyxnQkFBTSxVQUFVLGVBQWUsS0FBSyxhQUFXLEVBQUUsUUFBUSxPQUFPLENBQUM7QUFDakUsaUJBQU8sWUFBWSxDQUFDLENBQUM7QUFBQSxRQUN2QixDQUFDO0FBR0QsWUFBSSxDQUFDLFNBQVM7QUFDWixnQkFBTSxvQkFBb0IsZUFBZSxPQUFPLGFBQVcsQ0FBQyxnQkFBZ0IsS0FBSyxPQUFLLEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUN6RyxxQkFBVyxhQUFhLG1CQUFtQjtBQUN6QyxvQkFBUSxPQUFPLE1BQU0sdUJBQXVCO0FBQUEsQ0FBYTtBQUFBLFVBQzNEO0FBQ0EsY0FBSSxrQkFBa0IsU0FBUyxHQUFHO0FBQ2hDLG9CQUFRLE9BQU8sTUFBTSxvQkFBb0IsZ0JBQWdCLElBQUksT0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssR0FBRztBQUFBLENBQUs7QUFDNUcsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQVNBLE1BQWEsWUFBWSxPQUFrQixTQUF5QztBQUNsRixjQUFNLGtCQUFrQixNQUFNLEtBQUssU0FBUztBQUU1QyxjQUFNLFdBQVcsS0FBSyxZQUFZLGlCQUFpQixPQUFPLE9BQU87QUFFakUsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUVBLE1BQWMsV0FBaUM7QUFDN0MsY0FBTSxRQUFRLE1BQU0sS0FBSyxTQUFTO0FBQ2xDLGNBQU0sU0FBUyxNQUFNLE9BQU8sY0FBaUIsY0FBUyxRQUFRLEVBQUUsV0FBVyxRQUFRLEtBQVUsY0FBUyxRQUFRLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDL0gsZUFBTyxLQUFLLFFBQVEsTUFBTTtBQUFBLE1BQzVCO0FBQUEsTUFFUSxRQUFRLE9BQThCO0FBQzVDLGVBQU8sTUFBTSxJQUFJLGNBQVksSUFBSSxVQUFVLEVBQUUsZUFBZSxLQUFLLFdBQVcsU0FBUyxDQUFDLENBQUM7QUFBQSxNQUN6RjtBQUFBLE1BRUEsTUFBYyxXQUE4QjtBQUMxQyxjQUFNLE1BQU0sSUFBSSxNQUFjO0FBRTlCLHVCQUFlLFFBQVEsS0FBYTtBQUNsQyxnQkFBTSxRQUFRLE1BQVMsV0FBUSxHQUFHO0FBQ2xDLHFCQUFXLFFBQVEsT0FBTztBQUN4QixrQkFBTSxXQUFnQixVQUFLLEtBQUssSUFBSTtBQUNwQyxrQkFBTSxRQUFRLE1BQVMsUUFBSyxRQUFRO0FBQ3BDLGdCQUFJLE1BQU0sT0FBTyxHQUFHO0FBQUUsa0JBQUksS0FBSyxRQUFRO0FBQUEsWUFBRztBQUMxQyxnQkFBSSxNQUFNLFlBQVksR0FBRztBQUFFLG9CQUFNLFFBQWEsVUFBSyxRQUFRLENBQUM7QUFBQSxZQUFHO0FBQUEsVUFDakU7QUFBQSxRQUNGO0FBRUEsY0FBTSxRQUFRLEtBQUssU0FBUztBQUM1QixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNhTyxTQUFTLGFBQWEsT0FBZSxRQUFzQjtBQUNoRSxNQUFJLFNBQVMsR0FBRztBQUNkLElBQU8sTUFBTSwwQkFBZ0MsWUFBSyxPQUFPLEdBQVMsV0FBSSxNQUFNLEdBQVMsV0FBSSxRQUFRLEdBQUcsS0FBSztBQUFBLEVBQzNHLE9BQU87QUFDTCxJQUFPLE1BQU0sMEJBQWdDLFlBQUssT0FBTyxHQUFTLGFBQU0sS0FBSyxHQUFTLGFBQU0sUUFBUSxHQUFHLEtBQUs7QUFBQSxFQUM5RztBQUNGO0FBZU8sU0FBUyxhQUFhLFlBQThCO0FBQ3pELFVBQVEsV0FBVyxRQUFRO0FBQUEsSUFDekIsS0FBSztBQUNILE1BQU8sUUFBUSxzQkFBc0IsV0FBVyxVQUFnQixZQUFLLEdBQUcsV0FBVyxXQUFXLENBQUM7QUFDL0Y7QUFBQSxJQUNGLEtBQUs7QUFDSCxNQUFPLFFBQVEsc0JBQXNCLFdBQVcsVUFBZ0IsWUFBSyxHQUFHLFdBQVcsV0FBVyxDQUFDO0FBQy9GO0FBQUEsSUFDRixLQUFLO0FBQ0gsTUFBTyxNQUFNLHNCQUFzQixXQUFXLFVBQWdCLFlBQUssR0FBRyxXQUFXLFdBQVcsQ0FBQztBQUM3RjtBQUFBLElBQ0YsS0FBSztBQUNILE1BQU8sTUFBTSxnQ0FBZ0MsV0FBVyxVQUFnQixZQUFLLEdBQUcsV0FBVyxXQUFXLEdBQUcsV0FBVyxPQUFPO0FBQzNIO0FBQUEsSUFDRixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQ0gsTUFBTyxNQUFNLGdDQUFnQyxXQUFXLFVBQWdCLFlBQUssR0FBRyxXQUFXLFdBQVcsR0FBRyxXQUFXLE9BQU87QUFDM0g7QUFBQSxJQUNGLEtBQUs7QUFDSCxNQUFPLE1BQU0sZ0NBQWdDLFdBQVcsVUFBZ0IsWUFBSyxHQUFHLFdBQVcsV0FBVyxHQUFHLFdBQVcsT0FBTztBQUMzSDtBQUFBLElBQ0YsS0FBSztBQUNILE1BQU8sTUFBTSxnQ0FBZ0MsV0FBVyxVQUFnQixZQUFLLEdBQUcsV0FBVyxXQUFXLEdBQUcsV0FBVyxPQUFPO0FBQzNIO0FBQUEsRUFDSjtBQUNBLGFBQVcsUUFBUSxXQUFXLHNCQUFzQixDQUFDLEdBQUc7QUFDdEQsSUFBTyxNQUFNLFNBQVMsTUFBTTtBQUFBLEVBQzlCO0FBQ0Y7QUFFTyxTQUFTLGNBQWMsV0FBd0I7QUFDcEQsUUFBTSxRQUFRO0FBQUEsSUFDWjtBQUFBLElBQ0EsZUFBZSxVQUFVO0FBQUEsSUFDekIsVUFBVSxPQUFPLEtBQUssQ0FBQyxLQUFLLE1BQU0sS0FBSyxTQUFTLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQUEsRUFDaEY7QUFFQSxFQUFPLE1BQVksWUFBSyxNQUFNLE9BQU8sT0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN6RDtBQTlTQSxJQUVBQztBQUZBO0FBQUE7QUFBQTtBQUVBLElBQUFBLFNBQXVCO0FBQ3ZCO0FBQUE7QUFBQTs7O0FDNkJPLFNBQVMsUUFBVyxJQUFnQjtBQUN6QyxTQUFPLE1BQU0sVUFBVSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDNUM7QUFsQ0EsSUFpRGE7QUFqRGI7QUFBQTtBQUFBO0FBaURPLElBQU0sV0FBTixNQUFrQjtBQUFBLE1BS3ZCLFlBQTZCLE9BQTZCLFVBQThCLENBQUMsR0FBRztBQUEvRDtBQUE2QjtBQUoxRCxhQUFpQixZQUFZLElBQUksSUFBSSxLQUFLLEtBQUs7QUFLN0MsYUFBSyxVQUFVLFFBQVEsV0FBVztBQUNsQyxhQUFLLGNBQWM7QUFBQSxNQUNyQjtBQUFBLE1BRU8sU0FBUyxNQUFTO0FBQ3ZCLGFBQUssVUFBVSxPQUFPLElBQUk7QUFDMUIsYUFBSyxVQUFVO0FBQ2YsWUFBSSxLQUFLLFVBQVUsT0FBTyxHQUFHO0FBQzNCLGVBQUssY0FBYztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BRU8sT0FBTztBQUNaLGFBQUssVUFBVSxNQUFNO0FBQUEsTUFDdkI7QUFBQSxNQUVRLFlBQVk7QUFDbEIsWUFBSSxLQUFLLE9BQU87QUFDZCx1QkFBYSxLQUFLLEtBQUs7QUFDdkIsZUFBSyxRQUFRO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUVRLGdCQUFnQjtBQUN0QixhQUFLLFFBQVEsV0FBVyxNQUFNLEtBQUssT0FBTyxHQUFHLEtBQUssT0FBTztBQUFBLE1BQzNEO0FBQUEsTUFFUSxTQUFTO0FBbEZuQjtBQW1GSSx5QkFBSyxTQUFRLGNBQWIsNEJBQXlCLEtBQUs7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUN2Q0EsZUFBc0Isb0JBQW9CLFNBQTRGO0FBQ3BJLEVBQU8sVUFBVSxtREFBbUQ7QUFDcEUsRUFBTztBQUFBLElBQ0w7QUFBQSxJQUNBLFFBQVEsV0FBVyxZQUFZLFFBQVEsU0FBUyxLQUFLLElBQUksV0FBVTtBQUFBLElBQ25FLFFBQVEsUUFBUSxLQUFLLElBQUk7QUFBQSxFQUFDO0FBQzVCLFFBQU0sYUFBYSxRQUFRLE1BQU07QUFFakMsUUFBTSxZQUFZLE1BQU0sOEJBQThCLE9BQU87QUFDN0QsRUFBTyxVQUFVLG9CQUFvQjtBQUNyQyxlQUFhLFlBQVksVUFBVSxZQUFZLE1BQU07QUFDckQsU0FBTztBQUFBLElBQ0wsU0FBUyxVQUFVLFlBQVksV0FBVztBQUFBLElBQzFDLFNBQVMsVUFBVTtBQUFBLEVBQ3JCO0FBQ0Y7QUF3QkEsU0FBUyxrQkFBa0IsU0FBbUIsVUFBc0M7QUFDbEYsUUFBTSxVQUEyQixDQUFDO0FBQ2xDLFdBQVMsV0FBVyxTQUFrQjtBQUNwQyxlQUFXLFVBQVUsU0FBUztBQUM1QixjQUFRLEtBQUs7QUFBQSxRQUNYO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsTUFBSSxZQUFZLFNBQVMsU0FBUyxHQUFHO0FBQ25DLGVBQVcsV0FBVyxZQUFZLENBQUMsR0FBRztBQUNwQyxpQkFBVyxPQUFPO0FBQUEsSUFDcEI7QUFBQSxFQUNGLE9BQU87QUFDTCxlQUFXO0FBQUEsRUFDYjtBQUNBLFNBQU87QUFDVDtBQU9BLGVBQXNCLDhCQUNwQixTQUM2QjtBQUU3QixRQUFNLFFBQVEsUUFBUTtBQUN0QixRQUFNLFVBQThCO0FBQUEsSUFDbEMsU0FBUyxDQUFDO0FBQUEsSUFDVixhQUFhLENBQUM7QUFBQSxFQUNoQjtBQUNBLFFBQU0saUJBQWtDLGtCQUFrQixRQUFRLFNBQVMsUUFBUSxRQUFRO0FBRTNGLGlCQUFlLFFBQVFDLFNBQXNDO0FBQzNELFVBQU0sUUFBUSxLQUFLLElBQUk7QUFDdkIsVUFBTSxRQUF3QyxDQUFDO0FBQy9DLE9BQUc7QUFDRCxZQUFNLE9BQU8sTUFBTSxJQUFJO0FBQ3ZCLFVBQUksQ0FBQztBQUFNO0FBQ1gsWUFBTSxZQUFZLEtBQUssSUFBSTtBQUMzQixNQUFPLFVBQVUsZ0JBQWdCLEtBQUssZUFBZUEsUUFBTyxVQUFVQSxRQUFPLFVBQVUsTUFBTSxLQUFLQSxRQUFPLFFBQVE7QUFDakgsWUFBTSxXQUE4QixNQUFNLFFBQVEsS0FBSyxLQUFLLG1CQUFtQixDQUFDO0FBQUEsUUFDOUUsUUFBUUEsUUFBTztBQUFBLFFBQ2YsU0FBU0EsUUFBTztBQUFBLFFBQ2hCLE9BQU8sQ0FBQyxJQUFJO0FBQUEsUUFDWixPQUFPLFFBQVE7QUFBQSxRQUNmLFFBQVEsUUFBUTtBQUFBLFFBQ2hCLFNBQVMsUUFBUTtBQUFBLFFBQ2pCLGdCQUFnQixRQUFRO0FBQUEsTUFDMUIsQ0FBQyxHQUFHO0FBQUEsUUFDRixJQUFJO0FBQUEsTUFDTixDQUFDO0FBRUQsY0FBUSxZQUFZLEtBQUssR0FBRyxRQUFRLFFBQVEsQ0FBQztBQUM3QyxZQUFNLEtBQUssYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhO0FBQUEsSUFDcEQsU0FBUyxNQUFNLFNBQVM7QUFDeEIsVUFBTSxVQUE4QjtBQUFBLE1BQ2xDLFFBQVFBLFFBQU87QUFBQSxNQUNmLFNBQVNBLFFBQU87QUFBQSxNQUNoQixXQUFXLEtBQUssSUFBSSxJQUFJLFNBQVM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFDQSxRQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUUsU0FBUyxHQUFHO0FBQ2pDLGNBQVEsUUFBUSxLQUFLLE9BQU87QUFBQSxJQUM5QjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFVBQVUsZUFBZSxJQUFJLENBQUNBLFlBQVcsUUFBUUEsT0FBTSxDQUFDO0FBQzlELFFBQU0sUUFBUSxJQUFJLE9BQU87QUFDekIsU0FBTztBQUNUO0FBOUpBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7OztBQ09BLGVBQXNCLGlCQUNwQkMsT0FDQSxPQUNBLFNBQ2tDO0FBQ2xDLEVBQU8sVUFBVSw2Q0FBNkM7QUFFOUQsUUFBTSxPQUFPLElBQUksU0FBUyxNQUFNLElBQUksT0FBSyxFQUFFLFFBQVEsR0FBRztBQUFBLElBQ3BELFdBQVc7QUFBQSxFQUNiLENBQUM7QUFFRCxRQUFNLGNBQXlDLE1BQU0sUUFBUTtBQUFBLElBQzNELE1BQU0sSUFBSSxDQUFDLFNBQVNBLE1BQUssS0FBSyxzQkFBc0IsQ0FBQyxLQUFLLE1BQW9DLE9BQU8sR0FBRztBQUFBLE1BQ3RHLElBQUksQ0FBQyxNQUFNO0FBQ1QsYUFBSyxTQUFTLEVBQUUsUUFBUTtBQUN4QixxQkFBYSxDQUFDO0FBQUEsTUFDaEI7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFDQSxPQUFLLEtBQUs7QUFDVixRQUFNLGFBQWEsUUFBUSxXQUFXO0FBRXRDLEVBQU8sVUFBVSx3QkFBd0I7QUFDekMsZUFBYSxNQUFNLFFBQVEsV0FBVyxNQUFNO0FBQzVDLFNBQU87QUFFVDtBQXJDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBOzs7QUNKQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNGQTtBQUFBLCtDQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJQyxNQUFLLFFBQVE7QUFDakIsUUFBSUMsUUFBTyxRQUFRO0FBQ25CLFFBQUlDLFFBQU8sUUFBUTtBQUVuQixRQUFJO0FBQ0osUUFBTSxPQUFOLE1BQVc7QUFBQSxNQUNQLFlBQVksTUFBTTtBQUVkLGVBQU8sUUFBUSxDQUFDO0FBQ2hCLGFBQUssWUFBWSxLQUFLLGFBQWE7QUFDbkMsYUFBSyxjQUFjLE9BQU8sS0FBSyxnQkFBZ0IsWUFBWSxLQUFLLGNBQWM7QUFDOUUsYUFBSyxTQUFTLEtBQUssVUFBVTtBQUM3QixhQUFLLHFCQUFxQixPQUFPLEtBQUssdUJBQXVCLFlBQVksS0FBSyxxQkFBcUI7QUFFbkcsYUFBSyxRQUFRLHVCQUFPLE9BQU8sSUFBSTtBQUMvQixhQUFLLGFBQWEsQ0FBQztBQUFBLE1BQ3ZCO0FBQUEsTUFDQSxNQUFNLE1BQU07QUFDUixZQUFJLE9BQU8sVUFBVSxPQUFPLFVBQVU7QUFDbEMsaUJBQU8sS0FBSyxlQUFlLFVBQVUsSUFBSSxHQUFHLFNBQVM7QUFBQSxRQUN6RDtBQUNBLGNBQU0sTUFBTSxLQUFLLE1BQU07QUFDdkIsWUFBSSxLQUFLLFdBQVk7QUFBQSxRQUFFO0FBQ3ZCLFlBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxPQUFPO0FBQ2pDLGVBQUssS0FBSyxJQUFJO0FBQ2xCLGFBQUssTUFBTSxXQUFZO0FBQUEsUUFBRTtBQUN6QixZQUFJLENBQUMsS0FBSyxNQUFNLEtBQUs7QUFDakIsZUFBSyxnQkFBZ0I7QUFFekIsWUFBSSxDQUFDLEtBQUssTUFBTSxLQUFLLFFBQVEsUUFBUSxLQUFLLGFBQWE7QUFDbkQsZUFBSyxNQUFNLEtBQUssUUFBUSxPQUFPO0FBSS9CLGVBQUssY0FBYztBQUFBLFlBQ2YsV0FBVyxLQUFLO0FBQUEsWUFDaEIsUUFBUSxLQUFLO0FBQUEsWUFDYjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0wsT0FDSztBQUNELGFBQUc7QUFBQSxRQUNQO0FBQ0EsZUFBTyxLQUFLLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxLQUFLLE1BQU0sS0FBSyxRQUFRLFFBQVEsR0FBRyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDNUY7QUFBQSxNQUNBLE1BQU07QUFDRixjQUFNLE9BQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQ2pELGNBQU0sV0FBVyxLQUFLLE1BQU07QUFDNUIsY0FBTSxTQUFTLEtBQUssTUFBTTtBQUMxQixjQUFNLFdBQVcsS0FBSyxNQUFNO0FBQzVCLFlBQUksS0FBSyxXQUFZO0FBQUEsUUFBRTtBQUN2QixZQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsT0FBTztBQUNqQyxlQUFLLEtBQUssSUFBSTtBQUNsQixZQUFJLENBQUMsS0FBSyxNQUFNLEtBQUs7QUFDakIsZUFBSyxnQkFBZ0I7QUFDekIsWUFBSSxNQUFNLGFBQWEsSUFBSSxXQUFXO0FBQ3RDLFlBQUksS0FBSyxNQUFNLEtBQUssUUFBUSxXQUFXO0FBQ25DLGdCQUFNLFFBQVEsS0FBSyxNQUFNLEtBQUssUUFBUTtBQUN0QyxnQkFBTSxNQUFNLGFBQWEsSUFBSSxRQUFRO0FBQUEsUUFDekM7QUFFQSxZQUFJLENBQUMsS0FBSyxNQUFNLEtBQUssUUFBUSxhQUFhLEtBQUssYUFBYTtBQUN4RCxlQUFLLE1BQU0sS0FBSyxRQUFRLFlBQVk7QUFBQSxZQUNoQyxLQUFLO0FBQUEsWUFDTCxPQUFPO0FBQUEsVUFDWDtBQUlBLGVBQUssY0FBYztBQUFBLFlBQ2YsV0FBVyxLQUFLO0FBQUEsWUFDaEIsUUFBUSxLQUFLO0FBQUEsWUFDYjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0wsT0FDSztBQUNELGFBQUc7QUFBQSxRQUNQO0FBR0EsY0FBTSxTQUFTLENBQUMsR0FBRztBQUNuQixZQUFJLENBQUMsSUFBSSxRQUFRLElBQUk7QUFDakIsaUJBQU8sS0FBSyxRQUFRO0FBQ3hCLGVBQU8sS0FBSyxPQUFPLE1BQU0sS0FBSyxRQUFRLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFBQSxNQUM3RDtBQUFBLE1BQ0EsVUFBVSxRQUFRO0FBQ2QsYUFBSyxTQUFTO0FBQUEsTUFDbEI7QUFBQSxNQUNBLFlBQVk7QUFDUixlQUFPLEtBQUs7QUFBQSxNQUNoQjtBQUFBLE1BQ0EsYUFBYSxLQUFLO0FBQ2QsWUFBSSxDQUFDLEtBQUssTUFBTSxLQUFLO0FBQ2pCLGVBQUssZ0JBQWdCO0FBQ3pCLG1CQUFXLE9BQU8sS0FBSztBQUNuQixjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssS0FBSyxHQUFHLEdBQUc7QUFDaEQsaUJBQUssTUFBTSxLQUFLLFFBQVEsT0FBTyxJQUFJO0FBQUEsVUFDdkM7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQ0EsZUFBZSxVQUFVLE1BQU07QUFDM0IsWUFBSSxNQUFNO0FBQ1YsY0FBTSxRQUFRLFNBQVUsTUFBTSxHQUFHO0FBQzdCLGdCQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLGlCQUFPO0FBQ1AsY0FBSSxPQUFPLFFBQVEsYUFBYTtBQUM1QixtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKLENBQUM7QUFDRCxlQUFPLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUNuRTtBQUFBLE1BQ0EsY0FBYyxNQUFNO0FBQ2hCLGFBQUssV0FBVyxLQUFLLElBQUk7QUFDekIsWUFBSSxLQUFLLFdBQVcsV0FBVztBQUMzQixlQUFLLG1CQUFtQjtBQUFBLE1BQ2hDO0FBQUEsTUFDQSxxQkFBcUI7QUFDakIsY0FBTSxRQUFRO0FBQ2QsY0FBTSxPQUFPLEtBQUssV0FBVztBQUU3QixjQUFNLFlBQVksS0FBSztBQUN2QixjQUFNLFNBQVMsS0FBSztBQUNwQixjQUFNLEtBQUssS0FBSztBQUNoQixjQUFNLGVBQWUsS0FBSyxtQkFBbUIsV0FBVyxNQUFNO0FBQzlELGNBQU0sbUJBQW1CLEtBQUssVUFBVSxLQUFLLE1BQU0sU0FBUyxNQUFNLENBQUM7QUFDbkUsYUFBSyxHQUFHLFVBQVUsY0FBYyxrQkFBa0IsU0FBUyxTQUFVLEtBQUs7QUFDdEUsZ0JBQU0sV0FBVyxNQUFNO0FBQ3ZCLGNBQUksTUFBTSxXQUFXLFNBQVM7QUFDMUIsa0JBQU0sbUJBQW1CO0FBQzdCLGFBQUcsR0FBRztBQUFBLFFBQ1YsQ0FBQztBQUFBLE1BQ0w7QUFBQSxNQUNBLGtCQUFrQjtBQUNkLFlBQUksZUFBZSxDQUFDO0FBQ3BCLGNBQU0sZUFBZSxLQUFLLG1CQUFtQixLQUFLLFdBQVcsS0FBSyxNQUFNO0FBQ3hFLFlBQUk7QUFFQSxjQUFJLEtBQUssR0FBRyxjQUFjO0FBQ3RCLDJCQUFlLEtBQUssTUFBTSxLQUFLLEdBQUcsYUFBYSxjQUFjLE9BQU8sQ0FBQztBQUFBLFVBQ3pFO0FBQUEsUUFDSixTQUNPLEtBQVA7QUFDSSxjQUFJLGVBQWUsYUFBYTtBQUM1QixnQkFBSSxVQUFVLHFCQUFxQjtBQUFBLFVBQ3ZDO0FBQ0EsY0FBSSxJQUFJLFNBQVM7QUFDYiwyQkFBZSxDQUFDO0FBQUE7QUFFaEIsa0JBQU07QUFBQSxRQUNkO0FBQ0EsYUFBSyxNQUFNLEtBQUssVUFBVTtBQUFBLE1BQzlCO0FBQUEsTUFDQSxtQkFBbUIsV0FBVyxRQUFRO0FBQ2xDLFlBQUksT0FBTyxLQUFLLFFBQVEsV0FBVyxNQUFNLFNBQVMsT0FBTztBQUN6RCxZQUFJLEtBQUssc0JBQXNCLENBQUMsS0FBSyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsT0FBTyxZQUFZLEdBQUcsR0FBRztBQUVwRixnQkFBTSxlQUFlLEtBQUssUUFBUSxXQUFXLE1BQU0sT0FBTyxNQUFNLEdBQUcsRUFBRSxLQUFLLE9BQU87QUFDakYsY0FBSSxLQUFLLGdCQUFnQixZQUFZO0FBQ2pDLG1CQUFPO0FBQUEsUUFDZjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxnQkFBZ0IsTUFBTTtBQUNsQixlQUFPLEtBQUssT0FBTyxJQUFJO0FBQUEsTUFDM0I7QUFBQSxJQUNKO0FBQ0EsYUFBUyxPQUFPLE1BQU0sT0FBTztBQUN6QixhQUFPO0FBQ1AsWUFBTUMsUUFBTyxJQUFJLEtBQUssSUFBSTtBQUMxQixhQUFPO0FBQUEsUUFDSCxJQUFJQSxNQUFLLEdBQUcsS0FBS0EsS0FBSTtBQUFBLFFBQ3JCLEtBQUtBLE1BQUssSUFBSSxLQUFLQSxLQUFJO0FBQUEsUUFDdkIsV0FBV0EsTUFBSyxVQUFVLEtBQUtBLEtBQUk7QUFBQSxRQUNuQyxXQUFXQSxNQUFLLFVBQVUsS0FBS0EsS0FBSTtBQUFBLFFBQ25DLGNBQWNBLE1BQUssYUFBYSxLQUFLQSxLQUFJO0FBQUEsUUFDekMsUUFBUUEsTUFBSztBQUFBLE1BQ2pCO0FBQUEsSUFDSjtBQUVBLFFBQUksbUJBQW1CO0FBQUEsTUFDbkIsSUFBSTtBQUFBLFFBQ0EsY0FBY0gsSUFBRztBQUFBLFFBQ2pCLFdBQVdBLElBQUc7QUFBQSxNQUNsQjtBQUFBLE1BQ0EsUUFBUUMsTUFBSztBQUFBLE1BQ2IsU0FBU0MsTUFBSztBQUFBLE1BQ2QsUUFBUSxDQUFDLFNBQVM7QUFDZCxZQUFJO0FBQ0EsaUJBQU9GLElBQUcsU0FBUyxJQUFJLEVBQUUsT0FBTztBQUFBLFFBQ3BDLFNBQ08sS0FBUDtBQUNJLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsUUFBTSxPQUFPLENBQUMsU0FBUztBQUNuQixhQUFPLE9BQU8sTUFBTSxnQkFBZ0I7QUFBQSxJQUN4QztBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzFNakIsSUFBQUssaUJBQUE7QUFBQSx1REFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSUMsUUFBTyxRQUFRO0FBQ25CLFFBQUlDLE1BQUssUUFBUTtBQUNqQixRQUFJQyxRQUFPLFFBQVE7QUFFbkIsYUFBUyxVQUFVLEtBQUs7QUFDcEIsWUFBTSxjQUFjLFFBQVEsSUFBSSxZQUFZLEtBQUssUUFBUSxJQUFJLFlBQVk7QUFDekUsVUFBSSxDQUFDLGFBQWE7QUFDZCxjQUFNLElBQUksWUFBWTtBQUFBLE1BQzFCO0FBQ0EsVUFBSSxJQUFJLFFBQVEsR0FBRyxNQUFNLE1BQU0sSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJO0FBQ3BELGVBQU87QUFBQSxNQUNYLE9BQ0s7QUFDRCxZQUFJLFlBQVk7QUFDaEIsWUFBSSxlQUFlO0FBQ25CLGNBQU0saUJBQWlCLElBQUksTUFBTSxLQUFLO0FBQ3RDLGlCQUFTLElBQUksaUJBQWlCLGVBQWUsR0FBRyxTQUFTLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSztBQUM3RSxjQUFJLE1BQU0sSUFBSSxPQUFPLENBQUM7QUFDdEIsY0FBSSxjQUFjO0FBQ2QsMkJBQWU7QUFDZixrQkFBTSxJQUFJLFlBQVk7QUFBQSxVQUMxQjtBQUNBLGNBQUksTUFBTSxNQUFNLFFBQVEsT0FBTyxRQUFRLE1BQU07QUFDekMsMkJBQWU7QUFBQSxVQUNuQixXQUNTLFFBQVEsT0FBTyxRQUFRLEtBQUs7QUFDakMseUJBQWE7QUFBQSxVQUNqQjtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxhQUFTLFdBQVcsS0FBSyxZQUFZO0FBQ2pDLFlBQU0sWUFBWSxJQUFJLFlBQVk7QUFDbEMsbUJBQWEsY0FBYztBQUMzQixVQUFJLGVBQWU7QUFDbkIsZUFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSztBQUNqQyxjQUFNLFdBQVcsVUFBVSxPQUFPLENBQUM7QUFDbkMsY0FBTSxZQUFZLElBQUksT0FBTyxDQUFDO0FBQzlCLFlBQUksYUFBYSxhQUFhLElBQUksR0FBRztBQUNqQywwQkFBZ0IsR0FBRyxhQUFhLFVBQVUsT0FBTyxDQUFDO0FBQUEsUUFDdEQsT0FDSztBQUNELDBCQUFnQjtBQUFBLFFBQ3BCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyxnQkFBZ0IsR0FBRztBQUN4QixVQUFJLE1BQU0sUUFBUSxNQUFNO0FBQ3BCLGVBQU87QUFDWCxVQUFJLE9BQU8sTUFBTTtBQUNiLGVBQU87QUFDWCxVQUFJLGlCQUFpQixLQUFLLENBQUM7QUFDdkIsZUFBTztBQUNYLFVBQUksU0FBUyxLQUFLLENBQUM7QUFDZixlQUFPO0FBQ1gsYUFBTyw0Q0FBNEMsS0FBSyxDQUFDO0FBQUEsSUFDN0Q7QUFFQSxhQUFTLGtCQUFrQixXQUFXO0FBQ2xDLFVBQUksTUFBTSxRQUFRLFNBQVMsR0FBRztBQUMxQixlQUFPLFVBQVUsSUFBSSxPQUFLLE9BQU8sTUFBTSxXQUFXLElBQUksS0FBSyxDQUFDO0FBQUEsTUFDaEU7QUFDQSxrQkFBWSxVQUFVLEtBQUs7QUFDM0IsVUFBSSxJQUFJO0FBQ1IsVUFBSSxRQUFRO0FBQ1osVUFBSSxJQUFJO0FBQ1IsVUFBSSxVQUFVO0FBQ2QsWUFBTSxPQUFPLENBQUM7QUFDZCxlQUFTLEtBQUssR0FBRyxLQUFLLFVBQVUsUUFBUSxNQUFNO0FBQzFDLGdCQUFRO0FBQ1IsWUFBSSxVQUFVLE9BQU8sRUFBRTtBQUN2QixZQUFJLE1BQU0sT0FBTyxDQUFDLFNBQVM7QUFDdkIsY0FBSSxFQUFFLFVBQVUsTUFBTTtBQUNsQjtBQUFBLFVBQ0o7QUFDQTtBQUFBLFFBQ0o7QUFDQSxZQUFJLE1BQU0sU0FBUztBQUNmLG9CQUFVO0FBQUEsUUFDZCxZQUNVLE1BQU0sT0FBTyxNQUFNLFFBQVEsQ0FBQyxTQUFTO0FBQzNDLG9CQUFVO0FBQUEsUUFDZDtBQUNBLFlBQUksQ0FBQyxLQUFLO0FBQ04sZUFBSyxLQUFLO0FBQ2QsYUFBSyxNQUFNO0FBQUEsTUFDZjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBRUEsUUFBSTtBQUNKLEtBQUMsU0FBVUMsMEJBQXlCO0FBQ2hDLE1BQUFBLHlCQUF3QixhQUFhO0FBQ3JDLE1BQUFBLHlCQUF3QixZQUFZO0FBQ3BDLE1BQUFBLHlCQUF3QixZQUFZO0FBQ3BDLE1BQUFBLHlCQUF3QixXQUFXO0FBQUEsSUFDdkMsR0FBRyw0QkFBNEIsMEJBQTBCLENBQUMsRUFBRTtBQUU1RCxRQUFJO0FBQ0osUUFBTSxjQUFOLE1BQWtCO0FBQUEsTUFDZCxZQUFZLFFBQVE7QUFDaEIsZ0JBQVE7QUFBQSxNQUNaO0FBQUEsTUFDQSxNQUFNLFdBQVcsU0FBUztBQUN0QixjQUFNLE9BQU8sT0FBTyxPQUFPO0FBQUEsVUFDdkIsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsZUFBZTtBQUFBLFVBQ2YsZUFBZTtBQUFBLFVBQ2YsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsV0FBVztBQUFBLFVBQ1gsTUFBTTtBQUFBLFVBQ04sV0FBVztBQUFBLFVBQ1gsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFVBQ1IsSUFBSTtBQUFBLFVBQ0osS0FBSztBQUFBLFFBQ1QsR0FBRyxPQUFPO0FBQ1YsY0FBTSxPQUFPLGtCQUFrQixTQUFTO0FBQ3hDLGNBQU0sVUFBVSxlQUFlLE9BQU8sT0FBTyx1QkFBTyxPQUFPLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQztBQUM3RSxjQUFNLGdCQUFnQixPQUFPLE9BQU87QUFBQSxVQUNoQyxvQkFBb0I7QUFBQSxVQUNwQix3QkFBd0I7QUFBQSxVQUN4QixrQkFBa0I7QUFBQSxVQUNsQixnQkFBZ0I7QUFBQSxVQUNoQiw2QkFBNkI7QUFBQSxVQUM3Qiw0QkFBNEI7QUFBQSxVQUM1QixpQkFBaUI7QUFBQSxVQUNqQixzQkFBc0I7QUFBQSxVQUN0QixzQkFBc0I7QUFBQSxVQUN0QixtQkFBbUI7QUFBQSxVQUNuQixpQkFBaUI7QUFBQSxVQUNqQiw0QkFBNEI7QUFBQSxVQUM1QixjQUFjO0FBQUEsVUFDZCx1QkFBdUI7QUFBQSxVQUN2Qix1QkFBdUI7QUFBQSxVQUN2QixpQkFBaUI7QUFBQSxVQUNqQixnQkFBZ0I7QUFBQSxVQUNoQiwyQkFBMkI7QUFBQSxRQUMvQixHQUFHLEtBQUssYUFBYTtBQUNyQixjQUFNLFdBQVcsT0FBTyxPQUFPLHVCQUFPLE9BQU8sSUFBSSxHQUFHLEtBQUssT0FBTztBQUNoRSxjQUFNLGdCQUFnQixLQUFLLGlCQUFpQixDQUFDO0FBQzdDLGNBQU0sWUFBWSxLQUFLO0FBQ3ZCLGNBQU0saUJBQWlCLGNBQWM7QUFDckMsY0FBTSxlQUFlLGlCQUFpQixPQUFPO0FBQzdDLGNBQU0sYUFBYSx1QkFBTyxPQUFPLElBQUk7QUFDckMsY0FBTSxZQUFZLHVCQUFPLE9BQU8sSUFBSTtBQUNwQyxjQUFNLEtBQUssS0FBSyxNQUFNLE1BQU07QUFDNUIsY0FBTSxRQUFRO0FBQUEsVUFDVixTQUFTLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzNCLFFBQVEsdUJBQU8sT0FBTyxJQUFJO0FBQUEsVUFDMUIsT0FBTyx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUN6QixTQUFTLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzNCLFNBQVMsdUJBQU8sT0FBTyxJQUFJO0FBQUEsVUFDM0IsUUFBUSx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUMxQixXQUFXLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzdCLFNBQVMsdUJBQU8sT0FBTyxJQUFJO0FBQUEsVUFDM0IsT0FBTyx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUN6QixXQUFXLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzdCLE1BQU0sQ0FBQztBQUFBLFFBQ1g7QUFDQSxjQUFNLFdBQVc7QUFDakIsY0FBTSxpQkFBaUIsSUFBSSxPQUFPLFFBQVEsY0FBYyxxQkFBcUIsTUFBTTtBQUNuRixTQUFDLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxPQUFPLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDL0QsZ0JBQU0sTUFBTSxPQUFPLFFBQVEsV0FBVyxJQUFJLE1BQU07QUFDaEQsZ0JBQU0sYUFBYSxPQUFPLEtBQUssR0FBRyxFQUFFLElBQUksU0FBVUMsTUFBSztBQUNuRCxrQkFBTSxnQkFBZ0I7QUFBQSxjQUNsQixTQUFTO0FBQUEsY0FDVCxRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsWUFDWjtBQUNBLG1CQUFPLGNBQWNBO0FBQUEsVUFDekIsQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLElBQUk7QUFDdkIsY0FBSSxZQUFZO0FBQ1osa0JBQU0sWUFBWSxPQUFPO0FBQUEsVUFDN0I7QUFDQSxnQkFBTSxPQUFPLE9BQU87QUFDcEIsZ0JBQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUN2QixDQUFDO0FBQ0QsU0FBQyxFQUFFLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ2pFLGdCQUFNLE1BQU0sT0FBTztBQUNuQixnQkFBTSxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ3ZCLENBQUM7QUFDRCxTQUFDLEVBQUUsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxPQUFPLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDaEUsZ0JBQU0sUUFBUSxPQUFPO0FBQ3JCLGdCQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDdkIsQ0FBQztBQUNELFNBQUMsRUFBRSxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLE9BQU8sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUNoRSxnQkFBTSxRQUFRLE9BQU87QUFDckIsZ0JBQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUN2QixDQUFDO0FBQ0QsU0FBQyxFQUFFLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQy9ELGdCQUFNLE9BQU8sT0FBTztBQUNwQixnQkFBTSxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ3ZCLENBQUM7QUFDRCxTQUFDLEVBQUUsT0FBTyxLQUFLLGFBQWEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxPQUFPLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDbkUsZ0JBQU0sVUFBVSxPQUFPO0FBQ3ZCLGdCQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDdkIsQ0FBQztBQUNELFlBQUksT0FBTyxLQUFLLFNBQVMsVUFBVTtBQUMvQixpQkFBTyxRQUFRLEtBQUssSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQ2hELGdCQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzNCLG9CQUFNLE1BQU0sT0FBTztBQUNuQixvQkFBTSxLQUFLLEtBQUssR0FBRztBQUFBLFlBQ3ZCO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUNBLFlBQUksT0FBTyxLQUFLLFdBQVcsVUFBVTtBQUNqQyxpQkFBTyxRQUFRLEtBQUssTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQ2xELGdCQUFJLE9BQU8sVUFBVSxZQUFZO0FBQzdCLG9CQUFNLFVBQVUsT0FBTztBQUN2QixvQkFBTSxLQUFLLEtBQUssR0FBRztBQUFBLFlBQ3ZCO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUNBLFlBQUksT0FBTyxLQUFLLFdBQVcsYUFBYTtBQUNwQyxjQUFJLE1BQU0sUUFBUSxLQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUssV0FBVyxVQUFVO0FBQy9ELGFBQUMsRUFBRSxPQUFPLEtBQUssTUFBTSxFQUFFLE9BQU8sT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQzFELG9CQUFNLFFBQVEsT0FBTztBQUFBLFlBQ3pCLENBQUM7QUFBQSxVQUNMLFdBQ1MsT0FBTyxLQUFLLFdBQVcsVUFBVTtBQUN0QyxtQkFBTyxRQUFRLEtBQUssTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQ2xELGtCQUFJLE9BQU8sVUFBVSxhQUFhLE9BQU8sVUFBVSxZQUFZO0FBQzNELHNCQUFNLFFBQVEsT0FBTztBQUFBLGNBQ3pCO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0o7QUFDQSxzQkFBYyxLQUFLLEtBQUssU0FBUyxLQUFLLFNBQVMsTUFBTSxNQUFNO0FBQzNELGVBQU8sS0FBSyxRQUFRLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDekMsV0FBQyxNQUFNLFFBQVEsUUFBUSxDQUFDLEdBQUcsUUFBUSxTQUFVLE9BQU87QUFDaEQscUJBQVMsU0FBUyxTQUFTO0FBQUEsVUFDL0IsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUNELFlBQUlDLFNBQVE7QUFDWiwyQkFBbUI7QUFDbkIsWUFBSSxXQUFXLENBQUM7QUFDaEIsY0FBTSxPQUFPLE9BQU8sT0FBTyx1QkFBTyxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDekQsY0FBTSxhQUFhLENBQUM7QUFDcEIsaUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDbEMsZ0JBQU0sTUFBTSxLQUFLO0FBQ2pCLGdCQUFNLGVBQWUsSUFBSSxRQUFRLFVBQVUsS0FBSztBQUNoRCxjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJLFFBQVEsUUFBUSxxQkFBcUIsR0FBRyxHQUFHO0FBQzNDLDJCQUFlLEdBQUc7QUFBQSxVQUN0QixXQUNTLGFBQWEsTUFBTSxXQUFXLEdBQUc7QUFDdEMsMkJBQWUsR0FBRztBQUNsQjtBQUFBLFVBQ0osV0FDUyxJQUFJLE1BQU0sUUFBUSxLQUFNLENBQUMsY0FBYywwQkFBMEIsSUFBSSxNQUFNLE9BQU8sR0FBSTtBQUMzRixnQkFBSSxJQUFJLE1BQU0sd0JBQXdCO0FBQ3RDLGdCQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHO0FBQ2pELGtCQUFJLGdCQUFnQixFQUFFLElBQUksTUFBTSxNQUFNLEdBQUc7QUFDckMsb0JBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUFBLGNBQ3BDLFdBQ1MsZ0JBQWdCLEVBQUUsSUFBSSxNQUFNLEtBQUssTUFBTSxPQUFPO0FBQ25ELG9CQUFJLFNBQVMsR0FBRyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUU7QUFBQSxjQUNwQyxPQUNLO0FBQ0QsdUJBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUFBLGNBQ3JCO0FBQUEsWUFDSjtBQUFBLFVBQ0osV0FDUyxJQUFJLE1BQU0sY0FBYyxLQUFLLGNBQWMscUJBQXFCO0FBQ3JFLGdCQUFJLElBQUksTUFBTSxjQUFjO0FBQzVCLGdCQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHO0FBQ2pELG9CQUFNLEVBQUU7QUFDUixxQkFBTyxLQUFLLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUs7QUFBQSxZQUNwRTtBQUFBLFVBQ0osV0FDUyxJQUFJLE1BQU0sT0FBTyxLQUFNLENBQUMsY0FBYywwQkFBMEIsSUFBSSxNQUFNLFNBQVMsR0FBSTtBQUM1RixnQkFBSSxJQUFJLE1BQU0sVUFBVTtBQUN4QixnQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRztBQUNqRCxvQkFBTSxFQUFFO0FBQ1Isa0JBQUksZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDcEMsb0JBQUksU0FBUyxHQUFHLEtBQUssSUFBSTtBQUFBLGNBQzdCLFdBQ1MsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLE1BQU0sT0FBTztBQUNsRCxvQkFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJO0FBQUEsY0FDN0IsT0FDSztBQUNELHVCQUFPLEtBQUssSUFBSTtBQUNoQixvQkFBSSxTQUFTLFdBQWMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxLQUN2QyxLQUFLLE1BQU0sUUFBUSxNQUNuQixDQUFDLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxLQUNqQyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3JDLHlCQUFPLEtBQUssSUFBSTtBQUNoQjtBQUFBLGdCQUNKLFdBQ1MsaUJBQWlCLEtBQUssSUFBSSxHQUFHO0FBQ2xDLHlCQUFPLEtBQUssSUFBSTtBQUNoQjtBQUFBLGdCQUNKLE9BQ0s7QUFDRCx5QkFBTyxLQUFLLGFBQWEsR0FBRyxDQUFDO0FBQUEsZ0JBQ2pDO0FBQUEsY0FDSjtBQUFBLFlBQ0o7QUFBQSxVQUNKLFdBQ1MsSUFBSSxNQUFNLFVBQVUsR0FBRztBQUM1QixnQkFBSSxJQUFJLE1BQU0sc0JBQXNCO0FBQ3BDLGdCQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHO0FBQ2pELHFCQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFBQSxZQUNyQjtBQUFBLFVBQ0osV0FDUyxJQUFJLE1BQU0sU0FBUyxLQUFLLENBQUMsSUFBSSxNQUFNLFFBQVEsR0FBRztBQUNuRCxtQkFBTyxLQUFLLElBQUk7QUFDaEIsZ0JBQUksSUFBSSxNQUFNLFdBQVc7QUFDekIsZ0JBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUc7QUFDakQsb0JBQU0sRUFBRTtBQUNSLGtCQUFJLFNBQVMsVUFBYSxDQUFDLEtBQUssTUFBTSxJQUFJLEtBQ3RDLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEtBQ2pDLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDckMsdUJBQU8sS0FBSyxJQUFJO0FBQ2hCO0FBQUEsY0FDSixPQUNLO0FBQ0QsdUJBQU8sS0FBSyxhQUFhLEdBQUcsQ0FBQztBQUFBLGNBQ2pDO0FBQUEsWUFDSjtBQUFBLFVBQ0osV0FDUyxJQUFJLE1BQU0sU0FBUyxLQUFLLENBQUMsSUFBSSxNQUFNLFFBQVEsR0FBRztBQUNuRCxzQkFBVSxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFO0FBQ25DLHFCQUFTO0FBQ1QscUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDckMscUJBQU8sSUFBSSxNQUFNLElBQUksQ0FBQztBQUN0QixrQkFBSSxRQUFRLElBQUksTUFBTSxRQUFRLElBQUksT0FBTyxLQUFLO0FBQzFDLHdCQUFRLElBQUksTUFBTSxJQUFJLENBQUM7QUFDdkIsc0JBQU0sUUFBUTtBQUNkLG9CQUFJLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3BDLHNCQUFJLFNBQVMsR0FBRyxLQUFLLE1BQU0sS0FBSztBQUFBLGdCQUNwQyxXQUNTLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxNQUFNLE9BQU87QUFDbEQsc0JBQUksU0FBUyxHQUFHLEtBQUssTUFBTSxLQUFLO0FBQUEsZ0JBQ3BDLE9BQ0s7QUFDRCx5QkFBTyxLQUFLLEtBQUs7QUFBQSxnQkFDckI7QUFDQSx5QkFBUztBQUNUO0FBQUEsY0FDSjtBQUNBLGtCQUFJLFNBQVMsS0FBSztBQUNkLHVCQUFPLFFBQVEsSUFBSSxJQUFJO0FBQ3ZCO0FBQUEsY0FDSjtBQUNBLGtCQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsS0FDMUIsMkJBQTJCLEtBQUssSUFBSSxLQUNwQyxnQkFBZ0IsTUFBTSxNQUFNLEtBQUssTUFBTSxPQUFPO0FBQzlDLHVCQUFPLFFBQVEsSUFBSSxJQUFJO0FBQ3ZCLHlCQUFTO0FBQ1Q7QUFBQSxjQUNKO0FBQ0Esa0JBQUksUUFBUSxJQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUcsTUFBTSxJQUFJLEdBQUc7QUFDOUMsdUJBQU8sUUFBUSxJQUFJLElBQUk7QUFDdkIseUJBQVM7QUFDVDtBQUFBLGNBQ0osT0FDSztBQUNELHVCQUFPLFFBQVEsSUFBSSxhQUFhLFFBQVEsRUFBRSxDQUFDO0FBQUEsY0FDL0M7QUFBQSxZQUNKO0FBQ0Esa0JBQU0sSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNwQixnQkFBSSxDQUFDLFVBQVUsUUFBUSxLQUFLO0FBQ3hCLGtCQUFJLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3BDLG9CQUFJLFNBQVMsR0FBRyxLQUFLLElBQUk7QUFBQSxjQUM3QixXQUNTLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxNQUFNLE9BQU87QUFDbEQsb0JBQUksU0FBUyxHQUFHLEtBQUssSUFBSTtBQUFBLGNBQzdCLE9BQ0s7QUFDRCx1QkFBTyxLQUFLLElBQUk7QUFDaEIsb0JBQUksU0FBUyxXQUFjLENBQUMsY0FBYyxLQUFLLElBQUksS0FDL0MsS0FBSyxNQUFNLFFBQVEsTUFDbkIsQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssS0FDakMsQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sR0FBRztBQUNyQyx5QkFBTyxLQUFLLElBQUk7QUFDaEI7QUFBQSxnQkFDSixXQUNTLGlCQUFpQixLQUFLLElBQUksR0FBRztBQUNsQyx5QkFBTyxLQUFLLElBQUk7QUFDaEI7QUFBQSxnQkFDSixPQUNLO0FBQ0QseUJBQU8sS0FBSyxhQUFhLEdBQUcsQ0FBQztBQUFBLGdCQUNqQztBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQUEsVUFDSixXQUNTLElBQUksTUFBTSxVQUFVLEtBQ3pCLElBQUksTUFBTSxRQUFRLEtBQ2xCLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sS0FBSyxHQUFHO0FBQzVDLGtCQUFNLElBQUksTUFBTSxDQUFDO0FBQ2pCLG1CQUFPLEtBQUssYUFBYSxHQUFHLENBQUM7QUFBQSxVQUNqQyxXQUNTLFFBQVEsTUFBTTtBQUNuQix1QkFBVyxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQzNCO0FBQUEsVUFDSixXQUNTLGNBQWMsdUJBQXVCO0FBQzFDLHVCQUFXLEtBQUssTUFBTSxDQUFDO0FBQ3ZCO0FBQUEsVUFDSixPQUNLO0FBQ0QsMkJBQWUsR0FBRztBQUFBLFVBQ3RCO0FBQUEsUUFDSjtBQUNBLHFCQUFhLE1BQU0sSUFBSTtBQUN2QixxQkFBYSxNQUFNLEtBQUs7QUFDeEIsa0JBQVUsSUFBSTtBQUNkLHlCQUFpQjtBQUNqQixnQ0FBd0IsTUFBTSxNQUFNLFNBQVMsVUFBVSxJQUFJO0FBQzNELHVCQUFlLElBQUk7QUFDbkIsWUFBSSxjQUFjO0FBQ2QsNkJBQW1CLElBQUk7QUFDM0IsZUFBTyxLQUFLLE1BQU0sTUFBTSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQzdDLGNBQUksQ0FBQyxPQUFPLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQztBQUM1QixtQkFBTyxLQUFLLENBQUM7QUFBQSxRQUNyQixDQUFDO0FBQ0QsWUFBSSxrQkFBa0IsU0FBUztBQUMzQixlQUFLLGdCQUFnQixDQUFDO0FBQzFCLGlCQUFTLFFBQVEsU0FBVSxLQUFLO0FBQzVCLGVBQUssY0FBYyxLQUFLLEdBQUc7QUFBQSxRQUMvQixDQUFDO0FBQ0QsWUFBSSxjQUFjLDJCQUEyQixjQUFjLGlCQUFpQjtBQUN4RSxpQkFBTyxLQUFLLElBQUksRUFBRSxPQUFPLFNBQU8sUUFBUSxRQUFRLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxRQUFRLFNBQU87QUFDOUUsbUJBQU8sS0FBSztBQUFBLFVBQ2hCLENBQUM7QUFBQSxRQUNMO0FBQ0EsWUFBSSxjQUFjLGtCQUFrQjtBQUNoQyxXQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sS0FBSyxPQUFPLEVBQUUsSUFBSSxPQUFLLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxXQUFTO0FBQ3JFLGdCQUFJLGNBQWMsMkJBQTJCLE1BQU0sU0FBUyxHQUFHLEdBQUc7QUFDOUQscUJBQU8sS0FBSyxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksVUFBUSxVQUFVLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRztBQUFBLFlBQ3RFO0FBQ0EsbUJBQU8sS0FBSztBQUFBLFVBQ2hCLENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsZUFBZSxLQUFLO0FBQ3pCLGdCQUFNLHFCQUFxQixrQkFBa0IsS0FBSyxHQUFHO0FBQ3JELGNBQUksT0FBTyx1QkFBdUIsWUFBWSxPQUFPLHVCQUF1QixVQUFVO0FBQ2xGLGlCQUFLLEVBQUUsS0FBSyxrQkFBa0I7QUFBQSxVQUNsQztBQUFBLFFBQ0o7QUFDQSxpQkFBUyxTQUFTLEdBQUcsS0FBS0MsT0FBTSxtQkFBbUI7QUFDL0MsY0FBSTtBQUNKLGNBQUksUUFBUSxnQkFBZ0IsS0FBSyxNQUFNLEtBQUs7QUFDNUMsa0JBQVEsT0FBTyxVQUFVLFlBQVksTUFBTSxLQUFLLElBQUksSUFBSTtBQUN4RCxjQUFJLFVBQVUsR0FBRztBQUNiLGdCQUFJLENBQUMsWUFBWSxpQkFBaUIsR0FBRztBQUNqQyxjQUFBRCxTQUFRLE1BQU0sR0FBRywrQkFBK0IsR0FBRyxDQUFDO0FBQUEsWUFDeEQ7QUFDQSxtQkFBTyxLQUFLLGFBQWEsR0FBRyxDQUFDO0FBQzdCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUksWUFBWSxZQUFZLGlCQUFpQixJQUFJLElBQUk7QUFDckQsY0FBSSxjQUFjLHVCQUF1QjtBQUNyQyxnQkFBSUMsTUFBSyxVQUFVLElBQUksS0FBSyxZQUFZLE9BQU87QUFDM0MsY0FBQUQsU0FBUSxNQUFNLEdBQUcsc0NBQXNDLEdBQUcsQ0FBQztBQUFBLFlBQy9EO0FBQ0Esd0JBQVk7QUFBQSxVQUNoQixPQUNLO0FBQ0QsaUJBQUssS0FBSyxJQUFJLEdBQUcsS0FBS0MsTUFBSyxRQUFRLE1BQU07QUFDckMsa0JBQUksQ0FBQ0EsTUFBSyxJQUFJLE1BQU0sVUFBVSxLQUFLQSxNQUFLLElBQUksTUFBTSxRQUFRLEtBQUsscUJBQXFCQSxNQUFLLEdBQUc7QUFDeEY7QUFBQTtBQUVBO0FBQUEsWUFDUjtBQUNBLGdCQUFJLFlBQVk7QUFDWixjQUFBRCxTQUFRLE1BQU0sR0FBRyxzQ0FBc0MsR0FBRyxDQUFDO0FBQUEsVUFDbkU7QUFDQSxjQUFJLFdBQVcsS0FBSyxJQUFJLFdBQVcsS0FBSztBQUN4QyxjQUFJLENBQUMsWUFBWSxpQkFBaUIsS0FBSyxXQUFXLEdBQUc7QUFDakQsbUJBQU8sS0FBSyxpQkFBaUI7QUFDN0I7QUFBQSxVQUNKO0FBQ0EsZUFBSyxLQUFLLElBQUksR0FBRyxLQUFNLFdBQVcsSUFBSSxHQUFJLE1BQU07QUFDNUMsbUJBQU8sS0FBS0MsTUFBSyxHQUFHO0FBQUEsVUFDeEI7QUFDQSxpQkFBUSxJQUFJO0FBQUEsUUFDaEI7QUFDQSxpQkFBUyxTQUFTLEdBQUcsS0FBS0EsT0FBTSxtQkFBbUI7QUFDL0MsY0FBSSxZQUFZLENBQUM7QUFDakIsY0FBSSxPQUFPLHFCQUFxQkEsTUFBSyxJQUFJO0FBQ3pDLGdCQUFNLGFBQWEsZ0JBQWdCLEtBQUssTUFBTSxLQUFLO0FBQ25ELGNBQUksZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEtBQUssQ0FBRSxpQkFBaUIsS0FBSyxJQUFJLEdBQUk7QUFDckUsc0JBQVUsS0FBSyxJQUFJO0FBQUEsVUFDdkIsV0FDUyxZQUFZLElBQUksS0FDcEIsWUFBWSxpQkFBaUIsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEdBQUk7QUFDNUcsZ0JBQUksU0FBUyxTQUFTLFFBQVc7QUFDN0Isb0JBQU0sU0FBUyxTQUFTO0FBQ3hCLDBCQUFZLE1BQU0sUUFBUSxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU07QUFBQSxZQUN4RDtBQUFBLFVBQ0osT0FDSztBQUNELGdCQUFJLENBQUMsWUFBWSxpQkFBaUIsR0FBRztBQUNqQyx3QkFBVSxLQUFLLGFBQWEsS0FBSyxpQkFBaUIsQ0FBQztBQUFBLFlBQ3ZEO0FBQ0EscUJBQVMsS0FBSyxJQUFJLEdBQUcsS0FBS0EsTUFBSyxRQUFRLE1BQU07QUFDekMsa0JBQUssQ0FBQyxjQUFjLG9CQUFvQixVQUFVLFNBQVMsS0FDdEQsY0FBYyxPQUFPLGVBQWUsWUFBWSxVQUFVLFVBQVU7QUFDckU7QUFDSixxQkFBT0EsTUFBSztBQUNaLGtCQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFLLENBQUMscUJBQXFCLElBQUk7QUFDckU7QUFDSixrQkFBSTtBQUNKLHdCQUFVLEtBQUssYUFBYSxLQUFLLElBQUksQ0FBQztBQUFBLFlBQzFDO0FBQUEsVUFDSjtBQUNBLGNBQUksT0FBTyxlQUFlLGFBQWMsY0FBYyxVQUFVLFNBQVMsY0FDcEUsTUFBTSxVQUFVLEtBQUssVUFBVSxXQUFXLElBQUs7QUFDaEQsWUFBQUQsU0FBUSxNQUFNLEdBQUcsc0NBQXNDLEdBQUcsQ0FBQztBQUFBLFVBQy9EO0FBQ0EsaUJBQU8sS0FBSyxTQUFTO0FBQ3JCLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGlCQUFTLE9BQU8sS0FBSyxLQUFLO0FBQ3RCLGNBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxjQUFjLHlCQUF5QjtBQUN4RCxrQkFBTSxRQUFRLElBQUksTUFBTSxHQUFHLEVBQUUsSUFBSSxTQUFVLE1BQU07QUFDN0MscUJBQU8sVUFBVSxJQUFJO0FBQUEsWUFDekIsQ0FBQyxFQUFFLEtBQUssR0FBRztBQUNYLHdCQUFZLEtBQUssS0FBSztBQUFBLFVBQzFCO0FBQ0EsZ0JBQU0sUUFBUSxhQUFhLEtBQUssR0FBRztBQUNuQyxnQkFBTSxXQUFXLElBQUksTUFBTSxHQUFHO0FBQzlCLGlCQUFPLE1BQU0sVUFBVSxLQUFLO0FBQzVCLGNBQUksTUFBTSxRQUFRLE1BQU07QUFDcEIsa0JBQU0sUUFBUSxLQUFLLFFBQVEsU0FBVSxHQUFHO0FBQ3BDLG9CQUFNLGdCQUFnQixFQUFFLE1BQU0sR0FBRztBQUNqQyxxQkFBTyxNQUFNLGVBQWUsS0FBSztBQUFBLFlBQ3JDLENBQUM7QUFBQSxVQUNMO0FBQ0EsY0FBSSxTQUFTLFNBQVMsS0FBSyxjQUFjLGlCQUFpQjtBQUN0RCxhQUFDLE1BQU0sUUFBUSxTQUFTLE9BQU8sQ0FBQyxHQUFHLFFBQVEsU0FBVSxHQUFHO0FBQ3BELGtCQUFJLGdCQUFnQixFQUFFLE1BQU0sR0FBRztBQUMvQixvQkFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLFFBQVE7QUFDNUIsZ0JBQUUsTUFBTTtBQUNSLDhCQUFnQixjQUFjLE9BQU8sQ0FBQztBQUN0QyxrQkFBSSxFQUFFLE1BQU0sUUFBUSxRQUFRLENBQUMsR0FBRyxTQUFTLGNBQWMsS0FBSyxHQUFHLENBQUMsR0FBRztBQUMvRCx1QkFBTyxNQUFNLGVBQWUsS0FBSztBQUFBLGNBQ3JDO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTDtBQUNBLGNBQUksZ0JBQWdCLEtBQUssTUFBTSxTQUFTLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sR0FBRztBQUM5RSxrQkFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTSxRQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELGlCQUFLLFFBQVEsU0FBVUQsTUFBSztBQUN4QixxQkFBTyxlQUFlLFlBQVlBLE1BQUs7QUFBQSxnQkFDbkMsWUFBWTtBQUFBLGdCQUNaLE1BQU07QUFDRix5QkFBTztBQUFBLGdCQUNYO0FBQUEsZ0JBQ0EsSUFBSUcsUUFBTztBQUNQLHdCQUFNLE9BQU9BLFdBQVUsV0FBVyxNQUFNLFVBQVVBLE1BQUssSUFBSUE7QUFBQSxnQkFDL0Q7QUFBQSxjQUNKLENBQUM7QUFBQSxZQUNMLENBQUM7QUFBQSxVQUNMO0FBQUEsUUFDSjtBQUNBLGlCQUFTLFlBQVksS0FBSyxPQUFPO0FBQzdCLGNBQUksRUFBRSxNQUFNLFFBQVEsUUFBUSxNQUFNLFFBQVEsS0FBSyxTQUFTO0FBQ3BELGtCQUFNLFFBQVEsT0FBTyxDQUFDLEtBQUs7QUFDM0IsdUJBQVcsU0FBUztBQUFBLFVBQ3hCO0FBQ0EsY0FBSSxFQUFFLE1BQU0sUUFBUSxVQUFVLE1BQU0sUUFBUSxPQUFPLFNBQVM7QUFDeEQsd0JBQVksT0FBTyxHQUFHO0FBQUEsVUFDMUI7QUFBQSxRQUNKO0FBQ0EsaUJBQVMsYUFBYSxLQUFLLEtBQUs7QUFDNUIsY0FBSSxPQUFPLFFBQVEsYUFDZCxJQUFJLE9BQU8sT0FBTyxJQUFJLE9BQU8sUUFDOUIsSUFBSSxJQUFJLFNBQVMsT0FBTyxJQUFJLElBQUk7QUFDaEMsa0JBQU0sSUFBSSxVQUFVLEdBQUcsSUFBSSxTQUFTLENBQUM7QUFBQSxVQUN6QztBQUNBLGNBQUksZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEtBQUssZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDekUsZ0JBQUksT0FBTyxRQUFRO0FBQ2Ysb0JBQU0sUUFBUTtBQUFBLFVBQ3RCO0FBQ0EsY0FBSSxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQ3ZCLElBQUksSUFBSSxTQUFVLEdBQUc7QUFBRSxtQkFBTyxrQkFBa0IsS0FBSyxDQUFDO0FBQUEsVUFBRyxDQUFDLElBQzFELGtCQUFrQixLQUFLLEdBQUc7QUFDaEMsY0FBSSxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sTUFBTSxZQUFZLEtBQUssS0FBSyxPQUFPLFVBQVUsWUFBWTtBQUMxRixvQkFBUSxVQUFVO0FBQUEsVUFDdEI7QUFDQSxjQUFJLGdCQUFnQixLQUFLLE1BQU0sU0FBUyxLQUFLLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQzdFLGdCQUFJLE1BQU0sUUFBUSxHQUFHO0FBQ2pCLHNCQUFRLElBQUksSUFBSSxDQUFDQyxTQUFRO0FBQUUsdUJBQU8sTUFBTSxVQUFVQSxJQUFHO0FBQUEsY0FBRyxDQUFDO0FBQUE7QUFFekQsc0JBQVEsTUFBTSxVQUFVLEdBQUc7QUFBQSxVQUNuQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGlCQUFTLGtCQUFrQixLQUFLLE9BQU87QUFDbkMsY0FBSSxDQUFDLGNBQWMsK0JBQStCLFFBQVE7QUFDdEQsbUJBQU87QUFDWCxjQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDckcsa0JBQU0scUJBQXFCLGdCQUFnQixLQUFLLEtBQUssY0FBYyxvQkFBcUIsT0FBTyxjQUFjLEtBQUssTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDL0ksZ0JBQUksc0JBQXVCLENBQUMsWUFBWSxLQUFLLEtBQUssZ0JBQWdCLEtBQUssTUFBTSxPQUFPLEdBQUk7QUFDcEYsc0JBQVEsT0FBTyxLQUFLO0FBQUEsWUFDeEI7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQ0EsaUJBQVMsVUFBVUMsT0FBTTtBQUNyQixnQkFBTSxlQUFlLHVCQUFPLE9BQU8sSUFBSTtBQUN2QyxrQ0FBd0IsY0FBYyxNQUFNLFNBQVMsUUFBUTtBQUM3RCxpQkFBTyxLQUFLLE1BQU0sT0FBTyxFQUFFLFFBQVEsU0FBVSxXQUFXO0FBQ3BELGtCQUFNLGFBQWFBLE1BQUssY0FBYyxhQUFhO0FBQ25ELGdCQUFJLFlBQVk7QUFDWixrQkFBSTtBQUNBLG9CQUFJLFNBQVM7QUFDYixzQkFBTSxxQkFBcUIsTUFBTSxRQUFRLE1BQU0sSUFBSSxHQUFHLFVBQVU7QUFDaEUsc0JBQU0sZ0JBQWdCLE1BQU0sUUFBUTtBQUNwQyxvQkFBSSxPQUFPLGtCQUFrQixZQUFZO0FBQ3JDLHNCQUFJO0FBQ0EsNkJBQVMsY0FBYyxrQkFBa0I7QUFBQSxrQkFDN0MsU0FDTyxHQUFQO0FBQ0ksNkJBQVM7QUFBQSxrQkFDYjtBQUNBLHNCQUFJLGtCQUFrQixPQUFPO0FBQ3pCLG9CQUFBSixTQUFRO0FBQ1I7QUFBQSxrQkFDSjtBQUFBLGdCQUNKLE9BQ0s7QUFDRCwyQkFBUyxNQUFNLFFBQVEsa0JBQWtCO0FBQUEsZ0JBQzdDO0FBQ0EsZ0NBQWdCLE1BQU07QUFBQSxjQUMxQixTQUNPLElBQVA7QUFDSSxvQkFBSSxHQUFHLFNBQVM7QUFDWixrQkFBQUEsU0FBUTtBQUFBLHlCQUNISSxNQUFLO0FBQ1Ysa0JBQUFKLFNBQVEsTUFBTSxHQUFHLGdDQUFnQyxVQUFVLENBQUM7QUFBQSxjQUNwRTtBQUFBLFlBQ0o7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsZ0JBQWdCLFFBQVEsTUFBTTtBQUNuQyxpQkFBTyxLQUFLLE1BQU0sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN2QyxrQkFBTSxRQUFRLE9BQU87QUFDckIsa0JBQU0sVUFBVSxPQUFPLE9BQU8sTUFBTSxNQUFNO0FBQzFDLGdCQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLLEtBQUssY0FBYyxpQkFBaUI7QUFDdkcsOEJBQWdCLE9BQU8sT0FBTztBQUFBLFlBQ2xDLE9BQ0s7QUFDRCxrQkFBSSxDQUFDLE9BQU8sTUFBTSxRQUFRLE1BQU0sR0FBRyxDQUFDLEtBQU0sZ0JBQWdCLFNBQVMsTUFBTSxNQUFNLEtBQUssY0FBYyxtQkFBb0I7QUFDbEgsdUJBQU8sU0FBUyxLQUFLO0FBQUEsY0FDekI7QUFBQSxZQUNKO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLG1CQUFtQjtBQUN4QixjQUFJLE9BQU8sa0JBQWtCLGFBQWE7QUFDdEMsMEJBQWMsUUFBUSxTQUFVLGNBQWM7QUFDMUMsOEJBQWdCLFlBQVk7QUFBQSxZQUNoQyxDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0o7QUFDQSxpQkFBUyxhQUFhSSxPQUFNLFlBQVk7QUFDcEMsY0FBSSxPQUFPLGNBQWM7QUFDckI7QUFDSixnQkFBTSxTQUFTLE9BQU8sY0FBYyxXQUFXLFlBQVk7QUFDM0QsZ0JBQU1DLE9BQU0sTUFBTSxJQUFJO0FBQ3RCLGlCQUFPLEtBQUtBLElBQUcsRUFBRSxRQUFRLFNBQVUsUUFBUTtBQUN2QyxnQkFBSSxXQUFXLE1BQU0sT0FBTyxZQUFZLFFBQVEsQ0FBQyxNQUFNLEdBQUc7QUFDdEQsb0JBQU0sT0FBTyxPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksU0FBVSxLQUFLLEdBQUc7QUFDbEQsb0JBQUksTUFBTSxHQUFHO0FBQ1Qsd0JBQU0sSUFBSSxVQUFVLE9BQU8sTUFBTTtBQUFBLGdCQUNyQztBQUNBLHVCQUFPLFVBQVUsR0FBRztBQUFBLGNBQ3hCLENBQUM7QUFDRCxtQkFBTSxjQUFjLE1BQU0sUUFBUSxLQUFLLEtBQUssR0FBRyxNQUFPLENBQUMsZUFBZSxDQUFDLE9BQU9ELE9BQU0sSUFBSSxHQUFHO0FBQ3ZGLHVCQUFPLEtBQUssS0FBSyxHQUFHLEdBQUdDLEtBQUksT0FBTztBQUFBLGNBQ3RDO0FBQUEsWUFDSjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyxlQUFlRCxPQUFNO0FBQzFCLGNBQUk7QUFDSixnQkFBTSxVQUFVLG9CQUFJLElBQUk7QUFDeEIsaUJBQU8sS0FBS0EsS0FBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3JDLGdCQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsR0FBRztBQUNuQix1QkFBUyxnQkFBZ0IsS0FBSyxNQUFNLFNBQVM7QUFDN0Msa0JBQUksT0FBTyxXQUFXLFlBQVk7QUFDOUIsb0JBQUk7QUFDQSx3QkFBTSxRQUFRLGtCQUFrQixLQUFLLE9BQU9BLE1BQUssSUFBSSxDQUFDO0FBQ3RELGtCQUFDLENBQUMsRUFBRSxPQUFPLE1BQU0sUUFBUSxRQUFRLENBQUMsR0FBRyxHQUFHLEVBQUcsUUFBUSxTQUFPO0FBQ3RELDRCQUFRLElBQUksR0FBRztBQUNmLG9CQUFBQSxNQUFLLE9BQU87QUFBQSxrQkFDaEIsQ0FBQztBQUFBLGdCQUNMLFNBQ08sS0FBUDtBQUNJLGtCQUFBSixTQUFRO0FBQUEsZ0JBQ1o7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyxtQkFBbUJJLE9BQU07QUFDOUIsZ0JBQU0sS0FBSyxRQUFRLENBQUMsUUFBUTtBQUN4QixnQkFBSSxDQUFDLElBQUksUUFBUSxHQUFHO0FBQ2hCO0FBQ0osZ0JBQUksT0FBT0EsTUFBSyxTQUFTO0FBQ3JCLGNBQUFBLE1BQUssT0FBTztBQUFBLFVBQ3BCLENBQUM7QUFDRCxpQkFBT0E7QUFBQSxRQUNYO0FBQ0EsaUJBQVMsd0JBQXdCLEtBQUtFLFVBQVNDLFdBQVUsU0FBUyxPQUFPO0FBQ3JFLGlCQUFPLEtBQUtBLFNBQVEsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN6QyxnQkFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDOUIscUJBQU8sS0FBSyxJQUFJLE1BQU0sR0FBRyxHQUFHQSxVQUFTLElBQUk7QUFDekMsa0JBQUk7QUFDQSwwQkFBVSxPQUFPO0FBQ3JCLGVBQUNELFNBQVEsUUFBUSxDQUFDLEdBQUcsUUFBUSxTQUFVLEdBQUc7QUFDdEMsb0JBQUksT0FBTyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFDeEI7QUFDSix1QkFBTyxLQUFLLEVBQUUsTUFBTSxHQUFHLEdBQUdDLFVBQVMsSUFBSTtBQUFBLGNBQzNDLENBQUM7QUFBQSxZQUNMO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLE9BQU8sS0FBSyxNQUFNO0FBQ3ZCLGNBQUksSUFBSTtBQUNSLGNBQUksQ0FBQyxjQUFjO0FBQ2YsbUJBQU8sQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQzFCLGVBQUssTUFBTSxHQUFHLEVBQUUsRUFBRSxRQUFRLFNBQVVSLE1BQUs7QUFDckMsZ0JBQUssRUFBRUEsU0FBUSxDQUFDO0FBQUEsVUFDcEIsQ0FBQztBQUNELGdCQUFNLE1BQU0sS0FBSyxLQUFLLFNBQVM7QUFDL0IsY0FBSSxPQUFPLE1BQU07QUFDYixtQkFBTztBQUFBO0FBRVAsbUJBQU8sT0FBTztBQUFBLFFBQ3RCO0FBQ0EsaUJBQVMsT0FBTyxLQUFLLE1BQU0sT0FBTztBQUM5QixjQUFJLElBQUk7QUFDUixjQUFJLENBQUMsY0FBYztBQUNmLG1CQUFPLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUMxQixlQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsUUFBUSxTQUFVQSxNQUFLO0FBQ3JDLFlBQUFBLE9BQU0sWUFBWUEsSUFBRztBQUNyQixnQkFBSSxPQUFPLE1BQU0sWUFBWSxFQUFFQSxVQUFTLFFBQVc7QUFDL0MsZ0JBQUVBLFFBQU8sQ0FBQztBQUFBLFlBQ2Q7QUFDQSxnQkFBSSxPQUFPLEVBQUVBLFVBQVMsWUFBWSxNQUFNLFFBQVEsRUFBRUEsS0FBSSxHQUFHO0FBQ3JELGtCQUFJLE1BQU0sUUFBUSxFQUFFQSxLQUFJLEdBQUc7QUFDdkIsa0JBQUVBLE1BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxjQUNsQixPQUNLO0FBQ0Qsa0JBQUVBLFFBQU8sQ0FBQyxFQUFFQSxPQUFNLENBQUMsQ0FBQztBQUFBLGNBQ3hCO0FBQ0Esa0JBQUksRUFBRUEsTUFBSyxFQUFFQSxNQUFLLFNBQVM7QUFBQSxZQUMvQixPQUNLO0FBQ0Qsa0JBQUksRUFBRUE7QUFBQSxZQUNWO0FBQUEsVUFDSixDQUFDO0FBQ0QsZ0JBQU0sTUFBTSxZQUFZLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDN0MsZ0JBQU0sY0FBYyxnQkFBZ0IsS0FBSyxLQUFLLEdBQUcsR0FBRyxNQUFNLE1BQU07QUFDaEUsZ0JBQU0sZUFBZSxNQUFNLFFBQVEsS0FBSztBQUN4QyxjQUFJLFlBQVksY0FBYztBQUM5QixjQUFJLENBQUMsYUFBYSxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssR0FBRztBQUNqRCx3QkFBWTtBQUNaLGdCQUFLLENBQUMsWUFBWSxFQUFFLElBQUksS0FBSyxNQUFNLE1BQU0sU0FBUyxLQUFPLE1BQU0sUUFBUSxFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssV0FBVyxNQUFNLE1BQU0sTUFBTztBQUNuSCxnQkFBRSxPQUFPO0FBQUEsWUFDYjtBQUFBLFVBQ0o7QUFDQSxjQUFJLFVBQVUsVUFBVSxHQUFHO0FBQ3ZCLGNBQUUsT0FBTyxVQUFVLEVBQUUsSUFBSTtBQUFBLFVBQzdCLFdBQ1MsTUFBTSxRQUFRLEVBQUUsSUFBSSxHQUFHO0FBQzVCLGdCQUFJLGFBQWEsZUFBZSxjQUFjO0FBQzFDLGdCQUFFLE9BQU8sY0FBYyw4QkFBOEIsRUFBRSxLQUFLLE9BQU8sS0FBSyxLQUFLLE1BQU0sUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFBQSxZQUM3SSxXQUNTLENBQUMsYUFBYSxRQUFRLFdBQVcsTUFBTSxRQUFRLFlBQVksR0FBRztBQUNuRSxnQkFBRSxPQUFPO0FBQUEsWUFDYixPQUNLO0FBQ0QsZ0JBQUUsT0FBTyxFQUFFLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQztBQUFBLFlBQ2xDO0FBQUEsVUFDSixXQUNTLEVBQUUsU0FBUyxVQUFhLGFBQWE7QUFDMUMsY0FBRSxPQUFPLGVBQWUsUUFBUSxDQUFDLEtBQUs7QUFBQSxVQUMxQyxXQUNTLGFBQWEsRUFBRSxFQUFFLFNBQVMsVUFDL0IsZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEtBQ2pDLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQ3BDLGNBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxLQUFLO0FBQUEsVUFDM0IsT0FDSztBQUNELGNBQUUsT0FBTztBQUFBLFVBQ2I7QUFBQSxRQUNKO0FBQ0EsaUJBQVMsaUJBQWlCRSxPQUFNO0FBQzVCLFVBQUFBLE1BQUssUUFBUSxTQUFVLEtBQUs7QUFDeEIsbUJBQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQzFDLGtCQUFJLE1BQU0sUUFBUTtBQUNkO0FBQ0osb0JBQU0sUUFBUSxPQUFPLENBQUMsRUFBRSxPQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDakQsb0JBQU0sUUFBUSxLQUFLLE9BQU8sR0FBRyxFQUFFLFFBQVEsU0FBVSxHQUFHO0FBQ2hELG9CQUFJLElBQUksS0FBSyxDQUFDLEtBQUssY0FBYyx5QkFBeUI7QUFDdEQsd0JBQU0sSUFBSSxVQUFVLENBQUM7QUFDckIsc0JBQUksTUFBTSxPQUFPLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUk7QUFDbkQsMEJBQU0sUUFBUSxLQUFLLEtBQUssQ0FBQztBQUN6QiwrQkFBVyxLQUFLO0FBQUEsa0JBQ3BCO0FBQUEsZ0JBQ0o7QUFBQSxjQUNKLENBQUM7QUFDRCxvQkFBTSxRQUFRLEtBQUssT0FBTyxHQUFHLEVBQUUsUUFBUSxTQUFVLEdBQUc7QUFDaEQsb0JBQUksRUFBRSxTQUFTLEtBQUssUUFBUSxLQUFLLENBQUMsS0FBSyxjQUFjLHlCQUF5QjtBQUMxRSx3QkFBTSxJQUFJLFdBQVcsR0FBRyxHQUFHO0FBQzNCLHNCQUFJLE1BQU0sT0FBTyxNQUFNLFFBQVEsS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJO0FBQ25ELDBCQUFNLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFDekIsK0JBQVcsS0FBSztBQUFBLGtCQUNwQjtBQUFBLGdCQUNKO0FBQUEsY0FDSixDQUFDO0FBQ0Qsb0JBQU0sUUFBUSxLQUFLLFFBQVEsU0FBVSxHQUFHO0FBQ3BDLHNCQUFNLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQU0sUUFBUSxLQUFLLE9BQU8sU0FBVSxHQUFHO0FBQ25FLHlCQUFPLE1BQU07QUFBQSxnQkFDakIsQ0FBQyxDQUFDO0FBQUEsY0FDTixDQUFDO0FBQUEsWUFDTCxDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLGdCQUFnQixLQUFLLE1BQU07QUFDaEMsZ0JBQU0sVUFBVSxDQUFDLEVBQUUsT0FBTyxNQUFNLFFBQVEsUUFBUSxDQUFDLEdBQUcsR0FBRztBQUN2RCxnQkFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJO0FBQzdCLGdCQUFNLFdBQVcsUUFBUSxLQUFLLENBQUFGLFNBQU8sS0FBSyxTQUFTQSxJQUFHLENBQUM7QUFDdkQsaUJBQU8sV0FBVyxLQUFLLFlBQVk7QUFBQSxRQUN2QztBQUNBLGlCQUFTLFdBQVcsS0FBSztBQUNyQixnQkFBTSxZQUFZLE9BQU8sS0FBSyxLQUFLO0FBQ25DLGdCQUFNLFVBQVUsQ0FBQyxFQUFFLE9BQU8sVUFBVSxJQUFJLE9BQUssTUFBTSxFQUFFLENBQUM7QUFDdEQsaUJBQU8sUUFBUSxLQUFLLFNBQVUsTUFBTTtBQUNoQyxtQkFBTyxNQUFNLFFBQVEsSUFBSSxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksS0FBSztBQUFBLFVBQzNELENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsaUJBQWlCLFFBQVEsVUFBVTtBQUN4QyxnQkFBTSxVQUFVLENBQUMsRUFBRSxPQUFPLEdBQUcsUUFBUTtBQUNyQyxpQkFBTyxRQUFRLEtBQUssU0FBVSxTQUFTO0FBQ25DLGtCQUFNLFFBQVEsSUFBSSxNQUFNLE9BQU87QUFDL0IsbUJBQU8sU0FBUyxXQUFXLE1BQU0sRUFBRTtBQUFBLFVBQ3ZDLENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsaUJBQWlCLEtBQUs7QUFDM0IsY0FBSSxJQUFJLE1BQU0sUUFBUSxLQUFLLENBQUMsSUFBSSxNQUFNLFNBQVMsR0FBRztBQUM5QyxtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLGNBQWM7QUFDbEIsY0FBSTtBQUNKLGdCQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDckMsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDckMsbUJBQU8sSUFBSSxNQUFNLElBQUksQ0FBQztBQUN0QixnQkFBSSxDQUFDLFdBQVcsUUFBUSxFQUFFLEdBQUc7QUFDekIsNEJBQWM7QUFDZDtBQUFBLFlBQ0o7QUFDQSxnQkFBSyxRQUFRLElBQUksTUFBTSxRQUFRLElBQUksT0FBTyxPQUN0QyxTQUFTLE9BQ1IsV0FBVyxLQUFLLFFBQVEsRUFBRSxLQUFLLDJCQUEyQixLQUFLLElBQUksS0FDbkUsUUFBUSxJQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUcsTUFBTSxJQUFJLEdBQUk7QUFDaEQ7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGlCQUFTLHFCQUFxQixLQUFLO0FBQy9CLGlCQUFPLGNBQWMsOEJBQThCLGdCQUFnQixHQUFHO0FBQUEsUUFDMUU7QUFDQSxpQkFBUyxnQkFBZ0IsS0FBSztBQUMxQixnQkFBTSxJQUFJLFFBQVEsVUFBVSxJQUFJO0FBQ2hDLGNBQUksSUFBSSxNQUFNLFFBQVEsR0FBRztBQUNyQixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLGlCQUFpQixHQUFHLEdBQUc7QUFDdkIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0saUJBQWlCO0FBQ3ZCLGdCQUFNLGFBQWE7QUFDbkIsZ0JBQU0scUJBQXFCO0FBQzNCLGdCQUFNLHFCQUFxQjtBQUMzQixnQkFBTSxnQ0FBZ0M7QUFDdEMsaUJBQU8sQ0FBQyxpQkFBaUIsS0FBSyxnQkFBZ0IsZ0JBQWdCLFlBQVksb0JBQW9CLG9CQUFvQiw2QkFBNkI7QUFBQSxRQUNuSjtBQUNBLGlCQUFTLGFBQWEsS0FBSztBQUN2QixjQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEtBQ2pDLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEtBQ2xDLEdBQUcsU0FBUyxVQUFVO0FBQ3RCLG1CQUFPLFNBQVM7QUFBQSxVQUNwQixPQUNLO0FBQ0QsbUJBQU8sZUFBZSxVQUFVLEdBQUcsQ0FBQztBQUFBLFVBQ3hDO0FBQUEsUUFDSjtBQUNBLGlCQUFTLGVBQWUsTUFBTTtBQUMxQixnQkFBTSxNQUFNO0FBQUEsWUFDUixDQUFDLHdCQUF3QixVQUFVO0FBQUEsWUFDbkMsQ0FBQyx3QkFBd0IsU0FBUztBQUFBLFlBQ2xDLENBQUMsd0JBQXdCLFNBQVM7QUFBQSxZQUNsQyxDQUFDLHdCQUF3QixRQUFRLENBQUM7QUFBQSxVQUN0QztBQUNBLGlCQUFPLElBQUk7QUFBQSxRQUNmO0FBQ0EsaUJBQVMsVUFBVSxLQUFLO0FBQ3BCLGNBQUksT0FBTyx3QkFBd0I7QUFDbkMsY0FBSSxnQkFBZ0IsS0FBSyxNQUFNLE9BQU87QUFDbEMsbUJBQU8sd0JBQXdCO0FBQUEsbUJBQzFCLGdCQUFnQixLQUFLLE1BQU0sT0FBTztBQUN2QyxtQkFBTyx3QkFBd0I7QUFBQSxtQkFDMUIsZ0JBQWdCLEtBQUssTUFBTSxLQUFLO0FBQ3JDLG1CQUFPLHdCQUF3QjtBQUFBLG1CQUMxQixnQkFBZ0IsS0FBSyxNQUFNLE1BQU07QUFDdEMsbUJBQU8sd0JBQXdCO0FBQ25DLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGlCQUFTLFlBQVksS0FBSztBQUN0QixpQkFBTyxRQUFRO0FBQUEsUUFDbkI7QUFDQSxpQkFBUyxxQkFBcUI7QUFDMUIsaUJBQU8sS0FBSyxNQUFNLE1BQU0sRUFBRSxLQUFLLFNBQU87QUFDbEMsZ0JBQUksZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDcEMsY0FBQUMsU0FBUSxNQUFNLEdBQUcsOERBQThELEdBQUcsQ0FBQztBQUNuRixxQkFBTztBQUFBLFlBQ1gsV0FDUyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssR0FBRztBQUN4QyxjQUFBQSxTQUFRLE1BQU0sR0FBRyw2REFBNkQsR0FBRyxDQUFDO0FBQ2xGLHFCQUFPO0FBQUEsWUFDWDtBQUNBLG1CQUFPO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDTDtBQUNBLGVBQU87QUFBQSxVQUNILFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU87QUFBQSxVQUN4QyxNQUFNLE9BQU8sT0FBTyxZQUFZLElBQUk7QUFBQSxVQUNwQztBQUFBLFVBQ0EsV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFBQSxVQUN0QyxPQUFPQTtBQUFBLFVBQ1AsWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFVBQVU7QUFBQSxRQUM1QztBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsYUFBUyxlQUFlLFNBQVM7QUFDN0IsWUFBTSxjQUFjLENBQUM7QUFDckIsWUFBTSxXQUFXLHVCQUFPLE9BQU8sSUFBSTtBQUNuQyxVQUFJLFNBQVM7QUFDYixhQUFPLEtBQUssT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3hDLG9CQUFZLEtBQUssQ0FBQyxFQUFFLE9BQU8sUUFBUSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQ2pELENBQUM7QUFDRCxhQUFPLFFBQVE7QUFDWCxpQkFBUztBQUNULGlCQUFTLElBQUksR0FBRyxJQUFJLFlBQVksUUFBUSxLQUFLO0FBQ3pDLG1CQUFTLEtBQUssSUFBSSxHQUFHLEtBQUssWUFBWSxRQUFRLE1BQU07QUFDaEQsa0JBQU0sWUFBWSxZQUFZLEdBQUcsT0FBTyxTQUFVLEdBQUc7QUFDakQscUJBQU8sWUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNO0FBQUEsWUFDMUMsQ0FBQztBQUNELGdCQUFJLFVBQVUsUUFBUTtBQUNsQiwwQkFBWSxLQUFLLFlBQVksR0FBRyxPQUFPLFlBQVksR0FBRztBQUN0RCwwQkFBWSxPQUFPLElBQUksQ0FBQztBQUN4Qix1QkFBUztBQUNUO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGtCQUFZLFFBQVEsU0FBVSxZQUFZO0FBQ3RDLHFCQUFhLFdBQVcsT0FBTyxTQUFVLEdBQUcsR0FBR1EsT0FBTTtBQUNqRCxpQkFBT0EsTUFBSyxRQUFRLENBQUMsTUFBTTtBQUFBLFFBQy9CLENBQUM7QUFDRCxjQUFNLFlBQVksV0FBVyxJQUFJO0FBQ2pDLFlBQUksY0FBYyxVQUFhLE9BQU8sY0FBYyxVQUFVO0FBQzFELG1CQUFTLGFBQWE7QUFBQSxRQUMxQjtBQUFBLE1BQ0osQ0FBQztBQUNELGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyxVQUFVLE1BQU07QUFDckIsYUFBTyxTQUFTLFNBQVksT0FBTyxJQUFJO0FBQUEsSUFDM0M7QUFDQSxhQUFTLFlBQVksS0FBSztBQUN0QixVQUFJLFFBQVE7QUFDUixlQUFPO0FBQ1gsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFNLGlCQUFrQixXQUFXLFFBQVEsT0FBTyxRQUFRLElBQUkseUJBQ3hELE9BQU8sUUFBUSxJQUFJLHNCQUFzQixJQUN6QztBQUNOLFFBQUksV0FBVyxRQUFRLFNBQVM7QUFDNUIsWUFBTSxRQUFRLE9BQU8sUUFBUSxRQUFRLE1BQU0sVUFBVSxFQUFFLEVBQUU7QUFDekQsVUFBSSxRQUFRLGdCQUFnQjtBQUN4QixjQUFNLE1BQU0sc0RBQXNELGtIQUFrSDtBQUFBLE1BQ3hMO0FBQUEsSUFDSjtBQUNBLFFBQU0sTUFBTSxVQUFVLFFBQVEsTUFBTSxDQUFDO0FBQ3JDLFFBQU0sU0FBUyxJQUFJLFlBQVk7QUFBQSxNQUMzQixLQUFLLFFBQVE7QUFBQSxNQUNiLEtBQUssTUFBTTtBQUNQLGVBQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxRQUFRYixNQUFLO0FBQUEsTUFDYixXQUFXRSxNQUFLO0FBQUEsTUFDaEIsU0FBU0EsTUFBSztBQUFBLE1BQ2QsU0FBUyxDQUFDQSxVQUFTO0FBQ2YsWUFBSSxPQUFPLFlBQVksYUFBYTtBQUNoQyxpQkFBTyxRQUFRQTtBQUFBLFFBQ25CLFdBQ1NBLE1BQUssTUFBTSxTQUFTLEdBQUc7QUFDNUIsaUJBQU9ELElBQUcsYUFBYUMsT0FBTSxNQUFNO0FBQUEsUUFDdkMsT0FDSztBQUNELGdCQUFNLE1BQU0sOENBQThDO0FBQUEsUUFDOUQ7QUFBQSxNQUNKO0FBQUEsSUFDSixDQUFDO0FBQ0QsUUFBTSxjQUFjLFNBQVMsT0FBTyxNQUFNLE1BQU07QUFDNUMsWUFBTSxTQUFTLE9BQU8sTUFBTSxLQUFLLE1BQU0sR0FBRyxJQUFJO0FBQzlDLGFBQU8sT0FBTztBQUFBLElBQ2xCO0FBQ0EsZ0JBQVksV0FBVyxTQUFVLE1BQU0sTUFBTTtBQUN6QyxhQUFPLE9BQU8sTUFBTSxLQUFLLE1BQU0sR0FBRyxJQUFJO0FBQUEsSUFDMUM7QUFDQSxnQkFBWSxZQUFZO0FBQ3hCLGdCQUFZLGFBQWE7QUFDekIsZ0JBQVksa0JBQWtCO0FBRTlCLElBQUFILFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2poQ2pCO0FBQUEsOENBQUFlLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVSxDQUFDLEVBQUMsWUFBWSxNQUFLLElBQUksQ0FBQyxNQUFNO0FBQzlDLFlBQU0sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsTUFDRCxFQUFFLEtBQUssR0FBRztBQUVWLGFBQU8sSUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFZLEdBQUc7QUFBQSxJQUN2RDtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsOENBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sWUFBWTtBQUVsQixJQUFBQSxRQUFPLFVBQVUsWUFBVSxPQUFPLFdBQVcsV0FBVyxPQUFPLFFBQVEsVUFBVSxHQUFHLEVBQUUsSUFBSTtBQUFBO0FBQUE7OztBQ0gxRjtBQUFBLDJEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFHQSxRQUFNLHVCQUF1QixlQUFhO0FBQ3pDLFVBQUksT0FBTyxNQUFNLFNBQVMsR0FBRztBQUM1QixlQUFPO0FBQUEsTUFDUjtBQUlBLFVBQ0MsYUFBYSxTQUNaLGFBQWEsUUFDYixjQUFjLFFBQ2QsY0FBYyxRQUViLFNBQVUsYUFBYSxhQUFhLFNBQVUsY0FBYyxTQUU1RCxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUVwQyxVQUFXLGFBQWEsYUFBYSxVQUVyQyxVQUFXLGFBQWEsYUFBYSxVQUVyQyxVQUFXLGFBQWEsYUFBYSxTQUV0QztBQUNELGVBQU87QUFBQSxNQUNSO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFDakIsSUFBQUEsUUFBTyxRQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUNqRHpCO0FBQUEsK0NBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVSxXQUFZO0FBRTNCLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSxnREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0sYUFBYTtBQUVuQixRQUFNLGNBQWMsWUFBVTtBQUM3QixVQUFJLE9BQU8sV0FBVyxZQUFZLE9BQU8sV0FBVyxHQUFHO0FBQ3RELGVBQU87QUFBQSxNQUNSO0FBRUEsZUFBUyxVQUFVLE1BQU07QUFFekIsVUFBSSxPQUFPLFdBQVcsR0FBRztBQUN4QixlQUFPO0FBQUEsTUFDUjtBQUVBLGVBQVMsT0FBTyxRQUFRLFdBQVcsR0FBRyxJQUFJO0FBRTFDLFVBQUksUUFBUTtBQUVaLGVBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxRQUFRLEtBQUs7QUFDdkMsY0FBTSxPQUFPLE9BQU8sWUFBWSxDQUFDO0FBR2pDLFlBQUksUUFBUSxNQUFTLFFBQVEsT0FBUSxRQUFRLEtBQU87QUFDbkQ7QUFBQSxRQUNEO0FBR0EsWUFBSSxRQUFRLE9BQVMsUUFBUSxLQUFPO0FBQ25DO0FBQUEsUUFDRDtBQUdBLFlBQUksT0FBTyxPQUFRO0FBQ2xCO0FBQUEsUUFDRDtBQUVBLGlCQUFTLHFCQUFxQixJQUFJLElBQUksSUFBSTtBQUFBLE1BQzNDO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFFakIsSUFBQUEsUUFBTyxRQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUM5Q3pCO0FBQUEsNkNBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sY0FBYztBQUNwQixRQUFNLFlBQVk7QUFDbEIsUUFBTSxhQUFhO0FBRW5CLFFBQU0sVUFBVSxvQkFBSSxJQUFJO0FBQUEsTUFDdkI7QUFBQSxNQUNBO0FBQUEsSUFDRCxDQUFDO0FBRUQsUUFBTSxXQUFXO0FBRWpCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sV0FBVztBQUNqQixRQUFNLFdBQVc7QUFDakIsUUFBTSxzQkFBc0I7QUFDNUIsUUFBTSxtQkFBbUIsR0FBRztBQUU1QixRQUFNLFdBQVcsVUFBUSxHQUFHLFFBQVEsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLFdBQVcsT0FBTztBQUM5RSxRQUFNLG9CQUFvQixTQUFPLEdBQUcsUUFBUSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsbUJBQW1CLE1BQU07QUFJN0YsUUFBTSxjQUFjLFlBQVUsT0FBTyxNQUFNLEdBQUcsRUFBRSxJQUFJLGVBQWEsWUFBWSxTQUFTLENBQUM7QUFJdkYsUUFBTSxXQUFXLENBQUMsTUFBTSxNQUFNLFlBQVk7QUFDekMsWUFBTSxhQUFhLENBQUMsR0FBRyxJQUFJO0FBRTNCLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUkscUJBQXFCO0FBQ3pCLFVBQUksVUFBVSxZQUFZLFVBQVUsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO0FBRTFELGlCQUFXLENBQUMsT0FBTyxTQUFTLEtBQUssV0FBVyxRQUFRLEdBQUc7QUFDdEQsY0FBTSxrQkFBa0IsWUFBWSxTQUFTO0FBRTdDLFlBQUksVUFBVSxtQkFBbUIsU0FBUztBQUN6QyxlQUFLLEtBQUssU0FBUyxNQUFNO0FBQUEsUUFDMUIsT0FBTztBQUNOLGVBQUssS0FBSyxTQUFTO0FBQ25CLG9CQUFVO0FBQUEsUUFDWDtBQUVBLFlBQUksUUFBUSxJQUFJLFNBQVMsR0FBRztBQUMzQiwyQkFBaUI7QUFDakIsK0JBQXFCLFdBQVcsTUFBTSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLGdCQUFnQjtBQUFBLFFBQ3RGO0FBRUEsWUFBSSxnQkFBZ0I7QUFDbkIsY0FBSSxvQkFBb0I7QUFDdkIsZ0JBQUksY0FBYyxrQkFBa0I7QUFDbkMsK0JBQWlCO0FBQ2pCLG1DQUFxQjtBQUFBLFlBQ3RCO0FBQUEsVUFDRCxXQUFXLGNBQWMscUJBQXFCO0FBQzdDLDZCQUFpQjtBQUFBLFVBQ2xCO0FBRUE7QUFBQSxRQUNEO0FBRUEsbUJBQVc7QUFFWCxZQUFJLFlBQVksV0FBVyxRQUFRLFdBQVcsU0FBUyxHQUFHO0FBQ3pELGVBQUssS0FBSyxFQUFFO0FBQ1osb0JBQVU7QUFBQSxRQUNYO0FBQUEsTUFDRDtBQUlBLFVBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxTQUFTLEdBQUcsU0FBUyxLQUFLLEtBQUssU0FBUyxHQUFHO0FBQ3BFLGFBQUssS0FBSyxTQUFTLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFDbkM7QUFBQSxJQUNEO0FBR0EsUUFBTSwrQkFBK0IsWUFBVTtBQUM5QyxZQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDOUIsVUFBSSxPQUFPLE1BQU07QUFFakIsYUFBTyxPQUFPLEdBQUc7QUFDaEIsWUFBSSxZQUFZLE1BQU0sT0FBTyxFQUFFLElBQUksR0FBRztBQUNyQztBQUFBLFFBQ0Q7QUFFQTtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFNBQVMsTUFBTSxRQUFRO0FBQzFCLGVBQU87QUFBQSxNQUNSO0FBRUEsYUFBTyxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUU7QUFBQSxJQUNsRTtBQU9BLFFBQU0sT0FBTyxDQUFDLFFBQVEsU0FBUyxVQUFVLENBQUMsTUFBTTtBQUMvQyxVQUFJLFFBQVEsU0FBUyxTQUFTLE9BQU8sS0FBSyxNQUFNLElBQUk7QUFDbkQsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLGNBQWM7QUFDbEIsVUFBSTtBQUNKLFVBQUk7QUFFSixZQUFNLFVBQVUsWUFBWSxNQUFNO0FBQ2xDLFVBQUksT0FBTyxDQUFDLEVBQUU7QUFFZCxpQkFBVyxDQUFDLE9BQU8sSUFBSSxLQUFLLE9BQU8sTUFBTSxHQUFHLEVBQUUsUUFBUSxHQUFHO0FBQ3hELFlBQUksUUFBUSxTQUFTLE9BQU87QUFDM0IsZUFBSyxLQUFLLFNBQVMsS0FBSyxLQUFLLEtBQUssU0FBUyxHQUFHLFVBQVU7QUFBQSxRQUN6RDtBQUVBLFlBQUksWUFBWSxZQUFZLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFFakQsWUFBSSxVQUFVLEdBQUc7QUFDaEIsY0FBSSxhQUFhLFlBQVksUUFBUSxhQUFhLFNBQVMsUUFBUSxTQUFTLFFBQVE7QUFFbkYsaUJBQUssS0FBSyxFQUFFO0FBQ1osd0JBQVk7QUFBQSxVQUNiO0FBRUEsY0FBSSxZQUFZLEtBQUssUUFBUSxTQUFTLE9BQU87QUFDNUMsaUJBQUssS0FBSyxTQUFTLE1BQU07QUFDekI7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUdBLFlBQUksUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTO0FBQzdDLGdCQUFNLG1CQUFvQixVQUFVO0FBQ3BDLGdCQUFNLHlCQUF5QixJQUFJLEtBQUssT0FBTyxRQUFRLFNBQVMsbUJBQW1CLEtBQUssT0FBTztBQUMvRixnQkFBTSx5QkFBeUIsS0FBSyxPQUFPLFFBQVEsU0FBUyxLQUFLLE9BQU87QUFDeEUsY0FBSSx5QkFBeUIsd0JBQXdCO0FBQ3BELGlCQUFLLEtBQUssRUFBRTtBQUFBLFVBQ2I7QUFFQSxtQkFBUyxNQUFNLE1BQU0sT0FBTztBQUM1QjtBQUFBLFFBQ0Q7QUFFQSxZQUFJLFlBQVksUUFBUSxTQUFTLFdBQVcsWUFBWSxLQUFLLFFBQVEsU0FBUyxHQUFHO0FBQ2hGLGNBQUksUUFBUSxhQUFhLFNBQVMsWUFBWSxTQUFTO0FBQ3RELHFCQUFTLE1BQU0sTUFBTSxPQUFPO0FBQzVCO0FBQUEsVUFDRDtBQUVBLGVBQUssS0FBSyxFQUFFO0FBQUEsUUFDYjtBQUVBLFlBQUksWUFBWSxRQUFRLFNBQVMsV0FBVyxRQUFRLGFBQWEsT0FBTztBQUN2RSxtQkFBUyxNQUFNLE1BQU0sT0FBTztBQUM1QjtBQUFBLFFBQ0Q7QUFFQSxhQUFLLEtBQUssU0FBUyxNQUFNO0FBQUEsTUFDMUI7QUFFQSxVQUFJLFFBQVEsU0FBUyxPQUFPO0FBQzNCLGVBQU8sS0FBSyxJQUFJLDRCQUE0QjtBQUFBLE1BQzdDO0FBRUEsWUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBRS9CLGlCQUFXLENBQUMsT0FBTyxTQUFTLEtBQUssSUFBSSxRQUFRLEdBQUc7QUFDL0MsdUJBQWU7QUFFZixZQUFJLFFBQVEsSUFBSSxTQUFTLEdBQUc7QUFDM0IsZ0JBQU0sRUFBQyxPQUFNLElBQUksSUFBSSxPQUFPLFFBQVEsNEJBQTRCLDZCQUE2QixtQkFBbUIsRUFBRSxLQUFLLElBQUksTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxFQUFDO0FBQ2hLLGNBQUksT0FBTyxTQUFTLFFBQVc7QUFDOUIsa0JBQU1DLFFBQU8sT0FBTyxXQUFXLE9BQU8sSUFBSTtBQUMxQyx5QkFBYUEsVUFBUyxXQUFXLFNBQVlBO0FBQUEsVUFDOUMsV0FBVyxPQUFPLFFBQVEsUUFBVztBQUNwQyx3QkFBWSxPQUFPLElBQUksV0FBVyxJQUFJLFNBQVksT0FBTztBQUFBLFVBQzFEO0FBQUEsUUFDRDtBQUVBLGNBQU0sT0FBTyxXQUFXLE1BQU0sSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUVwRCxZQUFJLElBQUksUUFBUSxPQUFPLE1BQU07QUFDNUIsY0FBSSxXQUFXO0FBQ2QsMkJBQWUsa0JBQWtCLEVBQUU7QUFBQSxVQUNwQztBQUVBLGNBQUksY0FBYyxNQUFNO0FBQ3ZCLDJCQUFlLFNBQVMsSUFBSTtBQUFBLFVBQzdCO0FBQUEsUUFDRCxXQUFXLGNBQWMsTUFBTTtBQUM5QixjQUFJLGNBQWMsTUFBTTtBQUN2QiwyQkFBZSxTQUFTLFVBQVU7QUFBQSxVQUNuQztBQUVBLGNBQUksV0FBVztBQUNkLDJCQUFlLGtCQUFrQixTQUFTO0FBQUEsVUFDM0M7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBR0EsSUFBQUQsUUFBTyxVQUFVLENBQUMsUUFBUSxTQUFTLFlBQVk7QUFDOUMsYUFBTyxPQUFPLE1BQU0sRUFDbEIsVUFBVSxFQUNWLFFBQVEsU0FBUyxJQUFJLEVBQ3JCLE1BQU0sSUFBSSxFQUNWLElBQUksVUFBUSxLQUFLLE1BQU0sU0FBUyxPQUFPLENBQUMsRUFDeEMsS0FBSyxJQUFJO0FBQUEsSUFDWjtBQUFBO0FBQUE7OztBQ3ZOQSxJQUFBRSxpQkFBQTtBQUFBLGdEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLFFBQVE7QUFBQSxNQUNWLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNaO0FBQ0EsUUFBTSxNQUFNO0FBQ1osUUFBTSxRQUFRO0FBQ2QsUUFBTSxTQUFTO0FBQ2YsUUFBTSxPQUFPO0FBQ2IsUUFBTSxLQUFOLE1BQVM7QUFBQSxNQUNMLFlBQVksTUFBTTtBQUNkLFlBQUk7QUFDSixhQUFLLFFBQVEsS0FBSztBQUNsQixhQUFLLFFBQVEsS0FBSyxLQUFLLFVBQVUsUUFBUSxPQUFPLFNBQVMsS0FBSztBQUM5RCxhQUFLLE9BQU8sQ0FBQztBQUFBLE1BQ2pCO0FBQUEsTUFDQSxRQUFRLE1BQU07QUFDVixjQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUM3QixhQUFLLE9BQU87QUFBQSxNQUNoQjtBQUFBLE1BQ0EsY0FBYztBQUNWLGFBQUssT0FBTyxDQUFDO0FBQUEsTUFDakI7QUFBQSxNQUNBLE9BQU8sTUFBTTtBQUNULFlBQUksS0FBSyxXQUFXLEdBQUc7QUFDbkIsZUFBSyxJQUFJLEVBQUU7QUFBQSxRQUNmO0FBQ0EsWUFBSSxLQUFLLFFBQVEsS0FBSyxxQkFBcUIsR0FBRyxJQUFJLEtBQUssT0FBTyxLQUFLLE9BQU8sVUFBVTtBQUNoRixpQkFBTyxLQUFLLGVBQWUsS0FBSyxFQUFFO0FBQUEsUUFDdEM7QUFDQSxjQUFNLE9BQU8sS0FBSyxJQUFJLFNBQU87QUFDekIsY0FBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixtQkFBTyxLQUFLLGNBQWMsR0FBRztBQUFBLFVBQ2pDO0FBQ0EsaUJBQU87QUFBQSxRQUNYLENBQUM7QUFDRCxhQUFLLEtBQUssS0FBSyxJQUFJO0FBQ25CLGVBQU87QUFBQSxNQUNYO0FBQUEsTUFDQSx3QkFBd0IsTUFBTTtBQUMxQixlQUFPLEtBQUssV0FBVyxLQUFLLE9BQU8sS0FBSyxPQUFPLFlBQzNDLFNBQVMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUM3QjtBQUFBLE1BQ0EsZUFBZSxLQUFLO0FBQ2hCLGNBQU0sT0FBTyxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksU0FBTyxJQUFJLE1BQU0sR0FBSSxDQUFDO0FBQ3ZELFlBQUksa0JBQWtCO0FBS3RCLGFBQUssUUFBUSxhQUFXO0FBQ3BCLGNBQUksUUFBUSxTQUFTLEtBQUssTUFBTSxZQUFZLFFBQVEsRUFBRSxJQUFJLGlCQUFpQjtBQUN2RSw4QkFBa0IsS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLFFBQVEsR0FBRyxHQUFHLE1BQU0sWUFBWSxRQUFRLEVBQUUsQ0FBQztBQUFBLFVBQzFGO0FBQUEsUUFDSixDQUFDO0FBSUQsYUFBSyxRQUFRLGFBQVc7QUFDcEIsZUFBSyxJQUFJLEdBQUcsUUFBUSxJQUFJLENBQUMsR0FBRyxNQUFNO0FBQzlCLG1CQUFPO0FBQUEsY0FDSCxNQUFNLEVBQUUsS0FBSztBQUFBLGNBQ2IsU0FBUyxLQUFLLGVBQWUsQ0FBQztBQUFBLGNBQzlCLE9BQVEsTUFBTSxLQUFLLFFBQVEsU0FBUyxJQUFLLGtCQUFrQjtBQUFBLFlBQy9EO0FBQUEsVUFDSixDQUFDLENBQUM7QUFBQSxRQUNOLENBQUM7QUFDRCxlQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssU0FBUztBQUFBLE1BQ3hDO0FBQUEsTUFDQSxjQUFjLE1BQU07QUFDaEIsZUFBTztBQUFBLFVBQ0g7QUFBQSxVQUNBLFNBQVMsS0FBSyxlQUFlLElBQUk7QUFBQSxRQUNyQztBQUFBLE1BQ0o7QUFBQSxNQUNBLGVBQWUsS0FBSztBQUVoQixjQUFNLFNBQVMsTUFBTSxVQUFVLEdBQUc7QUFDbEMsZUFBTyxDQUFDLEdBQUcsT0FBTyxNQUFNLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxPQUFPLE1BQU0sTUFBTSxFQUFFLEdBQUcsTUFBTTtBQUFBLE1BQ2hGO0FBQUEsTUFDQSxXQUFXO0FBQ1AsY0FBTSxRQUFRLENBQUM7QUFDZixhQUFLLEtBQUssUUFBUSxTQUFPO0FBQ3JCLGVBQUssWUFBWSxLQUFLLEtBQUs7QUFBQSxRQUMvQixDQUFDO0FBR0QsZUFBTyxNQUNGLE9BQU8sVUFBUSxDQUFDLEtBQUssTUFBTSxFQUMzQixJQUFJLFVBQVEsS0FBSyxJQUFJLEVBQ3JCLEtBQUssSUFBSTtBQUFBLE1BQ2xCO0FBQUEsTUFDQSxZQUFZLEtBQUssT0FBTztBQUNwQixhQUFLLFVBQVUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLE1BQU07QUFDckMsY0FBSSxNQUFNO0FBQ1YsZUFBSyxRQUFRLENBQUMsS0FBSyxNQUFNO0FBQ3JCLGtCQUFNLEVBQUUsTUFBTSxJQUFJLElBQUk7QUFDdEIsa0JBQU0sWUFBWSxLQUFLLGNBQWMsSUFBSSxFQUFFO0FBQzNDLGdCQUFJLEtBQUs7QUFDVCxnQkFBSSxZQUFZLE1BQU0sWUFBWSxHQUFHLEdBQUc7QUFDcEMsb0JBQU0sSUFBSSxPQUFPLFlBQVksTUFBTSxZQUFZLEdBQUcsQ0FBQztBQUFBLFlBQ3ZEO0FBRUEsZ0JBQUksSUFBSSxHQUFHLFNBQVMsSUFBSSxHQUFHLFVBQVUsVUFBVSxLQUFLLE1BQU07QUFDdEQsb0JBQU0sS0FBSyxNQUFNLElBQUksR0FBRztBQUN4QixtQkFBSyxHQUFHLElBQUksU0FBUztBQUNyQixrQkFBSSxNQUFNLFlBQVksRUFBRSxJQUFJLFdBQVc7QUFDbkMsc0JBQU0sSUFBSSxRQUFRLFNBQVMsS0FBSyxNQUFNLFlBQVksRUFBRSxJQUFJLENBQUM7QUFBQSxjQUM3RDtBQUFBLFlBQ0o7QUFFQSxrQkFBTSxVQUFVLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxnQkFBSSxRQUFRLE9BQU87QUFDZixxQkFBTyxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBQUEsWUFDbkM7QUFDQSxtQkFBTyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUk7QUFDakMsbUJBQU87QUFDUCxtQkFBTyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUk7QUFDakMsZ0JBQUksUUFBUSxRQUFRO0FBQ2hCLHFCQUFPLElBQUksT0FBTyxRQUFRLE1BQU07QUFBQSxZQUNwQztBQUdBLGdCQUFJLE1BQU0sS0FBSyxNQUFNLFNBQVMsR0FBRztBQUM3QixvQkFBTSxLQUFLLGFBQWEsS0FBSyxNQUFNLE1BQU0sU0FBUyxFQUFFO0FBQUEsWUFDeEQ7QUFBQSxVQUNKLENBQUM7QUFFRCxnQkFBTSxLQUFLO0FBQUEsWUFDUCxNQUFNLElBQUksUUFBUSxPQUFPLEVBQUU7QUFBQSxZQUMzQixNQUFNLElBQUk7QUFBQSxVQUNkLENBQUM7QUFBQSxRQUNMLENBQUM7QUFDRCxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BR0EsYUFBYSxRQUFRLGNBQWM7QUFDL0IsY0FBTSxRQUFRLE9BQU8sTUFBTSxLQUFLO0FBQ2hDLGNBQU0sb0JBQW9CLFFBQVEsTUFBTSxHQUFHLFNBQVM7QUFDcEQsY0FBTSxTQUFTLGFBQWE7QUFDNUIsY0FBTSxrQkFBa0IsTUFBTSxZQUFZLE9BQU8sVUFBVSxDQUFDO0FBQzVELFlBQUksQ0FBQyxhQUFhLE1BQU07QUFDcEIsaUJBQU87QUFBQSxRQUNYO0FBR0EsWUFBSSxDQUFDLEtBQUssTUFBTTtBQUNaLHVCQUFhLFNBQVM7QUFDdEIsaUJBQU8sU0FBUztBQUFBLFFBQ3BCO0FBQ0EsWUFBSSxvQkFBb0IsaUJBQWlCO0FBQ3JDLGlCQUFPO0FBQUEsUUFDWDtBQUNBLHFCQUFhLFNBQVM7QUFDdEIsZUFBTyxPQUFPLFVBQVUsSUFBSSxJQUFJLE9BQU8sb0JBQW9CLGVBQWUsSUFBSSxPQUFPLFNBQVM7QUFBQSxNQUNsRztBQUFBLE1BQ0EsVUFBVSxLQUFLO0FBQ1gsY0FBTSxRQUFRLENBQUM7QUFDZixjQUFNLFNBQVMsS0FBSyxhQUFhLEdBQUc7QUFDcEMsWUFBSTtBQUdKLFlBQUksUUFBUSxDQUFDLEtBQUssTUFBTTtBQUVwQixjQUFJLFFBQVEsT0FBTztBQUNuQixjQUFJLEtBQUssTUFBTTtBQUNYLHNCQUFVLE1BQU0sS0FBSyxJQUFJLE1BQU0sS0FBSyxjQUFjLEdBQUcsR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJO0FBQUEsVUFDdEYsT0FDSztBQUNELHNCQUFVLElBQUksS0FBSyxNQUFNLElBQUk7QUFBQSxVQUNqQztBQUNBLGNBQUksSUFBSSxRQUFRO0FBQ1osb0JBQVEsUUFBUSxNQUFNLElBQUksT0FBTyxLQUFLLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHO0FBQ25FLG9CQUFRLEtBQUssTUFBTSxJQUFJLE9BQU8sS0FBSyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRztBQUFBLFVBQ3BFO0FBRUEsY0FBSSxJQUFJLFNBQVM7QUFDYixvQkFBUSxRQUFRLEdBQUcsSUFBSSxNQUFNLElBQUksUUFBUSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM1RCxvQkFBUSxLQUFLLEdBQUcsSUFBSSxNQUFNLElBQUksUUFBUSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUFBLFVBQ2hFO0FBQ0Esa0JBQVEsUUFBUSxDQUFDLEtBQUssTUFBTTtBQUN4QixnQkFBSSxDQUFDLE1BQU0sSUFBSTtBQUNYLG9CQUFNLEtBQUssQ0FBQyxDQUFDO0FBQUEsWUFDakI7QUFDQSxrQkFBTSxPQUFPLE1BQU07QUFDbkIscUJBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3hCLGtCQUFJLEtBQUssT0FBTyxRQUFXO0FBQ3ZCLHFCQUFLLEtBQUssRUFBRTtBQUFBLGNBQ2hCO0FBQUEsWUFDSjtBQUNBLGlCQUFLLEtBQUssR0FBRztBQUFBLFVBQ2pCLENBQUM7QUFBQSxRQUNMLENBQUM7QUFDRCxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsY0FBYyxLQUFLO0FBQ2YsWUFBSSxZQUFZLElBQUksU0FBUztBQUM3QixZQUFJLElBQUksU0FBUztBQUNiLHdCQUFjLElBQUksUUFBUSxTQUFTLE1BQU0sSUFBSSxRQUFRLFVBQVU7QUFBQSxRQUNuRTtBQUNBLFlBQUksSUFBSSxRQUFRO0FBQ1osdUJBQWE7QUFBQSxRQUNqQjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxhQUFhLEtBQUs7QUFDZCxZQUFJLENBQUMsS0FBSyxNQUFNO0FBQ1osaUJBQU8sSUFBSSxJQUFJLFNBQU87QUFDbEIsbUJBQU8sSUFBSSxTQUFTLE1BQU0sWUFBWSxJQUFJLElBQUk7QUFBQSxVQUNsRCxDQUFDO0FBQUEsUUFDTDtBQUNBLFlBQUksUUFBUSxJQUFJO0FBQ2hCLFlBQUksaUJBQWlCLEtBQUs7QUFFMUIsY0FBTSxTQUFTLElBQUksSUFBSSxTQUFPO0FBQzFCLGNBQUksSUFBSSxPQUFPO0FBQ1g7QUFDQSw4QkFBa0IsSUFBSTtBQUN0QixtQkFBTyxJQUFJO0FBQUEsVUFDZjtBQUNBLGlCQUFPO0FBQUEsUUFDWCxDQUFDO0FBRUQsY0FBTSxhQUFhLFFBQVEsS0FBSyxNQUFNLGlCQUFpQixLQUFLLElBQUk7QUFDaEUsZUFBTyxPQUFPLElBQUksQ0FBQyxHQUFHLE1BQU07QUFDeEIsY0FBSSxNQUFNLFFBQVc7QUFDakIsbUJBQU8sS0FBSyxJQUFJLFlBQVksVUFBVSxJQUFJLEVBQUUsQ0FBQztBQUFBLFVBQ2pEO0FBQ0EsaUJBQU87QUFBQSxRQUNYLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSjtBQUNBLGFBQVMsVUFBVSxLQUFLLElBQUksT0FBTztBQUMvQixVQUFJLElBQUksUUFBUTtBQUNaLFlBQUksYUFBYSxLQUFLLEVBQUUsR0FBRztBQUN2QixpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLEdBQUcsS0FBSyxFQUFFLFdBQVcsR0FBRztBQUN4QixpQkFBTztBQUFBLFFBQ1g7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU87QUFBQSxJQUNYO0FBR0EsYUFBUyxVQUFVLEtBQUs7QUFDcEIsWUFBTSxVQUFVLElBQUksV0FBVyxDQUFDO0FBQ2hDLFlBQU0sV0FBVyxLQUFLLFFBQVEsU0FBUyxNQUFNLFFBQVEsVUFBVTtBQUMvRCxVQUFJLElBQUksUUFBUTtBQUNaLGVBQU8sV0FBVztBQUFBLE1BQ3RCO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxhQUFTLGlCQUFpQjtBQUV0QixVQUFJLE9BQU8sWUFBWSxZQUFZLFFBQVEsVUFBVSxRQUFRLE9BQU8sU0FBUztBQUN6RSxlQUFPLFFBQVEsT0FBTztBQUFBLE1BQzFCO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxhQUFTLFdBQVcsS0FBSyxPQUFPO0FBQzVCLFlBQU0sSUFBSSxLQUFLO0FBQ2YsWUFBTSxXQUFXLE1BQU0sWUFBWSxHQUFHO0FBQ3RDLFVBQUksV0FBVyxPQUFPO0FBQ2xCLGVBQU8sSUFBSSxPQUFPLFFBQVEsUUFBUSxJQUFJO0FBQUEsTUFDMUM7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLGFBQVMsWUFBWSxLQUFLLE9BQU87QUFDN0IsWUFBTSxJQUFJLEtBQUs7QUFDZixZQUFNLFdBQVcsTUFBTSxZQUFZLEdBQUc7QUFFdEMsVUFBSSxZQUFZLE9BQU87QUFDbkIsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPLElBQUksT0FBUSxRQUFRLFlBQWEsQ0FBQyxJQUFJO0FBQUEsSUFDakQ7QUFDQSxRQUFJO0FBQ0osYUFBUyxNQUFNLE1BQU0sUUFBUTtBQUN6QixjQUFRO0FBQ1IsYUFBTyxJQUFJLEdBQUc7QUFBQSxRQUNWLFFBQVEsU0FBUyxRQUFRLFNBQVMsU0FBUyxTQUFTLEtBQUssVUFBVSxlQUFlO0FBQUEsUUFDbEYsTUFBTSxTQUFTLFFBQVEsU0FBUyxTQUFTLFNBQVMsS0FBSztBQUFBLE1BQzNELENBQUM7QUFBQSxJQUNMO0FBR0EsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sWUFBWTtBQUNsQixRQUFNLE9BQU87QUFDYixhQUFTLEdBQUcsTUFBTTtBQUNkLGFBQU8sTUFBTSxNQUFNO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTDtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQzdTakI7QUFBQSxpREFBQUMsVUFBQUMsU0FBQTtBQUFBLFFBQU0sRUFBRSxTQUFTLFNBQUFDLFNBQVEsSUFBSSxRQUFRO0FBQ3JDLFFBQU0sRUFBRSxhQUFhLFNBQVMsSUFBSSxRQUFRO0FBRTFDLElBQUFELFFBQU8sVUFBVSxTQUFVLE9BQU8sVUFBVTtBQUMzQyxVQUFJLE1BQU1DLFNBQVEsS0FBSyxLQUFLO0FBQzVCLFVBQUksS0FBSyxRQUFRLFNBQVMsR0FBRztBQUU3QixVQUFJLENBQUMsTUFBTSxZQUFZLEdBQUc7QUFDekIsY0FBTSxRQUFRLEdBQUc7QUFBQSxNQUNsQjtBQUVBLGFBQU8sTUFBTTtBQUNaLGNBQU0sU0FBUyxLQUFLLFlBQVksR0FBRyxDQUFDO0FBQ3BDLFlBQUk7QUFBSyxpQkFBT0EsU0FBUSxLQUFLLEdBQUc7QUFDaEMsY0FBTSxRQUFRLE1BQU0sR0FBRztBQUN2QixZQUFJLFFBQVE7QUFBSztBQUFBLE1BQ2xCO0FBQUEsSUFDRDtBQUFBO0FBQUE7Ozs7OztBQ1pBLElBQUFDLFFBQUEsVUFBUyxTQUFTLGNBQWMsVUFBWTtBQUFaLFVBQUEsYUFBQSxRQUFBO0FBQUEsbUJBQUE7TUFBWTtBQUMxQyxVQUFJLFlBQVksTUFBTSxpQkFBaUI7QUFDckMsY0FBTSxJQUFJLFVBQVUscUdBQXFHLFdBQVcsdUNBQXVDLE1BQU0sa0JBQWtCLEdBQUc7O0FBR3hNLFVBQU0sdUJBQXVCLE1BQU07QUFDbkMsWUFBTSxvQkFBb0IsU0FBQyxHQUFHQyxRQUFLO0FBQU0sZUFBQUE7TUFBQTtBQUN6QyxVQUFNLFFBQVEsSUFBSSxNQUFLLEVBQUc7QUFDMUIsWUFBTSxvQkFBb0I7QUFHMUIsVUFBSSxVQUFVLFFBQVEsT0FBTyxVQUFVLFVBQVU7QUFJL0MsZUFBTyxNQUFNLFlBQWEsTUFBTSxVQUFrQixZQUFXLElBQUs7O0lBRXRFOzs7OztBQ3RCQTtBQUFBLHFEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJQyxNQUFLLFFBQVE7QUFBakIsUUFDRUMsUUFBTyxRQUFRLFFBQVE7QUFEekIsUUFFRUMsV0FBVSxRQUFRLFFBQVE7QUFGNUIsUUFHRSxVQUFVLFFBQVEsUUFBUTtBQUg1QixRQUlFLGlCQUFpQjtBQUFBLE1BQ2YsWUFBWSxDQUFDLE1BQU0sUUFBUSxRQUFRO0FBQUEsTUFDbkMsU0FBUztBQUFBLE1BQ1QsUUFBUSxTQUFVLE1BQU07QUFDdEIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLE9BQU8sU0FBVSxLQUFLO0FBQ3BCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVGLGFBQVMsbUJBQW1CQyxPQUFNLFVBQVUsU0FBUztBQUNuRCxhQUVHLElBQUksT0FBTyxTQUFTLFFBQVEsV0FBVyxLQUFLLEdBQUcsSUFBSSxNQUFNLEdBQUcsRUFBRSxLQUFLLFFBQVEsS0FHNUUsRUFBRSxRQUFRLFdBQVcsUUFBUSxtQkFBbUIsVUFBVSxDQUFDLFFBQVEsUUFBUSxLQUFLQSxLQUFJLE1BR3BGLEVBQUUsUUFBUSxXQUFXLE9BQU8sUUFBUSxZQUFZLGNBQWMsQ0FBQyxRQUFRLFFBQVFBLE9BQU0sUUFBUSxNQUc3RixFQUFFLFFBQVEsV0FBVyxRQUFRLG1CQUFtQixVQUFVLFFBQVEsUUFBUSxLQUFLQSxLQUFJLE1BR25GLEVBQUUsUUFBUSxXQUFXLE9BQU8sUUFBUSxZQUFZLGNBQWMsUUFBUSxRQUFRQSxPQUFNLFFBQVE7QUFBQSxJQUVoRztBQUVBLGFBQVMsaUJBQWlCLEdBQUdBLE9BQU0sU0FBUztBQUMxQyxVQUFJLFNBQVMsQ0FBQztBQUdkLFVBQUlBLFNBQVEsQ0FBQyxXQUFXLE9BQU9BLFVBQVMsVUFBVTtBQUNoRCxrQkFBVUE7QUFDVixRQUFBQSxRQUFPO0FBQUEsTUFDVDtBQUdBLGdCQUFVLFdBQVcsQ0FBQztBQUN0QixlQUFTLFFBQVEsZ0JBQWdCO0FBQy9CLFlBQUksT0FBTyxRQUFRLFVBQVUsYUFBYTtBQUN4QyxrQkFBUSxRQUFRLGVBQWU7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFJQSxNQUFBQSxRQUFPLENBQUNBLFFBQU8sUUFBUSxFQUFFLFFBQVEsSUFBSUQsU0FBUSxRQUFRLEVBQUUsUUFBUSxHQUFHQyxLQUFJO0FBR3RFLE1BQUFILElBQUcsWUFBWUcsS0FBSSxFQUFFLFFBQVEsU0FBVSxVQUFVO0FBQy9DLFlBQUksU0FBU0YsTUFBS0UsT0FBTSxRQUFRLEdBQzlCLE9BQ0EsS0FDQTtBQUVGLFlBQUlILElBQUcsU0FBUyxNQUFNLEVBQUUsWUFBWSxLQUFLLFFBQVEsU0FBUztBQUV4RCxrQkFBUSxpQkFBaUIsR0FBRyxRQUFRLE9BQU87QUFFM0MsY0FBSSxPQUFPLEtBQUssS0FBSyxFQUFFLFFBQVE7QUFDN0IsbUJBQU8sUUFBUSxPQUFPLFVBQVUsUUFBUSxRQUFRLEtBQUs7QUFBQSxVQUN2RDtBQUFBLFFBQ0YsT0FBTztBQUNMLGNBQUksV0FBVyxFQUFFLFlBQVksbUJBQW1CLFFBQVEsVUFBVSxPQUFPLEdBQUc7QUFFMUUsa0JBQU0sU0FBUyxVQUFVLEdBQUcsU0FBUyxZQUFZLEdBQUcsQ0FBQztBQUNyRCxrQkFBTSxFQUFFLFFBQVEsTUFBTTtBQUN0QixtQkFBTyxRQUFRLE9BQU8sS0FBSyxRQUFRLFFBQVEsS0FBSyxRQUFRLE1BQU0sS0FBSyxRQUFRLFFBQVEsS0FBSztBQUFBLFVBQzFGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQ2pCLElBQUFBLFFBQU8sUUFBUSxXQUFXO0FBQUE7QUFBQTs7O0FDckYxQixJQUFBSyxpQkFBQTtBQUFBLGdEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLFNBQVMsUUFBUTtBQUVyQixRQUFNLFNBQU4sY0FBcUIsTUFBTTtBQUFBLE1BQ3ZCLFlBQVksS0FBSztBQUNiLGNBQU0sT0FBTyxhQUFhO0FBQzFCLGFBQUssT0FBTztBQUNaLGNBQU0sa0JBQWtCLE1BQU0sTUFBTTtBQUFBLE1BQ3hDO0FBQUEsSUFDSjtBQUVBLFFBQUksMkJBQTJCLENBQUM7QUFDaEMsUUFBSTtBQUNKLGFBQVMsYUFBYSxRQUFRLEtBQUssY0FBYyxPQUFPO0FBQ3BELGFBQU87QUFDUCxVQUFJLGdCQUFnQixDQUFDO0FBQ3JCLFVBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLFNBQVMsR0FBRztBQUN6RCxZQUFJLE9BQU8sT0FBTyxZQUFZO0FBQzFCLGlCQUFPO0FBQ1gsY0FBTSxTQUFTLGlCQUFpQixLQUFLLE9BQU8sT0FBTztBQUNuRCxZQUFJLGdCQUFnQjtBQUNwQixZQUFJLENBQUMsUUFBUTtBQUNULGNBQUk7QUFDQSw0QkFBZ0IsUUFBUSxRQUFRLE9BQU87QUFBQSxVQUMzQyxTQUNPLE1BQVA7QUFDSSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKLE9BQ0s7QUFDRCwwQkFBZ0IsdUJBQXVCLEtBQUssT0FBTyxPQUFPO0FBQUEsUUFDOUQ7QUFDQSxnQ0FBd0IsYUFBYTtBQUNyQyxpQ0FBeUIsS0FBSyxhQUFhO0FBQzNDLHdCQUFnQixTQUNWLEtBQUssTUFBTSxLQUFLLGFBQWEsZUFBZSxNQUFNLENBQUMsSUFDbkQsUUFBUSxPQUFPO0FBQ3JCLGVBQU8sT0FBTztBQUNkLHdCQUFnQixhQUFhLGVBQWUsS0FBSyxLQUFLLFFBQVEsYUFBYSxHQUFHLGNBQWMsSUFBSTtBQUFBLE1BQ3BHO0FBQ0EsaUNBQTJCLENBQUM7QUFDNUIsYUFBTyxlQUNELFVBQVUsZUFBZSxNQUFNLElBQy9CLE9BQU8sT0FBTyxDQUFDLEdBQUcsZUFBZSxNQUFNO0FBQUEsSUFDakQ7QUFDQSxhQUFTLHdCQUF3QixTQUFTO0FBQ3RDLFVBQUkseUJBQXlCLFFBQVEsT0FBTyxJQUFJLElBQUk7QUFDaEQsY0FBTSxJQUFJLE9BQU8sc0NBQXNDLFdBQVc7QUFBQSxNQUN0RTtBQUFBLElBQ0o7QUFDQSxhQUFTLHVCQUF1QixLQUFLLGNBQWM7QUFDL0MsYUFBTyxLQUFLLEtBQUssUUFBUSxLQUFLLFlBQVk7QUFBQSxJQUM5QztBQUNBLGFBQVMsVUFBVSxTQUFTLFNBQVM7QUFDakMsWUFBTSxTQUFTLENBQUM7QUFDaEIsZUFBUyxTQUFTLEtBQUs7QUFDbkIsZUFBTyxPQUFPLE9BQU8sUUFBUSxZQUFZLENBQUMsTUFBTSxRQUFRLEdBQUc7QUFBQSxNQUMvRDtBQUNBLGFBQU8sT0FBTyxRQUFRLE9BQU87QUFDN0IsaUJBQVcsT0FBTyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3BDLFlBQUksU0FBUyxRQUFRLElBQUksS0FBSyxTQUFTLE9BQU8sSUFBSSxHQUFHO0FBQ2pELGlCQUFPLE9BQU8sVUFBVSxRQUFRLE1BQU0sUUFBUSxJQUFJO0FBQUEsUUFDdEQsT0FDSztBQUNELGlCQUFPLE9BQU8sUUFBUTtBQUFBLFFBQzFCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBRUEsYUFBUyxhQUFhLEtBQUs7QUFDdkIsWUFBTSw2QkFBNkIsSUFBSSxRQUFRLFdBQVcsR0FBRztBQUM3RCxZQUFNLGVBQWUsMkJBQTJCLE1BQU0sc0JBQXNCO0FBQzVFLFlBQU0sU0FBUztBQUNmLFlBQU0sZUFBZSxhQUFhLE1BQU07QUFDeEMsVUFBSSxDQUFDO0FBQ0QsY0FBTSxJQUFJLE1BQU0sd0JBQXdCLEtBQUs7QUFDakQsWUFBTSxnQkFBZ0I7QUFBQSxRQUNsQixLQUFLLGFBQWEsUUFBUSxRQUFRLEVBQUU7QUFBQSxRQUNwQyxVQUFVLENBQUM7QUFBQSxRQUNYLFVBQVUsQ0FBQztBQUFBLE1BQ2Y7QUFDQSxtQkFBYSxRQUFRLENBQUNDLE1BQUssTUFBTTtBQUM3QixZQUFJLFdBQVc7QUFDZixRQUFBQSxPQUFNQSxLQUFJLFFBQVEsT0FBTyxFQUFFO0FBQzNCLFlBQUksV0FBVyxLQUFLQSxJQUFHLEtBQUssTUFBTSxhQUFhLFNBQVM7QUFDcEQscUJBQVc7QUFDZixZQUFJLE1BQU0sS0FBS0EsSUFBRyxHQUFHO0FBQ2pCLHdCQUFjLFNBQVMsS0FBSztBQUFBLFlBQ3hCLEtBQUtBLEtBQUksUUFBUSxRQUFRLEVBQUUsRUFBRSxNQUFNLEdBQUc7QUFBQSxZQUN0QztBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0wsT0FDSztBQUNELHdCQUFjLFNBQVMsS0FBSztBQUFBLFlBQ3hCLEtBQUtBLEtBQUksUUFBUSxRQUFRLEVBQUUsRUFBRSxNQUFNLEdBQUc7QUFBQSxZQUN0QztBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNKLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQU0sZUFBZSxDQUFDLFNBQVMsVUFBVSxTQUFTLFVBQVUsU0FBUyxPQUFPO0FBQzVFLGFBQVMsUUFBUSxNQUFNLE1BQU0sTUFBTTtBQUMvQixlQUFTLFlBQVk7QUFDakIsZUFBTyxPQUFPLFNBQVMsV0FDakIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLElBQzNDO0FBQUEsVUFDRSxhQUFhLE9BQU8sTUFBTTtBQUFBLFVBQzFCO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFBQSxNQUNSO0FBQ0EsVUFBSTtBQUNBLFlBQUksV0FBVztBQUNmLGNBQU0sQ0FBQyxRQUFRLGlCQUFpQixPQUFPLElBQUksVUFBVTtBQUNyRCxjQUFNLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxlQUFlO0FBQzFDLGVBQU8sS0FBSyxVQUFVLEtBQUssS0FBSyxTQUFTLE9BQU87QUFDNUMsZUFBSyxJQUFJO0FBQ2IsY0FBTSxTQUFTLFdBQVcsS0FBSztBQUMvQixZQUFJLFNBQVMsT0FBTyxTQUFTLFFBQVE7QUFDakMsZ0JBQU0sSUFBSSxPQUFPLDJDQUEyQyxPQUFPLFNBQVMsdUJBQXVCLEtBQUssU0FBUztBQUFBLFFBQ3JIO0FBQ0EsY0FBTSxnQkFBZ0IsT0FBTyxTQUFTLFNBQVMsT0FBTyxTQUFTO0FBQy9ELFlBQUksU0FBUyxlQUFlO0FBQ3hCLGdCQUFNLElBQUksT0FBTyw2Q0FBNkMsOEJBQThCLFNBQVM7QUFBQSxRQUN6RztBQUNBLGVBQU8sU0FBUyxRQUFRLGNBQVk7QUFDaEMsZ0JBQU0sTUFBTSxLQUFLLE1BQU07QUFDdkIsZ0JBQU0sZUFBZSxVQUFVLEdBQUc7QUFDbEMsZ0JBQU0sZ0JBQWdCLFNBQVMsSUFBSSxPQUFPLFVBQVEsU0FBUyxnQkFBZ0IsU0FBUyxHQUFHO0FBQ3ZGLGNBQUksY0FBYyxXQUFXO0FBQ3pCLDhCQUFrQixjQUFjLFNBQVMsS0FBSyxRQUFRO0FBQzFELHNCQUFZO0FBQUEsUUFDaEIsQ0FBQztBQUNELGVBQU8sU0FBUyxRQUFRLGNBQVk7QUFDaEMsY0FBSSxLQUFLLFdBQVc7QUFDaEI7QUFDSixnQkFBTSxNQUFNLEtBQUssTUFBTTtBQUN2QixnQkFBTSxlQUFlLFVBQVUsR0FBRztBQUNsQyxnQkFBTSxnQkFBZ0IsU0FBUyxJQUFJLE9BQU8sVUFBUSxTQUFTLGdCQUFnQixTQUFTLEdBQUc7QUFDdkYsY0FBSSxjQUFjLFdBQVc7QUFDekIsOEJBQWtCLGNBQWMsU0FBUyxLQUFLLFFBQVE7QUFDMUQsc0JBQVk7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDTCxTQUNPLEtBQVA7QUFDSSxnQkFBUSxLQUFLLElBQUksS0FBSztBQUFBLE1BQzFCO0FBQUEsSUFDSjtBQUNBLGFBQVMsVUFBVSxLQUFLO0FBQ3BCLFVBQUksTUFBTSxRQUFRLEdBQUcsR0FBRztBQUNwQixlQUFPO0FBQUEsTUFDWCxXQUNTLFFBQVEsTUFBTTtBQUNuQixlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU8sT0FBTztBQUFBLElBQ2xCO0FBQ0EsYUFBUyxrQkFBa0IsY0FBYyxjQUFjLFVBQVU7QUFDN0QsWUFBTSxJQUFJLE9BQU8sV0FBVyxhQUFhLGFBQWEsZ0NBQWdDLGFBQWEsS0FBSyxNQUFNLGtCQUFrQixlQUFlO0FBQUEsSUFDbko7QUFFQSxhQUFTQyxXQUFVLGNBQWM7QUFDN0IsYUFBUSxDQUFDLENBQUMsZ0JBQ04sQ0FBQyxDQUFDLGFBQWEsUUFDZixPQUFPLGFBQWEsU0FBUztBQUFBLElBQ3JDO0FBRUEsYUFBUyxxQkFBcUIsUUFBUSxVQUFVQyxPQUFNLFNBQVM7QUFDM0QsTUFBQUEsTUFBSyxPQUFPLGVBQWUsUUFBUSxVQUFVLE9BQU87QUFBQSxJQUN4RDtBQUNBLGFBQVMsZ0JBQWdCLFFBQVFBLE9BQU07QUFDbkMsTUFBQUEsTUFBSyxPQUFPLFlBQVksT0FBTyxRQUFRLFFBQVE7QUFBQSxJQUNuRDtBQUNBLGFBQVMsV0FBVyxRQUFRO0FBQ3hCLGFBQU8sT0FBTyxLQUFLLE1BQU07QUFBQSxJQUM3QjtBQUVBLGFBQVMsVUFBVSxXQUFXLENBQUMsR0FBRyxTQUFTLE1BQU0sTUFBTTtBQUNuRCxZQUFNLE1BQU0sQ0FBQztBQUNiLGlCQUFXLFFBQVEsRUFBRSxRQUFRLFNBQU87QUFDaEMsWUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDNUIsY0FBSSxPQUFPLFNBQVM7QUFBQSxRQUN4QjtBQUFBLE1BQ0osQ0FBQztBQUNELGFBQU87QUFBQSxJQUNYO0FBRUEsYUFBUyx3QkFBd0Isa0JBQWtCLFNBQVM7QUFDeEQsYUFBTyxTQUFVLFVBQVUsd0JBQXdCLE9BQU87QUFDdEQsZ0JBQVEsOEJBQThCLENBQUMsVUFBVSxxQkFBcUIsR0FBRyxVQUFVLE1BQU07QUFDekYsWUFBSSxNQUFNLFFBQVEsUUFBUSxHQUFHO0FBQ3pCLG1CQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsUUFBUSxLQUFLO0FBQ3RDLGdCQUFJLE9BQU8sU0FBUyxPQUFPLFlBQVk7QUFDbkMsb0JBQU0sTUFBTSwrQkFBK0I7QUFBQSxZQUMvQztBQUNBLHFCQUFTLEdBQUcsd0JBQXdCO0FBQUEsVUFDeEM7QUFDQSxnQkFBTSxVQUFVLEtBQUssTUFBTSxrQkFBa0IsUUFBUTtBQUFBLFFBQ3pELFdBQ1MsT0FBTyxhQUFhLFlBQVk7QUFDckMsbUJBQVMsd0JBQXdCO0FBQ2pDLDJCQUFpQixLQUFLLFFBQVE7QUFBQSxRQUNsQztBQUNBLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUNBLGFBQVMseUJBQXlCLG1CQUFtQjtBQUNqRCxVQUFJLENBQUM7QUFDRCxlQUFPLENBQUM7QUFDWixhQUFPLGtCQUFrQixJQUFJLGdCQUFjO0FBQ3ZDLG1CQUFXLHdCQUF3QjtBQUNuQyxlQUFPO0FBQUEsTUFDWCxDQUFDO0FBQUEsSUFDTDtBQUNBLGFBQVMsZ0JBQWdCLE1BQU1DLFFBQU8sYUFBYSxrQkFBa0I7QUFDakUsWUFBTSx3QkFBd0IsSUFBSSxNQUFNLHVFQUF1RTtBQUMvRyxhQUFPLFlBQVksT0FBTyxDQUFDLEtBQUssZUFBZTtBQUMzQyxZQUFJLFdBQVcsMEJBQTBCLGtCQUFrQjtBQUN2RCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJRixXQUFVLEdBQUcsR0FBRztBQUNoQixpQkFBTyxJQUNGLEtBQUssZ0JBQWMsUUFBUSxJQUFJO0FBQUEsWUFDaEM7QUFBQSxZQUNBLFdBQVcsWUFBWUUsTUFBSztBQUFBLFVBQ2hDLENBQUMsQ0FBQyxFQUNHLEtBQUssQ0FBQyxDQUFDLFlBQVksYUFBYSxNQUFNLE9BQU8sT0FBTyxZQUFZLGFBQWEsQ0FBQztBQUFBLFFBQ3ZGLE9BQ0s7QUFDRCxnQkFBTSxTQUFTLFdBQVcsS0FBS0EsTUFBSztBQUNwQyxjQUFJLG9CQUFvQkYsV0FBVSxNQUFNO0FBQ3BDLGtCQUFNO0FBQ1YsaUJBQU9BLFdBQVUsTUFBTSxJQUNqQixPQUFPLEtBQUssbUJBQWlCLE9BQU8sT0FBTyxLQUFLLGFBQWEsQ0FBQyxJQUM5RCxPQUFPLE9BQU8sS0FBSyxNQUFNO0FBQUEsUUFDbkM7QUFBQSxNQUNKLEdBQUcsSUFBSTtBQUFBLElBQ1g7QUFFQSxhQUFTLHlCQUF5QjtBQUM5QixVQUFJLHFCQUFxQjtBQUNyQixlQUFPO0FBQ1gsYUFBTztBQUFBLElBQ1g7QUFDQSxhQUFTLHVCQUF1QjtBQUM1QixhQUFPLGNBQWMsS0FBSyxDQUFDLFFBQVE7QUFBQSxJQUN2QztBQUNBLGFBQVMsZ0JBQWdCO0FBQ3JCLGFBQU8sQ0FBQyxDQUFDLFFBQVEsU0FBUztBQUFBLElBQzlCO0FBQ0EsYUFBUyxRQUFRLE1BQU07QUFDbkIsYUFBTyxLQUFLLE1BQU0sdUJBQXVCLElBQUksQ0FBQztBQUFBLElBQ2xEO0FBQ0EsYUFBUyxvQkFBb0I7QUFDekIsYUFBTyxRQUFRLEtBQUssdUJBQXVCO0FBQUEsSUFDL0M7QUFFQSxRQUFJLGNBQTJCLHVCQUFPLE9BQU87QUFBQSxNQUMzQyxXQUFXO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFFRCxhQUFTLFlBQVksVUFBVTtBQUMzQixVQUFJLE9BQU8sWUFBWTtBQUNuQixlQUFPO0FBQ1gsZUFBUyxJQUFJLEdBQUcsUUFBUSxPQUFPLEtBQUssUUFBUSxLQUFLLEdBQUcsS0FBSyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQzVFLGNBQU0sUUFBUSxNQUFNLE1BQU07QUFDMUIsWUFBSSxJQUFJLFlBQVk7QUFDaEIsaUJBQU87QUFBQSxNQUNmO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFNLGlCQUFpQjtBQUN2QixhQUFTLFFBQVFFLFFBQU9DLFFBQU9DLGFBQVksbUJBQW1CLENBQUMsR0FBR0gsT0FBTTtBQUNwRSxZQUFNSSxRQUFPLENBQUM7QUFDZCxVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFJO0FBQ0osTUFBQUEsTUFBSyxhQUFhLFNBQVMsV0FBVyxLQUFLLGFBQWEsU0FBUyxTQUFTLG1CQUFtQixZQUFZO0FBQ3JHLFlBQUksVUFBVSxDQUFDO0FBQ2YsY0FBTSxjQUFjLHlCQUF5QixpQkFBaUI7QUFDOUQsa0JBQVUsWUFBWSxNQUFNO0FBQUEsUUFBRTtBQUM5QixZQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDcEIsY0FBSSxvQkFBb0IsR0FBRyxHQUFHO0FBQzFCLGFBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSTtBQUFBLFVBQ3hCLE9BQ0s7QUFDRCx1QkFBV0MsWUFBVyxLQUFLO0FBQ3ZCLGNBQUFELE1BQUssV0FBV0MsUUFBTztBQUFBLFlBQzNCO0FBQUEsVUFDSjtBQUFBLFFBQ0osV0FDUywyQkFBMkIsR0FBRyxHQUFHO0FBQ3RDLGNBQUlBLFdBQVUsTUFBTSxRQUFRLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxZQUFZLFdBQzdELElBQUksVUFDSixXQUFXLEdBQUc7QUFDcEIsY0FBSSxJQUFJO0FBQ0osWUFBQUEsV0FBVSxDQUFDLEVBQUUsT0FBT0EsUUFBTyxFQUFFLE9BQU8sSUFBSSxPQUFPO0FBQ25ELFVBQUFELE1BQUssV0FBV0MsVUFBUyxZQUFZLEdBQUcsR0FBRyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksYUFBYSxJQUFJLFVBQVU7QUFDcEc7QUFBQSxRQUNKLFdBQ1MsMkJBQTJCLE9BQU8sR0FBRztBQUMxQyxVQUFBRCxNQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxPQUFPLEdBQUcsYUFBYSxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsYUFBYSxRQUFRLFVBQVU7QUFDN0g7QUFBQSxRQUNKO0FBQ0EsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixnQkFBTSxnQkFBZ0IsYUFBYSxHQUFHO0FBQ3RDLG9CQUFVLFFBQVEsSUFBSSxXQUFTLGFBQWEsS0FBSyxFQUFFLEdBQUc7QUFDdEQsY0FBSSxZQUFZO0FBQ2hCLGdCQUFNLGdCQUFnQixDQUFDLGNBQWMsR0FBRyxFQUFFLE9BQU8sT0FBTyxFQUFFLE9BQU8sT0FBSztBQUNsRSxnQkFBSSxlQUFlLEtBQUssQ0FBQyxHQUFHO0FBQ3hCLDBCQUFZO0FBQ1oscUJBQU87QUFBQSxZQUNYO0FBQ0EsbUJBQU87QUFBQSxVQUNYLENBQUM7QUFDRCxjQUFJLGNBQWMsV0FBVyxLQUFLO0FBQzlCLDBCQUFjLEtBQUssSUFBSTtBQUMzQixjQUFJLFdBQVc7QUFDWCwwQkFBYyxNQUFNLGNBQWM7QUFDbEMsc0JBQVUsY0FBYyxNQUFNLENBQUM7QUFDL0Isa0JBQU0sSUFBSSxRQUFRLGdCQUFnQixjQUFjLEdBQUc7QUFBQSxVQUN2RDtBQUNBLGtCQUFRLFFBQVEsV0FBUztBQUNyQixxQkFBUyxTQUFTLGNBQWM7QUFBQSxVQUNwQyxDQUFDO0FBQ0QsY0FBSSxnQkFBZ0IsT0FBTztBQUN2QixZQUFBRixPQUFNLFFBQVEsS0FBSyxhQUFhLFdBQVcsU0FBUyxVQUFVO0FBQUEsVUFDbEU7QUFDQSxtQkFBUyxjQUFjLE9BQU87QUFBQSxZQUMxQixVQUFVO0FBQUEsWUFDVjtBQUFBLFlBQ0E7QUFBQSxZQUNBLFNBQVMsV0FBVyxDQUFDO0FBQUEsWUFDckI7QUFBQSxZQUNBO0FBQUEsWUFDQSxVQUFVLGNBQWM7QUFBQSxZQUN4QixVQUFVLGNBQWM7QUFBQSxVQUM1QjtBQUNBLGNBQUk7QUFDQSw2QkFBaUIsU0FBUyxjQUFjO0FBQUEsUUFDaEQ7QUFBQSxNQUNKO0FBQ0EsTUFBQUUsTUFBSyxlQUFlLFNBQVMsYUFBYSxLQUFLLFNBQVMsS0FBSyxZQUFZLE1BQU07QUFDM0UsZUFBTyxRQUFRLENBQUM7QUFDaEIsWUFBSSxPQUFPLEtBQUssWUFBWTtBQUN4QixlQUFLLFVBQVU7QUFDbkIsWUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLFVBQVU7QUFDOUIsZUFBSyxhQUFhLENBQUMsSUFBSTtBQUMzQixjQUFNLGNBQWMsT0FBTyxLQUFLLFVBQVUsYUFBYSxLQUFLLFFBQVEsQ0FBQyxNQUFNO0FBQzNFLGFBQUssUUFBUSxTQUFTLE1BQU0sS0FBSyxRQUFRLFVBQVU7QUFDL0MsZ0JBQU0sVUFBVSxZQUFZLEtBQUssUUFBUSxRQUFRO0FBQ2pELGNBQUksU0FBUztBQUNULGdCQUFJLENBQUMsUUFBUSxNQUFNLFFBQVEsTUFBTTtBQUM3QixxQkFBTztBQUNYLG9CQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ3pCLFlBQUFBLE1BQUssV0FBVyxPQUFPO0FBQUEsVUFDM0I7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxRQUFBSixNQUFLLGlCQUFpQixFQUFFLFNBQVMsS0FBSyxVQUFVLFdBQVcsR0FBRyxLQUFLLElBQUk7QUFBQSxNQUMzRTtBQUNBLGVBQVMsV0FBVyxLQUFLO0FBQ3JCLGNBQU0sTUFBTSxZQUFZLEdBQUc7QUFDM0IsWUFBSSxDQUFDO0FBQ0QsZ0JBQU0sSUFBSSxNQUFNLHFDQUFxQ0EsTUFBSyxRQUFRLEdBQUcsR0FBRztBQUM1RSxlQUFPLG9CQUFvQixJQUFJLFFBQVE7QUFBQSxNQUMzQztBQUNBLGVBQVMsb0JBQW9CLFVBQVU7QUFDbkMsZUFBT0EsTUFBSyxLQUFLLFNBQVMsVUFBVUEsTUFBSyxLQUFLLFFBQVEsUUFBUSxDQUFDO0FBQUEsTUFDbkU7QUFDQSxlQUFTLFlBQVksRUFBRSxVQUFVLGFBQWEsS0FBTSxHQUFHO0FBQ25ELG1CQUFXLFFBQVEsQ0FBQyxVQUFVLGFBQWEsSUFBSSxHQUFHO0FBQzlDLGNBQUksT0FBTyxTQUFTLFlBQVksU0FBUztBQUNyQyxtQkFBTztBQUNYLCtCQUFxQixNQUFNLE1BQU1BLEtBQUk7QUFBQSxRQUN6QztBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUksTUFBSyxjQUFjLE1BQU0sT0FBTyxLQUFLLFFBQVEsRUFBRSxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUM7QUFDM0UsTUFBQUEsTUFBSyxxQkFBcUIsTUFBTTtBQUNoQyxNQUFBQSxNQUFLLG9CQUFvQixNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFBQSxNQUFLLGFBQWEsU0FBUyxXQUFXQyxVQUFTSixRQUFPLFFBQVEsY0FBYztBQUN4RSxZQUFJLFVBQVUsT0FBTztBQUNyQixjQUFNLGlCQUFpQixTQUFTSSxhQUFZLFNBQVMsU0FBU0EsY0FBYTtBQUMzRSxjQUFNLGlCQUFpQkosT0FBTSxXQUFXO0FBQ3hDLFlBQUksV0FBVyxlQUFlLE1BQU07QUFDcEMsY0FBTSxpQkFBaUIsZUFBZSxTQUFTLE1BQU07QUFDckQsWUFBSSxZQUFZLE9BQU87QUFDdkIsWUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixZQUFJSSxVQUFTO0FBQ1QseUJBQWUsU0FBUyxLQUFLQSxRQUFPO0FBQ3BDLHlCQUFlLGFBQWEsS0FBSyxlQUFlLFFBQVE7QUFBQSxRQUM1RDtBQUNBLGNBQU0sVUFBVSxlQUFlO0FBQy9CLFlBQUkseUJBQXlCLE9BQU8sR0FBRztBQUNuQyxnQkFBTSxnQkFBZ0IsUUFBUUosT0FBTSxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3pELGdCQUFNLGFBQWEsZ0JBQWdCLGFBQWEsSUFBSSxnQkFBZ0JBO0FBQ3BFLGNBQUksa0JBQWtCLFVBQVUsR0FBRztBQUMvQix1QkFDSyxpQkFBaUIsRUFDakIsTUFBTSxzQ0FBc0MsZ0JBQWdCLGNBQWMsR0FBRyxlQUFlLFdBQVc7QUFBQSxVQUNoSDtBQUNBLHNCQUFZLFdBQVcsV0FBVyxNQUFNLE1BQU0sTUFBTSxZQUFZO0FBQ2hFLG9CQUFVLFdBQVcsT0FBTztBQUFBLFFBQ2hDLFdBQ1Msa0NBQWtDLE9BQU8sR0FBRztBQUNqRCxnQkFBTSxhQUFhQSxPQUFNLE1BQU0sT0FBTyxPQUFPO0FBQzdDLGNBQUksa0JBQWtCLFVBQVUsR0FBRztBQUMvQix1QkFDSyxpQkFBaUIsRUFDakIsTUFBTSxzQ0FBc0MsZ0JBQWdCLGNBQWMsR0FBRyxlQUFlLFdBQVc7QUFBQSxVQUNoSDtBQUNBLGlCQUFPLEtBQUssZUFBZSxPQUFPLEVBQUUsUUFBUSxTQUFPO0FBQy9DLHVCQUFXLE9BQU8sS0FBSyxRQUFRLElBQUk7QUFBQSxVQUN2QyxDQUFDO0FBQ0Qsc0JBQVksV0FBVyxXQUFXLE1BQU0sTUFBTSxNQUFNLFlBQVk7QUFDaEUsb0JBQVUsV0FBVyxPQUFPO0FBQUEsUUFDaEM7QUFDQSxZQUFJLENBQUNBLE9BQU0sV0FBVyxHQUFHO0FBQ3JCLDBCQUFnQixvQkFBb0IsZ0JBQWdCLFdBQVcsY0FBYztBQUFBLFFBQ2pGO0FBQ0EsY0FBTSxjQUFjLGlCQUNmLE1BQU0sQ0FBQyxFQUNQLE9BQU8sZUFBZSxXQUFXO0FBQ3RDLHdCQUFnQixXQUFXQSxRQUFPLGFBQWEsSUFBSTtBQUNuRCxZQUFJLENBQUNBLE9BQU0sV0FBVyxHQUFHO0FBQ3JCLFVBQUFBLE9BQU0sZUFBZSxXQUFXLFNBQVMsZUFBZUEsT0FBTSxPQUFPLE9BQU8sQ0FBQ0ksUUFBTztBQUFBLFFBQ3hGO0FBQ0EsWUFBSSxlQUFlLFdBQVcsQ0FBQ0osT0FBTSxXQUFXLEdBQUc7QUFDL0MsVUFBQUEsT0FBTSxjQUFjO0FBQ3BCLGdCQUFNLHFCQUFxQixDQUFDLENBQUNBLE9BQU0sV0FBVyxFQUFFLGNBQWM7QUFDOUQsVUFBQUEsT0FBTSxhQUFhLFdBQVcsa0JBQWtCO0FBQ2hELHNCQUFZLGdCQUFnQixXQUFXQSxRQUFPLGFBQWEsS0FBSztBQUNoRSxjQUFJO0FBQ0osY0FBSUYsV0FBVSxTQUFTLEdBQUc7QUFDdEIsNEJBQWdCLFVBQVUsS0FBSyxVQUFRLGVBQWUsUUFBUSxJQUFJLENBQUM7QUFBQSxVQUN2RSxPQUNLO0FBQ0QsNEJBQWdCLGVBQWUsUUFBUSxTQUFTO0FBQUEsVUFDcEQ7QUFDQSxnQkFBTSx1QkFBdUJFLE9BQU0sd0JBQXdCO0FBQzNELGNBQUlGLFdBQVUsYUFBYSxHQUFHO0FBQzFCLFlBQUFFLE9BQU0saUJBQWlCLEVBQUUsaUJBQWlCO0FBQzFDLDBCQUNLLEtBQUssV0FBUztBQUNmLGtCQUFJLHNCQUFzQjtBQUN0QixxQ0FBcUIsS0FBSztBQUFBLGNBQzlCO0FBQUEsWUFDSixDQUFDLEVBQ0ksTUFBTSxDQUFBSyxXQUFTO0FBQ2hCLGtCQUFJO0FBQ0EsZ0JBQUFMLE9BQU0saUJBQWlCLEVBQUUsS0FBSyxNQUFNSyxNQUFLO0FBQUEsY0FDN0MsU0FDTyxLQUFQO0FBQUEsY0FDQTtBQUFBLFlBQ0osQ0FBQyxFQUNJLEtBQUssTUFBTTtBQUNaLGNBQUFMLE9BQU0saUJBQWlCLEVBQUUsdUJBQXVCO0FBQUEsWUFDcEQsQ0FBQztBQUFBLFVBQ0wsT0FDSztBQUNELGdCQUFJLHNCQUFzQjtBQUN0QixtQ0FBcUIsYUFBYTtBQUFBLFlBQ3RDO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFDQSxZQUFJSSxVQUFTO0FBQ1QseUJBQWUsU0FBUyxJQUFJO0FBQzVCLHlCQUFlLGFBQWEsSUFBSTtBQUFBLFFBQ3BDO0FBQ0EsbUJBQVcsZUFBZSxNQUFNLFNBQVM7QUFDekMsWUFBSSxXQUFXO0FBQ1gseUJBQWUsTUFBTSxPQUFPLFdBQVcsSUFBSSxRQUFRO0FBQ3ZELGVBQU87QUFBQSxNQUNYO0FBQ0EsZUFBUyxrQkFBa0JKLFFBQU87QUFDOUIsZUFBUSxDQUFDQSxPQUFNLGlCQUFpQixFQUFFLGlCQUFpQixLQUMvQ0EsT0FBTSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUFBLE1BQ3ZEO0FBQ0EsZUFBUyxzQ0FBc0MsZ0JBQWdCLGdCQUFnQjtBQUMzRSxjQUFNLElBQUksZUFBZSxLQUFLLGVBQWUsUUFBUSxJQUMvQyxlQUFlLFNBQVMsUUFBUSxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssSUFDekQsZUFBZTtBQUNyQixjQUFNLEtBQUssZUFBZSxPQUFPLENBQUFNLE9BQUs7QUFDbEMsaUJBQU8sQ0FBQyxlQUFlLEtBQUtBLEVBQUM7QUFBQSxRQUNqQyxDQUFDO0FBQ0QsV0FBRyxLQUFLLENBQUM7QUFDVCxlQUFPLE1BQU0sR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUM1QjtBQUNBLE1BQUFILE1BQUssc0JBQXNCLFNBQVVILFFBQU87QUFDeEMsNkJBQXFCLGdCQUFnQixRQUFXRCxLQUFJO0FBQ3BELFlBQUksa0JBQWtCQyxNQUFLLEdBQUc7QUFDMUIsZ0JBQU0sZ0JBQWdCLGVBQWUsS0FBSyxlQUFlLFFBQVEsSUFDM0QsZUFBZSxXQUNmLGVBQWUsU0FBUyxRQUFRLGNBQWMsS0FBSztBQUN6RCxVQUFBQSxPQUFNLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxlQUFlLFdBQVc7QUFBQSxRQUM1RTtBQUNBLGNBQU0sVUFBVSxlQUFlO0FBQy9CLFlBQUkseUJBQXlCLE9BQU8sR0FBRztBQUNuQyxrQkFBUUEsTUFBSztBQUFBLFFBQ2pCLFdBQ1MsQ0FBQywyQkFBMkIsT0FBTyxHQUFHO0FBQzNDLGlCQUFPLEtBQUssT0FBTyxFQUFFLFFBQVEsU0FBTztBQUNoQyxZQUFBQSxPQUFNLE9BQU8sS0FBSyxRQUFRLElBQUk7QUFBQSxVQUNsQyxDQUFDO0FBQUEsUUFDTDtBQUFBLE1BQ0o7QUFDQSxlQUFTLG9CQUFvQixnQkFBZ0IsTUFBTSxTQUFTO0FBQ3hELGFBQUssSUFBSSxLQUFLLEVBQUUsTUFBTSxRQUFRLFNBQVMsTUFBTTtBQUM3QyxjQUFNLFdBQVcsZUFBZSxTQUFTLE1BQU0sQ0FBQztBQUNoRCxjQUFNLFdBQVcsZUFBZSxTQUFTLE1BQU0sQ0FBQztBQUNoRCxjQUFNLGdCQUFnQixDQUFDO0FBQ3ZCLFFBQUFFLFlBQVcsZ0JBQWdCLFNBQVMsUUFBUSxLQUFLLEVBQUUsTUFBTTtBQUN6RCxlQUFPLFNBQVMsUUFBUTtBQUNwQixnQkFBTSxTQUFTLFNBQVMsTUFBTTtBQUM5Qiw2QkFBbUIsUUFBUSxNQUFNLGFBQWE7QUFBQSxRQUNsRDtBQUNBLGVBQU8sU0FBUyxRQUFRO0FBQ3BCLGdCQUFNLFFBQVEsU0FBUyxNQUFNO0FBQzdCLDZCQUFtQixPQUFPLE1BQU0sYUFBYTtBQUFBLFFBQ2pEO0FBQ0EsYUFBSyxJQUFJLFFBQVEsU0FBUyxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQUssS0FBSyxDQUFDLENBQUM7QUFDeEQsK0JBQXVCLE1BQU0sZUFBZUMsTUFBSyxrQkFBa0IsZUFBZSxRQUFRLENBQUM7QUFDM0YsZUFBTztBQUFBLE1BQ1g7QUFDQSxlQUFTLG1CQUFtQixZQUFZLE1BQU0sZUFBZTtBQUN6RCxjQUFNLE1BQU0sV0FBVyxJQUFJO0FBQzNCLFlBQUksV0FBVyxVQUFVO0FBQ3JCLHdCQUFjLE9BQU8sS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksTUFBTTtBQUFBLFFBQ3BELE9BQ0s7QUFDRCxjQUFJLEtBQUssRUFBRTtBQUNQLDBCQUFjLE9BQU8sQ0FBQyxPQUFPLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUFBLFFBQ3BEO0FBQUEsTUFDSjtBQUNBLGVBQVMsdUJBQXVCLE1BQU0sZUFBZSxjQUFjO0FBQy9ELGNBQU0sVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHSCxPQUFNLFdBQVcsQ0FBQztBQUNwRCxnQkFBUSxVQUFVLE9BQU8sT0FBTyxhQUFhLFNBQVMsUUFBUSxPQUFPO0FBQ3JFLG1CQUFXLE9BQU8sT0FBTyxLQUFLLGFBQWEsS0FBSyxHQUFHO0FBQy9DLGtCQUFRLE1BQU0sUUFBUSxRQUFRLE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTyxhQUFhLE1BQU0sSUFBSTtBQUFBLFFBQ2xGO0FBQ0EsZ0JBQVEsUUFBUSxRQUFRLE1BQU0sT0FBTyxhQUFhLEtBQUs7QUFDdkQsZ0JBQVEsU0FBUyxDQUFDO0FBQ2xCLGNBQU0sV0FBVyxDQUFDO0FBQ2xCLGVBQU8sS0FBSyxhQUFhLEVBQUUsUUFBUSxTQUFPO0FBQ3RDLHdCQUFjLEtBQUssSUFBSSxXQUFTO0FBQzVCLGdCQUFJLFFBQVEsY0FBYztBQUN0QixzQkFBUSxJQUFJLE9BQU87QUFDdkIscUJBQVMsS0FBSyxLQUFLLEtBQUs7QUFDeEIscUJBQVMsS0FBSyxLQUFLO0FBQUEsVUFDdkIsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUNELFlBQUksQ0FBQyxTQUFTO0FBQ1Y7QUFDSixjQUFNLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLGVBQWU7QUFBQSxVQUNwRCxjQUFjO0FBQUEsUUFDbEIsQ0FBQztBQUNELGNBQU0sU0FBU0QsTUFBSyxPQUFPLFNBQVMsVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFBQSxVQUNyRSxlQUFlO0FBQUEsUUFDbkIsQ0FBQyxDQUFDO0FBQ0YsWUFBSSxPQUFPLE9BQU87QUFDZCxVQUFBQyxPQUFNLGlCQUFpQixFQUFFLEtBQUssT0FBTyxNQUFNLFNBQVMsT0FBTyxLQUFLO0FBQUEsUUFDcEUsT0FDSztBQUNELGdCQUFNLGlCQUFpQixPQUFPLEtBQUssYUFBYTtBQUNoRCxpQkFBTyxLQUFLLGFBQWEsRUFBRSxRQUFRLFNBQU87QUFDdEMsMkJBQWUsS0FBSyxHQUFHLE9BQU8sUUFBUSxJQUFJO0FBQUEsVUFDOUMsQ0FBQztBQUNELGlCQUFPLEtBQUssT0FBTyxJQUFJLEVBQUUsUUFBUSxTQUFPO0FBQ3BDLGdCQUFJLGVBQWUsUUFBUSxHQUFHLE1BQU0sSUFBSTtBQUNwQyxrQkFBSSxDQUFDLGNBQWM7QUFDZiw4QkFBYyxPQUFPLE9BQU8sS0FBSztBQUNyQyxtQkFBSyxPQUFPLE9BQU8sS0FBSztBQUFBLFlBQzVCO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUFBLE1BQ0o7QUFDQSxNQUFBRyxNQUFLLG9CQUFvQixTQUFVLFdBQVc7QUFDMUMsY0FBTSxlQUFlO0FBQUEsVUFDakIsT0FBTyxDQUFDO0FBQUEsVUFDUixTQUFTLENBQUM7QUFBQSxVQUNWLE9BQU8sQ0FBQztBQUFBLFVBQ1IsUUFBUSxDQUFDO0FBQUEsUUFDYjtBQUNBLGNBQU0sU0FBUyxhQUFhLFNBQVM7QUFDckMsZUFBTyxTQUFTLFFBQVEsT0FBSztBQUN6QixnQkFBTSxDQUFDLFFBQVEsT0FBTyxJQUFJLEVBQUU7QUFDNUIsY0FBSSxFQUFFLFVBQVU7QUFDWix5QkFBYSxNQUFNLEtBQUssR0FBRztBQUMzQix5QkFBYSxRQUFRLE9BQU8sQ0FBQztBQUFBLFVBQ2pDO0FBQ0EsdUJBQWEsTUFBTSxPQUFPO0FBQzFCLHVCQUFhLE9BQU8sT0FBTztBQUFBLFFBQy9CLENBQUM7QUFDRCxlQUFPLFNBQVMsUUFBUSxPQUFLO0FBQ3pCLGdCQUFNLENBQUMsUUFBUSxPQUFPLElBQUksRUFBRTtBQUM1QixjQUFJLEVBQUUsVUFBVTtBQUNaLHlCQUFhLE1BQU0sS0FBSyxHQUFHO0FBQzNCLHlCQUFhLFFBQVEsT0FBTyxDQUFDO0FBQUEsVUFDakM7QUFDQSx1QkFBYSxNQUFNLE9BQU87QUFBQSxRQUM5QixDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFFBQVEsTUFBTTtBQUNmLG1CQUFXLENBQUM7QUFDWixtQkFBVyxDQUFDO0FBQ1oseUJBQWlCO0FBQ2pCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFlBQU0sVUFBVSxDQUFDO0FBQ2pCLE1BQUFBLE1BQUssU0FBUyxNQUFNO0FBQ2hCLGdCQUFRLEtBQUs7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMO0FBQ0EsTUFBQUEsTUFBSyxXQUFXLE1BQU07QUFDbEIsY0FBTSxTQUFTLFFBQVEsSUFBSTtBQUMzQiw2QkFBcUIsUUFBUSxRQUFXSixLQUFJO0FBQzVDLFNBQUMsRUFBRSxVQUFVLFVBQVUsZUFBZSxJQUFJO0FBQUEsTUFDOUM7QUFDQSxhQUFPSTtBQUFBLElBQ1g7QUFDQSxhQUFTLDJCQUEyQixTQUFTO0FBQ3pDLGFBQVEsT0FBTyxZQUFZLFlBQ3ZCLENBQUMsQ0FBQyxRQUFRLFdBQ1YsT0FBTyxRQUFRLFlBQVk7QUFBQSxJQUNuQztBQUNBLGFBQVMsb0JBQW9CLEtBQUs7QUFDOUIsVUFBSSxJQUFJLE1BQU0sT0FBSyxPQUFPLE1BQU0sUUFBUSxHQUFHO0FBQ3ZDLGVBQU87QUFBQSxNQUNYLE9BQ0s7QUFDRCxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxhQUFTLHlCQUF5QixTQUFTO0FBQ3ZDLGFBQU8sT0FBTyxZQUFZO0FBQUEsSUFDOUI7QUFDQSxhQUFTLGtDQUFrQyxTQUFTO0FBQ2hELGFBQU8sT0FBTyxZQUFZO0FBQUEsSUFDOUI7QUFDQSxhQUFTLDJCQUEyQixLQUFLO0FBQ3JDLGFBQU8sT0FBTyxRQUFRLFlBQVksQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUFBLElBQ3hEO0FBRUEsYUFBUyxZQUFZLFVBQVU7QUFDM0IsVUFBSSxPQUFPLFlBQVk7QUFDbkI7QUFDSixPQUFDLFFBQVEsUUFBUSxRQUFRLE1BQU0sRUFBRSxRQUFRLGFBQVc7QUFDaEQsY0FBTSxTQUFTO0FBQ2YsWUFBSSxPQUFPLFdBQ1AsT0FBTyxTQUNQLE9BQU8sT0FBTyxRQUFRLGdCQUFnQixZQUFZO0FBQ2xELGlCQUFPLFFBQVEsWUFBWSxRQUFRO0FBQUEsUUFDdkM7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMO0FBRUEsYUFBUyxNQUFNSCxRQUFPTyxPQUFNUixPQUFNO0FBQzlCLFlBQU0sS0FBS1EsTUFBSztBQUNoQixZQUFNSixRQUFPLENBQUM7QUFDZCxZQUFNLFFBQVEsQ0FBQztBQUNmLE1BQUFBLE1BQUssU0FBUyxTQUFTLE9BQU8sR0FBRztBQUM3QixjQUFNLEtBQUssQ0FBQztBQUFBLE1BQ2hCO0FBQ0EsVUFBSSxjQUFjO0FBQ2xCLFVBQUksaUJBQWlCO0FBQ3JCLE1BQUFBLE1BQUssaUJBQWlCLFNBQVMsaUJBQWlCLE9BQU8sTUFBTSxNQUFNO0FBQy9ELGlCQUFTLG9CQUFvQjtBQUN6QixpQkFBTyxPQUFPLFNBQVMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJO0FBQUEsUUFDaEU7QUFDQSxjQUFNLENBQUMsU0FBUyxPQUFPLElBQUksa0JBQWtCO0FBQzdDLHNCQUFjO0FBQ2QseUJBQWlCO0FBQ2pCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFVBQUksZ0JBQWdCO0FBQ3BCLE1BQUFBLE1BQUssT0FBTyxTQUFTLEtBQUssS0FBSyxLQUFLO0FBQ2hDLGNBQU1LLFVBQVNSLE9BQU0sbUJBQW1CO0FBQ3hDLFlBQUksTUFBTSxRQUFRO0FBQ2QsbUJBQVMsSUFBSSxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHO0FBQ3hDLGtCQUFNLEdBQUcsS0FBSyxLQUFLRyxLQUFJO0FBQUEsVUFDM0I7QUFBQSxRQUNKLE9BQ0s7QUFDRCxjQUFJSCxPQUFNLGVBQWU7QUFDckIsd0JBQVksSUFBSTtBQUNwQixjQUFJLENBQUMsZUFBZTtBQUNoQiw0QkFBZ0I7QUFDaEIsZ0JBQUksZ0JBQWdCO0FBQ2hCLGNBQUFBLE9BQU0sU0FBUyxPQUFPO0FBQ3RCLGNBQUFRLFFBQU8sTUFBTTtBQUFBLFlBQ2pCO0FBQ0EsZ0JBQUksT0FBTztBQUNQLGNBQUFBLFFBQU8sTUFBTSxPQUFPLEdBQUc7QUFDM0IsZ0JBQUksYUFBYTtBQUNiLGtCQUFJLE9BQU87QUFDUCxnQkFBQUEsUUFBTyxNQUFNLEVBQUU7QUFDbkIsY0FBQUEsUUFBTyxNQUFNLFdBQVc7QUFBQSxZQUM1QjtBQUFBLFVBQ0o7QUFDQSxnQkFBTSxPQUFPLElBQUksT0FBTyxHQUFHO0FBQzNCLGNBQUlSLE9BQU0sZUFBZSxHQUFHO0FBQ3hCLG1CQUFPQSxPQUFNLEtBQUssQ0FBQztBQUFBLFVBQ3ZCLFdBQ1NBLE9BQU0sa0JBQWtCLEdBQUc7QUFDaEMsbUJBQU9BLE9BQU0sS0FBSyxHQUFHLEdBQUc7QUFBQSxVQUM1QixPQUNLO0FBQ0Qsa0JBQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxVQUFJLFNBQVMsQ0FBQztBQUNkLFVBQUksZ0JBQWdCO0FBQ3BCLE1BQUFHLE1BQUssUUFBUSxDQUFDLEtBQUssZ0JBQWdCO0FBQy9CLFlBQUksUUFBUSxNQUFNO0FBQ2QsMEJBQWdCO0FBQ2hCLG1CQUFTLENBQUM7QUFDVixpQkFBT0E7QUFBQSxRQUNYO0FBQ0Esd0JBQWdCO0FBQ2hCLGVBQU8sS0FBSyxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUM7QUFDcEMsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxXQUFXLE1BQU07QUFDbEIsZUFBTztBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLG1CQUFtQixNQUFNO0FBQzFCLGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyx5QkFBeUIsTUFBTTtBQUNoQyxlQUFPLEdBQUcsY0FBYztBQUFBLE1BQzVCO0FBQ0EsVUFBSSxXQUFXLENBQUM7QUFDaEIsTUFBQUEsTUFBSyxVQUFVLENBQUMsS0FBSyxnQkFBZ0I7QUFDakMsaUJBQVMsS0FBSyxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUM7QUFBQSxNQUMxQztBQUNBLFVBQUksV0FBVyxDQUFDO0FBQ2hCLE1BQUFBLE1BQUssVUFBVSxTQUFTQyxTQUFRLEtBQUssYUFBYSxXQUFXLFNBQVMsYUFBYSxPQUFPO0FBQ3RGLFlBQUksV0FBVztBQUNYLHFCQUFXLFNBQVMsSUFBSSxjQUFZO0FBQ2hDLHFCQUFTLEtBQUs7QUFDZCxtQkFBTztBQUFBLFVBQ1gsQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyxLQUFLLENBQUMsS0FBSyxlQUFlLElBQUksV0FBVyxTQUFTLFVBQVUsQ0FBQztBQUFBLE1BQzFFO0FBQ0EsTUFBQUQsTUFBSyxjQUFjLE1BQU07QUFDekIsVUFBSSxlQUFlLENBQUM7QUFDcEIsTUFBQUEsTUFBSyxXQUFXLFNBQVMsU0FBUyxXQUFXLE1BQU07QUFDL0MsWUFBSSxNQUFNLFFBQVEsU0FBUyxHQUFHO0FBQzFCLG9CQUFVLFFBQVEsT0FBSztBQUNuQixZQUFBQSxNQUFLLFNBQVMsR0FBRyxJQUFJO0FBQUEsVUFDekIsQ0FBQztBQUFBLFFBQ0wsV0FDUyxPQUFPLGNBQWMsVUFBVTtBQUNwQyxpQkFBTyxLQUFLLFNBQVMsRUFBRSxRQUFRLE9BQUs7QUFDaEMsWUFBQUEsTUFBSyxTQUFTLEdBQUcsVUFBVSxFQUFFO0FBQUEsVUFDakMsQ0FBQztBQUFBLFFBQ0wsT0FDSztBQUNELHVCQUFhLGFBQWE7QUFBQSxRQUM5QjtBQUFBLE1BQ0o7QUFDQSxNQUFBQSxNQUFLLGtCQUFrQixNQUFNO0FBQzdCLFVBQUksVUFBVSxDQUFDO0FBQ2YsTUFBQUEsTUFBSyxTQUFTLFNBQU87QUFDakIsZ0JBQVEsS0FBSyxHQUFHO0FBQUEsTUFDcEI7QUFDQSxVQUFJLFVBQVU7QUFDZCxVQUFJO0FBQ0osTUFBQUEsTUFBSyxPQUFPLFVBQVE7QUFDaEIsa0JBQVU7QUFDVixlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsVUFBVTtBQUNmLFlBQUksQ0FBQyxTQUFTO0FBQ1YsaUJBQU8sWUFBWTtBQUNuQixvQkFBVTtBQUFBLFFBQ2Q7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLFlBQU0sd0JBQXdCO0FBQzlCLE1BQUFBLE1BQUssa0JBQWtCLFNBQU8sd0JBQXdCO0FBQ3RELE1BQUFBLE1BQUssT0FBTyxTQUFTLE9BQU87QUFDeEIsWUFBSTtBQUNBLGlCQUFPO0FBQ1gseUJBQWlCO0FBQ2pCLGNBQU0sU0FBU0gsT0FBTSxtQkFDZkEsT0FBTSxLQUNORCxNQUFLLEtBQUssU0FBU0MsT0FBTSxFQUFFO0FBQ2pDLGNBQU0sa0JBQWtCQSxPQUFNLG1CQUFtQjtBQUNqRCxjQUFNLG1CQUFtQkEsT0FBTSxvQkFBb0I7QUFDbkQsY0FBTSxvQkFBb0JBLE9BQU0scUJBQXFCO0FBQ3JELGNBQU0sU0FBU0EsT0FBTSxVQUFVO0FBQy9CLGNBQU0sVUFBVUEsT0FBTSxXQUFXO0FBQ2pDLFlBQUksT0FBTyxDQUFDO0FBQ1osZUFBTyxLQUFLLE9BQU8sT0FBTyxLQUFLLFlBQVksQ0FBQztBQUM1QyxlQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssZUFBZSxDQUFDO0FBQy9DLGVBQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxnQkFBZ0IsQ0FBQztBQUNoRCxlQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssUUFBUSxPQUFPLENBQUM7QUFDL0MsZUFBTyxLQUFLLE9BQU8sbUJBQW1CO0FBQ3RDLGVBQU8sT0FBTyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssUUFBUTtBQUN6QyxjQUFJLFFBQVE7QUFDUixnQkFBSSxPQUFPO0FBQ2YsaUJBQU87QUFBQSxRQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDTixjQUFNLFVBQVUsUUFBUTtBQUN4QixjQUFNLEtBQUtELE1BQUssTUFBTTtBQUFBLFVBQ2xCLE9BQU87QUFBQSxVQUNQLE1BQU0sQ0FBQyxDQUFDO0FBQUEsUUFDWixDQUFDO0FBQ0QsWUFBSSxDQUFDLGVBQWU7QUFDaEIsY0FBSSxPQUFPLFFBQVE7QUFDZixtQkFBTyxRQUFRLENBQUFFLFdBQVM7QUFDcEIsaUJBQUcsSUFBSSxHQUFHQSxPQUFNLEdBQUcsUUFBUSxRQUFRLE1BQU0sR0FBRztBQUM1QyxrQkFBSUEsT0FBTSxJQUFJO0FBQ1YsbUJBQUcsSUFBSSxFQUFFLE1BQU0sR0FBR0EsT0FBTSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUFBLGNBQ3pEO0FBQUEsWUFDSixDQUFDO0FBQ0QsZUFBRyxJQUFJO0FBQUEsVUFDWCxXQUNTLFNBQVMsUUFBUTtBQUN0QixnQkFBSSxJQUFJO0FBQ1IsZ0JBQUksaUJBQWlCLEdBQUc7QUFDcEIsa0JBQUksR0FBRyxXQUFXLEdBQUcsU0FBUztBQUFBO0FBQUEsWUFDbEMsT0FDSztBQUNELGtCQUFJLEdBQUcsV0FBVyxHQUFHLFNBQVM7QUFBQTtBQUFBLFlBQ2xDO0FBQ0EsZUFBRyxJQUFJLEdBQUcsR0FBRztBQUFBLFVBQ2pCO0FBQUEsUUFDSjtBQUNBLFlBQUksU0FBUyxRQUFRO0FBQ2pCLGFBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUN0QixnQkFBTSxVQUFVRCxPQUFNLFdBQVc7QUFDakMsZ0JBQU0saUJBQWlCLFFBQVEsU0FBUyxTQUNsQyxHQUFHLFFBQVEsU0FBUyxLQUFLLEdBQUcsT0FDNUI7QUFDTixjQUFJQSxPQUFNLHVCQUF1QixFQUFFLHFCQUFxQixNQUFNO0FBQzFELHVCQUFXLFNBQVMsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsY0FBYyxFQUFFLEVBQUUsQ0FBQztBQUFBLFVBQy9EO0FBQ0EsbUJBQVMsUUFBUSxDQUFBSSxhQUFXO0FBQ3hCLGtCQUFNLGdCQUFnQixHQUFHLFVBQVUsaUJBQWlCQSxTQUFRLEdBQUcsUUFBUSxVQUFVLEVBQUU7QUFDbkYsZUFBRyxLQUFLO0FBQUEsY0FDSixNQUFNO0FBQUEsY0FDTixTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUFBLGNBQ3BCLE9BQU8sU0FBUyxVQUFVLFNBQVMsR0FBRyxTQUFTLGdCQUFnQixJQUFJO0FBQUEsWUFDdkUsR0FBRyxFQUFFLE1BQU1BLFNBQVEsR0FBRyxDQUFDO0FBQ3ZCLGtCQUFNLFFBQVEsQ0FBQztBQUNmLGdCQUFJQSxTQUFRO0FBQ1Isb0JBQU0sS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJO0FBQ25DLGdCQUFJQSxTQUFRLE1BQU1BLFNBQVEsR0FBRyxRQUFRO0FBQ2pDLG9CQUFNLEtBQUssSUFBSSxHQUFHLFVBQVUsS0FBS0EsU0FBUSxHQUFHLEtBQUssSUFBSSxJQUFJO0FBQUEsWUFDN0Q7QUFDQSxnQkFBSUEsU0FBUSxJQUFJO0FBQ1osa0JBQUksT0FBT0EsU0FBUSxPQUFPLFVBQVU7QUFDaEMsc0JBQU0sS0FBSyxJQUFJLEdBQUcsa0JBQWtCQSxTQUFRLEVBQUUsSUFBSTtBQUFBLGNBQ3RELE9BQ0s7QUFDRCxzQkFBTSxLQUFLLElBQUksR0FBRyxZQUFZLElBQUk7QUFBQSxjQUN0QztBQUFBLFlBQ0o7QUFDQSxnQkFBSSxNQUFNLFFBQVE7QUFDZCxpQkFBRyxJQUFJO0FBQUEsZ0JBQ0gsTUFBTSxNQUFNLEtBQUssR0FBRztBQUFBLGdCQUNwQixTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUFBLGdCQUNwQixPQUFPO0FBQUEsY0FDWCxDQUFDO0FBQUEsWUFDTCxPQUNLO0FBQ0QsaUJBQUcsSUFBSTtBQUFBLFlBQ1g7QUFBQSxVQUNKLENBQUM7QUFDRCxhQUFHLElBQUk7QUFBQSxRQUNYO0FBQ0EsY0FBTSxhQUFhLE9BQU8sS0FBSyxRQUFRLEtBQUssS0FBSyxDQUFDLEdBQUcsT0FBTyxPQUFPLEtBQUtKLE9BQU0sT0FBTyxVQUFVLEtBQUssQ0FBQyxDQUFDO0FBQ3RHLGVBQU8sS0FBSyxPQUFPLFNBQU8sQ0FBQ0EsT0FBTSxPQUFPLFdBQVcsUUFDL0MsVUFBVSxNQUFNLFlBQVUsUUFBUSxNQUFNLFVBQVUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM5RSxjQUFNLGVBQWUsR0FBRyxVQUFVO0FBQ2xDLFlBQUksQ0FBQyxPQUFPO0FBQ1IsaUJBQU8sZ0JBQWdCLENBQUM7QUFDNUIseUJBQWlCLE1BQU0sUUFBUSxPQUFPLFFBQVEsWUFBWTtBQUMxRCxjQUFNLGVBQWUsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztBQUNuRCxjQUFNLGtCQUFrQixPQUFPLEtBQUssTUFBTSxFQUNyQyxPQUFPLGVBQWEsT0FBTyxXQUFXLFNBQVMsQ0FBQyxFQUNoRCxJQUFJLGVBQWE7QUFDbEIsZ0JBQU0saUJBQWlCLE9BQU8sV0FDekIsT0FBTyxtQkFBbUIsRUFDMUIsSUFBSSxTQUFPO0FBQ1osZ0JBQUksQ0FBQyxVQUFVLFFBQVEsR0FBRztBQUN0QixxQkFBTztBQUNYLHFCQUFTLElBQUksR0FBRyxXQUFXLFdBQVcsVUFBVSxRQUFRLFFBQVcsS0FBSztBQUNwRSxrQkFBSSxFQUFFLFFBQVEsTUFBTSxhQUFhLENBQUMsR0FBRyxRQUFRLEdBQUc7QUFDNUMsdUJBQU87QUFBQSxZQUNmO0FBQ0EsbUJBQU87QUFBQSxVQUNYLENBQUM7QUFDRCxpQkFBTyxFQUFFLFdBQVcsZUFBZTtBQUFBLFFBQ3ZDLENBQUMsRUFDSSxPQUFPLENBQUMsRUFBRSxlQUFlLE1BQU0sZUFBZSxTQUFTLENBQUMsRUFDeEQsSUFBSSxDQUFDLEVBQUUsV0FBVyxlQUFlLE1BQU07QUFDeEMsZ0JBQU0sV0FBVyxlQUFlLE9BQU8sQ0FBQyxLQUFLLFFBQVE7QUFDakQsZ0JBQUksT0FBTyxDQUFDLEdBQUcsRUFDVixPQUFPLFFBQVEsTUFBTSxRQUFRLENBQUMsQ0FBQyxFQUMvQixJQUFJLFFBQU07QUFDWCxrQkFBSSxjQUFjRyxNQUFLLHVCQUF1QjtBQUMxQyx1QkFBTztBQUFBLG1CQUNOO0FBQ0Qsd0JBQVMsVUFBVSxLQUFLLEVBQUUsSUFDcEIsQ0FBQyxRQUFRLFFBQVEsUUFBUSxHQUFHLElBQ3hCLE1BQ0EsT0FDSixHQUFHLFNBQVMsSUFDUixPQUNBLE9BQU87QUFBQSxjQUNyQjtBQUFBLFlBQ0osQ0FBQyxFQUNJLEtBQUssQ0FBQyxLQUFLLFFBQVEsYUFBYSxHQUFHLE1BQU0sYUFBYSxHQUFHLElBQ3hELElBQ0EsYUFBYSxHQUFHLElBQ1osSUFDQSxFQUFFLEVBQ1AsS0FBSyxJQUFJO0FBQ2QsbUJBQU87QUFBQSxVQUNYLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsaUJBQU8sRUFBRSxXQUFXLGdCQUFnQixTQUFTO0FBQUEsUUFDakQsQ0FBQztBQUNELGNBQU0sb0JBQW9CLGdCQUNyQixPQUFPLENBQUMsRUFBRSxVQUFVLE1BQU0sY0FBY0EsTUFBSyx1QkFBdUIsQ0FBQyxFQUNyRSxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsU0FBUyxNQUFNLENBQUMsZUFBZSxNQUFNLFNBQU8sYUFBYSxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3JHLFlBQUksbUJBQW1CO0FBQ25CLDBCQUNLLE9BQU8sQ0FBQyxFQUFFLFVBQVUsTUFBTSxjQUFjQSxNQUFLLHVCQUF1QixDQUFDLEVBQ3JFLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixTQUFTLE1BQU07QUFDM0MsMkJBQWUsUUFBUSxTQUFPO0FBQzFCLGtCQUFJLGFBQWEsU0FBUyxJQUFJLEdBQUc7QUFDN0IseUJBQVMsT0FBTyxlQUFlLFNBQVMsTUFBTSxPQUFPLE1BQU07QUFBQSxjQUMvRDtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBQ0w7QUFDQSx3QkFBZ0IsUUFBUSxDQUFDLEVBQUUsV0FBVyxnQkFBZ0IsU0FBUyxNQUFNO0FBQ2pFLGFBQUcsSUFBSSxTQUFTO0FBQ2hCLHlCQUFlLFFBQVEsU0FBTztBQUMxQixrQkFBTSxVQUFVLFNBQVM7QUFDekIsZ0JBQUksT0FBTyxhQUFhLFFBQVE7QUFDaEMsZ0JBQUksT0FBTztBQUNYLGdCQUFJLENBQUMsS0FBSyxZQUFZLHFCQUFxQjtBQUN2QyxxQkFBTyxHQUFHLEtBQUssVUFBVSxzQkFBc0IsTUFBTSxDQUFDO0FBQzFELGdCQUFJLENBQUMsUUFBUSxRQUFRLFFBQVEsR0FBRztBQUM1QixxQkFBTyxJQUFJLEdBQUcsU0FBUztBQUMzQixnQkFBSSxDQUFDLFFBQVEsTUFBTSxRQUFRLEdBQUc7QUFDMUIscUJBQU8sSUFBSSxHQUFHLE9BQU87QUFDekIsZ0JBQUksQ0FBQyxRQUFRLE9BQU8sUUFBUSxHQUFHO0FBQzNCLHFCQUFPLElBQUksR0FBRyxRQUFRO0FBQzFCLGdCQUFJLENBQUMsUUFBUSxVQUFVLFFBQVEsR0FBRztBQUM5QixxQkFBTyxJQUFJLEdBQUcsUUFBUTtBQUMxQixnQkFBSSxDQUFDLFFBQVEsTUFBTSxRQUFRLEdBQUc7QUFDMUIscUJBQU8sSUFBSSxHQUFHLE9BQU87QUFDekIsZ0JBQUksQ0FBQyxRQUFRLE9BQU8sUUFBUSxHQUFHO0FBQzNCLHFCQUFPLElBQUksR0FBRyxRQUFRO0FBQzFCLGtCQUFNLGtCQUFrQixDQUFDLGVBQWUsT0FBTyxlQUFlLFdBQ3hELElBQUksR0FBRyxrQkFBa0IsVUFBVSxPQUNuQyxJQUFJLEdBQUcsWUFBWTtBQUN6QixrQkFBTSxRQUFRO0FBQUEsY0FDVixPQUFPLG9CQUNELGdCQUFnQixrQkFBa0IsSUFBSSxJQUN0QztBQUFBLGNBQ047QUFBQSxjQUNBLE9BQU8sa0JBQWtCLElBQUksR0FBRyxVQUFVLE9BQU87QUFBQSxjQUNqRCxRQUFRLFdBQVcsUUFBUSxRQUFRLE9BQzdCLElBQUksR0FBRyxVQUFVLEtBQUtBLE1BQUssa0JBQWtCLFFBQVEsUUFBUSxJQUFJLE9BQ2pFO0FBQUEsY0FDTixjQUFjLFFBQVEsUUFBUSxNQUFNLFFBQVEsbUJBQW1CLElBQUk7QUFBQSxZQUN2RSxFQUNLLE9BQU8sT0FBTyxFQUNkLEtBQUssR0FBRztBQUNiLGVBQUcsS0FBSztBQUFBLGNBQ0osTUFBTSxRQUFRLE9BQU87QUFBQSxjQUNyQixTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxlQUFlLE9BQU8sQ0FBQztBQUFBLGNBQzlDLE9BQU8sU0FBUyxVQUFVLE9BQU8sSUFBSTtBQUFBLFlBQ3pDLEdBQUcsSUFBSTtBQUNQLGdCQUFJO0FBQ0EsaUJBQUcsSUFBSSxFQUFFLE1BQU0sT0FBTyxTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sUUFBUSxDQUFDO0FBQUE7QUFFN0QsaUJBQUcsSUFBSTtBQUFBLFVBQ2YsQ0FBQztBQUNELGFBQUcsSUFBSTtBQUFBLFFBQ1gsQ0FBQztBQUNELFlBQUksU0FBUyxRQUFRO0FBQ2pCLGFBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUN0QixtQkFBUyxRQUFRLGFBQVc7QUFDeEIsb0JBQVEsS0FBSyxRQUFRLEdBQUcsUUFBUSxRQUFRLE1BQU07QUFBQSxVQUNsRCxDQUFDO0FBQ0QsbUJBQVMsUUFBUSxhQUFXO0FBQ3hCLGdCQUFJLFFBQVEsT0FBTyxJQUFJO0FBQ25CLGlCQUFHLElBQUk7QUFBQSxnQkFDSCxNQUFNLFFBQVE7QUFBQSxnQkFDZCxTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUFBLGNBQ3hCLENBQUM7QUFBQSxZQUNMLE9BQ0s7QUFDRCxpQkFBRyxJQUFJO0FBQUEsZ0JBQ0gsTUFBTSxRQUFRO0FBQUEsZ0JBQ2QsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxnQkFDcEIsT0FBTyxTQUFTLFVBQVUsT0FBTyxJQUFJO0FBQUEsY0FDekMsR0FBRztBQUFBLGdCQUNDLE1BQU0sUUFBUTtBQUFBLGNBQ2xCLENBQUM7QUFBQSxZQUNMO0FBQUEsVUFDSixDQUFDO0FBQ0QsYUFBRyxJQUFJO0FBQUEsUUFDWDtBQUNBLFlBQUksUUFBUSxTQUFTLEdBQUc7QUFDcEIsZ0JBQU0sSUFBSSxRQUNMLElBQUksWUFBVSxPQUFPLFFBQVEsUUFBUSxNQUFNLENBQUMsRUFDNUMsS0FBSyxJQUFJO0FBQ2QsYUFBRyxJQUFJLEdBQUc7QUFBQSxDQUFLO0FBQUEsUUFDbkI7QUFDQSxlQUFPLEdBQUcsU0FBUyxFQUFFLFFBQVEsUUFBUSxFQUFFO0FBQUEsTUFDM0M7QUFDQSxlQUFTLFNBQVMsT0FBTyxTQUFTLFVBQVU7QUFDeEMsWUFBSSxRQUFRO0FBQ1osWUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDdkIsa0JBQVEsT0FBTyxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQUssQ0FBQyxDQUFDLENBQUM7QUFBQSxRQUM3QztBQUNBLGNBQU0sUUFBUSxPQUFLO0FBQ2Ysa0JBQVEsS0FBSyxJQUFJSixNQUFLLFlBQVksV0FBVyxHQUFHLFlBQVksUUFBUSxFQUFFLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksZUFBZSxFQUFFLEVBQUUsR0FBRyxLQUFLO0FBQUEsUUFDOUgsQ0FBQztBQUNELFlBQUk7QUFDQSxrQkFBUSxLQUFLLElBQUksT0FBTyxVQUFVLFVBQVUsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3BFLGVBQU87QUFBQSxNQUNYO0FBQ0EsZUFBUyxtQkFBbUI7QUFDeEIsY0FBTSxrQkFBa0JDLE9BQU0sbUJBQW1CO0FBQ2pELGNBQU0sVUFBVUEsT0FBTSxXQUFXO0FBQ2pDLFNBQUMsT0FBTyxLQUFLLFFBQVEsS0FBSyxLQUFLLENBQUMsR0FBRyxRQUFRLFNBQU87QUFDOUMsa0JBQVEsTUFBTSxLQUFLLFFBQVEsV0FBUztBQUNoQyxnQkFBSSxhQUFhO0FBQ2IsY0FBQUcsTUFBSyxTQUFTLEtBQUssYUFBYSxNQUFNO0FBQzFDLGdCQUFJLFNBQVM7QUFDVCxjQUFBSCxPQUFNLGFBQWEsS0FBSyxnQkFBZ0IsTUFBTTtBQUNsRCxnQkFBSSxDQUFDLFFBQVEsUUFBUSxRQUFRLEtBQUs7QUFDOUIsY0FBQUEsT0FBTSxRQUFRLEdBQUc7QUFDckIsZ0JBQUksQ0FBQyxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQzVCLGNBQUFBLE9BQU0sTUFBTSxHQUFHO0FBQ25CLGdCQUFJLENBQUMsUUFBUSxPQUFPLFFBQVEsS0FBSztBQUM3QixjQUFBQSxPQUFNLE9BQU8sR0FBRztBQUNwQixnQkFBSSxDQUFDLFFBQVEsVUFBVSxRQUFRLEtBQUs7QUFDaEMsY0FBQUEsT0FBTSxVQUFVLEdBQUc7QUFDdkIsZ0JBQUksQ0FBQyxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQzVCLGNBQUFBLE9BQU0sTUFBTSxHQUFHO0FBQ25CLGdCQUFJLENBQUMsUUFBUSxPQUFPLFFBQVEsS0FBSztBQUM3QixjQUFBQSxPQUFNLE9BQU8sR0FBRztBQUFBLFVBQ3hCLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUNMO0FBQ0EsVUFBSTtBQUNKLE1BQUFHLE1BQUssbUJBQW1CLFdBQVk7QUFDaEMsNEJBQW9CLEtBQUssS0FBSztBQUFBLE1BQ2xDO0FBQ0EsTUFBQUEsTUFBSyx5QkFBeUIsV0FBWTtBQUN0Qyw0QkFBb0I7QUFBQSxNQUN4QjtBQUNBLGVBQVMsaUJBQWlCLE1BQU0sU0FBUyxRQUFRLGNBQWM7QUFDM0QsWUFBSSxjQUFjLENBQUM7QUFDbkIsWUFBSSxVQUFVO0FBQ2QsZUFBTyxLQUFLLE1BQU0sRUFBRSxRQUFRLFdBQVM7QUFDakMsd0JBQWMsWUFBWSxPQUFPLE9BQU8sTUFBTTtBQUFBLFFBQ2xELENBQUM7QUFDRCxhQUFLLFFBQVEsU0FBTztBQUNoQixvQkFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLFFBQVEsSUFBSTtBQUNuQyxjQUFJLENBQUMsUUFBUSxLQUFLLE9BQUssWUFBWSxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUc7QUFDbkQsbUJBQU8sY0FBYyxLQUFLLEdBQUc7QUFBQSxVQUNqQztBQUFBLFFBQ0osQ0FBQztBQUNELGVBQU87QUFBQSxNQUNYO0FBQ0EsZUFBUyxvQkFBb0IsS0FBSztBQUM5QixlQUFRSCxPQUFNLFdBQVcsRUFBRSxjQUFjLFFBQVEsR0FBRyxJQUFJLEtBQ3BEQSxPQUFNLE9BQU8sS0FBS0EsT0FBTSxXQUFXLEVBQUU7QUFBQSxNQUM3QztBQUNBLE1BQUFHLE1BQUssV0FBVyxDQUFDLFVBQVU7QUFDdkIsY0FBTUssVUFBU1IsT0FBTSxtQkFBbUI7QUFDeEMsWUFBSSxDQUFDO0FBQ0Qsa0JBQVE7QUFDWixjQUFNLE9BQU8sT0FBTyxVQUFVLGFBQWEsUUFBUVEsUUFBTztBQUMxRCxhQUFLTCxNQUFLLEtBQUssQ0FBQztBQUFBLE1BQ3BCO0FBQ0EsTUFBQUEsTUFBSyxzQkFBc0IsUUFBTTtBQUM3QixjQUFNLGNBQWMsR0FBRyxPQUNqQkosTUFBSyxPQUFPLFdBQVcsR0FBRyxNQUFNLEdBQUcsSUFDbkMsR0FBRyxpQkFBaUI7QUFDMUIsZUFBTyxDQUFDLEtBQUssYUFBYSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQUEsTUFDMUM7QUFDQSxNQUFBSSxNQUFLLG9CQUFvQixTQUFTLGtCQUFrQixRQUFRLFdBQVc7QUFDbkUsWUFBSSxTQUFTO0FBQ2IsY0FBTSxNQUFNLGFBQWE7QUFDekIsY0FBTSxRQUFRLENBQUMsRUFBRSxPQUFPLE1BQU07QUFDOUIsWUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ2xCLGlCQUFPO0FBQ1gsY0FBTSxRQUFRLFdBQVM7QUFDbkIsY0FBSSxPQUFPO0FBQ1Asc0JBQVU7QUFDZCxvQkFBVSxLQUFLLFVBQVUsS0FBSztBQUFBLFFBQ2xDLENBQUM7QUFDRCxlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsY0FBYyxPQUFPLG9CQUFvQjtBQUM5QyxZQUFJLFNBQVMsSUFBSSxHQUFHLFVBQVU7QUFDOUIsWUFBSSxVQUFVLFVBQWEsQ0FBQztBQUN4QixpQkFBTztBQUNYLFlBQUksb0JBQW9CO0FBQ3BCLG9CQUFVO0FBQUEsUUFDZCxPQUNLO0FBQ0Qsa0JBQVEsT0FBTyxPQUFPO0FBQUEsWUFDbEIsS0FBSztBQUNELHdCQUFVLElBQUk7QUFDZDtBQUFBLFlBQ0osS0FBSztBQUNELHdCQUFVLEtBQUssVUFBVSxLQUFLO0FBQzlCO0FBQUEsWUFDSjtBQUNJLHdCQUFVO0FBQUEsVUFDbEI7QUFBQSxRQUNKO0FBQ0EsZUFBTyxHQUFHO0FBQUEsTUFDZDtBQUNBLGVBQVMsY0FBYztBQUNuQixjQUFNTSxZQUFXO0FBQ2pCLFlBQUlWLE1BQUssUUFBUSxZQUFZO0FBQ3pCLGlCQUFPLEtBQUssSUFBSVUsV0FBVVYsTUFBSyxRQUFRLFVBQVU7QUFBQSxRQUNyRCxPQUNLO0FBQ0QsaUJBQU9VO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFJLFVBQVU7QUFDZCxNQUFBTixNQUFLLFVBQVUsU0FBTztBQUNsQixrQkFBVTtBQUFBLE1BQ2Q7QUFDQSxNQUFBQSxNQUFLLGNBQWMsTUFBTTtBQUNyQixjQUFNSyxVQUFTUixPQUFNLG1CQUFtQjtBQUN4QyxRQUFBUSxRQUFPLElBQUksT0FBTztBQUFBLE1BQ3RCO0FBQ0EsTUFBQUwsTUFBSyxRQUFRLFNBQVMsTUFBTSxhQUFhO0FBQ3JDLHNCQUFjO0FBQ2Qsd0JBQWdCO0FBQ2hCLGlCQUFTLENBQUM7QUFDVix3QkFBZ0I7QUFDaEIsa0JBQVUsQ0FBQztBQUNYLG1CQUFXLENBQUM7QUFDWixtQkFBVyxDQUFDO0FBQ1osdUJBQWUsVUFBVSxjQUFjLE9BQUssQ0FBQyxZQUFZLEVBQUU7QUFDM0QsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsWUFBTSxVQUFVLENBQUM7QUFDakIsTUFBQUEsTUFBSyxTQUFTLFNBQVMsU0FBUztBQUM1QixnQkFBUSxLQUFLO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMO0FBQ0EsTUFBQUEsTUFBSyxXQUFXLFNBQVMsV0FBVztBQUNoQyxjQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLDZCQUFxQixRQUFRLFFBQVdKLEtBQUk7QUFDNUMsU0FBQztBQUFBLFVBQ0c7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixJQUFJO0FBQUEsTUFDUjtBQUNBLGFBQU9JO0FBQUEsSUFDWDtBQUNBLGFBQVMsZUFBZSxNQUFNO0FBQzFCLGFBQU8sT0FBTyxTQUFTO0FBQUEsSUFDM0I7QUFDQSxhQUFTLGVBQWUsTUFBTSxRQUFRO0FBQ2xDLGFBQU8sZUFBZSxJQUFJLElBQ3BCLEVBQUUsTUFBTSxLQUFLLE1BQU0sYUFBYSxLQUFLLGNBQWMsT0FBTyxJQUMxRCxFQUFFLE1BQU0sYUFBYSxPQUFPO0FBQUEsSUFDdEM7QUFDQSxhQUFTLGVBQWUsTUFBTTtBQUMxQixhQUFPLGVBQWUsSUFBSSxJQUFJLEtBQUssY0FBYztBQUFBLElBQ3JEO0FBQ0EsYUFBUyxRQUFRLE1BQU07QUFDbkIsYUFBTyxlQUFlLElBQUksSUFBSSxLQUFLLE9BQU87QUFBQSxJQUM5QztBQUVBLFFBQU0sdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2QjdCLFFBQU0sd0JBQXdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUI5QixhQUFTLFdBQVdILFFBQU9DLFFBQU9HLFVBQVNMLE9BQU07QUFDN0MsWUFBTUksUUFBTztBQUFBLFFBQ1QsZUFBZTtBQUFBLE1BQ25CO0FBQ0EsVUFBSTtBQUNKLE1BQUFBLE1BQUssWUFBWSxTQUFTLFVBQVUsUUFBUTtBQUN4QyxrQkFBVSxPQUFPO0FBQUEsTUFDckI7QUFDQSxZQUFNLFdBQVlKLE1BQUssT0FBTyxPQUFPLEtBQUtBLE1BQUssT0FBTyxPQUFPLEVBQUUsUUFBUSxLQUFLLE1BQU0sTUFDN0VBLE1BQUssT0FBTyxVQUFVLEtBQUtBLE1BQUssT0FBTyxVQUFVLEVBQUUsUUFBUSxLQUFLLE1BQU07QUFDM0UsTUFBQUksTUFBSyxnQkFBZ0IsU0FBUyxjQUFjLE1BQU0sTUFBTTtBQUNwRCxjQUFNLGNBQWMsQ0FBQztBQUNyQixjQUFNLFVBQVUsS0FBSyxTQUFTLEtBQUssS0FBSyxTQUFTLEtBQUs7QUFDdEQsY0FBTSxPQUFPSCxPQUFNLE1BQU0sTUFBTSxJQUFJO0FBQ25DLGNBQU0saUJBQWlCQSxPQUFNLFdBQVcsRUFBRTtBQUMxQyxpQkFBUyxzQkFBc0JVLE9BQU07QUFDakMsK0JBQXFCLG9CQUFvQixNQUFNWCxLQUFJO0FBQ25ELGNBQUkseUJBQXlCLGtCQUFrQixHQUFHO0FBQzlDLGtCQUFNLFNBQVMsbUJBQW1CLFNBQVNXLEtBQUk7QUFDL0MsZ0JBQUlaLFdBQVUsTUFBTSxHQUFHO0FBQ25CLHFCQUFPLE9BQ0YsS0FBSyxVQUFRO0FBQ2QsZ0JBQUFDLE1BQUssUUFBUSxTQUFTLE1BQU07QUFDeEIsdUJBQUssSUFBSTtBQUFBLGdCQUNiLENBQUM7QUFBQSxjQUNMLENBQUMsRUFDSSxNQUFNLFNBQU87QUFDZCxnQkFBQUEsTUFBSyxRQUFRLFNBQVMsTUFBTTtBQUN4Qix3QkFBTTtBQUFBLGdCQUNWLENBQUM7QUFBQSxjQUNMLENBQUM7QUFBQSxZQUNMO0FBQ0EsbUJBQU8sS0FBSyxNQUFNO0FBQUEsVUFDdEIsT0FDSztBQUNELG1CQUFPLG1CQUFtQixTQUFTVyxPQUFNLENBQUFDLGlCQUFlO0FBQ3BELG1CQUFLQSxZQUFXO0FBQUEsWUFDcEIsQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBQ0EsWUFBSSxvQkFBb0I7QUFDcEIsaUJBQU9iLFdBQVUsSUFBSSxJQUNmLEtBQUssS0FBSyxxQkFBcUIsSUFDL0Isc0JBQXNCLElBQUk7QUFBQSxRQUNwQztBQUNBLGNBQU0sV0FBV00sU0FBUSxtQkFBbUI7QUFDNUMsaUJBQVMsSUFBSSxHQUFHLEtBQUssS0FBSyxRQUFRLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDM0MsY0FBSSxTQUFTLEtBQUssT0FBTyxTQUFTLEtBQUssSUFBSSxTQUFTO0FBQ2hELGtCQUFNLFVBQVUsU0FBUyxLQUFLLElBQUk7QUFDbEMsZ0JBQUkseUJBQXlCLE9BQU8sR0FBRztBQUNuQyxvQkFBTSxJQUFJSixPQUFNLE1BQU07QUFDdEIsc0JBQVEsQ0FBQztBQUNULHFCQUFPLEVBQUU7QUFBQSxZQUNiO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFDQSxZQUFJLENBQUMsUUFBUSxNQUFNLElBQUksS0FDbkIsZUFBZSxlQUFlLFNBQVMsT0FBTyxTQUFTO0FBQ3ZELFVBQUFDLE9BQU0sWUFBWSxFQUFFLFFBQVEsa0JBQWdCO0FBQ3hDLGtCQUFNLGNBQWMsYUFBYSxhQUFhLEVBQUUsRUFBRTtBQUNsRCxnQkFBSSxLQUFLLFFBQVEsV0FBVyxNQUFNLElBQUk7QUFDbEMsa0JBQUksQ0FBQyxVQUFVO0FBQ1gsNEJBQVksS0FBSyxXQUFXO0FBQUEsY0FDaEMsT0FDSztBQUNELHNCQUFNLE9BQU8sYUFBYSxNQUFNO0FBQ2hDLDRCQUFZLEtBQUssWUFBWSxRQUFRLE1BQU0sS0FBSyxJQUFJLE1BQU0sSUFBSTtBQUFBLGNBQ2xFO0FBQUEsWUFDSjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxZQUFJLFFBQVEsTUFBTSxJQUFJLEtBQU0sWUFBWSxNQUFNLFlBQVksV0FBVyxHQUFJO0FBQ3JFLGdCQUFNLFFBQVFBLE9BQU0sZ0JBQWdCO0FBQ3BDLGdCQUFNLFVBQVVELE9BQU0sV0FBVztBQUNqQyxpQkFBTyxLQUFLLFFBQVEsR0FBRyxFQUFFLFFBQVEsU0FBTztBQUNwQyxrQkFBTSxVQUFVLENBQUMsQ0FBQyxRQUFRLGNBQWMsdUJBQ3BDLFFBQVEsUUFBUSxTQUFTLEdBQUc7QUFDaEMsZ0JBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sUUFBUSxRQUFRLENBQUMsQ0FBQztBQUNuRCxnQkFBSTtBQUNBLDhCQUFnQixjQUFjLE9BQU8sY0FBYyxJQUFJLENBQUFZLFNBQU8sTUFBTUEsTUFBSyxDQUFDO0FBQzlFLHFCQUFTLGtCQUFrQkEsTUFBSztBQUM1QixvQkFBTSxZQUFZLGNBQWMsTUFBTSxTQUFPLEtBQUssUUFBUSxLQUFLLEtBQUssTUFBTSxFQUFFO0FBQzVFLGtCQUFJLFdBQVc7QUFDWCxzQkFBTSxvQkFBb0IsQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDO0FBQzdDLHNCQUFNLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxLQUFLLENBQUM7QUFDOUMsc0JBQU0sU0FBUyxDQUFDLGtCQUFrQixPQUFPLEtBQUssY0FBY0EsSUFBRyxJQUFJLE1BQU07QUFDekUsb0JBQUksQ0FBQyxVQUFVO0FBQ1gsOEJBQVksS0FBSyxTQUFTQSxJQUFHO0FBQUEsZ0JBQ2pDLE9BQ0s7QUFDRCx3QkFBTSxPQUFPLE1BQU1BLFNBQVE7QUFDM0IsOEJBQVksS0FBSyxTQUNiLEdBQUdBLEtBQUksUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLFFBQVEsb0JBQW9CLEVBQUUsR0FBRztBQUFBLGdCQUM3RTtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQ0EsOEJBQWtCLEdBQUc7QUFDckIsZ0JBQUksV0FBVyxDQUFDLENBQUMsUUFBUSxRQUFRO0FBQzdCLGdDQUFrQixNQUFNLEtBQUs7QUFBQSxVQUNyQyxDQUFDO0FBQUEsUUFDTDtBQUNBLGFBQUssV0FBVztBQUFBLE1BQ3BCO0FBQ0EsTUFBQVQsTUFBSywyQkFBMkIsU0FBUyx5QkFBeUIsSUFBSSxLQUFLO0FBQ3ZFLFlBQUksU0FBUyxXQUNQLHdCQUNBO0FBQ04sY0FBTSxPQUFPSixNQUFLLEtBQUssU0FBUyxFQUFFO0FBQ2xDLFlBQUksR0FBRyxNQUFNLE9BQU87QUFDaEIsZUFBSyxLQUFLO0FBQ2QsaUJBQVMsT0FBTyxRQUFRLGlCQUFpQixJQUFJO0FBQzdDLGlCQUFTLE9BQU8sUUFBUSwyQkFBMkIsR0FBRztBQUN0RCxlQUFPLE9BQU8sUUFBUSxpQkFBaUIsRUFBRTtBQUFBLE1BQzdDO0FBQ0EsVUFBSSxxQkFBcUI7QUFDekIsTUFBQUksTUFBSyxtQkFBbUIsUUFBTTtBQUMxQiw2QkFBcUI7QUFBQSxNQUN6QjtBQUNBLGFBQU9BO0FBQUEsSUFDWDtBQUNBLGFBQVMseUJBQXlCLG9CQUFvQjtBQUNsRCxhQUFPLG1CQUFtQixTQUFTO0FBQUEsSUFDdkM7QUFFQSxhQUFTLFlBQVksR0FBRyxHQUFHO0FBQ3ZCLFVBQUksRUFBRSxXQUFXO0FBQ2IsZUFBTyxFQUFFO0FBQ2IsVUFBSSxFQUFFLFdBQVc7QUFDYixlQUFPLEVBQUU7QUFDYixZQUFNLFNBQVMsQ0FBQztBQUNoQixVQUFJO0FBQ0osV0FBSyxJQUFJLEdBQUcsS0FBSyxFQUFFLFFBQVEsS0FBSztBQUM1QixlQUFPLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDbEI7QUFDQSxVQUFJO0FBQ0osV0FBSyxJQUFJLEdBQUcsS0FBSyxFQUFFLFFBQVEsS0FBSztBQUM1QixlQUFPLEdBQUcsS0FBSztBQUFBLE1BQ25CO0FBQ0EsV0FBSyxJQUFJLEdBQUcsS0FBSyxFQUFFLFFBQVEsS0FBSztBQUM1QixhQUFLLElBQUksR0FBRyxLQUFLLEVBQUUsUUFBUSxLQUFLO0FBQzVCLGNBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRztBQUNyQyxtQkFBTyxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsSUFBSTtBQUFBLFVBQ3JDLE9BQ0s7QUFDRCxtQkFBTyxHQUFHLEtBQUssS0FBSyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxPQUFPLEdBQUcsSUFBSSxLQUFLLEdBQUcsT0FBTyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFBQSxVQUMxRztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsYUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQUEsSUFDOUI7QUFFQSxRQUFNLGNBQWMsQ0FBQyxNQUFNLE1BQU0sR0FBRztBQUNwQyxhQUFTLFdBQVdILFFBQU9DLFFBQU9NLE9BQU1SLE9BQU07QUFDMUMsWUFBTSxLQUFLUSxNQUFLO0FBQ2hCLFlBQU0sTUFBTUEsTUFBSztBQUNqQixZQUFNSixRQUFPLENBQUM7QUFDZCxNQUFBQSxNQUFLLGlCQUFpQixTQUFTLGVBQWUsTUFBTTtBQUNoRCxjQUFNLG1CQUFtQkgsT0FBTSxvQkFBb0I7QUFDbkQsY0FBTSxrQkFBa0IsS0FBSyxFQUFFLFVBQVUsS0FBSyxRQUFRLEtBQUssTUFBTSxTQUFTO0FBQzFFLGNBQU0sS0FBSyxrQkFBa0JBLE9BQU0sV0FBVyxFQUFFLFNBQVM7QUFDekQsWUFBSSxpQkFBaUIsTUFDaEIsS0FBSyxpQkFBaUIsRUFBRSxPQUFPLEtBQUssaUJBQWlCLEVBQUUsTUFBTTtBQUM5RCxjQUFJLEtBQUssaUJBQWlCLEVBQUUsS0FBSztBQUM3QixnQkFBSSxpQkFBaUIsRUFBRSxXQUFXLFFBQVc7QUFDekMsY0FBQUMsT0FBTSxLQUFLLGlCQUFpQixFQUFFLFNBQ3hCLGlCQUFpQixFQUFFLE9BQ2hCLFFBQVEsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUM3QixRQUFRLE9BQU8saUJBQWlCLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFDbkQsSUFBSTtBQUFBLFlBQ2QsT0FDSztBQUNELGNBQUFBLE9BQU0sS0FBSyxJQUFJLDZEQUE2RCw2REFBNkQsSUFBSSxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsWUFDbE07QUFBQSxVQUNKLFdBQ1MsS0FBSyxpQkFBaUIsRUFBRSxLQUFLO0FBQ2xDLGdCQUFJLGlCQUFpQixFQUFFLFdBQVcsUUFBVztBQUN6QyxjQUFBQSxPQUFNLEtBQUssaUJBQWlCLEVBQUUsU0FDeEIsaUJBQWlCLEVBQUUsT0FDaEIsUUFBUSxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQzdCLFFBQVEsT0FBTyxpQkFBaUIsRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUNuRCxJQUFJO0FBQUEsWUFDZCxPQUNLO0FBQ0QsY0FBQUEsT0FBTSxLQUFLLElBQUksd0RBQXdELHdEQUF3RCxJQUFJLEdBQUcsU0FBUyxHQUFHLGlCQUFpQixFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7QUFBQSxZQUN4TDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLE1BQUFFLE1BQUssa0JBQWtCLFNBQVMsZ0JBQWdCLFVBQVUsVUFBVTtBQUNoRSxZQUFJLFdBQVcsVUFBVTtBQUNyQixVQUFBRixPQUFNLEtBQUssSUFBSSw2REFBNkQsNkRBQTZELFVBQVUsV0FBVyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQUEsUUFDcEw7QUFBQSxNQUNKO0FBQ0EsTUFBQUUsTUFBSyxvQkFBb0IsU0FBUyxrQkFBa0IsTUFBTTtBQUN0RCxjQUFNLGtCQUFrQkgsT0FBTSxtQkFBbUI7QUFDakQsWUFBSSxVQUFVO0FBQ2QsbUJBQVcsT0FBTyxPQUFPLEtBQUssZUFBZSxHQUFHO0FBQzVDLGNBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLE1BQU0sR0FBRyxLQUMvQyxPQUFPLEtBQUssU0FBUyxhQUFhO0FBQ2xDLHNCQUFVLFdBQVcsQ0FBQztBQUN0QixvQkFBUSxPQUFPLGdCQUFnQjtBQUFBLFVBQ25DO0FBQUEsUUFDSjtBQUNBLFlBQUksU0FBUztBQUNULGdCQUFNLGFBQWEsQ0FBQztBQUNwQixxQkFBVyxPQUFPLE9BQU8sS0FBSyxPQUFPLEdBQUc7QUFDcEMsa0JBQU0sTUFBTSxRQUFRO0FBQ3BCLGdCQUFJLE9BQU8sV0FBVyxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQ3BDLHlCQUFXLEtBQUssR0FBRztBQUFBLFlBQ3ZCO0FBQUEsVUFDSjtBQUNBLGdCQUFNLFlBQVksV0FBVyxTQUFTO0FBQUEsRUFBSyxXQUFXLEtBQUssSUFBSSxNQUFNO0FBQ3JFLFVBQUFDLE9BQU0sS0FBSyxJQUFJLGlDQUFpQyxrQ0FBa0MsT0FBTyxLQUFLLE9BQU8sRUFBRSxRQUFRLE9BQU8sS0FBSyxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDO0FBQUEsUUFDL0o7QUFBQSxNQUNKO0FBQ0EsTUFBQUUsTUFBSyxtQkFBbUIsU0FBUyxpQkFBaUIsTUFBTSxTQUFTLGVBQWUsa0JBQWtCLG1CQUFtQixNQUFNO0FBQ3ZILGNBQU0sY0FBY0gsT0FBTSxtQkFBbUIsRUFBRSxZQUFZO0FBQzNELGNBQU0sVUFBVSxDQUFDO0FBQ2pCLGNBQU0saUJBQWlCQSxPQUFNLFdBQVc7QUFDeEMsZUFBTyxLQUFLLElBQUksRUFBRSxRQUFRLFNBQU87QUFDN0IsY0FBSSxZQUFZLFFBQVEsR0FBRyxNQUFNLE1BQzdCLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxlQUFlLEdBQUcsS0FDeEQsQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxPQUFNLGlCQUFpQixHQUFHLEdBQUcsS0FDbkUsQ0FBQ0csTUFBSyw0QkFBNEIsS0FBSyxPQUFPLEdBQUc7QUFDakQsb0JBQVEsS0FBSyxHQUFHO0FBQUEsVUFDcEI7QUFBQSxRQUNKLENBQUM7QUFDRCxZQUFJLHFCQUNDLGVBQWUsU0FBUyxTQUFTLEtBQzlCLFlBQVksU0FBUyxLQUNyQixtQkFBbUI7QUFDdkIsZUFBSyxFQUFFLE1BQU0sZUFBZSxTQUFTLE1BQU0sRUFBRSxRQUFRLFNBQU87QUFDeEQsZ0JBQUksWUFBWSxRQUFRLEtBQUssR0FBRyxNQUFNLElBQUk7QUFDdEMsc0JBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxZQUN6QjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxZQUFJLFFBQVEsU0FBUyxHQUFHO0FBQ3BCLFVBQUFGLE9BQU0sS0FBSyxJQUFJLHdCQUF3Qix5QkFBeUIsUUFBUSxRQUFRLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUFBLFFBQ3ZHO0FBQUEsTUFDSjtBQUNBLE1BQUFFLE1BQUssa0JBQWtCLFNBQVMsZ0JBQWdCLE1BQU07QUFDbEQsY0FBTSxjQUFjSCxPQUFNLG1CQUFtQixFQUFFLFlBQVk7QUFDM0QsY0FBTSxVQUFVLENBQUM7QUFDakIsY0FBTSxpQkFBaUJBLE9BQU0sV0FBVztBQUN4QyxZQUFJLGVBQWUsU0FBUyxTQUFTLEtBQUssWUFBWSxTQUFTLEdBQUc7QUFDOUQsZUFBSyxFQUFFLE1BQU0sZUFBZSxTQUFTLE1BQU0sRUFBRSxRQUFRLFNBQU87QUFDeEQsZ0JBQUksWUFBWSxRQUFRLEtBQUssR0FBRyxNQUFNLElBQUk7QUFDdEMsc0JBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxZQUN6QjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxZQUFJLFFBQVEsU0FBUyxHQUFHO0FBQ3BCLFVBQUFDLE9BQU0sS0FBSyxJQUFJLHVCQUF1Qix3QkFBd0IsUUFBUSxRQUFRLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNqRyxpQkFBTztBQUFBLFFBQ1gsT0FDSztBQUNELGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxNQUFBRSxNQUFLLDhCQUE4QixTQUFTLDRCQUE0QixLQUFLLFNBQVM7QUFDbEYsWUFBSSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDckQsaUJBQU87QUFBQSxRQUNYO0FBQ0EsY0FBTSxhQUFhSCxPQUFNLE9BQU87QUFDaEMsbUJBQVcsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLElBQUksR0FBRztBQUNwQyxjQUFJLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxZQUFZLENBQUMsS0FDbkQsQ0FBQyxXQUFXLE1BQU07QUFDbEIsbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUcsTUFBSyxpQkFBaUIsU0FBUyxlQUFlLE1BQU07QUFDaEQsY0FBTSxVQUFVSCxPQUFNLFdBQVc7QUFDakMsY0FBTSxVQUFVLENBQUM7QUFDakIsWUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLE9BQU8sRUFBRTtBQUM5QjtBQUNKLGVBQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxTQUFPO0FBQzdCLGNBQUksWUFBWSxRQUFRLEdBQUcsTUFBTSxNQUM3QixPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsU0FBUyxHQUFHLEdBQUc7QUFDNUQsYUFBQyxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxXQUFTO0FBQ2xDLGtCQUFJLFFBQVEsUUFBUSxLQUFLLFFBQVEsS0FBSyxNQUFNLE1BQ3hDLFVBQVUsUUFBVztBQUNyQix3QkFBUSxRQUFRLFFBQVEsUUFBUSxDQUFDLEdBQUcsT0FBTyxLQUFLO0FBQUEsY0FDcEQ7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMO0FBQUEsUUFDSixDQUFDO0FBQ0QsY0FBTSxjQUFjLE9BQU8sS0FBSyxPQUFPO0FBQ3ZDLFlBQUksQ0FBQyxZQUFZO0FBQ2I7QUFDSixZQUFJLE1BQU0sR0FBRyxpQkFBaUI7QUFDOUIsb0JBQVksUUFBUSxTQUFPO0FBQ3ZCLGlCQUFPO0FBQUEsSUFBTyxHQUFHLHdDQUF3QyxLQUFLQyxPQUFNLGtCQUFrQixRQUFRLElBQUksR0FBR0EsT0FBTSxrQkFBa0IsUUFBUSxRQUFRLElBQUksQ0FBQztBQUFBLFFBQ3RKLENBQUM7QUFDRCxRQUFBQSxPQUFNLEtBQUssR0FBRztBQUFBLE1BQ2xCO0FBQ0EsVUFBSSxTQUFTLENBQUM7QUFDZCxNQUFBRSxNQUFLLFFBQVEsU0FBUyxNQUFNLEdBQUdVLFNBQVE7QUFDbkMsZUFBTyxLQUFLO0FBQUEsVUFDUixNQUFNO0FBQUEsVUFDTixRQUFBQTtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0w7QUFDQSxNQUFBVixNQUFLLGVBQWUsU0FBUyxhQUFhLE1BQU0sU0FBUztBQUNyRCxpQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLE9BQU8sUUFBUSxRQUFXLEtBQUs7QUFDbkQsZ0JBQU0sT0FBTyxFQUFFO0FBQ2YsY0FBSSxTQUFTO0FBQ2IsY0FBSTtBQUNBLHFCQUFTLEtBQUssTUFBTSxPQUFPO0FBQUEsVUFDL0IsU0FDTyxLQUFQO0FBQ0ksWUFBQUYsT0FBTSxLQUFLLElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxHQUFHO0FBQy9DO0FBQUEsVUFDSjtBQUNBLGNBQUksQ0FBQyxRQUFRO0FBQ1QsWUFBQUEsT0FBTSxLQUFLLEdBQUcsNkJBQTZCLEtBQUssU0FBUyxDQUFDLENBQUM7QUFBQSxVQUMvRCxXQUNTLE9BQU8sV0FBVyxZQUFZLGtCQUFrQixPQUFPO0FBQzVELFlBQUFBLE9BQU0sS0FBSyxPQUFPLFNBQVMsR0FBRyxNQUFNO0FBQUEsVUFDeEM7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLFVBQUksVUFBVSxDQUFDO0FBQ2YsTUFBQUUsTUFBSyxVQUFVLFNBQVMsUUFBUSxLQUFLLE9BQU87QUFDeEMsZ0JBQVEseUNBQXlDLENBQUMsS0FBSyxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQy9FLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDekIsaUJBQU8sS0FBSyxHQUFHLEVBQUUsUUFBUSxPQUFLO0FBQzFCLFlBQUFBLE1BQUssUUFBUSxHQUFHLElBQUksRUFBRTtBQUFBLFVBQzFCLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCxVQUFBSCxPQUFNLE9BQU8sR0FBRztBQUNoQixjQUFJLENBQUMsUUFBUSxNQUFNO0FBQ2Ysb0JBQVEsT0FBTyxDQUFDO0FBQUEsVUFDcEI7QUFDQSxjQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDdEIsa0JBQU0sUUFBUSxPQUFLRyxNQUFLLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFBQSxVQUMzQyxPQUNLO0FBQ0QsaUNBQXFCLE9BQU8sUUFBV0osS0FBSTtBQUMzQyxvQkFBUSxLQUFLLEtBQUssS0FBSztBQUFBLFVBQzNCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxNQUFBSSxNQUFLLGFBQWEsU0FBUyxhQUFhO0FBQ3BDLGVBQU87QUFBQSxNQUNYO0FBQ0EsZUFBUyxVQUFVLE1BQU0sS0FBSztBQUMxQixjQUFNLE1BQU0sT0FBTyxHQUFHO0FBQ3RCLGNBQU0sTUFBTSxHQUFHLElBQUksTUFBTTtBQUN6QixZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLGdCQUFNLEtBQUssRUFBRSxVQUFVO0FBQUEsUUFDM0IsV0FDUyxJQUFJLE1BQU0sVUFBVSxHQUFHO0FBQzVCLGdCQUFNLElBQUksTUFBTSxZQUFZLEVBQUU7QUFDOUIsZ0JBQU0sQ0FBQyxLQUFLO0FBQUEsUUFDaEIsT0FDSztBQUNELGdCQUFNLEtBQUs7QUFBQSxRQUNmO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGVBQWUsU0FBUyxhQUFhLE1BQU07QUFDNUMsY0FBTSxZQUFZLENBQUM7QUFDbkIsZUFBTyxLQUFLLE9BQU8sRUFBRSxRQUFRLFNBQU87QUFDaEMsZ0JBQU0sVUFBVTtBQUNoQixXQUFDLFFBQVEsUUFBUSxDQUFDLEdBQUcsUUFBUSxXQUFTO0FBQ2xDLGdCQUFJUyxPQUFNO0FBQ1Ysa0JBQU0sWUFBWTtBQUNsQixZQUFBQSxPQUFNLFVBQVUsTUFBTUEsSUFBRztBQUN6QixvQkFBUSxVQUFVLE1BQU0sS0FBSztBQUM3QixnQkFBSUEsUUFBTyxDQUFDLE9BQU87QUFDZix3QkFBVSxLQUFLLElBQUksY0FBYyxXQUFXO0FBQUEsWUFDaEQ7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMLENBQUM7QUFDRCxZQUFJLFVBQVUsUUFBUTtBQUNsQixjQUFJLE1BQU0sR0FBRyxHQUFHLHNCQUFzQjtBQUFBO0FBQ3RDLG9CQUFVLFFBQVEsV0FBUztBQUN2QixtQkFBTztBQUFBLFVBQ1gsQ0FBQztBQUNELFVBQUFYLE9BQU0sS0FBSyxHQUFHO0FBQUEsUUFDbEI7QUFBQSxNQUNKO0FBQ0EsVUFBSSxjQUFjLENBQUM7QUFDbkIsTUFBQUUsTUFBSyxZQUFZLFNBQVMsVUFBVSxLQUFLLE9BQU87QUFDNUMsZ0JBQVEsa0NBQWtDLENBQUMsS0FBSyxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQ3hFLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDekIsaUJBQU8sS0FBSyxHQUFHLEVBQUUsUUFBUSxPQUFLO0FBQzFCLFlBQUFBLE1BQUssVUFBVSxHQUFHLElBQUksRUFBRTtBQUFBLFVBQzVCLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCxVQUFBSCxPQUFNLE9BQU8sR0FBRztBQUNoQixjQUFJLENBQUMsWUFBWSxNQUFNO0FBQ25CLHdCQUFZLE9BQU8sQ0FBQztBQUFBLFVBQ3hCO0FBQ0EsY0FBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3RCLGtCQUFNLFFBQVEsT0FBS0csTUFBSyxVQUFVLEtBQUssQ0FBQyxDQUFDO0FBQUEsVUFDN0MsT0FDSztBQUNELHdCQUFZLEtBQUssS0FBSyxLQUFLO0FBQUEsVUFDL0I7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLE1BQUFBLE1BQUssaUJBQWlCLE1BQU07QUFDNUIsTUFBQUEsTUFBSyxjQUFjLFNBQVMsY0FBYyxNQUFNO0FBQzVDLGVBQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxTQUFPO0FBQzdCLGNBQUksWUFBWSxNQUFNO0FBQ2xCLHdCQUFZLEtBQUssUUFBUSxXQUFTO0FBQzlCLGtCQUFJLFNBQVMsS0FBSyxTQUFTLFVBQWEsS0FBSyxXQUFXLFFBQVc7QUFDL0QsZ0JBQUFGLE9BQU0sS0FBSyxHQUFHLDhDQUE4QyxLQUFLLEtBQUssQ0FBQztBQUFBLGNBQzNFO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0w7QUFDQSxNQUFBRSxNQUFLLG9CQUFvQixTQUFTLGtCQUFrQixLQUFLLG1CQUFtQjtBQUN4RSxjQUFNLFlBQVk7QUFDbEIsNEJBQW9CLGtCQUFrQixLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDeEUsWUFBSSxjQUFjO0FBQ2xCLFlBQUksZUFBZTtBQUNuQixpQkFBUyxJQUFJLEdBQUcsWUFBWSxZQUFZLGtCQUFrQixRQUFRLFFBQVcsS0FBSztBQUM5RSxnQkFBTSxJQUFJLFlBQVksS0FBSyxTQUFTO0FBQ3BDLGNBQUksS0FBSyxhQUFhLElBQUksY0FBYztBQUNwQywyQkFBZTtBQUNmLDBCQUFjO0FBQUEsVUFDbEI7QUFBQSxRQUNKO0FBQ0EsWUFBSTtBQUNBLFVBQUFGLE9BQU0sS0FBSyxHQUFHLG9CQUFvQixXQUFXLENBQUM7QUFBQSxNQUN0RDtBQUNBLE1BQUFFLE1BQUssUUFBUSxTQUFTLE1BQU0sYUFBYTtBQUNyQyxrQkFBVSxVQUFVLFNBQVMsT0FBSyxDQUFDLFlBQVksRUFBRTtBQUNqRCxzQkFBYyxVQUFVLGFBQWEsT0FBSyxDQUFDLFlBQVksRUFBRTtBQUN6RCxpQkFBUyxPQUFPLE9BQU8sT0FBSyxFQUFFLE1BQU07QUFDcEMsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsWUFBTSxVQUFVLENBQUM7QUFDakIsTUFBQUEsTUFBSyxTQUFTLFNBQVMsU0FBUztBQUM1QixnQkFBUSxLQUFLO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUNBLE1BQUFBLE1BQUssV0FBVyxTQUFTLFdBQVc7QUFDaEMsY0FBTSxTQUFTLFFBQVEsSUFBSTtBQUMzQiw2QkFBcUIsUUFBUSxRQUFXSixLQUFJO0FBQzVDLFNBQUMsRUFBRSxTQUFTLFFBQVEsWUFBWSxJQUFJO0FBQUEsTUFDeEM7QUFDQSxhQUFPSTtBQUFBLElBQ1g7QUFFQSxRQUFJO0FBQ0osYUFBUyxjQUFjLE9BQU87QUFDMUIsZUFBUztBQUNULGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyxNQUFNLGNBQWMsQ0FBQyxHQUFHLE1BQU0sT0FBTyxRQUFRLElBQUksR0FBRyxlQUFlO0FBQ3hFLFlBQU1BLFFBQU8sQ0FBQztBQUNkLFVBQUk7QUFDSixVQUFJLGVBQWU7QUFDbkIsVUFBSSxTQUFTLENBQUM7QUFDZCxZQUFNLG1CQUFtQixDQUFDO0FBQzFCLFVBQUksU0FBUztBQUNiLFlBQU0sa0JBQWtCLENBQUM7QUFDekIsVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJLHVCQUF1QjtBQUMzQixZQUFNSSxRQUFPLE9BQU87QUFDcEIsTUFBQUosTUFBSyxhQUFhLHdCQUF3QixrQkFBa0JBLEtBQUk7QUFDaEUsTUFBQUEsTUFBSyxhQUFhLFNBQVUsWUFBWTtBQUNwQyxRQUFBQSxNQUFLLG1CQUFtQjtBQUN4QixRQUFBQSxNQUFLLEtBQUs7QUFDVixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxVQUFJO0FBQ0osVUFBSSxrQ0FBa0MsS0FBSyxPQUFPLFFBQVEsS0FBSyxFQUFFLEVBQUUsR0FBRztBQUNsRSxvQkFBWSxPQUFPLFFBQVEsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQUEsTUFDaEQsT0FDSztBQUNELG9CQUFZLE9BQU8sUUFBUSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFBQSxNQUNoRDtBQUNBLE1BQUFBLE1BQUssS0FBSyxVQUNMLElBQUksT0FBSztBQUNWLGNBQU0sSUFBSSxPQUFPLEtBQUssQ0FBQztBQUN2QixlQUFPLEVBQUUsTUFBTSxzQkFBc0IsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLElBQUk7QUFBQSxNQUN4RSxDQUFDLEVBQ0ksS0FBSyxHQUFHLEVBQ1IsS0FBSztBQUNWLFVBQUksT0FBTyxPQUFPLEdBQUcsS0FBSyxPQUFPLGtCQUFrQixNQUFNLE9BQU8sT0FBTyxHQUFHLEdBQUc7QUFDekUsUUFBQUEsTUFBSyxLQUFLLE9BQ0wsT0FBTyxHQUFHLEVBQ1YsUUFBUSxHQUFHLE9BQU8sS0FBSyxRQUFRLE9BQU8sUUFBUSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQUEsTUFDekU7QUFDQSxZQUFNLFVBQVUsRUFBRSxRQUFRLElBQUksVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUU7QUFDeEUsTUFBQUEsTUFBSyxhQUFhLE1BQU07QUFDeEIsVUFBSSxZQUFZO0FBQ2hCLFVBQUksWUFBWTtBQUNoQixNQUFBQSxNQUFLLE9BQU8sQ0FBQyxNQUFNLFFBQVE7QUFDdkIsb0JBQVk7QUFDWixvQkFBWTtBQUNaLFlBQUk7QUFDQSxpQkFBTyxRQUFRLEtBQUssSUFBSTtBQUFBLE1BQ2hDO0FBQ0EsVUFBSSxvQkFBb0I7QUFDeEIsTUFBQUEsTUFBSyxhQUFhLFNBQVUsS0FBSyxNQUFNLElBQUk7QUFDdkMsZ0JBQVEsaURBQWlELENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxVQUFVLE1BQU07QUFDMUYsWUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM1QixlQUFLO0FBQ0wsaUJBQU87QUFBQSxRQUNYO0FBQ0EsNEJBQW9CLE9BQU8scUJBQXFCO0FBQ2hELFlBQUksQ0FBQyxRQUFRLFNBQVMsT0FBTztBQUN6QixpQkFBTztBQUFBLFFBQ1g7QUFDQSxRQUFBQSxNQUFLLFFBQVEsbUJBQW1CLElBQUk7QUFDcEMsWUFBSTtBQUNBLHVCQUFhLGlCQUFpQixFQUFFO0FBQ3BDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFVBQUk7QUFDSixNQUFBQSxNQUFLLGVBQWVBLE1BQUssUUFBUSxTQUFTLGFBQWEsVUFBVSxDQUFDLEdBQUc7QUFDakUsZ0JBQVE7QUFDUixrQkFBVSxXQUFXLENBQUM7QUFDdEIsY0FBTSxhQUFhLENBQUM7QUFDcEIsbUJBQVcsUUFBUSxRQUFRLFFBQVEsUUFBUSxRQUFRLENBQUM7QUFDcEQsbUJBQVcsZ0JBQWdCLFFBQVEsZ0JBQzdCLFFBQVEsZ0JBQ1IsQ0FBQztBQUNQLGNBQU0sY0FBYyxDQUFDO0FBQ3JCLG1CQUFXLE1BQU0sUUFBUSxPQUFLO0FBQzFCLHNCQUFZLEtBQUs7QUFDakIsV0FBQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLFFBQVEsT0FBSztBQUM1Qix3QkFBWSxLQUFLO0FBQUEsVUFDckIsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUNELGVBQU8sT0FBTyxpQkFBaUIsT0FBTyxLQUFLLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxjQUFjO0FBQzFFLGdCQUFNLE9BQU8sT0FBTyxXQUFXLE9BQU8sU0FBTyxFQUFFLE9BQU8sWUFBWTtBQUNsRSxjQUFJLEtBQUssU0FBUyxHQUFHO0FBQ2pCLGdCQUFJLGFBQWE7QUFBQSxVQUNyQjtBQUNBLGlCQUFPO0FBQUEsUUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ04saUJBQVMsQ0FBQztBQUNWLGNBQU0sZUFBZTtBQUFBLFVBQ2pCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFDQSxjQUFNLGdCQUFnQjtBQUFBLFVBQ2xCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFDQSxxQkFBYSxRQUFRLE9BQUs7QUFDdEIscUJBQVcsTUFBTSxRQUFRLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQ1csT0FBTSxDQUFDLFlBQVlBLEdBQUU7QUFBQSxRQUNwRSxDQUFDO0FBQ0Qsc0JBQWMsUUFBUSxDQUFDLE1BQU07QUFDekIscUJBQVcsS0FBSyxVQUFVLFFBQVEsSUFBSSxDQUFBQSxPQUFLLENBQUMsWUFBWUEsR0FBRTtBQUFBLFFBQzlELENBQUM7QUFDRCxtQkFBVyxZQUFZLFFBQVE7QUFDL0Isa0JBQVU7QUFDVixrQkFBVSxVQUFVLFFBQVEsTUFBTSxXQUFXLElBQUksTUFBTVgsT0FBTUksT0FBTSxNQUFNO0FBQ3pFLHVCQUFlLGVBQ1QsYUFBYSxNQUFNLFdBQVcsSUFDOUIsV0FBV0osT0FBTSxTQUFTSSxPQUFNLE1BQU07QUFDNUMsb0JBQVksWUFDTixVQUFVLE1BQU0sSUFDaEIsUUFBUUosT0FBTSxTQUFTLGNBQWMsa0JBQWtCLE1BQU07QUFDbkUsWUFBSSxDQUFDO0FBQ0QseUJBQWUsV0FBV0EsT0FBTSxTQUFTLFdBQVcsTUFBTTtBQUM5RCw0QkFBb0I7QUFDcEIsaUJBQVM7QUFDVCxvQkFBWTtBQUNaLG9CQUFZO0FBQ1osUUFBQUEsTUFBSyxTQUFTO0FBQ2QsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxhQUFhO0FBQ2xCLFlBQU0sVUFBVSxDQUFDO0FBQ2pCLGVBQVMsU0FBUztBQUNkLGdCQUFRLEtBQUs7QUFBQSxVQUNUO0FBQUEsVUFDQSxlQUFlLFFBQVEsY0FBYyxNQUFNLENBQUM7QUFBQSxVQUM1QztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxRQUFRQSxNQUFLO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixDQUFDO0FBQ0QsZ0JBQVEsT0FBTztBQUNmLHFCQUFhLE9BQU87QUFDcEIsa0JBQVUsT0FBTztBQUFBLE1BQ3JCO0FBQ0EsZUFBUyxXQUFXO0FBQ2hCLGNBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsNkJBQXFCLFFBQVEsUUFBVyxNQUFNO0FBQzlDLFlBQUk7QUFDSixTQUFDO0FBQUEsVUFDRztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsUUFBUUEsTUFBSztBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKLElBQUk7QUFDSixnQkFBUSxnQkFBZ0I7QUFDeEIsZ0JBQVEsU0FBUztBQUNqQixxQkFBYSxTQUFTO0FBQ3RCLGtCQUFVLFNBQVM7QUFBQSxNQUN2QjtBQUNBLE1BQUFBLE1BQUssVUFBVSxTQUFVLE1BQU07QUFDM0IsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0IsV0FBVyxJQUFJO0FBQ3ZDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssUUFBUSxTQUFVLE1BQU07QUFDekIsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0IsU0FBUyxJQUFJO0FBQ3JDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssU0FBUyxTQUFVLE1BQU07QUFDMUIsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0IsVUFBVSxJQUFJO0FBQ3RDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssWUFBWSxTQUFVLE1BQU07QUFDN0IsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0IsYUFBYSxJQUFJO0FBQ3pDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssUUFBUSxTQUFVLE1BQU07QUFDekIsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0IsU0FBUyxJQUFJO0FBQ3JDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssU0FBUyxTQUFVLE1BQU07QUFDMUIsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0IsVUFBVSxJQUFJO0FBQ3RDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssY0FBYyxTQUFVLE1BQU07QUFDL0IsZ0JBQVEsa0NBQWtDLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRSxZQUFJLE9BQU8sU0FBUyxZQUFZLFFBQVEsS0FBSyxPQUFPO0FBQ2hELGlCQUFPQTtBQUFBLFFBQ1gsT0FDSztBQUNELGtEQUF3Q0EsTUFBSyxhQUFhLFFBQVEsTUFBTSxHQUFHO0FBQUEsUUFDL0U7QUFDQSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGlCQUFpQixTQUFVLE1BQU07QUFDbEMsZ0JBQVEsa0JBQWtCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNsRCxnQ0FBd0Isa0JBQWtCLElBQUk7QUFDOUMsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsZUFBUyx3QkFBd0IsTUFBTSxNQUFNO0FBQ3pDLGVBQU8sQ0FBQyxFQUFFLE9BQU8sSUFBSTtBQUNyQixhQUFLLFFBQVEsU0FBTztBQUNoQixnQkFBTSxZQUFZLEdBQUc7QUFDckIsa0JBQVEsTUFBTSxLQUFLLEdBQUc7QUFBQSxRQUMxQixDQUFDO0FBQUEsTUFDTDtBQUNBLE1BQUFBLE1BQUssUUFBUSxTQUFVLEtBQUssT0FBTztBQUMvQixnQkFBUSxrQ0FBa0MsQ0FBQyxLQUFLLEtBQUssR0FBRyxVQUFVLE1BQU07QUFDeEUsZ0RBQXdDQSxNQUFLLE9BQU8sUUFBUSxLQUFLLEtBQUs7QUFDdEUsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxVQUFVLFNBQVUsS0FBSyxPQUFPO0FBQ2pDLGdCQUFRLHdDQUF3QyxDQUFDLEtBQUssS0FBSyxHQUFHLFVBQVUsTUFBTTtBQUM5RSwwQ0FBa0NBLE1BQUssU0FBUyxXQUFXLEtBQUssS0FBSztBQUNyRSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFFBQVEsU0FBVSxLQUFLLE9BQU87QUFDL0IsZ0JBQVEsd0NBQXdDLENBQUMsS0FBSyxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQzlFLDBDQUFrQ0EsTUFBSyxPQUFPLFNBQVMsS0FBSyxLQUFLO0FBQ2pFLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssVUFBVUEsTUFBSyxXQUFXLFNBQVUsS0FBSyxPQUFPLG9CQUFvQjtBQUNyRSxnQkFBUSxzQ0FBc0MsQ0FBQyxLQUFLLE9BQU8sa0JBQWtCLEdBQUcsVUFBVSxNQUFNO0FBQ2hHLFlBQUksb0JBQW9CO0FBQ3BCLDBCQUFnQixLQUFLLE1BQU07QUFDM0Isa0JBQVEsbUJBQW1CLE9BQU87QUFBQSxRQUN0QztBQUNBLFlBQUksT0FBTyxVQUFVLFlBQVk7QUFDN0IsMEJBQWdCLEtBQUssTUFBTTtBQUMzQixjQUFJLENBQUMsUUFBUSxtQkFBbUI7QUFDNUIsb0JBQVEsbUJBQW1CLE9BQU8sUUFBUSxvQkFBb0IsS0FBSztBQUN2RSxrQkFBUSxNQUFNLEtBQUs7QUFBQSxRQUN2QjtBQUNBLGdEQUF3Q0EsTUFBSyxTQUFTLFdBQVcsS0FBSyxLQUFLO0FBQzNFLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssV0FBVyxTQUFVLEtBQUssTUFBTTtBQUNqQyxnQkFBUSxrQ0FBa0MsQ0FBQyxLQUFLLElBQUksR0FBRyxVQUFVLE1BQU07QUFDdkUsZUFBTyxLQUFLLElBQUk7QUFDaEIsZ0JBQVEsU0FBUyxLQUFLLElBQUk7QUFDMUIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsZUFBUyxPQUFPLEtBQUssS0FBSztBQUN0QixnREFBd0MsUUFBUSxPQUFPLEtBQUssR0FBRztBQUMvRCxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxlQUFTLGFBQWEsTUFBTSxLQUFLO0FBQzdCLGdCQUFRLGtDQUFrQyxDQUFDLE1BQU0sR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUN2RSxnREFBd0NBLE1BQUssY0FBYyxtQkFBbUIsTUFBTSxHQUFHO0FBQ3ZGLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssZUFBZTtBQUNwQixNQUFBQSxNQUFLLFNBQVMsU0FBVSxNQUFNLE9BQU87QUFDakMsZ0JBQVEsb0NBQW9DLENBQUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQzNFLGdEQUF3Q0EsTUFBSyxRQUFRLFVBQVUsTUFBTSxLQUFLO0FBQzFFLGVBQU9BO0FBQUEsTUFDWDtBQUNBLGVBQVMsd0NBQXdDLFNBQVMsTUFBTSxLQUFLLE9BQU87QUFDeEUscUNBQTZCLFNBQVMsTUFBTSxLQUFLLE9BQU8sQ0FBQ1ksT0FBTUgsTUFBS0ksV0FBVTtBQUMxRSxrQkFBUUQsT0FBTUgsUUFBT0k7QUFBQSxRQUN6QixDQUFDO0FBQUEsTUFDTDtBQUNBLGVBQVMsa0NBQWtDLFNBQVMsTUFBTSxLQUFLLE9BQU87QUFDbEUscUNBQTZCLFNBQVMsTUFBTSxLQUFLLE9BQU8sQ0FBQ0QsT0FBTUgsTUFBS0ksV0FBVTtBQUMxRSxrQkFBUUQsT0FBTUgsU0FBUSxRQUFRRyxPQUFNSCxTQUFRLENBQUMsR0FBRyxPQUFPSSxNQUFLO0FBQUEsUUFDaEUsQ0FBQztBQUFBLE1BQ0w7QUFDQSxlQUFTLDZCQUE2QixTQUFTLE1BQU0sS0FBSyxPQUFPLGtCQUFrQjtBQUMvRSxZQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDcEIsY0FBSSxRQUFRLE9BQUs7QUFDYixvQkFBUSxHQUFHLEtBQUs7QUFBQSxVQUNwQixDQUFDO0FBQUEsUUFDTCxZQUNVLENBQUNKLFNBQVEsT0FBT0EsU0FBUSxVQUFVLEdBQUcsR0FBRztBQUM5QyxxQkFBVyxLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQzdCLG9CQUFRLEdBQUcsSUFBSSxFQUFFO0FBQUEsVUFDckI7QUFBQSxRQUNKLE9BQ0s7QUFDRCwyQkFBaUIsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLO0FBQUEsUUFDbEQ7QUFBQSxNQUNKO0FBQ0EsZUFBUyxZQUFZLEtBQUs7QUFDdEIsWUFBSSxRQUFRO0FBQ1IsaUJBQU87QUFDWCxlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsMkJBQTJCLFdBQVc7QUFDM0MsbUJBQVcsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZO0FBQ3JDLGVBQUssQ0FBQyxRQUFRLFFBQVEsaUJBQWlCLE9BQU87QUFDMUM7QUFDSixnQkFBTSxPQUFPLFFBQVE7QUFDckIsY0FBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3JCLGdCQUFJLENBQUMsS0FBSyxRQUFRLFNBQVM7QUFDdkIsbUJBQUssT0FBTyxLQUFLLFFBQVEsU0FBUyxHQUFHLENBQUM7QUFBQSxVQUM5QyxXQUNTLE9BQU8sU0FBUyxVQUFVO0FBQy9CLG1CQUFPLEtBQUs7QUFBQSxVQUNoQjtBQUFBLFFBQ0osQ0FBQztBQUNELGVBQU8sUUFBUSxnQkFBZ0IsRUFBRTtBQUFBLE1BQ3JDO0FBQ0EsTUFBQVQsTUFBSyxTQUFTLFNBQVMsT0FBTyxNQUFNLFVBQVUsS0FBS2MsVUFBUztBQUN4RCxnQkFBUSxnREFBZ0QsQ0FBQyxLQUFLLEtBQUtBLFFBQU8sR0FBRyxVQUFVLE1BQU07QUFDN0YsWUFBSSxPQUFPLFFBQVEsWUFBWSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDaEQsZ0JBQU0sYUFBYSxLQUFLLEtBQUtkLE1BQUssdUJBQXVCLEVBQUUsd0JBQXdCLE9BQU8sTUFBTTtBQUNoRyxrQkFBUSxpQkFBaUIsUUFBUSxpQkFBaUIsQ0FBQyxHQUFHLE9BQU8sR0FBRztBQUNoRSxpQkFBT0E7QUFBQSxRQUNYO0FBQ0EsWUFBSSxPQUFPLFFBQVEsWUFBWTtBQUMzQixVQUFBYyxXQUFVO0FBQ1YsZ0JBQU07QUFBQSxRQUNWO0FBQ0EsUUFBQWQsTUFBSyxTQUFTLEtBQUssT0FBTyxRQUFRLGdCQUFnQiwwQkFBMEIsQ0FBQztBQUM3RSxTQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLE9BQUs7QUFDNUMsa0JBQVEsT0FBTyxLQUFLYyxZQUFXO0FBQUEsUUFDbkMsQ0FBQztBQUNELGVBQU9kO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssVUFBVSxTQUFVLEtBQUssYUFBYTtBQUN2QyxnQkFBUSwyQkFBMkIsQ0FBQyxLQUFLLFdBQVcsR0FBRyxVQUFVLE1BQU07QUFDdkUsWUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3BCLGNBQUksUUFBUSxtQkFBaUJBLE1BQUssUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUFBLFFBQy9ELE9BQ0s7QUFDRCxrQkFBUSxRQUFRLEtBQUssV0FBVztBQUFBLFFBQ3BDO0FBQ0EsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxVQUFVLFNBQVUsS0FBSyxhQUFhLFNBQVMsU0FBUyxhQUFhLFlBQVk7QUFDbEYsZ0JBQVEsZ0dBQWdHLENBQUMsS0FBSyxhQUFhLFNBQVMsU0FBUyxhQUFhLFVBQVUsR0FBRyxVQUFVLE1BQU07QUFDdkwsa0JBQVUsV0FBVyxLQUFLLGFBQWEsU0FBUyxTQUFTLGFBQWEsVUFBVTtBQUNoRixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGFBQWEsU0FBVSxLQUFLLE1BQU07QUFDbkMsZ0JBQVEscUJBQXFCLENBQUMsS0FBSyxJQUFJLEdBQUcsVUFBVSxNQUFNO0FBQzFELGNBQU0sTUFBTSxpQkFBaUIsT0FBTztBQUNwQyxrQkFBVSxhQUFhLEtBQUtBLE1BQUssV0FBVyxHQUFHLEtBQUssT0FBTyxjQUFjLEdBQUcsSUFBSTtBQUNoRixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFNBQVNBLE1BQUssV0FBV0EsTUFBSyxVQUFVLFNBQVMsT0FBTyxNQUFNLEtBQUssS0FBSztBQUN6RSxZQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDcEIsY0FBSSxRQUFRLFNBQU87QUFDZixpQ0FBcUIsS0FBSyxNQUFNLE1BQU07QUFDdEMseUJBQWEsS0FBSyxHQUFHO0FBQUEsVUFDekIsQ0FBQztBQUNELGdCQUFNO0FBQUEsUUFDVixXQUNTLE9BQU8sUUFBUSxVQUFVO0FBQzlCLGdCQUFNO0FBQ04sZ0JBQU07QUFBQSxRQUNWO0FBQ0EsWUFBSSxPQUFPLFNBQVMsVUFBVTtBQUMxQiwrQkFBcUIsS0FBSyxNQUFNLE1BQU07QUFDdEMsVUFBQUEsTUFBSyxjQUFjLE1BQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUMxQyxXQUNTLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDMUIsZUFBSyxRQUFRLFNBQU87QUFDaEIsaUNBQXFCLEtBQUssTUFBTSxNQUFNO0FBQ3RDLHlCQUFhLEtBQUssR0FBRztBQUFBLFVBQ3pCLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCxjQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLHlCQUFhLE1BQU0sR0FBRztBQUFBLFVBQzFCLFdBQ1MsUUFBUSxRQUFRLE9BQU8sUUFBUSxhQUFhO0FBQ2pELHlCQUFhLElBQUk7QUFBQSxVQUNyQjtBQUFBLFFBQ0o7QUFDQSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGdCQUFnQixTQUFTLGNBQWMsTUFBTSxHQUFHLEtBQUssUUFBUSxRQUFRO0FBQ3RFLGdCQUFRLDRFQUE0RSxDQUFDLEtBQUssS0FBSyxRQUFRLE1BQU0sR0FBRyxVQUFVLE1BQU07QUFDaEksWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixtQkFBUztBQUNULGdCQUFNO0FBQUEsUUFDVjtBQUNBLFFBQUFBLE1BQUssT0FBTyxLQUFLLEtBQUs7QUFDdEIsZ0JBQVEsaUJBQWlCLElBQUk7QUFBQSxVQUN6QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFDQSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLHFCQUFxQixNQUFNO0FBQzVCLGdCQUFRLENBQUMsR0FBRyxDQUFDO0FBQ2IsZUFBTyxRQUFRO0FBQUEsTUFDbkI7QUFDQSxNQUFBQSxNQUFLLHNCQUFzQixNQUFNO0FBQzdCLGdCQUFRLENBQUMsR0FBRyxDQUFDO0FBQ2IsZUFBTyxRQUFRO0FBQUEsTUFDbkI7QUFDQSxNQUFBQSxNQUFLLGtCQUFrQixTQUFTLGdCQUFnQixRQUFRLFNBQVM7QUFDN0QsZ0JBQVEsNkJBQTZCLENBQUMsUUFBUSxPQUFPLEdBQUcsVUFBVSxNQUFNO0FBQ3hFLGdCQUFRLGtCQUFrQixVQUFVO0FBQ3BDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssdUJBQXVCLE1BQU07QUFDOUIsZ0JBQVEsQ0FBQyxHQUFHLENBQUM7QUFDYixlQUFPLFFBQVE7QUFBQSxNQUNuQjtBQUNBLE1BQUFBLE1BQUssVUFBVSxTQUFVLEtBQUssT0FBTztBQUNqQyxnQkFBUSx5Q0FBeUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxVQUFVLE1BQU07QUFDL0UscUJBQWEsUUFBUSxLQUFLLEtBQUs7QUFDL0IsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxZQUFZLFNBQVUsTUFBTSxNQUFNO0FBQ25DLGdCQUFRLGtDQUFrQyxDQUFDLE1BQU0sSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUN4RSxxQkFBYSxVQUFVLE1BQU0sSUFBSTtBQUNqQyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFFBQVEsU0FBVSxLQUFLLGFBQWEsU0FBUyxTQUFTO0FBQ3ZELGdCQUFRLHlFQUF5RSxDQUFDLEtBQUssYUFBYSxTQUFTLE9BQU8sR0FBRyxVQUFVLE1BQU07QUFDdkksWUFBSSxnQkFBZ0IsUUFBVztBQUMzQiwrQkFBcUIsS0FBSyxNQUFNLE1BQU07QUFDdEMsZUFBSyxPQUFPLElBQUksTUFBTSxXQUFXLEdBQUc7QUFDaEMsbUJBQU9BLE1BQUssUUFBUSxLQUFLLGFBQWEsU0FBUyxPQUFPO0FBQUEsVUFDMUQsT0FDSztBQUNELGtCQUFNLElBQUksT0FBTywrRUFBK0U7QUFBQSxVQUNwRztBQUFBLFFBQ0osT0FDSztBQUNELGtCQUFRLE1BQU0sR0FBRztBQUNqQixpQkFBT0E7QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLE1BQUFBLE1BQUssV0FBV0EsTUFBSyxTQUFTLFNBQVUsS0FBSztBQUN6QyxnQkFBUSxZQUFZLENBQUMsR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUMzQyxnQkFBUSxPQUFPLEdBQUc7QUFDbEIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxPQUFPLFNBQVUsR0FBRztBQUNyQixnQkFBUSxjQUFjLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTTtBQUMzQyxnQkFBUSxPQUFPLENBQUM7QUFDaEIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxrQkFBa0IsU0FBVSxHQUFHO0FBQ2hDLGdCQUFRLGNBQWMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNO0FBQzNDLCtCQUF1QjtBQUN2QixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLDBCQUEwQixNQUFNO0FBQ3JDLE1BQUFBLE1BQUssUUFBUSxTQUFVLEdBQUcsU0FBUztBQUMvQixnQkFBUSx3QkFBd0IsQ0FBQyxHQUFHLE9BQU8sR0FBRyxVQUFVLE1BQU07QUFDOUQscUJBQWEsTUFBTSxHQUFHLFlBQVksS0FBSztBQUN2QyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFNBQVMsU0FBU1UsUUFBTyxTQUFTQSxTQUFRO0FBQzNDLGdCQUFRLDRCQUE0QixDQUFDLFNBQVNBLE9BQU0sR0FBRyxVQUFVLE1BQU07QUFDdkUsa0JBQVUsQ0FBQyxFQUFFLE9BQU8sT0FBTztBQUMzQixZQUFJQSxZQUFXLE9BQU87QUFDbEIsa0JBQVEsUUFBUSxRQUFRLE1BQU0sT0FBTyxPQUFLLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUFBLFFBQ3ZFLE9BQ0s7QUFDRCxrQkFBUSxRQUFRLE9BQUs7QUFDakIsZ0JBQUksUUFBUSxNQUFNLFFBQVEsQ0FBQyxNQUFNO0FBQzdCLHNCQUFRLE1BQU0sS0FBSyxDQUFDO0FBQUEsVUFDNUIsQ0FBQztBQUFBLFFBQ0w7QUFDQSxlQUFPVjtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFVBQVUsU0FBUyxRQUFRLEtBQUssVUFBVTtBQUMzQyxnQkFBUSxxQkFBcUIsQ0FBQyxLQUFLLFFBQVEsR0FBRyxVQUFVLE1BQU07QUFDOUQsWUFBSSxPQUFPO0FBQ1gsY0FBTSxNQUFNLE1BQU0sWUFBWSxHQUFHO0FBQ2pDLFlBQUksSUFBSSxRQUFRLE9BQU8sSUFBSSxTQUFTLFVBQVU7QUFDMUMsaUJBQU8sYUFBYSxJQUFJLE1BQU0sWUFBWSxLQUFLQSxNQUFLLHVCQUF1QixFQUFFLHdCQUF3QixPQUFPLE1BQU07QUFDbEgsa0JBQVEsaUJBQWlCLFFBQVEsaUJBQWlCLENBQUMsR0FBRyxPQUFPLElBQUk7QUFBQSxRQUNyRTtBQUNBLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFlBQU0sT0FBTyxDQUFDO0FBQ2QsZUFBUyxNQUFNLFVBQVU7QUFDckIsY0FBTSxRQUFRLFlBQVk7QUFDMUIsWUFBSSxLQUFLO0FBQ0wsaUJBQU8sS0FBSztBQUNoQixZQUFJLE1BQU0sQ0FBQztBQUNYLFlBQUk7QUFDQSxjQUFJLFdBQVcsWUFBWSxPQUFPO0FBQ2xDLGNBQUksQ0FBQyxZQUFZLE9BQU8sS0FBSyxRQUFRLFFBQVEsR0FBRztBQUM1Qyx1QkFBVyxPQUFPLEtBQUssUUFBUSxRQUFRO0FBQUEsVUFDM0M7QUFDQSxnQkFBTSxjQUFjLE9BQU8sT0FBTyxVQUFVLENBQUMsS0FBSyxVQUFVO0FBQ3hELGdCQUFJLE1BQU0sU0FBUyxjQUFjLEdBQUc7QUFDaEMscUJBQU87QUFBQSxZQUNYLE9BQ0s7QUFDRCxxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKLENBQUM7QUFDRCwrQkFBcUIsYUFBYSxRQUFXLE1BQU07QUFDbkQsZ0JBQU0sS0FBSyxNQUFNLE9BQU8sYUFBYSxhQUFhLE1BQU0sQ0FBQztBQUFBLFFBQzdELFNBQ08sT0FBUDtBQUFBLFFBQWdCO0FBQ2hCLGFBQUssU0FBUyxPQUFPLENBQUM7QUFDdEIsZUFBTyxLQUFLO0FBQUEsTUFDaEI7QUFDQSxVQUFJLFVBQVU7QUFDZCxVQUFJLGVBQWU7QUFDbkIsTUFBQUEsTUFBSyxRQUFRLFNBQVNlLE9BQU0sTUFBTSxjQUFjLFVBQVU7QUFDdEQsZ0JBQVEsdURBQXVELENBQUMsTUFBTSxjQUFjLFFBQVEsR0FBRyxVQUFVLE1BQU07QUFDL0csZUFBTztBQUNQLFlBQUksT0FBTyxTQUFTLGFBQWE7QUFDN0IsZ0JBQU0sT0FBT2YsTUFBSyxXQUFXLFdBQVc7QUFDeEMsZ0JBQU0sWUFBWUEsTUFBSztBQUN2QixtQkFBUztBQUNULFVBQUFBLE1BQUssU0FBUztBQUNkLGlCQUFPO0FBQUEsUUFDWDtBQUNBLFlBQUksT0FBTyxpQkFBaUIsVUFBVTtBQUNsQyx5QkFBZTtBQUNmLHlCQUFlO0FBQUEsUUFDbkI7QUFDQSxZQUFJLE9BQU8saUJBQWlCLFlBQVk7QUFDcEMsb0JBQVU7QUFDVix5QkFBZTtBQUFBLFFBQ25CO0FBQ0EsWUFBSSxDQUFDO0FBQ0Qsd0JBQWM7QUFDbEIsWUFBSTtBQUNBLHdCQUFjO0FBQ2xCLGNBQU0sU0FBU0EsTUFBSyxXQUFXLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUFDbkQscUJBQWEsVUFBVUEsTUFBSyxNQUFNO0FBQ2xDLFlBQUk7QUFDQSxrQkFBUSxXQUFXLFFBQVEsTUFBTTtBQUNyQyxpQkFBUztBQUNULGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxtQkFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxNQUFBQSxNQUFLLG9CQUFvQixNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFBQSxNQUFLLFNBQVNBLE1BQUssVUFBVSxTQUFTLE9BQU8sS0FBSyxLQUFLO0FBQ25ELGdCQUFRLDRCQUE0QixDQUFDLEtBQUssR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUNoRSxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLGlCQUFPLEtBQUssR0FBRyxFQUFFLFFBQVEsT0FBSztBQUMxQixZQUFBQSxNQUFLLFFBQVEsR0FBRyxJQUFJLEVBQUU7QUFBQSxVQUMxQixDQUFDO0FBQUEsUUFDTCxPQUNLO0FBQ0QsY0FBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixrQkFBTSxDQUFDO0FBQUEsVUFDWDtBQUNBLGtCQUFRLElBQUksT0FBTztBQUNuQixjQUFJLElBQUk7QUFDSixZQUFBQSxNQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUs7QUFDN0IsZ0JBQU0sWUFBWSxJQUFJLGFBQWEsSUFBSTtBQUN2QyxjQUFJLFdBQVc7QUFDWCxZQUFBQSxNQUFLLGdCQUFnQixLQUFLLFNBQVM7QUFBQSxVQUN2QztBQUNBLGdCQUFNLFNBQVMsSUFBSSxVQUFVLElBQUksWUFBWSxJQUFJO0FBQ2pELGNBQUksUUFBUTtBQUNSLFlBQUFBLE1BQUssT0FBTyxLQUFLLE1BQU07QUFBQSxVQUMzQjtBQUNBLGNBQUksSUFBSSxjQUFjO0FBQ2xCLFlBQUFBLE1BQUssYUFBYSxLQUFLLE9BQU8sSUFBSSxpQkFBaUIsV0FBVyxJQUFJLGVBQWUsTUFBUztBQUFBLFVBQzlGO0FBQ0EsY0FBSSxJQUFJLFdBQVc7QUFDZixZQUFBQSxNQUFLLFVBQVUsS0FBSyxJQUFJLFNBQVM7QUFBQSxVQUNyQztBQUNBLGNBQUksYUFBYSxLQUFLO0FBQ2xCLFlBQUFBLE1BQUssUUFBUSxLQUFLLElBQUksT0FBTztBQUFBLFVBQ2pDO0FBQ0EsY0FBSSxJQUFJLFlBQVksUUFBVztBQUMzQixZQUFBQSxNQUFLLFFBQVEsS0FBSyxJQUFJLE9BQU87QUFBQSxVQUNqQztBQUNBLGNBQUksSUFBSSxVQUFVLFFBQVc7QUFDekIsWUFBQUEsTUFBSyxNQUFNLEtBQUssSUFBSSxLQUFLO0FBQUEsVUFDN0I7QUFDQSxjQUFJLElBQUksUUFBUTtBQUNaLFlBQUFBLE1BQUssT0FBTyxLQUFLLElBQUksWUFBWTtBQUFBLFVBQ3JDO0FBQ0EsY0FBSSxJQUFJLFdBQVc7QUFDZixZQUFBQSxNQUFLLFVBQVUsR0FBRztBQUFBLFVBQ3RCO0FBQ0EsY0FBSSxJQUFJLFNBQVM7QUFDYixZQUFBQSxNQUFLLFFBQVEsS0FBSyxJQUFJLE9BQU87QUFBQSxVQUNqQztBQUNBLGNBQUksSUFBSSxRQUFRO0FBQ1osWUFBQUEsTUFBSyxPQUFPLEtBQUssSUFBSSxNQUFNO0FBQUEsVUFDL0I7QUFDQSxjQUFJLElBQUksT0FBTztBQUNYLFlBQUFBLE1BQUssTUFBTSxLQUFLLElBQUksS0FBSztBQUFBLFVBQzdCO0FBQ0EsY0FBSSxJQUFJLFdBQVcsSUFBSSxTQUFTLFdBQVc7QUFDdkMsWUFBQUEsTUFBSyxRQUFRLEdBQUc7QUFDaEIsZ0JBQUksSUFBSTtBQUNKLGNBQUFBLE1BQUssUUFBUSxJQUFJLEtBQUs7QUFBQSxVQUM5QjtBQUNBLGNBQUksSUFBSSxTQUFTLElBQUksU0FBUyxTQUFTO0FBQ25DLFlBQUFBLE1BQUssTUFBTSxHQUFHO0FBQ2QsZ0JBQUksSUFBSTtBQUNKLGNBQUFBLE1BQUssTUFBTSxJQUFJLEtBQUs7QUFBQSxVQUM1QjtBQUNBLGNBQUksSUFBSSxVQUFVLElBQUksU0FBUyxVQUFVO0FBQ3JDLFlBQUFBLE1BQUssT0FBTyxHQUFHO0FBQ2YsZ0JBQUksSUFBSTtBQUNKLGNBQUFBLE1BQUssT0FBTyxJQUFJLEtBQUs7QUFBQSxVQUM3QjtBQUNBLGNBQUksSUFBSSxVQUFVLElBQUksU0FBUyxVQUFVO0FBQ3JDLFlBQUFBLE1BQUssT0FBTyxHQUFHO0FBQ2YsZ0JBQUksSUFBSTtBQUNKLGNBQUFBLE1BQUssT0FBTyxJQUFJLEtBQUs7QUFBQSxVQUM3QjtBQUNBLGNBQUksSUFBSSxTQUFTLElBQUksU0FBUyxTQUFTO0FBQ25DLFlBQUFBLE1BQUssTUFBTSxHQUFHO0FBQUEsVUFDbEI7QUFDQSxjQUFJLE9BQU8sSUFBSSxXQUFXLFdBQVc7QUFDakMsWUFBQUEsTUFBSyxPQUFPLEtBQUssSUFBSSxNQUFNO0FBQUEsVUFDL0I7QUFDQSxjQUFJLElBQUksb0JBQW9CO0FBQ3hCLG9CQUFRLG1CQUFtQixPQUFPLElBQUk7QUFBQSxVQUMxQztBQUNBLGNBQUksSUFBSSxnQkFBZ0I7QUFDcEIsWUFBQUEsTUFBSyxlQUFlLEdBQUc7QUFBQSxVQUMzQjtBQUNBLGdCQUFNLE9BQU8sSUFBSSxZQUFZLElBQUksZUFBZSxJQUFJO0FBQ3BELFVBQUFBLE1BQUssU0FBUyxLQUFLLElBQUk7QUFDdkIsY0FBSSxJQUFJLFFBQVE7QUFDWixZQUFBQSxNQUFLLEtBQUssR0FBRztBQUFBLFVBQ2pCO0FBQ0EsY0FBSSxJQUFJLGFBQWE7QUFDakIsWUFBQUEsTUFBSyxZQUFZLEdBQUc7QUFBQSxVQUN4QjtBQUFBLFFBQ0o7QUFDQSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGFBQWEsTUFBTTtBQUN4QixNQUFBQSxNQUFLLGFBQWEsU0FBVSxLQUFLLE1BQU07QUFDbkMsZ0JBQVEscUJBQXFCLENBQUMsS0FBSyxJQUFJLEdBQUcsVUFBVSxNQUFNO0FBQzFELFlBQUksUUFBUSxXQUFXLEdBQUc7QUFDdEIsZ0JBQU0sSUFBSSxPQUFPLGtFQUFrRTtBQUFBLFFBQ3ZGO0FBQ0EsY0FBTSxnQkFBZ0I7QUFBQSxVQUNsQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSjtBQUNBLGVBQU8sVUFBVSxNQUFNLENBQUMsR0FBRyxNQUFNO0FBQzdCLGNBQUksU0FBUyxjQUFjLFFBQVEsQ0FBQyxNQUFNO0FBQzFDLGNBQUksTUFBTSxVQUFVLENBQUMsVUFBVSxVQUFVLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTTtBQUMvRCxxQkFBUztBQUNiLGlCQUFPO0FBQUEsUUFDWCxDQUFDO0FBQ0QsY0FBTSxjQUFjLFFBQVEsYUFBYSxRQUFRLGFBQWEsU0FBUztBQUN2RSxjQUFNLGVBQWUsY0FDZixVQUFVLGtCQUFrQixXQUFXLElBQ3ZDO0FBQUEsVUFDRSxPQUFPLENBQUM7QUFBQSxVQUNSLE9BQU8sQ0FBQztBQUFBLFVBQ1IsU0FBUyxDQUFDO0FBQUEsVUFDVixRQUFRLENBQUM7QUFBQSxRQUNiO0FBQ0osbUJBQVcsWUFBWSxFQUFFLFFBQVEsUUFBTTtBQUNuQyxnQkFBTSxjQUFjLGFBQWE7QUFDakMsY0FBSSxNQUFNLFFBQVEsV0FBVyxHQUFHO0FBQzVCLGdCQUFJLFlBQVksUUFBUSxHQUFHLE1BQU07QUFDN0IsbUJBQUssTUFBTTtBQUFBLFVBQ25CLE9BQ0s7QUFDRCxnQkFBSSxZQUFZLFFBQVEsRUFBRSxNQUFNO0FBQzVCLG1CQUFLLE1BQU0sWUFBWTtBQUFBLFVBQy9CO0FBQUEsUUFDSixDQUFDO0FBQ0QsUUFBQUEsTUFBSyxNQUFNLEtBQUssUUFBUSx1QkFBdUIsQ0FBQztBQUNoRCxlQUFPQSxNQUFLLE9BQU8sS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFDQSxNQUFBQSxNQUFLLFFBQVEsU0FBUyxNQUFNLE1BQU0sV0FBVztBQUN6QyxnQkFBUSwyQkFBMkIsQ0FBQyxNQUFNLFNBQVMsR0FBRyxVQUFVLE1BQU07QUFDdEUsY0FBTSxXQUFXLGdCQUFnQixjQUFjLE9BQU87QUFDdEQsWUFBSSxnQkFBZ0IsWUFBWTtBQUM1QixpQkFBTyxnQkFBZ0I7QUFBQSxRQUMzQjtBQUNBLGNBQU0sT0FBTyxDQUFDO0FBQ2QsZUFBTyxjQUFjLFlBQVksQ0FBQyxHQUFHLE9BQU8sSUFBSSxFQUFFLE9BQU8sU0FBTztBQUM1RCxjQUFJLEtBQUs7QUFDTCxtQkFBTztBQUNYLGlCQUFRLEtBQUssT0FBTztBQUFBLFFBQ3hCLENBQUM7QUFDRCxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFlBQVksTUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFFBQVEsZUFBZTtBQUNoRSxNQUFBQSxNQUFLLE1BQU0sU0FBVSxRQUFRO0FBQ3pCLGdCQUFRLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQU07QUFDdEQsWUFBSSxXQUFXO0FBQ1gsaUJBQU8sUUFBUTtBQUFBO0FBRWYsa0JBQVEsWUFBWSxVQUFVO0FBQ2xDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssT0FBTyxTQUFVLE1BQU07QUFDeEIsZ0JBQVEsMkJBQTJCLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUMzRCxnQkFBUSxLQUFLLElBQUk7QUFDakIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsVUFBSSxTQUFTO0FBQ2IsTUFBQUEsTUFBSyxTQUFTLFNBQVUsU0FBUztBQUM3QixnQkFBUSxhQUFhLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTTtBQUNoRCxpQkFBUyxZQUFZO0FBQ3JCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssWUFBWSxNQUFNO0FBQ3ZCLFVBQUksaUJBQWlCO0FBQ3JCLE1BQUFBLE1BQUssaUJBQWlCLFNBQVUsU0FBUztBQUNyQyxnQkFBUSxhQUFhLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTTtBQUNoRCx5QkFBaUIsWUFBWTtBQUM3QixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLG9CQUFvQixNQUFNO0FBQy9CLFVBQUksZ0JBQWdCO0FBQ3BCLE1BQUFBLE1BQUssZ0JBQWdCLFNBQVUsU0FBUztBQUNwQyxnQkFBUSxhQUFhLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTTtBQUNoRCx3QkFBZ0IsWUFBWTtBQUM1QixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLG1CQUFtQixNQUFNO0FBQzlCLFVBQUksZUFBZSxDQUFDO0FBQ3BCLE1BQUFBLE1BQUssc0JBQXNCLFNBQVMsb0JBQW9CLFFBQVE7QUFDNUQsZ0JBQVEsWUFBWSxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQU07QUFDOUMsdUJBQWU7QUFDZixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLHlCQUF5QixNQUFNO0FBQ3BDLE1BQUFBLE1BQUssV0FBVyxTQUFVLE9BQU87QUFDN0IsZ0JBQVEscUJBQXFCLENBQUMsS0FBSyxHQUFHLFVBQVUsTUFBTTtBQUN0RCxZQUFJLENBQUNBLE1BQUs7QUFDTixVQUFBQSxNQUFLLFdBQVcsV0FBVztBQUMvQixZQUFJLFVBQVUsa0JBQWtCLEdBQUc7QUFDL0Isa0JBQVE7QUFDUixvQkFBVSxvQkFBb0JBLEtBQUk7QUFBQSxRQUN0QztBQUNBLGdCQUFRLFNBQVMsS0FBSztBQUN0QixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxVQUFJLGFBQWE7QUFDakIsTUFBQUEsTUFBSyxVQUFVLFNBQVMsUUFBUSxLQUFLLEtBQUssS0FBSztBQUMzQyxjQUFNLG9CQUFvQjtBQUMxQixnQkFBUSxzQ0FBc0MsQ0FBQyxLQUFLLEtBQUssR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUMvRSxZQUFJLFlBQVk7QUFDWixxQ0FBMkIsVUFBVTtBQUNyQyxrQkFBUSxRQUFRLE1BQVM7QUFDekIsdUJBQWE7QUFBQSxRQUNqQjtBQUNBLFlBQUksVUFBVSxXQUFXLEdBQUc7QUFDeEIsZ0JBQU0sYUFBYTtBQUNuQixnQkFBTTtBQUFBLFFBQ1YsV0FDUyxVQUFVLFdBQVcsR0FBRztBQUM3QixjQUFJLFFBQVEsT0FBTztBQUNmLG1CQUFPQTtBQUFBLFVBQ1g7QUFDQSxnQkFBTTtBQUNOLGdCQUFNO0FBQUEsUUFDVixXQUNTLFVBQVUsV0FBVyxHQUFHO0FBQzdCLGdCQUFNO0FBQ04sZ0JBQU07QUFBQSxRQUNWO0FBQ0EscUJBQWEsT0FBTyxRQUFRLFdBQVcsTUFBTTtBQUM3QyxjQUFNLE9BQU8sUUFBUSxnQkFBZ0IscUJBQXFCO0FBQzFELGdCQUFRLFFBQVEsT0FBTyxNQUFTO0FBQ2hDLFFBQUFBLE1BQUssUUFBUSxVQUFVO0FBQ3ZCLFFBQUFBLE1BQUssU0FBUyxZQUFZLEdBQUc7QUFDN0IsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsZUFBUyxlQUFlO0FBQ3BCLGNBQU0sTUFBTSxNQUFNO0FBQ2xCLGVBQU8sSUFBSSxXQUFXO0FBQUEsTUFDMUI7QUFDQSxVQUFJLFVBQVU7QUFDZCxNQUFBQSxNQUFLLGFBQWFBLE1BQUssT0FBTyxTQUFTLFdBQVcsS0FBSyxLQUFLO0FBQ3hELGNBQU0saUJBQWlCO0FBQ3ZCLGdCQUFRLDZCQUE2QixDQUFDLEtBQUssR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUNqRSxZQUFJLFNBQVM7QUFDVCxxQ0FBMkIsT0FBTztBQUNsQyxvQkFBVTtBQUFBLFFBQ2Q7QUFDQSxZQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLGNBQUksUUFBUTtBQUNSLG1CQUFPQTtBQUFBLFFBQ2Y7QUFDQSxrQkFBVSxPQUFPLFFBQVEsV0FBVyxNQUFNO0FBQzFDLFFBQUFBLE1BQUssUUFBUSxPQUFPO0FBQ3BCLFFBQUFBLE1BQUssU0FBUyxTQUFTLE9BQU8sUUFBUSxnQkFBZ0IsV0FBVyxDQUFDO0FBQ2xFLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFlBQU0sdUJBQXVCO0FBQzdCLGNBQVEsZ0JBQWdCO0FBQ3hCLE1BQUFBLE1BQUssbUJBQW1CQSxNQUFLLGFBQWEsU0FBUyxpQkFBaUIsS0FBSyxLQUFLO0FBQzFFLGdCQUFRLDZCQUE2QixDQUFDLEtBQUssR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUNqRSxZQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLGNBQUksUUFBUTtBQUNSLG1CQUFPQTtBQUFBLFFBQ2Y7QUFDQSxjQUFNLGdCQUFnQixPQUFPLFFBQVEsV0FBVyxNQUFNO0FBQ3RELFFBQUFBLE1BQUssUUFBUSxhQUFhO0FBQzFCLFFBQUFBLE1BQUssU0FBUyxlQUFlLE9BQU8sUUFBUSxnQkFBZ0IscUJBQXFCLENBQUM7QUFDbEYsZ0JBQVEsZ0JBQWdCO0FBQ3hCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssT0FBTyxTQUFTLEtBQUssS0FBSztBQUMzQixnQkFBUSxZQUFZLENBQUMsR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUMzQyxnQkFBUSxjQUFjLEtBQUssR0FBRztBQUM5QixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGlCQUFpQixTQUFTLGVBQWUsU0FBUyxTQUFTO0FBQzVELGdCQUFRLDZCQUE2QixDQUFDLFNBQVMsT0FBTyxHQUFHLFVBQVUsTUFBTTtBQUN6RSxnQkFBUSxlQUFlLFNBQVMsT0FBTztBQUN2QyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxVQUFJLGNBQWM7QUFDbEIsTUFBQUEsTUFBSyxjQUFjLFNBQVUsVUFBVSxNQUFNO0FBQ3pDLGdCQUFRLGFBQWEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxNQUFNO0FBQ2hELHNCQUFjO0FBQ2QsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxpQkFBaUIsTUFBTTtBQUM1QixNQUFBQSxNQUFLLHVCQUF1QixTQUFVLElBQUksS0FBSztBQUMzQyxnQkFBUSxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDeEQsYUFBSyxNQUFNQSxNQUFLO0FBQ2hCLGdCQUFRLElBQUksYUFBYSx5QkFBeUIsSUFBSSxPQUFPLHFCQUFxQixZQUFZLENBQUM7QUFDL0YsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxnQkFBZ0IsU0FBVSxNQUFNLE1BQU07QUFDdkMsZ0JBQVEsc0JBQXNCLENBQUMsTUFBTSxJQUFJLEdBQUcsVUFBVSxNQUFNO0FBQzVELHFCQUFhLGNBQWMsTUFBTSxJQUFJO0FBQUEsTUFDekM7QUFDQSxNQUFBQSxNQUFLLFNBQVMsU0FBVSxRQUFRO0FBQzVCLGdCQUFRLFlBQVksQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNO0FBQzlDLFlBQUksQ0FBQyxRQUFRO0FBQ1Qsc0JBQVk7QUFDWixpQkFBT0ksTUFBSyxVQUFVO0FBQUEsUUFDMUI7QUFDQSx1QkFBZTtBQUNmLFFBQUFBLE1BQUssVUFBVSxNQUFNO0FBQ3JCLGVBQU9KO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssZ0JBQWdCQSxNQUFLLGVBQWUsU0FBVSxLQUFLO0FBQ3BELGdCQUFRLFlBQVksQ0FBQyxHQUFHLEdBQUcsVUFBVSxNQUFNO0FBQzNDLHVCQUFlO0FBQ2YsUUFBQUksTUFBSyxhQUFhLEdBQUc7QUFDckIsZUFBT0o7QUFBQSxNQUNYO0FBQ0EsVUFBSSxlQUFlO0FBQ25CLE1BQUFBLE1BQUssZUFBZSxTQUFVLFFBQVE7QUFDbEMsZ0JBQVEsYUFBYSxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQU07QUFDL0MsdUJBQWU7QUFDZixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGtCQUFrQixNQUFNO0FBQzdCLFlBQU0sVUFBVTtBQUFBLFFBQ1osT0FBTyxNQUFNO0FBQ1QsY0FBSSxDQUFDQSxNQUFLLGtCQUFrQjtBQUN4QixvQkFBUSxJQUFJLEdBQUcsSUFBSTtBQUN2QixzQkFBWTtBQUNaLGNBQUksT0FBTztBQUNQLHNCQUFVO0FBQ2Qsb0JBQVUsS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsU0FBUyxNQUFNO0FBQ1gsY0FBSSxDQUFDQSxNQUFLLGtCQUFrQjtBQUN4QixvQkFBUSxNQUFNLEdBQUcsSUFBSTtBQUN6QixzQkFBWTtBQUNaLGNBQUksT0FBTztBQUNQLHNCQUFVO0FBQ2Qsb0JBQVUsS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUMzQjtBQUFBLE1BQ0o7QUFDQSxNQUFBQSxNQUFLLHFCQUFxQixNQUFNO0FBQ2hDLE1BQUFBLE1BQUssYUFBYSxNQUFNO0FBQ3hCLE1BQUFBLE1BQUssZ0JBQWdCLE1BQU07QUFDdkIsb0JBQVk7QUFBQSxNQUNoQjtBQUNBLFVBQUk7QUFDSixNQUFBQSxNQUFLLG9CQUFvQixTQUFVLFlBQVksTUFBTTtBQUNqRCxnQkFBUSxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsTUFBTTtBQUNsRCw0QkFBb0I7QUFDcEIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxtQkFBbUIsTUFBTTtBQUM5QixNQUFBQSxNQUFLLHdCQUF3QixNQUFNO0FBQ25DLE1BQUFBLE1BQUsscUJBQXFCLE1BQU07QUFDaEMsTUFBQUEsTUFBSyxnQkFBZ0IsTUFBTTtBQUN2QixnQkFBUSxDQUFDLEdBQUcsQ0FBQztBQUNiLGVBQU8sT0FBTyxRQUFRO0FBQUEsTUFDMUI7QUFDQSxhQUFPLGVBQWVBLE9BQU0sUUFBUTtBQUFBLFFBQ2hDLEtBQUssTUFBTUEsTUFBSyxXQUFXLFdBQVc7QUFBQSxRQUN0QyxZQUFZO0FBQUEsTUFDaEIsQ0FBQztBQUNELE1BQUFBLE1BQUssYUFBYSxTQUFTLFVBQVUsTUFBTSxjQUFjLG9CQUFvQixjQUFjO0FBQ3ZGLFlBQUksaUJBQWlCLENBQUMsQ0FBQztBQUN2QixlQUFPLFFBQVE7QUFDZixnQkFBUSxLQUFLSSxNQUFLO0FBQ2xCLGdCQUFRLGdCQUFnQkosTUFBSyx1QkFBdUI7QUFDcEQsY0FBTSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsY0FBYztBQUNuRCxjQUFNLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLGVBQWU7QUFBQSxVQUNwRCxjQUFjO0FBQUEsUUFDbEIsQ0FBQztBQUNELGNBQU0sU0FBUyxPQUFPLE9BQU8sU0FBUyxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUcsU0FBUztBQUFBLFVBQ25FLGVBQWUsT0FBTyxPQUFPLEVBQUUsNEJBQTRCLE1BQU0sR0FBRyxNQUFNO0FBQUEsUUFDOUUsQ0FBQyxDQUFDO0FBQ0YsWUFBSSxPQUFPLE9BQU87QUFDbEIsWUFBSTtBQUNBLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxZQUFZO0FBQy9DLGNBQU0sVUFBVSxPQUFPO0FBQ3ZCLGFBQUssS0FBS0EsTUFBSztBQUNmLFFBQUFBLE1BQUssU0FBUztBQUNkLFlBQUk7QUFDQSxzQkFBWTtBQUNaLGNBQUksY0FBYztBQUNkLG1CQUFPQSxNQUFLLGFBQWEsTUFBTSxvQkFBb0Isa0JBQWtCO0FBQUEsVUFDekU7QUFDQSxjQUFJLFNBQVM7QUFDVCxrQkFBTSxXQUFXLENBQUMsT0FBTyxFQUNwQixPQUFPLFFBQVEsWUFBWSxDQUFDLENBQUMsRUFDN0IsT0FBTyxPQUFLLEVBQUUsU0FBUyxDQUFDO0FBQzdCLGdCQUFJLENBQUMsU0FBUyxRQUFRLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRztBQUNuRCxtQkFBSyxFQUFFLElBQUk7QUFDWCxtQkFBSyxXQUFXO0FBQUEsWUFDcEI7QUFBQSxVQUNKO0FBQ0EsZ0JBQU0sY0FBYyxVQUFVLFlBQVk7QUFDMUMsZ0JBQU0scUJBQXFCLGFBQWEsaUJBQWlCO0FBQ3pELGdCQUFNLHFCQUFxQixLQUFLLFlBQVk7QUFDNUMsZ0JBQU0scUJBQXFCLHVCQUN0QixZQUFZLFNBQVMsS0FBSyxZQUFZLE9BQU87QUFDbEQsY0FBSSxLQUFLLEVBQUUsUUFBUTtBQUNmLGdCQUFJLFlBQVksUUFBUTtBQUNwQixrQkFBSTtBQUNKLHVCQUFTLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxLQUFLLEVBQUUsT0FBTyxRQUFXLEtBQUs7QUFDL0Qsc0JBQU0sT0FBTyxLQUFLLEVBQUUsRUFBRTtBQUN0QixvQkFBSSxDQUFDLFlBQVksUUFBUSxHQUFHLEtBQUssUUFBUSxtQkFBbUI7QUFDeEQsd0JBQU0sWUFBWSxVQUFVLFdBQVcsS0FBS0EsT0FBTSxRQUFRLElBQUksQ0FBQztBQUMvRCx5QkFBT0EsTUFBSyxhQUFhLFdBQVcsa0JBQWtCO0FBQUEsZ0JBQzFELFdBQ1MsQ0FBQyx1QkFBdUIsUUFBUSxtQkFBbUI7QUFDeEQsd0NBQXNCO0FBQ3RCO0FBQUEsZ0JBQ0o7QUFBQSxjQUNKO0FBQ0Esa0JBQUksVUFBVSxrQkFBa0IsS0FBSyxDQUFDLG9CQUFvQjtBQUN0RCxzQkFBTSxZQUFZLFVBQVUsV0FBVyxNQUFNQSxPQUFNLE1BQU07QUFDekQsdUJBQU9BLE1BQUssYUFBYSxXQUFXLGtCQUFrQjtBQUFBLGNBQzFEO0FBQ0Esa0JBQUkscUJBQXFCLHVCQUF1QixDQUFDLG9CQUFvQjtBQUNqRSw2QkFBYSxrQkFBa0IscUJBQXFCLFdBQVc7QUFBQSxjQUNuRTtBQUFBLFlBQ0o7QUFDQSxnQkFBSSxxQkFDQSxDQUFDLEtBQUssRUFBRSxRQUFRLGlCQUFpQixLQUNqQyxDQUFDLG9CQUFvQjtBQUNyQixrQkFBSTtBQUNBLDRCQUFZLElBQUk7QUFDcEIsY0FBQUEsTUFBSyxxQkFBcUI7QUFDMUIsY0FBQUEsTUFBSyxLQUFLLENBQUM7QUFBQSxZQUNmO0FBQUEsVUFDSixXQUNTLFVBQVUsa0JBQWtCLEtBQUssQ0FBQyxvQkFBb0I7QUFDM0Qsa0JBQU0sWUFBWSxVQUFVLFdBQVcsTUFBTUEsT0FBTSxNQUFNO0FBQ3pELG1CQUFPQSxNQUFLLGFBQWEsV0FBVyxrQkFBa0I7QUFBQSxVQUMxRDtBQUNBLGNBQUksb0JBQW9CO0FBQ3BCLGdCQUFJO0FBQ0EsMEJBQVksSUFBSTtBQUNwQixtQkFBTyxDQUFDLEVBQUUsT0FBTyxJQUFJO0FBQ3JCLGtCQUFNLGlCQUFpQixLQUFLLE1BQU0sS0FBSyxRQUFRLEtBQUssYUFBYSxlQUFlLElBQUksQ0FBQztBQUNyRix5QkFBYSxjQUFjLGdCQUFnQixpQkFBZTtBQUN0RCxlQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQWdCLGdCQUFjO0FBQ3RDLHdCQUFRLElBQUlBLFdBQVU7QUFBQSxjQUMxQixDQUFDO0FBQ0QsY0FBQWhCLE1BQUssS0FBSyxDQUFDO0FBQUEsWUFDZixDQUFDO0FBQ0QsbUJBQU9BLE1BQUssYUFBYSxNQUFNLENBQUMsb0JBQW9CLGtCQUFrQjtBQUFBLFVBQzFFO0FBQ0EsY0FBSSxDQUFDLFdBQVc7QUFDWixtQkFBTyxLQUFLLElBQUksRUFBRSxRQUFRLFNBQU87QUFDN0Isa0JBQUksUUFBUSxXQUFXLEtBQUssTUFBTTtBQUM5QixvQkFBSTtBQUNBLDhCQUFZLElBQUk7QUFDcEIsaUNBQWlCO0FBQ2pCLGdCQUFBQSxNQUFLLFNBQVMsS0FBSztBQUNuQixnQkFBQUEsTUFBSyxLQUFLLENBQUM7QUFBQSxjQUNmLFdBQ1MsUUFBUSxjQUFjLEtBQUssTUFBTTtBQUN0QyxvQkFBSTtBQUNBLDhCQUFZLElBQUk7QUFDcEIsaUNBQWlCO0FBQ2pCLHdCQUFRLFlBQVk7QUFDcEIsZ0JBQUFBLE1BQUssS0FBSyxDQUFDO0FBQUEsY0FDZjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFDQSxjQUFJLENBQUMsa0JBQWtCLFFBQVEsZUFBZSxTQUFTLEdBQUc7QUFDdEQsNkJBQWlCLE9BQU8sS0FBSyxJQUFJLEVBQUUsS0FBSyxTQUFPLFFBQVEsZUFBZSxRQUFRLEdBQUcsS0FBSyxLQUFLLEtBQUssU0FBUyxJQUFJO0FBQUEsVUFDakg7QUFDQSxjQUFJLENBQUMsZ0JBQWdCO0FBQ2pCLGdCQUFJLE9BQU87QUFDUCxvQkFBTSxJQUFJLE9BQU8sT0FBTyxNQUFNLE9BQU87QUFDekMsZ0JBQUksQ0FBQyxvQkFBb0I7QUFDckIsY0FBQUEsTUFBSyxlQUFlLE1BQU0sU0FBUyxDQUFDLEdBQUcsT0FBTyxLQUFLO0FBQUEsWUFDdkQ7QUFBQSxVQUNKO0FBQUEsUUFDSixTQUNPLEtBQVA7QUFDSSxjQUFJLGVBQWU7QUFDZixvQkFBUSxLQUFLLElBQUksU0FBUyxHQUFHO0FBQUE7QUFFN0Isa0JBQU07QUFBQSxRQUNkO0FBQ0EsZUFBT0EsTUFBSyxhQUFhLE1BQU0sb0JBQW9CLGtCQUFrQjtBQUFBLE1BQ3pFO0FBQ0EsTUFBQUEsTUFBSyxlQUFlLFNBQVUsTUFBTSxvQkFBb0Isb0JBQW9CLE9BQU87QUFDL0UsWUFBSUwsV0FBVSxJQUFJO0FBQ2QsaUJBQU87QUFDWCxZQUFJO0FBQ0EsaUJBQU87QUFDWCxZQUFJLENBQUMsb0JBQW9CO0FBQ3JCLGlCQUFPSyxNQUFLLGdCQUFnQixJQUFJO0FBQUEsUUFDcEM7QUFDQSxjQUFNLHlCQUF5QkEsTUFBSyx1QkFBdUIsRUFBRSwrQkFDekRBLE1BQUssdUJBQXVCLEVBQUUsZ0NBQWdDO0FBQ2xFLFlBQUksd0JBQXdCO0FBQ3hCLGlCQUFPQSxNQUFLLHdCQUF3QixJQUFJO0FBQUEsUUFDNUM7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssa0JBQWtCLFNBQVUsTUFBTTtBQUNuQyxZQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSztBQUNqQixpQkFBTztBQUNYLGFBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBSztBQUNwQyxZQUFJO0FBQ0EsaUJBQU8sS0FBSztBQUFBLFFBQ2hCLFNBQ08sTUFBUDtBQUFBLFFBQWU7QUFDZixlQUFPO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssMEJBQTBCLFNBQVUsTUFBTTtBQUMzQyxjQUFNLE9BQU8sS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLO0FBQzVDLGlCQUFTLElBQUksR0FBRyxNQUFNLE1BQU0sS0FBSyxRQUFRLFFBQVcsS0FBSztBQUNyRCxjQUFJLE9BQU8sT0FBTyxnQkFBZ0IsR0FBRyxLQUNqQyxPQUFPLGNBQWMsS0FBSyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHO0FBQ3hELGlCQUFLLEtBQUssT0FBTyxHQUFHO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGlCQUFpQixTQUFTLGNBQWMsTUFBTSxTQUFTLGVBQWUsYUFBYSxtQkFBbUIsT0FBTztBQUM5RyxZQUFJO0FBQ0EsZ0JBQU0sSUFBSSxPQUFPLFlBQVksT0FBTztBQUN4QyxxQkFBYSxlQUFlLElBQUk7QUFDaEMscUJBQWEsa0JBQWtCLElBQUk7QUFDbkMsWUFBSSx1QkFBdUI7QUFDM0IsWUFBSSxnQkFBZ0I7QUFDaEIsaUNBQXVCLGFBQWEsZ0JBQWdCLElBQUk7QUFBQSxRQUM1RDtBQUNBLFlBQUksVUFBVSxDQUFDLHNCQUFzQjtBQUNqQyx1QkFBYSxpQkFBaUIsTUFBTSxTQUFTLGVBQWUsZ0JBQWdCO0FBQUEsUUFDaEYsV0FDUyxlQUFlO0FBQ3BCLHVCQUFhLGlCQUFpQixNQUFNLFNBQVMsQ0FBQyxHQUFHLE9BQU8sS0FBSztBQUFBLFFBQ2pFO0FBQ0EscUJBQWEsYUFBYSxNQUFNLE9BQU87QUFDdkMscUJBQWEsZUFBZSxJQUFJO0FBQ2hDLHFCQUFhLGFBQWEsSUFBSTtBQUM5QixxQkFBYSxZQUFZLElBQUk7QUFBQSxNQUNqQztBQUNBLGVBQVMsY0FBYztBQUNuQixZQUFJLENBQUM7QUFDRDtBQUNKLGNBQU0sU0FBUyxPQUFPLE9BQU8sUUFBUSxLQUNqQyxPQUFPLE9BQU8sYUFBYSxLQUMzQixPQUFPLE9BQU8sTUFBTSxLQUNwQixPQUFPLE9BQU8sVUFBVSxLQUN4QjtBQUNKLFFBQUFBLE1BQUssT0FBTyxPQUFPLFFBQVEsVUFBVSxFQUFFLENBQUM7QUFBQSxNQUM1QztBQUNBLE1BQUFBLE1BQUssS0FBSztBQUNWLE1BQUFBLE1BQUssUUFBUTtBQUNiLGFBQU9BO0FBQUEsSUFDWDtBQUNBLFFBQU0sU0FBUyxDQUFDLE1BQU0sUUFBUSxPQUFPLEtBQUssU0FBUyxNQUFNLEdBQUc7QUFDNUQsYUFBUyxnQkFBZ0IsR0FBRztBQUN4QixhQUFPLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxlQUFlO0FBQUEsSUFDMUM7QUFFQSxRQUFJO0FBQUosUUFBUTtBQUNSLFFBQU0sRUFBRSxjQUFBaUIsY0FBYSxJQUFJLFFBQVE7QUFDakMsUUFBTSxFQUFFLFFBQVEsSUFBSSxRQUFRO0FBQzVCLFFBQU0sRUFBRSxTQUFBQyxTQUFRLElBQUksUUFBUTtBQUM1QixRQUFNLE9BQU87QUFDYixRQUFNLFNBQVM7QUFDZixRQUFJLGtCQUFrQjtBQUFBLE1BQ2xCLFFBQVE7QUFBQSxRQUNKLGdCQUFnQixPQUFPO0FBQUEsUUFDdkIsYUFBYSxPQUFPO0FBQUEsTUFDeEI7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFFBQVEsQ0FBQyxRQUFRO0FBQ2IsZUFBTyxRQUFRLElBQUk7QUFBQSxNQUN2QjtBQUFBLE1BQ0EsZUFBZTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsTUFDQSxlQUFlLE1BQU0sS0FBSyxZQUFZLFFBQVEsWUFBWSxTQUFTLFNBQVMsUUFBUSxVQUFVLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRyxjQUFjLFFBQVEsT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJO0FBQUEsTUFDekw7QUFBQSxNQUNBLE1BQU0sUUFBUTtBQUFBLE1BQ2QsU0FBUztBQUFBLFFBQ0wsTUFBTSxNQUFNLFFBQVE7QUFBQSxRQUNwQixLQUFLLFFBQVE7QUFBQSxRQUNiLFVBQVUsTUFBTSxRQUFRO0FBQUEsUUFDeEIsTUFBTSxDQUFDLFNBQVM7QUFDWixrQkFBUSxLQUFLLElBQUk7QUFBQSxRQUNyQjtBQUFBLFFBQ0EsVUFBVSxRQUFRO0FBQUEsUUFDbEIsWUFBWSxPQUFPLFFBQVEsT0FBTyxZQUFZLGNBQ3hDLFFBQVEsT0FBTyxVQUNmO0FBQUEsTUFDVjtBQUFBLE1BQ0EsY0FBQUQ7QUFBQSxNQUNBO0FBQUEsTUFDQSxrQkFBa0I7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixNQUFNLEtBQUs7QUFBQSxRQUNQLFdBQVdDLFNBQVEsV0FBVyxZQUFZO0FBQUEsUUFDMUMsYUFBYTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNMO0FBRUEsUUFBTSxpQkFBaUIsV0FBVyxRQUFRLE9BQU8sUUFBUSxJQUFJLHlCQUN2RCxPQUFPLFFBQVEsSUFBSSxzQkFBc0IsSUFDekM7QUFDTixRQUFJLFdBQVcsUUFBUSxTQUFTO0FBQzVCLFlBQU0sUUFBUSxPQUFPLFFBQVEsUUFBUSxNQUFNLFVBQVUsRUFBRSxFQUFFO0FBQ3pELFVBQUksUUFBUSxnQkFBZ0I7QUFDeEIsY0FBTSxNQUFNLCtDQUErQywyR0FBMkc7QUFBQSxNQUMxSztBQUFBLElBQ0o7QUFDQSxRQUFNLFdBQVc7QUFDakIsUUFBTSxVQUFVLGNBQWMsZUFBZTtBQUM3QyxRQUFJLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQSxXQUFBdkI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsUUFBUTtBQUFBLE1BQ1I7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0o7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUN2MkZqQjtBQUFBLDBDQUFBMEIsVUFBQUMsU0FBQTtBQUFBO0FBSUEsUUFBTSxFQUFDLE9BQU8sWUFBVyxJQUFJO0FBRTdCLFNBQUssWUFBWSxRQUFRLFFBQVEsSUFBSSxDQUFDO0FBRXRDLElBQUFBLFFBQU8sVUFBVTtBQUVqQixhQUFTLEtBQUssYUFBYSxLQUFLO0FBQzlCLFlBQU0sT0FBTyxNQUFNLGFBQWEsS0FBSyxPQUFPO0FBQzVDLG1CQUFhLElBQUk7QUFDakIsYUFBTztBQUFBLElBQ1Q7QUFTQSxhQUFTLGFBQWEsTUFBTTtBQUMxQixhQUFPLEtBQUssSUFBSSxFQUFFLFFBQVEsU0FBTztBQUMvQixZQUFJLFFBQVEsUUFBUTtBQUNsQixlQUFLLGlCQUFpQixLQUFLLEtBQUssaUJBQWlCLEdBQUcsQ0FBQztBQUFBLFFBQ3ZELFdBQVcsT0FBTyxLQUFLLFNBQVMsWUFBWTtBQUMxQyxlQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUssSUFBSTtBQUFBLFFBQ2pDLE9BQU87QUFDTCxlQUFLLGlCQUFpQixNQUFNLE1BQU07QUFDaEMsbUJBQU8sS0FBSztBQUFBLFVBQ2QsQ0FBQztBQUNELGVBQUssaUJBQWlCLFVBQVUsTUFBTTtBQUNwQyxtQkFBTyxLQUFLO0FBQUEsVUFDZCxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUFBOzs7QUN0Q0E7QUFBQTtBQUFBO0FBQUE7QUFlQSxlQUFlLE9BQU87QUFDcEIsUUFBTSxPQUFPLE1BQ1YsTUFBTSwrQkFBK0IsRUFDckMsT0FBTyxRQUFRLEVBQUUsTUFBTSxXQUFXLFNBQVMsT0FBTyxNQUFNLHFDQUFxQyxDQUFDLEVBQzlGLE9BQU8sU0FBUyxFQUFFLE1BQU0sV0FBVyxTQUFTLE1BQU0sTUFBTSwwRUFBMEUsQ0FBQyxFQUNuSSxPQUFPLFdBQVcsRUFBRSxNQUFNLFdBQVcsU0FBUyxPQUFPLE9BQU8sS0FBSyxNQUFNLDBEQUEwRCxDQUFDLEVBQ2xJLE9BQU8sV0FBVyxFQUFFLE1BQU0sV0FBVyxTQUFTLE9BQU8sTUFBTSxnRkFBZ0YsQ0FBQyxFQUM1SSxPQUFPLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxTQUFTLE9BQU8sTUFBTSxpRUFBaUUsQ0FBQyxFQUN0SSxPQUFPLFNBQVMsRUFBRSxNQUFNLFdBQVcsU0FBUyxPQUFPLE1BQU0sd0RBQXdELENBQUMsRUFDbEgsT0FBTyxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsTUFBTSwySEFBMkgsT0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDcE0sUUFBUSxhQUFhLEVBQUUsTUFBTSxVQUFVLFNBQVMsUUFBUSxNQUFNLDZHQUE2RyxDQUFDLEVBQzVLLFFBQVEsWUFBWSxFQUFFLE1BQU0sU0FBUyxNQUFNLDBGQUEwRixPQUFPLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUM1SixRQUFRLGVBQWUsRUFBRSxNQUFNLFVBQVUsTUFBTSwwRkFBMEYsU0FBUyxHQUFHLENBQUMsRUFDdEosUUFBUSxXQUFXLEVBQUUsTUFBTSxXQUFXLE1BQU0sOERBQThELFNBQVMsTUFBTSxDQUFDLEVBQzFILFFBQVEsYUFBYSxFQUFFLE1BQU0sVUFBVSxNQUFNLGtEQUFrRCxDQUFDLEVBQ2hHLE9BQU8sb0JBQW9CLEVBQUUsTUFBTSxXQUFXLE1BQU0seUVBQXlFLFNBQVMsTUFBTSxDQUFDLEVBQzdJLE9BQU8sMkJBQTJCLEVBQUUsTUFBTSxXQUFXLFNBQVMsT0FBTyxNQUFNLG9FQUFvRSxDQUFDLEVBQ2hKLE9BQU8sRUFDUDtBQUVILFFBQU1DLFFBQWtCLGdCQUFVLFdBQUssV0FBVyxpQ0FBaUMsR0FBRztBQUFBLElBQ3BGLFlBQVksS0FBSztBQUFBLEVBQ25CLENBQUM7QUFHRCxRQUFNLGFBQXNDLENBQUM7QUFDN0MsUUFBTSxxQkFBMEMsQ0FBQztBQUNqRCxRQUFNLGdCQUE2QixDQUFDO0FBQ3BDLFFBQU0sa0JBQWtCLGVBQWUsS0FBSyxtQkFBbUI7QUFDL0QsUUFBTSxjQUF3QixtQkFBbUIsQ0FBQyxhQUFhLGFBQWEsV0FBVztBQUN2RixRQUFNLFdBQVcsZUFBZSxLQUFLLFFBQVE7QUFDN0MsUUFBTSxvQkFBb0IsS0FBSyx1QkFBdUI7QUFDdEQsUUFBTSxXQUErQixLQUFLO0FBQzFDLFFBQU0sVUFBbUIsS0FBSztBQUU5QixNQUFJLGtCQUEyQyxDQUFDO0FBQ2hELE1BQUksS0FBSyxpQkFBaUIsWUFBWSxVQUFVLFlBQVksQ0FBQyxDQUFDLEdBQUcsUUFBUTtBQUN2RSxJQUFPLFFBQVEsK0hBQStILEtBQUssV0FBVyxLQUFLLHFCQUFxQixLQUFLLGNBQWM7QUFBQSxFQUM3TTtBQUVBLE1BQUksaUJBQWlCO0FBQ3JCLE1BQUk7QUFDRixRQUFJLEtBQUssTUFBTTtBQUNiLFlBQU0sUUFBUSxNQUFNLElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFLFlBQVk7QUFDckUsY0FBUSxPQUFPLE1BQU0sTUFBTSxJQUFJLE9BQUssRUFBRSx5QkFBeUIsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJO0FBQ2xGO0FBQUEsSUFDRjtBQUVBLFFBQUksS0FBSyxFQUFFLFNBQVMsS0FBSyxVQUFVO0FBQ2pDLFlBQU0sSUFBSSxNQUFNLGlFQUFpRTtBQUFBLElBQ25GO0FBQ0EsVUFBTSxpQkFBaUIsWUFDbEIsTUFBTSxVQUFBQyxTQUFHLFNBQVMsVUFBVSxFQUFFLFVBQVUsT0FBTyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsT0FBTyxPQUFLLENBQUMsSUFDNUUsS0FBSyxFQUFFLFNBQVMsSUFBSSxLQUFLLElBQUk7QUFFbEMsa0JBQWMsS0FBSyxHQUFJLE1BQU0sSUFBSSxpQkFBc0IsY0FBUSxLQUFLLFNBQVMsQ0FBQyxFQUFFLFlBQVksZ0JBQWdCLE9BQU8sQ0FBRTtBQUtySCxzQkFBa0IsTUFBTSxpQkFBaUJELE9BQU0sZUFBZTtBQUFBLE1BQzVELFFBQVEsS0FBSztBQUFBLE1BQ2IsU0FBUyxLQUFLO0FBQUEsSUFDaEIsQ0FBQztBQUNELGVBQVcsV0FBVyxpQkFBaUI7QUFDckMseUJBQW1CLEtBQUssR0FBRyxRQUFRLHNCQUFzQixDQUFDLENBQUM7QUFBQSxJQUM3RDtBQUNBLFFBQUksQ0FBQyxLQUFLLE9BQU87QUFDZixpQkFBVyxLQUFLLEdBQUcsZUFBZTtBQUFBLElBQ3BDLE9BQU87QUFHTCxpQkFBVyxLQUFLLEdBQUcsV0FBVyxjQUFjLElBQUksT0FBSyxFQUFFLElBQUksR0FBRyxlQUFlLENBQUM7QUFBQSxJQUNoRjtBQUdBLFFBQUkscUJBQXFCLEtBQUssT0FBTztBQUNuQyxZQUFNLEVBQUUsU0FBQUUsVUFBUyxRQUFRLElBQUksTUFBTSxvQkFBb0I7QUFBQSxRQUNyRCxNQUFBRjtBQUFBLFFBQ0EsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFFBQ1Q7QUFBQSxRQUNBLE9BQU8sS0FBSztBQUFBLFFBQ1osUUFBUSxLQUFLO0FBQUEsUUFDYixTQUFTLEtBQUs7QUFBQSxRQUNkLGdCQUFnQixDQUFDLEtBQUs7QUFBQSxNQUN4QixDQUFDO0FBQ0QsdUJBQWlCRTtBQUdqQixVQUFJLEtBQUssVUFBVSxPQUFPO0FBQ3hCLFFBQU8sUUFBUSxvREFBb0Q7QUFBQSxNQUNyRTtBQUVBLFVBQUksS0FBSyxTQUFTO0FBQ2hCLHFCQUFhLE9BQU87QUFBQSxNQUN0QjtBQUVBLFVBQUksQ0FBQ0EsVUFBUztBQUNaLGNBQU0sSUFBSSxNQUFNLGdDQUFnQztBQUFBLE1BQ2xEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsVUFBRTtBQUNBLFNBQUtGLE1BQUssVUFBVTtBQUFBLEVBQ3RCO0FBRUEsTUFBSSxtQkFBbUIsU0FBUyxHQUFHO0FBQ2pDLDRCQUF3QixrQkFBa0I7QUFDMUMsVUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQUEsRUFDbEQ7QUFDQSxNQUFJLGdCQUFnQixTQUFTLEdBQUc7QUFDOUIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxDQUFDLG1CQUFtQjtBQUN0QixnQkFBVTtBQUFBLElBQ1o7QUFDQSxRQUFJLENBQUMsZ0JBQWdCO0FBQ25CLFlBQU0sSUFBSSxNQUFNO0FBQUEsRUFBdUIsU0FBUztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUVGO0FBRUEsU0FBUyx3QkFBd0IsU0FBb0M7QUFDbkUsTUFBSSxRQUFRLFNBQVMsR0FBRztBQUN0QixJQUFPLFFBQVEsaUNBQXVDLFlBQUsscUJBQXFCLENBQUM7QUFDakYsWUFBUSxRQUFRLFlBQVU7QUFDeEIsTUFBTyxRQUFRLDZDQUE2QyxPQUFPLFdBQVcsT0FBTyxXQUFXLE9BQU8sTUFBTTtBQUFBLElBQy9HLENBQUM7QUFDRCxJQUFPLFFBQVEsb0ZBQW9GO0FBQUEsRUFDckc7QUFDRjtBQUVBLFNBQVMsYUFBYSxTQUFxQztBQUN6RCxFQUFPLFVBQVUscUNBQXFDO0FBQ3RELFFBQU0sZ0JBQWdCLFFBQVEsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRO0FBQ3BFLGdCQUFjLFFBQVEsWUFBVTtBQUM5QixJQUFPLE1BQU0seUNBQXlDLE9BQU8sU0FBUyxPQUFPLFFBQVEsT0FBTyxRQUFRO0FBQ3BHLFVBQU0sY0FBYyxPQUFPLFFBQVEsT0FBTyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQzNFLGdCQUFZLFFBQVEsVUFBZSxNQUFNLFlBQVksS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQUEsRUFDeEUsQ0FBQztBQUNIO0FBV0EsU0FBUyxlQUFlLElBQW9DO0FBQzFELE1BQUksR0FBRyxXQUFXLEdBQUc7QUFBRSxXQUFPO0FBQUEsRUFBVztBQUN6QyxTQUFPLEdBQUcsT0FBTyxPQUFLLE1BQU0sRUFBRTtBQUNoQztBQU9BLFNBQVMsV0FBVyxjQUErQixxQkFBdUU7QUFDeEgsUUFBTSxrQkFBa0IsSUFBSSxJQUFJLG9CQUFvQixJQUFJLFVBQVEsS0FBSyxRQUFRLENBQUM7QUFDOUUsUUFBTSxRQUFpQztBQUN2QyxRQUFNLEtBQUssR0FBRyxhQUFhLE9BQU8sVUFBUSxDQUFDLGdCQUFnQixJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDOUUsU0FBTztBQUNUO0FBRU8sU0FBUyxNQUFNO0FBQ3BCLE9BQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFPO0FBQ3pCLElBQU8sTUFBTSxHQUFHO0FBQ2hCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLENBQUM7QUFDSDtBQTVMQSxJQUNBLFdBQ0FHLE9BQ0FDLFFBQ0EsWUFRTTtBQVpOO0FBQUE7QUFBQTtBQUNBLGdCQUErQjtBQUMvQixJQUFBRCxRQUFzQjtBQUN0QixJQUFBQyxTQUF1QjtBQUN2QixpQkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBS0EsSUFBTSxRQUFRO0FBQUE7QUFBQTs7OztBQ1pkLElBQUEsUUFBQTtBQUFTLE9BQUEsZUFBQSxTQUFBLE9BQUEsRUFBQSxZQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsU0FBQSxNQUFBO0FBQUcsRUFBQSxDQUFBOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJncmF5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hhbGsiLCAic3R5bGVzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNoYWxrIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZUZvb2xXZWJwYWNrIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJlcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInJlcXVpcmVGb29sV2VicGFjayIsICJURVJNSU5BVEVfTUVUSE9EX0lEIiwgIldvcmtlclRocmVhZHMiLCAiZXJyb3IiLCAiV29ya2VyIiwgIndvcmtlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInBvb2wiLCAid29ya2VyIiwgInJlc29sdmUiLCAiZXJyb3IiLCAicmVzdWx0IiwgImV4cG9ydHMiLCAicG9vbCIsICJ3b3JrZXIiLCAiZXhwb3J0cyIsICJyZXNvbHZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyIiwgImVycjIiLCAiZXIiLCAiZXIyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJ1dGlsIiwgInF1ZXVlIiwgInBhdGgiLCAib3B0aW9ucyIsICJjYiIsICJkYXRhIiwgInNyYyIsICJkZXN0IiwgImZsYWdzIiwgInJlYWRkaXIiLCAiZ28kcmVhZGRpciIsICJtb2RlIiwgImV4cG9ydHMiLCAiZnMiLCAicmVzb2x2ZSIsICJidWZmZXIiLCAiYnVmZmVycyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJ1dGlsIiwgInN0YXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgInJlcXVpcmVfY29weV9zeW5jIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgImVyciIsICJlcnJvciIsICJyZXF1aXJlX2NvcHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVtcHR5RGlyIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJzdGF0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgInNyY3BhdGgiLCAiZHN0cGF0aCIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAicmVsYXRpdmUiLCAidHlwZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJyZWFkRmlsZVN5bmMiLCAicmVxdWlyZV9qc29uZmlsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9tb3ZlX3N5bmMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgImVyciIsICJyZXF1aXJlX21vdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiY2hhbGsiLCAid29ya2VyIiwgInBvb2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAidXRpbCIsICJwYXRoIiwgInkxOG4iLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgImZzIiwgInBhdGgiLCAiRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkiLCAia2V5IiwgImVycm9yIiwgImFyZ3MiLCAidmFsdWUiLCAidmFsIiwgImFyZ3YiLCAiZW52IiwgImFsaWFzZXMiLCAiZGVmYXVsdHMiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb2RlIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVzb2x2ZSIsICJtb2R1bGUiLCAic3RhY2siLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiam9pbiIsICJyZXNvbHZlIiwgInBhdGgiLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjbWQiLCAiaXNQcm9taXNlIiwgInNoaW0iLCAieWFyZ3MiLCAidXNhZ2UiLCAidmFsaWRhdGlvbiIsICJzZWxmIiwgImNvbW1hbmQiLCAiZXJyb3IiLCAiYyIsICJ5MThuIiwgImxvZ2dlciIsICJtYXhXaWR0aCIsICJhcmd2IiwgImNvbXBsZXRpb25zIiwgImtleSIsICJnbG9iYWwiLCAiayIsICJ0eXBlIiwgInZhbHVlIiwgInBhcnNlRm4iLCAicGFyc2UiLCAiY29tcGxldGlvbiIsICJyZWFkRmlsZVN5bmMiLCAicmVzb2x2ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwb29sIiwgImZzIiwgInN1Y2Nlc3MiLCAicGF0aCIsICJjaGFsayJdCn0K
10204
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3dvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvaW5kZXguanMiLCAibG9nZ2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWxpZnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL3BvbHlmaWxscy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvbGVnYWN5LXN0cmVhbXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2Nsb25lLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9ncmFjZWZ1bC1mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2ZzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hdC1sZWFzdC1ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL21ha2UtZGlyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5LXN5bmMvY29weS1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcGF0aC1leGlzdHMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2NvcHkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL3JpbXJhZi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2VtcHR5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2ZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXBhdGhzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstdHlwZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvanNvbmZpbGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUtc3luYy9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlLXN5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL21vdmUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAicnVubmVyL2ludGVncmF0aW9uLXRlc3RzLnRzIiwgIndvcmtlcnMvY29tbW9uLnRzIiwgInV0aWxzLnRzIiwgIndvcmtlcnMvaW50ZWctdGVzdC13b3JrZXIudHMiLCAid29ya2Vycy9pbnRlZy1zbmFwc2hvdC13b3JrZXIudHMiLCAid29ya2Vycy9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZXNjYWxhZGUvc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZXF1aXJlLWRpcmVjdG9yeS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95YXJncy9pbmRleC5janMiLCAiY2xpLnRzIiwgImluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwgIi8qIE1JVCBsaWNlbnNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmNvbnN0IGNzc0tleXdvcmRzID0gcmVxdWlyZSgnY29sb3ItbmFtZScpO1xuXG4vLyBOT1RFOiBjb252ZXJzaW9ucyBzaG91bGQgb25seSByZXR1cm4gcHJpbWl0aXZlIHZhbHVlcyAoaS5lLiBhcnJheXMsIG9yXG4vLyAgICAgICB2YWx1ZXMgdGhhdCBnaXZlIGNvcnJlY3QgYHR5cGVvZmAgcmVzdWx0cykuXG4vLyAgICAgICBkbyBub3QgdXNlIGJveCB2YWx1ZXMgdHlwZXMgKGkuZS4gTnVtYmVyKCksIFN0cmluZygpLCBldGMuKVxuXG5jb25zdCByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRyZXZlcnNlS2V5d29yZHNbY3NzS2V5d29yZHNba2V5XV0gPSBrZXk7XG59XG5cbmNvbnN0IGNvbnZlcnQgPSB7XG5cdHJnYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdyZ2InfSxcblx0aHNsOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzbCd9LFxuXHRoc3Y6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHN2J30sXG5cdGh3Yjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdod2InfSxcblx0Y215azoge2NoYW5uZWxzOiA0LCBsYWJlbHM6ICdjbXlrJ30sXG5cdHh5ejoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICd4eXonfSxcblx0bGFiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xhYid9LFxuXHRsY2g6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGNoJ30sXG5cdGhleDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnaGV4J119LFxuXHRrZXl3b3JkOiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydrZXl3b3JkJ119LFxuXHRhbnNpMTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kxNiddfSxcblx0YW5zaTI1Njoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTI1NiddfSxcblx0aGNnOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydoJywgJ2MnLCAnZyddfSxcblx0YXBwbGU6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ3IxNicsICdnMTYnLCAnYjE2J119LFxuXHRncmF5OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydncmF5J119XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cbi8vIEhpZGUgLmNoYW5uZWxzIGFuZCAubGFiZWxzIHByb3BlcnRpZXNcbmZvciAoY29uc3QgbW9kZWwgb2YgT2JqZWN0LmtleXMoY29udmVydCkpIHtcblx0aWYgKCEoJ2NoYW5uZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoISgnbGFiZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoY29udmVydFttb2RlbF0ubGFiZWxzLmxlbmd0aCAhPT0gY29udmVydFttb2RlbF0uY2hhbm5lbHMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogJyArIG1vZGVsKTtcblx0fVxuXG5cdGNvbnN0IHtjaGFubmVscywgbGFiZWxzfSA9IGNvbnZlcnRbbW9kZWxdO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0uY2hhbm5lbHM7XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5sYWJlbHM7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGxhYmVsc30pO1xufVxuXG5jb252ZXJ0LnJnYi5oc2wgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGVsdGEgPSBtYXggLSBtaW47XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmIChyID09PSBtYXgpIHtcblx0XHRoID0gKGcgLSBiKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGcgPT09IG1heCkge1xuXHRcdGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuXHRcdGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXHR9XG5cblx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGwgPSAobWluICsgbWF4KSAvIDI7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAobCA8PSAwLjUpIHtcblx0XHRzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcblx0fSBlbHNlIHtcblx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cdH1cblxuXHRyZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuaHN2ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgcmRpZjtcblx0bGV0IGdkaWY7XG5cdGxldCBiZGlmO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgdiA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmID0gdiAtIE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmYyA9IGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICh2IC0gYykgLyA2IC8gZGlmZiArIDEgLyAyO1xuXHR9O1xuXG5cdGlmIChkaWZmID09PSAwKSB7XG5cdFx0aCA9IDA7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRpZmYgLyB2O1xuXHRcdHJkaWYgPSBkaWZmYyhyKTtcblx0XHRnZGlmID0gZGlmZmMoZyk7XG5cdFx0YmRpZiA9IGRpZmZjKGIpO1xuXG5cdFx0aWYgKHIgPT09IHYpIHtcblx0XHRcdGggPSBiZGlmIC0gZ2RpZjtcblx0XHR9IGVsc2UgaWYgKGcgPT09IHYpIHtcblx0XHRcdGggPSAoMSAvIDMpICsgcmRpZiAtIGJkaWY7XG5cdFx0fSBlbHNlIGlmIChiID09PSB2KSB7XG5cdFx0XHRoID0gKDIgLyAzKSArIGdkaWYgLSByZGlmO1xuXHRcdH1cblxuXHRcdGlmIChoIDwgMCkge1xuXHRcdFx0aCArPSAxO1xuXHRcdH0gZWxzZSBpZiAoaCA+IDEpIHtcblx0XHRcdGggLT0gMTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gW1xuXHRcdGggKiAzNjAsXG5cdFx0cyAqIDEwMCxcblx0XHR2ICogMTAwXG5cdF07XG59O1xuXG5jb252ZXJ0LnJnYi5od2IgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF07XG5cdGNvbnN0IGcgPSByZ2JbMV07XG5cdGxldCBiID0gcmdiWzJdO1xuXHRjb25zdCBoID0gY29udmVydC5yZ2IuaHNsKHJnYilbMF07XG5cdGNvbnN0IHcgPSAxIC8gMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpO1xuXG5cdGIgPSAxIC0gMSAvIDI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuXHRyZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuY215ayA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHRjb25zdCBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG5cdGNvbnN0IGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cblx0cmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn07XG5cbmZ1bmN0aW9uIGNvbXBhcmF0aXZlRGlzdGFuY2UoeCwgeSkge1xuXHQvKlxuXHRcdFNlZSBodHRwczovL2VuLm0ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9kaXN0YW5jZSNTcXVhcmVkX0V1Y2xpZGVhbl9kaXN0YW5jZVxuXHQqL1xuXHRyZXR1cm4gKFxuXHRcdCgoeFswXSAtIHlbMF0pICoqIDIpICtcblx0XHQoKHhbMV0gLSB5WzFdKSAqKiAyKSArXG5cdFx0KCh4WzJdIC0geVsyXSkgKiogMilcblx0KTtcbn1cblxuY29udmVydC5yZ2Iua2V5d29yZCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgcmV2ZXJzZWQgPSByZXZlcnNlS2V5d29yZHNbcmdiXTtcblx0aWYgKHJldmVyc2VkKSB7XG5cdFx0cmV0dXJuIHJldmVyc2VkO1xuXHR9XG5cblx0bGV0IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblx0bGV0IGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcblxuXHRmb3IgKGNvbnN0IGtleXdvcmQgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcblxuXHRcdC8vIENvbXB1dGUgY29tcGFyYXRpdmUgZGlzdGFuY2Vcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvbXBhcmF0aXZlRGlzdGFuY2UocmdiLCB2YWx1ZSk7XG5cblx0XHQvLyBDaGVjayBpZiBpdHMgbGVzcywgaWYgc28gc2V0IGFzIGNsb3Nlc3Rcblx0XHRpZiAoZGlzdGFuY2UgPCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlKSB7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdEtleXdvcmQgPSBrZXl3b3JkO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG59O1xuXG5jb252ZXJ0LmtleXdvcmQucmdiID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0cmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufTtcblxuY29udmVydC5yZ2IueHl6ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgciA9IHJnYlswXSAvIDI1NTtcblx0bGV0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGxldCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wNDA0NSA/ICgoKHIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChyIC8gMTIuOTIpO1xuXHRnID0gZyA+IDAuMDQwNDUgPyAoKChnICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoZyAvIDEyLjkyKTtcblx0YiA9IGIgPiAwLjA0MDQ1ID8gKCgoYiArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGIgLyAxMi45Mik7XG5cblx0Y29uc3QgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcblx0Y29uc3QgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcblx0Y29uc3QgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuXHRyZXR1cm4gW3ggKiAxMDAsIHkgKiAxMDAsIHogKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IubGFiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB4eXogPSBjb252ZXJ0LnJnYi54eXoocmdiKTtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmhzbC5yZ2IgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF0gLyAzNjA7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCB0Mjtcblx0bGV0IHQzO1xuXHRsZXQgdmFsO1xuXG5cdGlmIChzID09PSAwKSB7XG5cdFx0dmFsID0gbCAqIDI1NTtcblx0XHRyZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuXHR9XG5cblx0aWYgKGwgPCAwLjUpIHtcblx0XHR0MiA9IGwgKiAoMSArIHMpO1xuXHR9IGVsc2Uge1xuXHRcdHQyID0gbCArIHMgLSBsICogcztcblx0fVxuXG5cdGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcblxuXHRjb25zdCByZ2IgPSBbMCwgMCwgMF07XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRpZiAodDMgPCAwKSB7XG5cdFx0XHR0MysrO1xuXHRcdH1cblxuXHRcdGlmICh0MyA+IDEpIHtcblx0XHRcdHQzLS07XG5cdFx0fVxuXG5cdFx0aWYgKDYgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuXHRcdH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDI7XG5cdFx0fSBlbHNlIGlmICgzICogdDMgPCAyKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbCA9IHQxO1xuXHRcdH1cblxuXHRcdHJnYltpXSA9IHZhbCAqIDI1NTtcblx0fVxuXG5cdHJldHVybiByZ2I7XG59O1xuXG5jb252ZXJ0LmhzbC5oc3YgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF07XG5cdGxldCBzID0gaHNsWzFdIC8gMTAwO1xuXHRsZXQgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHNtaW4gPSBzO1xuXHRjb25zdCBsbWluID0gTWF0aC5tYXgobCwgMC4wMSk7XG5cblx0bCAqPSAyO1xuXHRzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRzbWluICo9IGxtaW4gPD0gMSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0Y29uc3QgdiA9IChsICsgcykgLyAyO1xuXHRjb25zdCBzdiA9IGwgPT09IDAgPyAoMiAqIHNtaW4pIC8gKGxtaW4gKyBzbWluKSA6ICgyICogcykgLyAobCArIHMpO1xuXG5cdHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YucmdiID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdIC8gNjA7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGxldCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCBoaSA9IE1hdGguZmxvb3IoaCkgJSA2O1xuXG5cdGNvbnN0IGYgPSBoIC0gTWF0aC5mbG9vcihoKTtcblx0Y29uc3QgcCA9IDI1NSAqIHYgKiAoMSAtIHMpO1xuXHRjb25zdCBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSk7XG5cdGNvbnN0IHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKTtcblx0diAqPSAyNTU7XG5cblx0c3dpdGNoIChoaSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHJldHVybiBbdiwgdCwgcF07XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cmV0dXJuIFtxLCB2LCBwXTtcblx0XHRjYXNlIDI6XG5cdFx0XHRyZXR1cm4gW3AsIHYsIHRdO1xuXHRcdGNhc2UgMzpcblx0XHRcdHJldHVybiBbcCwgcSwgdl07XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cmV0dXJuIFt0LCBwLCB2XTtcblx0XHRjYXNlIDU6XG5cdFx0XHRyZXR1cm4gW3YsIHAsIHFdO1xuXHR9XG59O1xuXG5jb252ZXJ0Lmhzdi5oc2wgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF07XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IHZtaW4gPSBNYXRoLm1heCh2LCAwLjAxKTtcblx0bGV0IHNsO1xuXHRsZXQgbDtcblxuXHRsID0gKDIgLSBzKSAqIHY7XG5cdGNvbnN0IGxtaW4gPSAoMiAtIHMpICogdm1pbjtcblx0c2wgPSBzICogdm1pbjtcblx0c2wgLz0gKGxtaW4gPD0gMSkgPyBsbWluIDogMiAtIGxtaW47XG5cdHNsID0gc2wgfHwgMDtcblx0bCAvPSAyO1xuXG5cdHJldHVybiBbaCwgc2wgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5jb252ZXJ0Lmh3Yi5yZ2IgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IGggPSBod2JbMF0gLyAzNjA7XG5cdGxldCB3aCA9IGh3YlsxXSAvIDEwMDtcblx0bGV0IGJsID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCByYXRpbyA9IHdoICsgYmw7XG5cdGxldCBmO1xuXG5cdC8vIFdoICsgYmwgY2FudCBiZSA+IDFcblx0aWYgKHJhdGlvID4gMSkge1xuXHRcdHdoIC89IHJhdGlvO1xuXHRcdGJsIC89IHJhdGlvO1xuXHR9XG5cblx0Y29uc3QgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuXHRjb25zdCB2ID0gMSAtIGJsO1xuXHRmID0gNiAqIGggLSBpO1xuXG5cdGlmICgoaSAmIDB4MDEpICE9PSAwKSB7XG5cdFx0ZiA9IDEgLSBmO1xuXHR9XG5cblx0Y29uc3QgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvblxuXG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXHRzd2l0Y2ggKGkpIHtcblx0XHRkZWZhdWx0OlxuXHRcdGNhc2UgNjpcblx0XHRjYXNlIDA6IHIgPSB2OyAgZyA9IG47ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMTogciA9IG47ICBnID0gdjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAyOiByID0gd2g7IGcgPSB2OyAgYiA9IG47IGJyZWFrO1xuXHRcdGNhc2UgMzogciA9IHdoOyBnID0gbjsgIGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDQ6IHIgPSBuOyAgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA1OiByID0gdjsgIGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQuY215ay5yZ2IgPSBmdW5jdGlvbiAoY215aykge1xuXHRjb25zdCBjID0gY215a1swXSAvIDEwMDtcblx0Y29uc3QgbSA9IGNteWtbMV0gLyAxMDA7XG5cdGNvbnN0IHkgPSBjbXlrWzJdIC8gMTAwO1xuXHRjb25zdCBrID0gY215a1szXSAvIDEwMDtcblxuXHRjb25zdCByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGcgPSAxIC0gTWF0aC5taW4oMSwgbSAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgYiA9IDEgLSBNYXRoLm1pbigxLCB5ICogKDEgLSBrKSArIGspO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5yZ2IgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGNvbnN0IHggPSB4eXpbMF0gLyAxMDA7XG5cdGNvbnN0IHkgPSB4eXpbMV0gLyAxMDA7XG5cdGNvbnN0IHogPSB4eXpbMl0gLyAxMDA7XG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cblx0ciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuXHRnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcblx0YiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAociAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiByICogMTIuOTI7XG5cblx0ZyA9IGcgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoZyAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBnICogMTIuOTI7XG5cblx0YiA9IGIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoYiAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBiICogMTIuOTI7XG5cblx0ciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcblx0ZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcblx0YiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoubGFiID0gZnVuY3Rpb24gKHh5eikge1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQubGFiLnh5eiA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IHg7XG5cdGxldCB5O1xuXHRsZXQgejtcblxuXHR5ID0gKGwgKyAxNikgLyAxMTY7XG5cdHggPSBhIC8gNTAwICsgeTtcblx0eiA9IHkgLSBiIC8gMjAwO1xuXG5cdGNvbnN0IHkyID0geSAqKiAzO1xuXHRjb25zdCB4MiA9IHggKiogMztcblx0Y29uc3QgejIgPSB6ICoqIDM7XG5cdHkgPSB5MiA+IDAuMDA4ODU2ID8geTIgOiAoeSAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR4ID0geDIgPiAwLjAwODg1NiA/IHgyIDogKHggLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eiA9IHoyID4gMC4wMDg4NTYgPyB6MiA6ICh6IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cblx0eCAqPSA5NS4wNDc7XG5cdHkgKj0gMTAwO1xuXHR6ICo9IDEwOC44ODM7XG5cblx0cmV0dXJuIFt4LCB5LCB6XTtcbn07XG5cbmNvbnZlcnQubGFiLmxjaCA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IGg7XG5cblx0Y29uc3QgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuXHRoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG5cblx0cmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmNvbnZlcnQubGNoLmxhYiA9IGZ1bmN0aW9uIChsY2gpIHtcblx0Y29uc3QgbCA9IGxjaFswXTtcblx0Y29uc3QgYyA9IGxjaFsxXTtcblx0Y29uc3QgaCA9IGxjaFsyXTtcblxuXHRjb25zdCBociA9IGggLyAzNjAgKiAyICogTWF0aC5QSTtcblx0Y29uc3QgYSA9IGMgKiBNYXRoLmNvcyhocik7XG5cdGNvbnN0IGIgPSBjICogTWF0aC5zaW4oaHIpO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncywgc2F0dXJhdGlvbiA9IG51bGwpIHtcblx0Y29uc3QgW3IsIGcsIGJdID0gYXJncztcblx0bGV0IHZhbHVlID0gc2F0dXJhdGlvbiA9PT0gbnVsbCA/IGNvbnZlcnQucmdiLmhzdihhcmdzKVsyXSA6IHNhdHVyYXRpb247IC8vIEhzdiAtPiBhbnNpMTYgb3B0aW1pemF0aW9uXG5cblx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gNTApO1xuXG5cdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdHJldHVybiAzMDtcblx0fVxuXG5cdGxldCBhbnNpID0gMzBcblx0XHQrICgoTWF0aC5yb3VuZChiIC8gMjU1KSA8PCAyKVxuXHRcdHwgKE1hdGgucm91bmQoZyAvIDI1NSkgPDwgMSlcblx0XHR8IE1hdGgucm91bmQociAvIDI1NSkpO1xuXG5cdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdGFuc2kgKz0gNjA7XG5cdH1cblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuaHN2LmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIE9wdGltaXphdGlvbiBoZXJlOyB3ZSBhbHJlYWR5IGtub3cgdGhlIHZhbHVlIGFuZCBkb24ndCBuZWVkIHRvIGdldFxuXHQvLyBpdCBjb252ZXJ0ZWQgZm9yIHVzLlxuXHRyZXR1cm4gY29udmVydC5yZ2IuYW5zaTE2KGNvbnZlcnQuaHN2LnJnYihhcmdzKSwgYXJnc1syXSk7XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMjU2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgciA9IGFyZ3NbMF07XG5cdGNvbnN0IGcgPSBhcmdzWzFdO1xuXHRjb25zdCBiID0gYXJnc1syXTtcblxuXHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0aWYgKHIgPT09IGcgJiYgZyA9PT0gYikge1xuXHRcdGlmIChyIDwgOCkge1xuXHRcdFx0cmV0dXJuIDE2O1xuXHRcdH1cblxuXHRcdGlmIChyID4gMjQ4KSB7XG5cdFx0XHRyZXR1cm4gMjMxO1xuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLnJvdW5kKCgociAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0fVxuXG5cdGNvbnN0IGFuc2kgPSAxNlxuXHRcdCsgKDM2ICogTWF0aC5yb3VuZChyIC8gMjU1ICogNSkpXG5cdFx0KyAoNiAqIE1hdGgucm91bmQoZyAvIDI1NSAqIDUpKVxuXHRcdCsgTWF0aC5yb3VuZChiIC8gMjU1ICogNSk7XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0LmFuc2kxNi5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRsZXQgY29sb3IgPSBhcmdzICUgMTA7XG5cblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoY29sb3IgPT09IDAgfHwgY29sb3IgPT09IDcpIHtcblx0XHRpZiAoYXJncyA+IDUwKSB7XG5cdFx0XHRjb2xvciArPSAzLjU7XG5cdFx0fVxuXG5cdFx0Y29sb3IgPSBjb2xvciAvIDEwLjUgKiAyNTU7XG5cblx0XHRyZXR1cm4gW2NvbG9yLCBjb2xvciwgY29sb3JdO1xuXHR9XG5cblx0Y29uc3QgbXVsdCA9ICh+fihhcmdzID4gNTApICsgMSkgKiAwLjU7XG5cdGNvbnN0IHIgPSAoKGNvbG9yICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgZyA9ICgoKGNvbG9yID4+IDEpICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgYiA9ICgoKGNvbG9yID4+IDIpICYgMSkgKiBtdWx0KSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5hbnNpMjU2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGFyZ3MgPj0gMjMyKSB7XG5cdFx0Y29uc3QgYyA9IChhcmdzIC0gMjMyKSAqIDEwICsgODtcblx0XHRyZXR1cm4gW2MsIGMsIGNdO1xuXHR9XG5cblx0YXJncyAtPSAxNjtcblxuXHRsZXQgcmVtO1xuXHRjb25zdCByID0gTWF0aC5mbG9vcihhcmdzIC8gMzYpIC8gNSAqIDI1NTtcblx0Y29uc3QgZyA9IE1hdGguZmxvb3IoKHJlbSA9IGFyZ3MgJSAzNikgLyA2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGIgPSAocmVtICUgNikgLyA1ICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oZXggPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBpbnRlZ2VyID0gKChNYXRoLnJvdW5kKGFyZ3NbMF0pICYgMHhGRikgPDwgMTYpXG5cdFx0KyAoKE1hdGgucm91bmQoYXJnc1sxXSkgJiAweEZGKSA8PCA4KVxuXHRcdCsgKE1hdGgucm91bmQoYXJnc1syXSkgJiAweEZGKTtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5oZXgucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgbWF0Y2ggPSBhcmdzLnRvU3RyaW5nKDE2KS5tYXRjaCgvW2EtZjAtOV17Nn18W2EtZjAtOV17M30vaSk7XG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHR9XG5cblx0bGV0IGNvbG9yU3RyaW5nID0gbWF0Y2hbMF07XG5cblx0aWYgKG1hdGNoWzBdLmxlbmd0aCA9PT0gMykge1xuXHRcdGNvbG9yU3RyaW5nID0gY29sb3JTdHJpbmcuc3BsaXQoJycpLm1hcChjaGFyID0+IHtcblx0XHRcdHJldHVybiBjaGFyICsgY2hhcjtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdGNvbnN0IGludGVnZXIgPSBwYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXHRjb25zdCByID0gKGludGVnZXIgPj4gMTYpICYgMHhGRjtcblx0Y29uc3QgZyA9IChpbnRlZ2VyID4+IDgpICYgMHhGRjtcblx0Y29uc3QgYiA9IGludGVnZXIgJiAweEZGO1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oY2cgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KE1hdGgubWF4KHIsIGcpLCBiKTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4oTWF0aC5taW4ociwgZyksIGIpO1xuXHRjb25zdCBjaHJvbWEgPSAobWF4IC0gbWluKTtcblx0bGV0IGdyYXlzY2FsZTtcblx0bGV0IGh1ZTtcblxuXHRpZiAoY2hyb21hIDwgMSkge1xuXHRcdGdyYXlzY2FsZSA9IG1pbiAvICgxIC0gY2hyb21hKTtcblx0fSBlbHNlIHtcblx0XHRncmF5c2NhbGUgPSAwO1xuXHR9XG5cblx0aWYgKGNocm9tYSA8PSAwKSB7XG5cdFx0aHVlID0gMDtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IHIpIHtcblx0XHRodWUgPSAoKGcgLSBiKSAvIGNocm9tYSkgJSA2O1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gZykge1xuXHRcdGh1ZSA9IDIgKyAoYiAtIHIpIC8gY2hyb21hO1xuXHR9IGVsc2Uge1xuXHRcdGh1ZSA9IDQgKyAociAtIGcpIC8gY2hyb21hO1xuXHR9XG5cblx0aHVlIC89IDY7XG5cdGh1ZSAlPSAxO1xuXG5cdHJldHVybiBbaHVlICogMzYwLCBjaHJvbWEgKiAxMDAsIGdyYXlzY2FsZSAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhzbC5oY2cgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IGwgPCAwLjUgPyAoMi4wICogcyAqIGwpIDogKDIuMCAqIHMgKiAoMS4wIC0gbCkpO1xuXG5cdGxldCBmID0gMDtcblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKGwgLSAwLjUgKiBjKSAvICgxLjAgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHNsWzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LmhjZyA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gcyAqIHY7XG5cdGxldCBmID0gMDtcblxuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHN2WzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLnJnYiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgaCA9IGhjZ1swXSAvIDM2MDtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRpZiAoYyA9PT0gMC4wKSB7XG5cdFx0cmV0dXJuIFtnICogMjU1LCBnICogMjU1LCBnICogMjU1XTtcblx0fVxuXG5cdGNvbnN0IHB1cmUgPSBbMCwgMCwgMF07XG5cdGNvbnN0IGhpID0gKGggJSAxKSAqIDY7XG5cdGNvbnN0IHYgPSBoaSAlIDE7XG5cdGNvbnN0IHcgPSAxIC0gdjtcblx0bGV0IG1nID0gMDtcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXHRzd2l0Y2ggKE1hdGguZmxvb3IoaGkpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSB2OyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cHVyZVswXSA9IHc7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSB3OyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cHVyZVswXSA9IHY7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IHc7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXG5cdG1nID0gKDEuMCAtIGMpICogZztcblxuXHRyZXR1cm4gW1xuXHRcdChjICogcHVyZVswXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMV0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzJdICsgbWcpICogMjU1XG5cdF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc3YgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKHYgPiAwLjApIHtcblx0XHRmID0gYyAvIHY7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgZiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc2wgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgbCA9IGcgKiAoMS4wIC0gYykgKyAwLjUgKiBjO1xuXHRsZXQgcyA9IDA7XG5cblx0aWYgKGwgPiAwLjAgJiYgbCA8IDAuNSkge1xuXHRcdHMgPSBjIC8gKDIgKiBsKTtcblx0fSBlbHNlXG5cdGlmIChsID49IDAuNSAmJiBsIDwgMS4wKSB7XG5cdFx0cyA9IGMgLyAoMiAqICgxIC0gbCkpO1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdHJldHVybiBbaGNnWzBdLCAodiAtIGMpICogMTAwLCAoMSAtIHYpICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHdiLmhjZyA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgdyA9IGh3YlsxXSAvIDEwMDtcblx0Y29uc3QgYiA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgdiA9IDEgLSBiO1xuXHRjb25zdCBjID0gdiAtIHc7XG5cdGxldCBnID0gMDtcblxuXHRpZiAoYyA8IDEpIHtcblx0XHRnID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2h3YlswXSwgYyAqIDEwMCwgZyAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmFwcGxlLnJnYiA9IGZ1bmN0aW9uIChhcHBsZSkge1xuXHRyZXR1cm4gWyhhcHBsZVswXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzFdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMl0gLyA2NTUzNSkgKiAyNTVdO1xufTtcblxuY29udmVydC5yZ2IuYXBwbGUgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHJldHVybiBbKHJnYlswXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsxXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsyXSAvIDI1NSkgKiA2NTUzNV07XG59O1xuXG5jb252ZXJ0LmdyYXkucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFthcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc2wgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gWzAsIDAsIGFyZ3NbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmhzdiA9IGNvbnZlcnQuZ3JheS5oc2w7XG5cbmNvbnZlcnQuZ3JheS5od2IgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDEwMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuY215ayA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMCwgMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkubGFiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFtncmF5WzBdLCAwLCAwXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oZXggPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRjb25zdCB2YWwgPSBNYXRoLnJvdW5kKGdyYXlbMF0gLyAxMDAgKiAyNTUpICYgMHhGRjtcblx0Y29uc3QgaW50ZWdlciA9ICh2YWwgPDwgMTYpICsgKHZhbCA8PCA4KSArIHZhbDtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5yZ2IuZ3JheSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgdmFsID0gKHJnYlswXSArIHJnYlsxXSArIHJnYlsyXSkgLyAzO1xuXHRyZXR1cm4gW3ZhbCAvIDI1NSAqIDEwMF07XG59O1xuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuXG4vKlxuXHRUaGlzIGZ1bmN0aW9uIHJvdXRlcyBhIG1vZGVsIHRvIGFsbCBvdGhlciBtb2RlbHMuXG5cblx0YWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSByb3V0ZWQgaGF2ZSBhIHByb3BlcnR5IGAuY29udmVyc2lvbmAgYXR0YWNoZWRcblx0dG8gdGhlIHJldHVybmVkIHN5bnRoZXRpYyBmdW5jdGlvbi4gVGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheVxuXHRvZiBzdHJpbmdzLCBlYWNoIHdpdGggdGhlIHN0ZXBzIGluIGJldHdlZW4gdGhlICdmcm9tJyBhbmQgJ3RvJ1xuXHRjb2xvciBtb2RlbHMgKGluY2x1c2l2ZSkuXG5cblx0Y29udmVyc2lvbnMgdGhhdCBhcmUgbm90IHBvc3NpYmxlIHNpbXBseSBhcmUgbm90IGluY2x1ZGVkLlxuKi9cblxuZnVuY3Rpb24gYnVpbGRHcmFwaCgpIHtcblx0Y29uc3QgZ3JhcGggPSB7fTtcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL29iamVjdC1rZXlzLXZzLWZvci1pbi13aXRoLWNsb3N1cmUvM1xuXHRjb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9ucyk7XG5cblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGdyYXBoW21vZGVsc1tpXV0gPSB7XG5cdFx0XHQvLyBodHRwOi8vanNwZXJmLmNvbS8xLXZzLWluZmluaXR5XG5cdFx0XHQvLyBtaWNyby1vcHQsIGJ1dCB0aGlzIGlzIHNpbXBsZS5cblx0XHRcdGRpc3RhbmNlOiAtMSxcblx0XHRcdHBhcmVudDogbnVsbFxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JyZWFkdGgtZmlyc3Rfc2VhcmNoXG5mdW5jdGlvbiBkZXJpdmVCRlMoZnJvbU1vZGVsKSB7XG5cdGNvbnN0IGdyYXBoID0gYnVpbGRHcmFwaCgpO1xuXHRjb25zdCBxdWV1ZSA9IFtmcm9tTW9kZWxdOyAvLyBVbnNoaWZ0IC0+IHF1ZXVlIC0+IHBvcFxuXG5cdGdyYXBoW2Zyb21Nb2RlbF0uZGlzdGFuY2UgPSAwO1xuXG5cdHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcXVldWUucG9wKCk7XG5cdFx0Y29uc3QgYWRqYWNlbnRzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnNbY3VycmVudF0pO1xuXG5cdFx0Zm9yIChsZXQgbGVuID0gYWRqYWNlbnRzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y29uc3QgYWRqYWNlbnQgPSBhZGphY2VudHNbaV07XG5cdFx0XHRjb25zdCBub2RlID0gZ3JhcGhbYWRqYWNlbnRdO1xuXG5cdFx0XHRpZiAobm9kZS5kaXN0YW5jZSA9PT0gLTEpIHtcblx0XHRcdFx0bm9kZS5kaXN0YW5jZSA9IGdyYXBoW2N1cnJlbnRdLmRpc3RhbmNlICsgMTtcblx0XHRcdFx0bm9kZS5wYXJlbnQgPSBjdXJyZW50O1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KGFkamFjZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbmZ1bmN0aW9uIGxpbmsoZnJvbSwgdG8pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG5cdFx0cmV0dXJuIHRvKGZyb20oYXJncykpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCkge1xuXHRjb25zdCBwYXRoID0gW2dyYXBoW3RvTW9kZWxdLnBhcmVudCwgdG9Nb2RlbF07XG5cdGxldCBmbiA9IGNvbnZlcnNpb25zW2dyYXBoW3RvTW9kZWxdLnBhcmVudF1bdG9Nb2RlbF07XG5cblx0bGV0IGN1ciA9IGdyYXBoW3RvTW9kZWxdLnBhcmVudDtcblx0d2hpbGUgKGdyYXBoW2N1cl0ucGFyZW50KSB7XG5cdFx0cGF0aC51bnNoaWZ0KGdyYXBoW2N1cl0ucGFyZW50KTtcblx0XHRmbiA9IGxpbmsoY29udmVyc2lvbnNbZ3JhcGhbY3VyXS5wYXJlbnRdW2N1cl0sIGZuKTtcblx0XHRjdXIgPSBncmFwaFtjdXJdLnBhcmVudDtcblx0fVxuXG5cdGZuLmNvbnZlcnNpb24gPSBwYXRoO1xuXHRyZXR1cm4gZm47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGRlcml2ZUJGUyhmcm9tTW9kZWwpO1xuXHRjb25zdCBjb252ZXJzaW9uID0ge307XG5cblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoZ3JhcGgpO1xuXHRmb3IgKGxldCBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Y29uc3QgdG9Nb2RlbCA9IG1vZGVsc1tpXTtcblx0XHRjb25zdCBub2RlID0gZ3JhcGhbdG9Nb2RlbF07XG5cblx0XHRpZiAobm9kZS5wYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdC8vIE5vIHBvc3NpYmxlIGNvbnZlcnNpb24sIG9yIHRoaXMgbm9kZSBpcyB0aGUgc291cmNlIG1vZGVsLlxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udmVyc2lvblt0b01vZGVsXSA9IHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKTtcblx0fVxuXG5cdHJldHVybiBjb252ZXJzaW9uO1xufTtcblxuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuY29uc3Qgcm91dGUgPSByZXF1aXJlKCcuL3JvdXRlJyk7XG5cbmNvbnN0IGNvbnZlcnQgPSB7fTtcblxuY29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBmbihhcmdzKTtcblxuXHRcdC8vIFdlJ3JlIGFzc3VtaW5nIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgaGVyZS5cblx0XHQvLyBzZWUgbm90aWNlIGluIGNvbnZlcnNpb25zLmpzOyBkb24ndCB1c2UgYm94IHR5cGVzXG5cdFx0Ly8gaW4gY29udmVyc2lvbiBmdW5jdGlvbnMuXG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGxldCBsZW4gPSByZXN1bHQubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdFtpXSA9IE1hdGgucm91bmQocmVzdWx0W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxubW9kZWxzLmZvckVhY2goZnJvbU1vZGVsID0+IHtcblx0Y29udmVydFtmcm9tTW9kZWxdID0ge307XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0ubGFiZWxzfSk7XG5cblx0Y29uc3Qgcm91dGVzID0gcm91dGUoZnJvbU1vZGVsKTtcblx0Y29uc3Qgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2godG9Nb2RlbCA9PiB7XG5cdFx0Y29uc3QgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgcmdiID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmdiWzBdfTske3JnYlsxXX07JHtyZ2JbMl19bWA7XG59O1xuXG5jb25zdCBhbnNpMmFuc2kgPSBuID0+IG47XG5jb25zdCByZ2IycmdiID0gKHIsIGcsIGIpID0+IFtyLCBnLCBiXTtcblxuY29uc3Qgc2V0TGF6eVByb3BlcnR5ID0gKG9iamVjdCwgcHJvcGVydHksIGdldCkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoKTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xufTtcblxuLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCdjb2xvci1jb252ZXJ0Jyl9ICovXG5sZXQgY29sb3JDb252ZXJ0O1xuY29uc3QgbWFrZUR5bmFtaWNTdHlsZXMgPSAod3JhcCwgdGFyZ2V0U3BhY2UsIGlkZW50aXR5LCBpc0JhY2tncm91bmQpID0+IHtcblx0aWYgKGNvbG9yQ29udmVydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29sb3JDb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXHR9XG5cblx0Y29uc3Qgb2Zmc2V0ID0gaXNCYWNrZ3JvdW5kID8gMTAgOiAwO1xuXHRjb25zdCBzdHlsZXMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IFtzb3VyY2VTcGFjZSwgc3VpdGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9yQ29udmVydCkpIHtcblx0XHRjb25zdCBuYW1lID0gc291cmNlU3BhY2UgPT09ICdhbnNpMTYnID8gJ2Fuc2knIDogc291cmNlU3BhY2U7XG5cdFx0aWYgKHNvdXJjZVNwYWNlID09PSB0YXJnZXRTcGFjZSkge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChpZGVudGl0eSwgb2Zmc2V0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzdWl0ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoc3VpdGVbdGFyZ2V0U3BhY2VdLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIHRydWUpKTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG4vLyBNYWtlIHRoZSBleHBvcnQgaW1tdXRhYmxlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBhc3NlbWJsZVN0eWxlc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2ID0gcHJvY2Vzcy5hcmd2KSA9PiB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBURU1QTEFURV9SRUdFWCA9IC8oPzpcXFxcKHUoPzpbYS1mXFxkXXs0fXxcXHtbYS1mXFxkXXsxLDZ9XFx9KXx4W2EtZlxcZF17Mn18LikpfCg/Olxceyh+KT8oXFx3Kyg/OlxcKFteKV0qXFwpKT8oPzpcXC5cXHcrKD86XFwoW14pXSpcXCkpPykqKSg/OlsgXFx0XXwoPz1cXHI/XFxuKSkpfChcXH0pfCgoPzoufFtcXHJcXG5cXGZdKSs/KS9naTtcbmNvbnN0IFNUWUxFX1JFR0VYID0gLyg/Ol58XFwuKShcXHcrKSg/OlxcKChbXildKilcXCkpPy9nO1xuY29uc3QgU1RSSU5HX1JFR0VYID0gL14oWydcIl0pKCg/OlxcXFwufCg/IVxcMSlbXlxcXFxdKSopXFwxJC87XG5jb25zdCBFU0NBUEVfUkVHRVggPSAvXFxcXCh1KD86W2EtZlxcZF17NH18e1thLWZcXGRdezEsNn19KXx4W2EtZlxcZF17Mn18Lil8KFteXFxcXF0pL2dpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IE1hcChbXG5cdFsnbicsICdcXG4nXSxcblx0WydyJywgJ1xcciddLFxuXHRbJ3QnLCAnXFx0J10sXG5cdFsnYicsICdcXGInXSxcblx0WydmJywgJ1xcZiddLFxuXHRbJ3YnLCAnXFx2J10sXG5cdFsnMCcsICdcXDAnXSxcblx0WydcXFxcJywgJ1xcXFwnXSxcblx0WydlJywgJ1xcdTAwMUInXSxcblx0WydhJywgJ1xcdTAwMDcnXVxuXSk7XG5cbmZ1bmN0aW9uIHVuZXNjYXBlKGMpIHtcblx0Y29uc3QgdSA9IGNbMF0gPT09ICd1Jztcblx0Y29uc3QgYnJhY2tldCA9IGNbMV0gPT09ICd7JztcblxuXHRpZiAoKHUgJiYgIWJyYWNrZXQgJiYgYy5sZW5ndGggPT09IDUpIHx8IChjWzBdID09PSAneCcgJiYgYy5sZW5ndGggPT09IDMpKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zbGljZSgxKSwgMTYpKTtcblx0fVxuXG5cdGlmICh1ICYmIGJyYWNrZXQpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoYy5zbGljZSgyLCAtMSksIDE2KSk7XG5cdH1cblxuXHRyZXR1cm4gRVNDQVBFUy5nZXQoYykgfHwgYztcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMobmFtZSwgYXJndW1lbnRzXykge1xuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IGFyZ3VtZW50c18udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovZyk7XG5cdGxldCBtYXRjaGVzO1xuXG5cdGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG5cdFx0Y29uc3QgbnVtYmVyID0gTnVtYmVyKGNodW5rKTtcblx0XHRpZiAoIU51bWJlci5pc05hTihudW1iZXIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobnVtYmVyKTtcblx0XHR9IGVsc2UgaWYgKChtYXRjaGVzID0gY2h1bmsubWF0Y2goU1RSSU5HX1JFR0VYKSkpIHtcblx0XHRcdHJlc3VsdHMucHVzaChtYXRjaGVzWzJdLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCAobSwgZXNjYXBlLCBjaGFyYWN0ZXIpID0+IGVzY2FwZSA/IHVuZXNjYXBlKGVzY2FwZSkgOiBjaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIENoYWxrIHRlbXBsYXRlIHN0eWxlIGFyZ3VtZW50OiAke2NodW5rfSAoaW4gc3R5bGUgJyR7bmFtZX0nKWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0eWxlKHN0eWxlKSB7XG5cdFNUWUxFX1JFR0VYLmxhc3RJbmRleCA9IDA7XG5cblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRsZXQgbWF0Y2hlcztcblxuXHR3aGlsZSAoKG1hdGNoZXMgPSBTVFlMRV9SRUdFWC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRjb25zdCBuYW1lID0gbWF0Y2hlc1sxXTtcblxuXHRcdGlmIChtYXRjaGVzWzJdKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gcGFyc2VBcmd1bWVudHMobmFtZSwgbWF0Y2hlc1syXSk7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdLmNvbmNhdChhcmdzKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpIHtcblx0Y29uc3QgZW5hYmxlZCA9IHt9O1xuXG5cdGZvciAoY29uc3QgbGF5ZXIgb2Ygc3R5bGVzKSB7XG5cdFx0Zm9yIChjb25zdCBzdHlsZSBvZiBsYXllci5zdHlsZXMpIHtcblx0XHRcdGVuYWJsZWRbc3R5bGVbMF1dID0gbGF5ZXIuaW52ZXJzZSA/IG51bGwgOiBzdHlsZS5zbGljZSgxKTtcblx0XHR9XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IGNoYWxrO1xuXHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlc10gb2YgT2JqZWN0LmVudHJpZXMoZW5hYmxlZCkpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3R5bGVzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEoc3R5bGVOYW1lIGluIGN1cnJlbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gQ2hhbGsgc3R5bGU6ICR7c3R5bGVOYW1lfWApO1xuXHRcdH1cblxuXHRcdGN1cnJlbnQgPSBzdHlsZXMubGVuZ3RoID4gMCA/IGN1cnJlbnRbc3R5bGVOYW1lXSguLi5zdHlsZXMpIDogY3VycmVudFtzdHlsZU5hbWVdO1xuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKGNoYWxrLCB0ZW1wb3JhcnkpID0+IHtcblx0Y29uc3Qgc3R5bGVzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IFtdO1xuXHRsZXQgY2h1bmsgPSBbXTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuXHR0ZW1wb3JhcnkucmVwbGFjZShURU1QTEFURV9SRUdFWCwgKG0sIGVzY2FwZUNoYXJhY3RlciwgaW52ZXJzZSwgc3R5bGUsIGNsb3NlLCBjaGFyYWN0ZXIpID0+IHtcblx0XHRpZiAoZXNjYXBlQ2hhcmFjdGVyKSB7XG5cdFx0XHRjaHVuay5wdXNoKHVuZXNjYXBlKGVzY2FwZUNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSBpZiAoc3R5bGUpIHtcblx0XHRcdGNvbnN0IHN0cmluZyA9IGNodW5rLmpvaW4oJycpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdGNodW5rcy5wdXNoKHN0eWxlcy5sZW5ndGggPT09IDAgPyBzdHJpbmcgOiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKHN0cmluZykpO1xuXHRcdFx0c3R5bGVzLnB1c2goe2ludmVyc2UsIHN0eWxlczogcGFyc2VTdHlsZShzdHlsZSl9KTtcblx0XHR9IGVsc2UgaWYgKGNsb3NlKSB7XG5cdFx0XHRpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGV4dHJhbmVvdXMgfSBpbiBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNodW5rcy5wdXNoKGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoY2h1bmsuam9pbignJykpKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRzdHlsZXMucG9wKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNodW5rLnB1c2goY2hhcmFjdGVyKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNodW5rcy5wdXNoKGNodW5rLmpvaW4oJycpKTtcblxuXHRpZiAoc3R5bGVzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBlcnJNZXNzYWdlID0gYENoYWxrIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWlzc2luZyAke3N0eWxlcy5sZW5ndGh9IGNsb3NpbmcgYnJhY2tldCR7c3R5bGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSAoXFxgfVxcYClgO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJNZXNzYWdlKTtcblx0fVxuXG5cdHJldHVybiBjaHVua3Muam9pbignJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcbmNvbnN0IHtcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4XG59ID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vLyBgc3VwcG9ydHNDb2xvci5sZXZlbGAgXHUyMTkyIGBhbnNpU3R5bGVzLmNvbG9yW25hbWVdYCBtYXBwaW5nXG5jb25zdCBsZXZlbE1hcHBpbmcgPSBbXG5cdCdhbnNpJyxcblx0J2Fuc2knLFxuXHQnYW5zaTI1NicsXG5cdCdhbnNpMTZtJ1xuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuY2xhc3MgQ2hhbGtDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG5cdFx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcblx0fVxufVxuXG5jb25zdCBjaGFsa0ZhY3RvcnkgPSBvcHRpb25zID0+IHtcblx0Y29uc3QgY2hhbGsgPSB7fTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRjaGFsay50ZW1wbGF0ZSA9ICguLi5hcmd1bWVudHNfKSA9PiBjaGFsa1RhZyhjaGFsay50ZW1wbGF0ZSwgLi4uYXJndW1lbnRzXyk7XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLCBDaGFsay5wcm90b3R5cGUpO1xuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGsudGVtcGxhdGUsIGNoYWxrKTtcblxuXHRjaGFsay50ZW1wbGF0ZS5jb25zdHJ1Y3RvciA9ICgpID0+IHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BjaGFsay5jb25zdHJ1Y3RvcigpYCBpcyBkZXByZWNhdGVkLiBVc2UgYG5ldyBjaGFsay5JbnN0YW5jZSgpYCBpbnN0ZWFkLicpO1xuXHR9O1xuXG5cdGNoYWxrLnRlbXBsYXRlLkluc3RhbmNlID0gQ2hhbGtDbGFzcztcblxuXHRyZXR1cm4gY2hhbGsudGVtcGxhdGU7XG59O1xuXG5mdW5jdGlvbiBDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpcy5fc3R5bGVyKSwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3R5bGVOYW1lLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRcdHJldHVybiBidWlsZGVyO1xuXHRcdH1cblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzLl9zdHlsZXIsIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9XG59O1xuXG5jb25zdCB1c2VkTW9kZWxzID0gWydyZ2InLCAnaGV4JywgJ2tleXdvcmQnLCAnaHNsJywgJ2hzdicsICdod2InLCAnYW5zaScsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihhbnNpU3R5bGVzLmNvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5iZ0NvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5iZ0NvbG9yLmNsb3NlLCB0aGlzLl9zdHlsZXIpO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dlbmVyYXRvci5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpcy5fZ2VuZXJhdG9yLmxldmVsID0gbGV2ZWw7XG5cdFx0fVxuXHR9XG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnRcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0aWYgKGlzQXJyYXkoYXJndW1lbnRzX1swXSkgJiYgaXNBcnJheShhcmd1bWVudHNfWzBdLnJhdykpIHtcblx0XHRcdC8vIENhbGxlZCBhcyBhIHRlbXBsYXRlIGxpdGVyYWwsIGZvciBleGFtcGxlOiBjaGFsay5yZWRgMiArIDMgPSB7Ym9sZCAkezIrM319YFxuXHRcdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgY2hhbGtUYWcoYnVpbGRlciwgLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0XHRyZXR1cm4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cdH07XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyLl9nZW5lcmF0b3IgPSBzZWxmO1xuXHRidWlsZGVyLl9zdHlsZXIgPSBfc3R5bGVyO1xuXHRidWlsZGVyLl9pc0VtcHR5ID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZi5faXNFbXB0eSA/ICcnIDogc3RyaW5nO1xuXHR9XG5cblx0bGV0IHN0eWxlciA9IHNlbGYuX3N0eWxlcjtcblxuXHRpZiAoc3R5bGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qge29wZW5BbGwsIGNsb3NlQWxsfSA9IHN0eWxlcjtcblx0aWYgKHN0cmluZy5pbmRleE9mKCdcXHUwMDFCJykgIT09IC0xKSB7XG5cdFx0d2hpbGUgKHN0eWxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBSZXBsYWNlIGFueSBpbnN0YW5jZXMgYWxyZWFkeSBwcmVzZW50IHdpdGggYSByZS1vcGVuaW5nIGNvZGVcblx0XHRcdC8vIG90aGVyd2lzZSBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdW50aWwgc2FpZCBjbG9zaW5nIGNvZGVcblx0XHRcdC8vIHdpbGwgYmUgY29sb3JlZCwgYW5kIHRoZSByZXN0IHdpbGwgc2ltcGx5IGJlICdwbGFpbicuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmdSZXBsYWNlQWxsKHN0cmluZywgc3R5bGVyLmNsb3NlLCBzdHlsZXIub3Blbik7XG5cblx0XHRcdHN0eWxlciA9IHN0eWxlci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV2UgY2FuIG1vdmUgYm90aCBuZXh0IGFjdGlvbnMgb3V0IG9mIGxvb3AsIGJlY2F1c2UgcmVtYWluaW5nIGFjdGlvbnMgaW4gbG9vcCB3b24ndCBoYXZlXG5cdC8vIGFueS92aXNpYmxlIGVmZmVjdCBvbiBwYXJ0cyB3ZSBhZGQgaGVyZS4gQ2xvc2UgdGhlIHN0eWxpbmcgYmVmb3JlIGEgbGluZWJyZWFrIGFuZCByZW9wZW5cblx0Ly8gYWZ0ZXIgbmV4dCBsaW5lIHRvIGZpeCBhIGJsZWVkIGlzc3VlIG9uIG1hY09TOiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGsvcHVsbC85MlxuXHRjb25zdCBsZkluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicpO1xuXHRpZiAobGZJbmRleCAhPT0gLTEpIHtcblx0XHRzdHJpbmcgPSBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBjbG9zZUFsbCwgb3BlbkFsbCwgbGZJbmRleCk7XG5cdH1cblxuXHRyZXR1cm4gb3BlbkFsbCArIHN0cmluZyArIGNsb3NlQWxsO1xufTtcblxubGV0IHRlbXBsYXRlO1xuY29uc3QgY2hhbGtUYWcgPSAoY2hhbGssIC4uLnN0cmluZ3MpID0+IHtcblx0Y29uc3QgW2ZpcnN0U3RyaW5nXSA9IHN0cmluZ3M7XG5cblx0aWYgKCFpc0FycmF5KGZpcnN0U3RyaW5nKSB8fCAhaXNBcnJheShmaXJzdFN0cmluZy5yYXcpKSB7XG5cdFx0Ly8gSWYgY2hhbGsoKSB3YXMgY2FsbGVkIGJ5IGl0c2VsZiBvciB3aXRoIGEgc3RyaW5nLFxuXHRcdC8vIHJldHVybiB0aGUgc3RyaW5nIGl0c2VsZiBhcyBhIHN0cmluZy5cblx0XHRyZXR1cm4gc3RyaW5ncy5qb2luKCcgJyk7XG5cdH1cblxuXHRjb25zdCBhcmd1bWVudHNfID0gc3RyaW5ncy5zbGljZSgxKTtcblx0Y29uc3QgcGFydHMgPSBbZmlyc3RTdHJpbmcucmF3WzBdXTtcblxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0cGFydHMucHVzaChcblx0XHRcdFN0cmluZyhhcmd1bWVudHNfW2kgLSAxXSkucmVwbGFjZSgvW3t9XFxcXF0vZywgJ1xcXFwkJicpLFxuXHRcdFx0U3RyaW5nKGZpcnN0U3RyaW5nLnJhd1tpXSlcblx0XHQpO1xuXHR9XG5cblx0aWYgKHRlbXBsYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHR0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGVzJyk7XG5cdH1cblxuXHRyZXR1cm4gdGVtcGxhdGUoY2hhbGssIHBhcnRzLmpvaW4oJycpKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBDaGFsaygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbmNoYWxrLnN1cHBvcnRzQ29sb3IgPSBzdGRvdXRDb2xvcjtcbmNoYWxrLnN0ZGVyciA9IENoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdGRlcnIuc3VwcG9ydHNDb2xvciA9IHN0ZGVyckNvbG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNoYWxrO1xuIiwgIi8vIHNvdXJjZSBvZiBpbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9yZXF1aXJlLWZvb2wtd2VicGFja1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IGV2YWwoXG4gICAgJ3R5cGVvZiByZXF1aXJlICE9PSBcXCd1bmRlZmluZWRcXCcgJyArXG4gICAgJz8gcmVxdWlyZSAnICtcbiAgICAnOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcihcXCdNb2R1bGUgXCIgKyBtb2R1bGUgKyBcIiBub3QgZm91bmQuXFwnKSB9J1xuKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRm9vbFdlYnBhY2s7XG4iLCAidmFyIHJlcXVpcmVGb29sV2VicGFjayA9IHJlcXVpcmUoJy4vcmVxdWlyZUZvb2xXZWJwYWNrJyk7XG5cbi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZsZXhkaW5lc2gvYnJvd3Nlci1vci1ub2RlXG52YXIgaXNOb2RlID0gZnVuY3Rpb24gKG5vZGVQcm9jZXNzKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG5vZGVQcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5vZGVQcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcbiAgKTtcbn1cbm1vZHVsZS5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZVxuXG4vLyBkZXRlcm1pbmVzIHRoZSBKYXZhU2NyaXB0IHBsYXRmb3JtOiBicm93c2VyIG9yIG5vZGVcbm1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIGlzTm9kZShwcm9jZXNzKVxuICA/ICdub2RlJ1xuICA6ICdicm93c2VyJztcblxuLy8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb2RlIGlzIHJ1bm5pbmcgaW4gbWFpbiB0aHJlYWQgb3Igbm90XG4vLyBub3RlIHRoYXQgaW4gbm9kZS5qcyB3ZSBoYXZlIHRvIGNoZWNrIGJvdGggd29ya2VyX3RocmVhZCBhbmQgY2hpbGRfcHJvY2Vzc1xudmFyIHdvcmtlcl90aHJlYWRzID0gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xubW9kdWxlLmV4cG9ydHMuaXNNYWluVGhyZWFkID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdub2RlJ1xuICA/ICgoIXdvcmtlcl90aHJlYWRzIHx8IHdvcmtlcl90aHJlYWRzLmlzTWFpblRocmVhZCkgJiYgIXByb2Nlc3MuY29ubmVjdGVkKVxuICA6IHR5cGVvZiBXaW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY3B1cyBhdmFpbGFibGVcbm1vZHVsZS5leHBvcnRzLmNwdXMgPSBtb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInXG4gID8gc2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeVxuICA6IHJlcXVpcmVGb29sV2VicGFjaygnb3MnKS5jcHVzKCkubGVuZ3RoO1xuXG5mdW5jdGlvbiB0cnlSZXF1aXJlRm9vbFdlYnBhY2sgKG1vZHVsZSkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2sobW9kdWxlKTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFByb21pc2VcbiAqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9SdWJhWGEvODUwMTM1OSBmcm9tIFJ1YmFYYSA8dHJhc2hAcnViYXhhLm9yZz5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyICAgQ2FsbGVkIGFzIGhhbmRsZXIocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pXG4gKiBAcGFyYW0ge1Byb21pc2V9IFtwYXJlbnRdICAgUGFyZW50IHByb21pc2UgZm9yIHByb3BhZ2F0aW9uIG9mIGNhbmNlbCBhbmQgdGltZW91dFxuICovXG5mdW5jdGlvbiBQcm9taXNlKGhhbmRsZXIsIHBhcmVudCkge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHBhcmFtZXRlciBoYW5kbGVyKHJlc29sdmUsIHJlamVjdCkgbWlzc2luZycpO1xuICB9XG5cbiAgdmFyIF9vblN1Y2Nlc3MgPSBbXTtcbiAgdmFyIF9vbkZhaWwgPSBbXTtcblxuICAvLyBzdGF0dXNcbiAgdGhpcy5yZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLnJlamVjdGVkID0gZmFsc2U7XG4gIHRoaXMucGVuZGluZyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgb25TdWNjZXNzIGFuZCBvbkZhaWwgY2FsbGJhY2tzOiBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gICAqIE9uY2UgdGhlIHByb21pc2UgaXMgcmVzb2x2ZSwgdGhlIGZ1bmN0aW9uIF9wcm9taXNlIGlzIHJlcGxhY2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2Vzc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIF9vblN1Y2Nlc3MucHVzaChvblN1Y2Nlc3MpO1xuICAgIF9vbkZhaWwucHVzaChvbkZhaWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gb25TdWNjZXNzIGNhbGxiYWNrIGFuZCBvcHRpb25hbGx5IGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbF1cbiAgICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAgICovXG4gIHRoaXMudGhlbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcyA9IG9uU3VjY2VzcyA/IF90aGVuKG9uU3VjY2VzcywgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlc29sdmU7XG4gICAgICB2YXIgZiA9IG9uRmFpbCAgICA/IF90aGVuKG9uRmFpbCwgICAgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlamVjdDtcblxuICAgICAgX3Byb2Nlc3MocywgZik7XG4gICAgfSwgbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Kn0gcmVzdWx0XG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVzb2x2ZSA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSB0cnVlO1xuICAgIG1lLnJlamVjdGVkID0gZmFsc2U7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uU3VjY2Vzcy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4ocmVzdWx0KTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvblN1Y2Nlc3MocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgX3Jlc29sdmUgPSBfcmVqZWN0ID0gZnVuY3Rpb24gKCkgeyB9O1xuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIHByb21pc2VcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSBmYWxzZTtcbiAgICBtZS5yZWplY3RlZCA9IHRydWU7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uRmFpbC5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4oZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICAgIG9uRmFpbChlcnJvcik7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW5jZWwgdGUgcHJvbWlzZS4gVGhpcyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoIGEgQ2FuY2VsbGF0aW9uRXJyb3JcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5jYW5jZWwoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBfcmVqZWN0KG5ldyBDYW5jZWxsYXRpb25FcnJvcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhIHRpbWVvdXQgZm9yIHRoZSBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyBub3QgcmVzb2x2ZWQgd2l0aGluXG4gICAqIHRoZSB0aW1lLCB0aGUgcHJvbWlzZSB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgYSBUaW1lb3V0RXJyb3IgaXMgdGhyb3duLlxuICAgKiBJZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbiB0aW1lLCB0aGUgdGltZW91dCBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgICAgIERlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gc2VsZlxuICAgKi9cbiAgdGhpcy50aW1lb3V0ID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnRpbWVvdXQoZGVsYXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ1Byb21pc2UgdGltZWQgb3V0IGFmdGVyICcgKyBkZWxheSArICcgbXMnKSk7XG4gICAgICB9LCBkZWxheSk7XG5cbiAgICAgIG1lLmFsd2F5cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLy8gYXR0YWNoIGhhbmRsZXIgcGFzc2luZyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9uc1xuICBoYW5kbGVyKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBfcmVzb2x2ZShyZXN1bHQpO1xuICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBfcmVqZWN0KGVycm9yKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBnaXZlbiBjYWxsYmFjaywgdGhlbiBjYWxsIHJlc29sdmUvcmVqZWN0IGJhc2VkIG9uIHRoZSByZXR1cm5lZCByZXN1bHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF90aGVuKGNhbGxiYWNrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlcyA9IGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcmVzWydjYXRjaCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG1ldGhvZCByZXR1cm5lZCBhIHByb21pc2VcbiAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gb25GYWlsIGNhbGxiYWNrIHRvIHRoZSBQcm9taXNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24gKG9uRmFpbCkge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uRmFpbCk7XG59O1xuXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgY2FsbGJhY2spXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgRXJyb3IsIGNhbGxiYWNrKVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2sgd2hlbiB0aGUgcHJvbWlzZSBlaXRoZXIgcmVzb2x2ZXMgb3IgcmVqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZS5hbHdheXMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIHRoaXMudGhlbihmbiwgZm4pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIHByb3ZpZGVkIHByb21pc2VzIGFyZSByZXNvbHZlZCxcbiAqIGFuZCBmYWlscyB3aGVuIGFueSBvZiB0aGUgcHJvbWlzZXMgcmVzb2x2ZXMuXG4gKiBAcGFyYW0ge1Byb21pc2VbXX0gcHJvbWlzZXNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UuYWxsID0gZnVuY3Rpb24gKHByb21pc2VzKXtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVtYWluaW5nID0gcHJvbWlzZXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gW107XG5cbiAgICBpZiAocmVtYWluaW5nKSB7XG4gICAgICBwcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7XG4gICAgICAgIHAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdDtcbiAgICAgICAgICByZW1haW5pbmctLTtcbiAgICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZW1haW5pbmcgPSAwO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHJlc29sdmVyXG4gKiBAcmV0dXJucyB7e3Byb21pc2U6IFByb21pc2UsIHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gcmVzb2x2ZXJcbiAqL1xuUHJvbWlzZS5kZWZlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlc29sdmVyID0ge307XG5cbiAgcmVzb2x2ZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXNvbHZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICByZXNvbHZlci5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHJldHVybiByZXNvbHZlcjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FuY2VsbGF0aW9uIGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBDYW5jZWxsYXRpb25FcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Byb21pc2UgY2FuY2VsbGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdDYW5jZWxsYXRpb25FcnJvcic7XG5cblByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3IgPSBDYW5jZWxsYXRpb25FcnJvcjtcblxuXG4vKipcbiAqIENyZWF0ZSBhIHRpbWVvdXQgZXJyb3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWVzc2FnZV1cbiAqIEBleHRlbmRzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIFRpbWVvdXRFcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cblByb21pc2UuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICIvKipcbiAqIGVtYmVkZGVkV29ya2VyLmpzIGNvbnRhaW5zIGFuIGVtYmVkZGVkIHZlcnNpb24gb2Ygd29ya2VyLmpzLlxuICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLFxuICogY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IFwiIWZ1bmN0aW9uKCl7dmFyIF9fd2VicGFja19leHBvcnRzX189e307IWZ1bmN0aW9uKCl7dmFyIGV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO2Z1bmN0aW9uIF90eXBlb2Yocil7cmV0dXJuKF90eXBlb2Y9XFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmXFxcInN5bWJvbFxcXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/XFxcInN5bWJvbFxcXCI6dHlwZW9mIHJ9KShyKX12YXIgcmVxdWlyZUZvb2xXZWJwYWNrPWV2YWwoXFxcInR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUgOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcignTW9kdWxlIFxcXFxcXFwiICsgbW9kdWxlICsgXFxcXFxcXCIgbm90IGZvdW5kLicpIH1cXFwiKSxURVJNSU5BVEVfTUVUSE9EX0lEPVxcXCJfX3dvcmtlcnBvb2wtdGVybWluYXRlX19cXFwiLHdvcmtlcj17ZXhpdDpmdW5jdGlvbigpe319LFdvcmtlclRocmVhZHMscGFyZW50UG9ydDtpZihcXFwidW5kZWZpbmVkXFxcIiE9dHlwZW9mIHNlbGYmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIpd29ya2VyLm9uPWZ1bmN0aW9uKHIsZSl7YWRkRXZlbnRMaXN0ZW5lcihyLGZ1bmN0aW9uKHIpe2Uoci5kYXRhKX0pfSx3b3JrZXIuc2VuZD1mdW5jdGlvbihyKXtwb3N0TWVzc2FnZShyKX07ZWxzZXtpZihcXFwidW5kZWZpbmVkXFxcIj09dHlwZW9mIHByb2Nlc3MpdGhyb3cgbmV3IEVycm9yKFxcXCJTY3JpcHQgbXVzdCBiZSBleGVjdXRlZCBhcyBhIHdvcmtlclxcXCIpO3RyeXtXb3JrZXJUaHJlYWRzPXJlcXVpcmVGb29sV2VicGFjayhcXFwid29ya2VyX3RocmVhZHNcXFwiKX1jYXRjaChlcnJvcil7aWYoXFxcIm9iamVjdFxcXCIhPT1fdHlwZW9mKGVycm9yKXx8bnVsbD09PWVycm9yfHxcXFwiTU9EVUxFX05PVF9GT1VORFxcXCIhPT1lcnJvci5jb2RlKXRocm93IGVycm9yfVdvcmtlclRocmVhZHMmJm51bGwhPT1Xb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ/KHBhcmVudFBvcnQ9V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0LHdvcmtlci5zZW5kPXBhcmVudFBvcnQucG9zdE1lc3NhZ2UuYmluZChwYXJlbnRQb3J0KSx3b3JrZXIub249cGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpKTood29ya2VyLm9uPXByb2Nlc3Mub24uYmluZChwcm9jZXNzKSx3b3JrZXIuc2VuZD1wcm9jZXNzLnNlbmQuYmluZChwcm9jZXNzKSx3b3JrZXIub24oXFxcImRpc2Nvbm5lY3RcXFwiLGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KDEpfSksd29ya2VyLmV4aXQ9cHJvY2Vzcy5leGl0LmJpbmQocHJvY2VzcykpfWZ1bmN0aW9uIGNvbnZlcnRFcnJvcihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKGZ1bmN0aW9uKHIsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse3ZhbHVlOm9bZV0sZW51bWVyYWJsZTohMH0pfSx7fSl9ZnVuY3Rpb24gaXNQcm9taXNlKHIpe3JldHVybiByJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci50aGVuJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci5jYXRjaH13b3JrZXIubWV0aG9kcz17fSx3b3JrZXIubWV0aG9kcy5ydW49ZnVuY3Rpb24ocixlKXtyPW5ldyBGdW5jdGlvbihcXFwicmV0dXJuIChcXFwiK3IrXFxcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcXFwiKTtyZXR1cm4gci5hcHBseShyLGUpfSx3b3JrZXIubWV0aG9kcy5tZXRob2RzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKX07dmFyIGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbDt3b3JrZXIub24oXFxcIm1lc3NhZ2VcXFwiLGZ1bmN0aW9uKGUpe2lmKGU9PT1URVJNSU5BVEVfTUVUSE9EX0lEKXJldHVybiB3b3JrZXIuZXhpdCgwKTt0cnl7dmFyIHI9d29ya2VyLm1ldGhvZHNbZS5tZXRob2RdO2lmKCFyKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXFxcIicrZS5tZXRob2QrJ1xcXCInKTtjdXJyZW50UmVxdWVzdElkPWUuaWQ7dmFyIG89ci5hcHBseShyLGUucGFyYW1zKTtpc1Byb21pc2Uobyk/by50aGVuKGZ1bmN0aW9uKHIpe3dvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpyLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KS5jYXRjaChmdW5jdGlvbihyKXt3b3JrZXIuc2VuZCh7aWQ6ZS5pZCxyZXN1bHQ6bnVsbCxlcnJvcjpjb252ZXJ0RXJyb3Iocil9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KTood29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om8sZXJyb3I6bnVsbH0pLGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbCl9Y2F0Y2gocil7d29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKHIpfSl9fSksd29ya2VyLnJlZ2lzdGVyPWZ1bmN0aW9uKHIpe2lmKHIpZm9yKHZhciBlIGluIHIpci5oYXNPd25Qcm9wZXJ0eShlKSYmKHdvcmtlci5tZXRob2RzW2VdPXJbZV0pO3dvcmtlci5zZW5kKFxcXCJyZWFkeVxcXCIpfSx3b3JrZXIuZW1pdD1mdW5jdGlvbihyKXtjdXJyZW50UmVxdWVzdElkJiZ3b3JrZXIuc2VuZCh7aWQ6Y3VycmVudFJlcXVlc3RJZCxpc0V2ZW50OiEwLHBheWxvYWQ6cn0pfSxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fPXdvcmtlci5yZWdpc3Rlcix3b3JrZXIuZW1pdH0oKX0oKTtcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gcmVxdWlyZSgnLi9yZXF1aXJlRm9vbFdlYnBhY2snKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIGEgY2hpbGQgcHJvY2VzcyB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG4vKipcbiAqIElmIHNlbmRpbmcgYFRFUk1JTkFURV9NRVRIT0RfSURgIGRvZXMgbm90IGNhdXNlIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGV4aXQgaW4gdGhpcyBtYW55IG1pbGxpc2Vjb25kcyxcbiAqIGZvcmNlLWtpbGwgdGhlIGNoaWxkIHByb2Nlc3MuXG4gKi9cbnZhciBDSElMRF9QUk9DRVNTX0VYSVRfVElNRU9VVCA9IDEwMDA7XG5cbmZ1bmN0aW9uIGVuc3VyZVdvcmtlclRocmVhZHMoKSB7XG4gIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKVxuICBpZiAoIVdvcmtlclRocmVhZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IHdvcmtlclR5cGUgPSBcXCd0aHJlYWRcXCcgaXMgbm90IHN1cHBvcnRlZCwgTm9kZSA+PSAxMS43LjAgcmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIFdvcmtlclRocmVhZHM7XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgV29ya2VyIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlclxuZnVuY3Rpb24gZW5zdXJlV2ViV29ya2VyKCkge1xuICAvLyBXb3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBQaGFudG9tSlMgKE9yIFF0V2Via2l0KTogaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTQ1MzRcbiAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBXb3JrZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBXb3JrZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyUG9vbDogV2ViIFdvcmtlcnMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKCkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzIGF2YWlsYWJsZSAob2xkIHZlcnNpb24gb2Ygbm9kZS5qcylcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuLy8gZ2V0IHRoZSBkZWZhdWx0IHdvcmtlciBzY3JpcHRcbmZ1bmN0aW9uIGdldERlZmF1bHRXb3JrZXIoKSB7XG4gIGlmIChlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgLy8gdGVzdCB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGFsbCBmZWF0dXJlcyB0aGF0IHdlIG5lZWRcbiAgICBpZiAodHlwZW9mIEJsb2IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jsb2Igbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5VUkwgfHwgdHlwZW9mIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5jcmVhdGVPYmplY3RVUkwgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cblxuICAgIC8vIHVzZSBlbWJlZGRlZCB3b3JrZXIuanNcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXF1aXJlKCcuL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlcicpXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XG4gICAgcmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIHVzZSBleHRlcm5hbCB3b3JrZXIuanMgaW4gY3VycmVudCBkaXJlY3RvcnlcbiAgICByZXR1cm4gX19kaXJuYW1lICsgJy93b3JrZXIuanMnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwV29ya2VyKHNjcmlwdCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAnd2ViJykgeyAvLyBicm93c2VyIG9ubHlcbiAgICBlbnN1cmVXZWJXb3JrZXIoKTtcbiAgICByZXR1cm4gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7IC8vIG5vZGUuanMgb25seVxuICAgIFdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcywgb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICdwcm9jZXNzJyB8fCAhb3B0aW9ucy53b3JrZXJUeXBlKSB7IC8vIG5vZGUuanMgb25seVxuICAgIHJldHVybiBzZXR1cFByb2Nlc3NXb3JrZXIoc2NyaXB0LCByZXNvbHZlRm9ya09wdGlvbnMob3B0aW9ucyksIHJlcXVpcmVGb29sV2VicGFjaygnY2hpbGRfcHJvY2VzcycpKTtcbiAgfSBlbHNlIHsgLy8gb3B0aW9ucy53b3JrZXJUeXBlID09PSAnYXV0bycgb3IgdW5kZWZpbmVkXG4gICAgaWYgKGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnYnJvd3NlcicpIHtcbiAgICAgIGVuc3VyZVdlYldvcmtlcigpO1xuICAgICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIFdvcmtlcik7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ25vZGUnXG4gICAgICB2YXIgV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgICBpZiAoV29ya2VyVGhyZWFkcykge1xuICAgICAgICByZXR1cm4gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXIoc2NyaXB0LCBXb3JrZXJUaHJlYWRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZXR1cFByb2Nlc3NXb3JrZXIoc2NyaXB0LCByZXNvbHZlRm9ya09wdGlvbnMob3B0aW9ucyksIHJlcXVpcmVGb29sV2VicGFjaygnY2hpbGRfcHJvY2VzcycpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKSB7XG4gIC8vIGNyZWF0ZSB0aGUgd2ViIHdvcmtlclxuICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihzY3JpcHQpO1xuXG4gIHdvcmtlci5pc0Jyb3dzZXJXb3JrZXIgPSB0cnVlO1xuICAvLyBhZGQgbm9kZS5qcyBBUEkgdG8gdGhlIHdlYiB3b3JrZXJcbiAgd29ya2VyLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGNhbGxiYWNrKG1lc3NhZ2UuZGF0YSk7XG4gICAgfSk7XG4gIH07XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICB9O1xuICByZXR1cm4gd29ya2VyO1xufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMsIHdvcmtlclRocmVhZE9wdGlvbnMpIHtcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJUaHJlYWRzLldvcmtlcihzY3JpcHQsIHtcbiAgICBzdGRvdXQ6IGZhbHNlLCAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNURE9VVCB0byBwcm9jZXNzLlNURE9VVFxuICAgIHN0ZGVycjogZmFsc2UsICAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNUREVSUiB0byBwcm9jZXNzLlNUREVSUlxuICAgIC4uLndvcmtlclRocmVhZE9wdGlvbnNcbiAgfSk7XG4gIHdvcmtlci5pc1dvcmtlclRocmVhZCA9IHRydWU7XG4gIC8vIG1ha2UgdGhlIHdvcmtlciBtaW1pYyBhIGNoaWxkX3Byb2Nlc3NcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcblxuICB3b3JrZXIua2lsbCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgd29ya2VyLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZSgpO1xuICB9O1xuXG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIG9wdGlvbnMsIGNoaWxkX3Byb2Nlc3MpIHtcbiAgLy8gbm8gV29ya2VyVGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICB2YXIgd29ya2VyID0gY2hpbGRfcHJvY2Vzcy5mb3JrKFxuICAgIHNjcmlwdCxcbiAgICBvcHRpb25zLmZvcmtBcmdzLFxuICAgIG9wdGlvbnMuZm9ya09wdHNcbiAgKTtcblxuICB3b3JrZXIuaXNDaGlsZFByb2Nlc3MgPSB0cnVlO1xuICByZXR1cm4gd29ya2VyO1xufVxuXG4vLyBhZGQgZGVidWcgZmxhZ3MgdG8gY2hpbGQgcHJvY2Vzc2VzIGlmIHRoZSBub2RlIGluc3BlY3RvciBpcyBhY3RpdmVcbmZ1bmN0aW9uIHJlc29sdmVGb3JrT3B0aW9ucyhvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBwcm9jZXNzRXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oJyAnKTtcbiAgdmFyIGluc3BlY3RvckFjdGl2ZSA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWluc3BlY3QnKSAhPT0gLTE7XG4gIHZhciBkZWJ1Z0JyayA9IHByb2Nlc3NFeGVjQXJndi5pbmRleE9mKCctLWRlYnVnLWJyaycpICE9PSAtMTtcblxuICB2YXIgZXhlY0FyZ3YgPSBbXTtcbiAgaWYgKGluc3BlY3RvckFjdGl2ZSkge1xuICAgIGV4ZWNBcmd2LnB1c2goJy0taW5zcGVjdD0nICsgb3B0cy5kZWJ1Z1BvcnQpO1xuXG4gICAgaWYgKGRlYnVnQnJrKSB7XG4gICAgICBleGVjQXJndi5wdXNoKCctLWRlYnVnLWJyaycpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZXhlY0FyZ3YuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAoYXJnLmluZGV4T2YoJy0tbWF4LW9sZC1zcGFjZS1zaXplJykgPiAtMSkge1xuICAgICAgZXhlY0FyZ3YucHVzaChhcmcpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgZm9ya0FyZ3M6IG9wdHMuZm9ya0FyZ3MsXG4gICAgZm9ya09wdHM6IE9iamVjdC5hc3NpZ24oe30sIG9wdHMuZm9ya09wdHMsIHtcbiAgICAgIGV4ZWNBcmd2OiAob3B0cy5mb3JrT3B0cyAmJiBvcHRzLmZvcmtPcHRzLmV4ZWNBcmd2IHx8IFtdKVxuICAgICAgLmNvbmNhdChleGVjQXJndilcbiAgICB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNlcmlhbGl6ZWQgZXJyb3IgdG8gRXJyb3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogRXJyb3IgdGhhdCBoYXMgYmVlbiBzZXJpYWxpemVkIGFuZCBwYXJzZWQgdG8gb2JqZWN0XG4gKiBAcmV0dXJuIHtFcnJvcn0gVGhlIGVxdWl2YWxlbnQgRXJyb3IuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvRXJyb3IgKG9iaikge1xuICB2YXIgdGVtcCA9IG5ldyBFcnJvcignJylcbiAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB0ZW1wW3Byb3BzW2ldXSA9IG9ialtwcm9wc1tpXV1cbiAgfVxuXG4gIHJldHVybiB0ZW1wXG59XG5cbi8qKlxuICogQSBXb3JrZXJIYW5kbGVyIGNvbnRyb2xzIGEgc2luZ2xlIHdvcmtlci4gVGhpcyB3b3JrZXIgY2FuIGJlIGEgY2hpbGQgcHJvY2Vzc1xuICogb24gbm9kZS5qcyBvciBhIFdlYldvcmtlciBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1N0cmluZ30gW3NjcmlwdF0gSWYgbm8gc2NyaXB0IGlzIHByb3ZpZGVkLCBhIGRlZmF1bHQgd29ya2VyIHdpdGggYVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1biB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBfb3B0aW9ucyBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdvcmtlckhhbmRsZXIoc2NyaXB0LCBfb3B0aW9ucykge1xuICB2YXIgbWUgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IGdldERlZmF1bHRXb3JrZXIoKTtcbiAgdGhpcy53b3JrZXIgPSBzZXR1cFdvcmtlcih0aGlzLnNjcmlwdCwgb3B0aW9ucyk7XG4gIHRoaXMuZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQ7XG4gIHRoaXMuZm9ya09wdHMgPSBvcHRpb25zLmZvcmtPcHRzO1xuICB0aGlzLmZvcmtBcmdzID0gb3B0aW9ucy5mb3JrQXJncztcbiAgdGhpcy53b3JrZXJUaHJlYWRPcHRzID0gb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzXG5cbiAgLy8gVGhlIHJlYWR5IG1lc3NhZ2UgaXMgb25seSBzZW50IGlmIHRoZSB3b3JrZXIuYWRkIG1ldGhvZCBpcyBjYWxsZWQgKEFuZCB0aGUgZGVmYXVsdCBzY3JpcHQgaXMgbm90IHVzZWQpXG4gIGlmICghc2NyaXB0KSB7XG4gICAgdGhpcy53b3JrZXIucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLy8gcXVldWUgZm9yIHJlcXVlc3RzIHRoYXQgYXJlIHJlY2VpdmVkIGJlZm9yZSB0aGUgd29ya2VyIGlzIHJlYWR5XG4gIHRoaXMucmVxdWVzdFF1ZXVlID0gW107XG4gIHRoaXMud29ya2VyLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgaWYgKG1lLnRlcm1pbmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgJiYgcmVzcG9uc2UgPT09ICdyZWFkeScpIHtcbiAgICAgIG1lLndvcmtlci5yZWFkeSA9IHRydWU7XG4gICAgICBkaXNwYXRjaFF1ZXVlZFJlcXVlc3RzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpbmQgdGhlIHRhc2sgZnJvbSB0aGUgcHJvY2Vzc2luZyBxdWV1ZSwgYW5kIHJ1biB0aGUgdGFza3MgY2FsbGJhY2tcbiAgICAgIHZhciBpZCA9IHJlc3BvbnNlLmlkO1xuICAgICAgdmFyIHRhc2sgPSBtZS5wcm9jZXNzaW5nW2lkXTtcbiAgICAgIGlmICh0YXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXZlbnQpIHtcbiAgICAgICAgICBpZiAodGFzay5vcHRpb25zICYmIHR5cGVvZiB0YXNrLm9wdGlvbnMub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRhc2sub3B0aW9ucy5vbihyZXNwb25zZS5wYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSB0YXNrIGZyb20gdGhlIHF1ZXVlXG4gICAgICAgICAgZGVsZXRlIG1lLnByb2Nlc3NpbmdbaWRdO1xuXG4gICAgICAgICAgLy8gdGVzdCBpZiB3ZSBuZWVkIHRvIHRlcm1pbmF0ZVxuICAgICAgICAgIGlmIChtZS50ZXJtaW5hdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gY29tcGxldGUgd29ya2VyIHRlcm1pbmF0aW9uIGlmIGFsbCB0YXNrcyBhcmUgZmluaXNoZWRcbiAgICAgICAgICAgIG1lLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlc29sdmUgdGhlIHRhc2sncyBwcm9taXNlXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmVyLnJlamVjdChvYmplY3RUb0Vycm9yKHJlc3BvbnNlLmVycm9yKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFzay5yZXNvbHZlci5yZXNvbHZlKHJlc3BvbnNlLnJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyByZWplY3QgYWxsIHJ1bm5pbmcgdGFza3Mgb24gd29ya2VyIGVycm9yXG4gIGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICBtZS50ZXJtaW5hdGVkID0gdHJ1ZTtcblxuICAgIGZvciAodmFyIGlkIGluIG1lLnByb2Nlc3NpbmcpIHtcbiAgICAgIGlmIChtZS5wcm9jZXNzaW5nW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1lLnByb2Nlc3NpbmdbaWRdLnJlc29sdmVyLnJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIG1lLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgLy8gc2VuZCBhbGwgcXVldWVkIHJlcXVlc3RzIHRvIHdvcmtlclxuICBmdW5jdGlvbiBkaXNwYXRjaFF1ZXVlZFJlcXVlc3RzKClcbiAge1xuICAgIGZvcihjb25zdCByZXF1ZXN0IG9mIG1lLnJlcXVlc3RRdWV1ZS5zcGxpY2UoMCkpIHtcbiAgICAgIG1lLndvcmtlci5zZW5kKHJlcXVlc3QpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB3b3JrZXIgPSB0aGlzLndvcmtlcjtcbiAgLy8gbGlzdGVuIGZvciB3b3JrZXIgbWVzc2FnZXMgZXJyb3IgYW5kIGV4aXRcbiAgdGhpcy53b3JrZXIub24oJ2Vycm9yJywgb25FcnJvcik7XG4gIHRoaXMud29ya2VyLm9uKCdleGl0JywgZnVuY3Rpb24gKGV4aXRDb2RlLCBzaWduYWxDb2RlKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV29ya2VycG9vbCBXb3JrZXIgdGVybWluYXRlZCBVbmV4cGVjdGVkbHlcXG4nO1xuXG4gICAgbWVzc2FnZSArPSAnICAgIGV4aXRDb2RlOiBgJyArIGV4aXRDb2RlICsgJ2BcXG4nO1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzaWduYWxDb2RlOiBgJyArIHNpZ25hbENvZGUgKyAnYFxcbic7XG5cbiAgICBtZXNzYWdlICs9ICcgICAgd29ya2VycG9vbC5zY3JpcHQ6IGAnICsgIG1lLnNjcmlwdCArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc3Bhd25BcmdzOiBgJyArICB3b3JrZXIuc3Bhd25hcmdzICsgJ2BcXG4nO1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzcGF3bmZpbGU6IGAnICsgd29ya2VyLnNwYXduZmlsZSArICdgXFxuJ1xuXG4gICAgbWVzc2FnZSArPSAnICAgIHN0ZG91dDogYCcgKyB3b3JrZXIuc3Rkb3V0ICsgJ2BcXG4nXG4gICAgbWVzc2FnZSArPSAnICAgIHN0ZGVycjogYCcgKyB3b3JrZXIuc3RkZXJyICsgJ2BcXG4nXG5cbiAgICBvbkVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gIH0pO1xuXG4gIHRoaXMucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7IC8vIHF1ZXVlIHdpdGggdGFza3MgY3VycmVudGx5IGluIHByb2dyZXNzXG5cbiAgdGhpcy50ZXJtaW5hdGluZyA9IGZhbHNlO1xuICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGlvbkhhbmRsZXIgPSBudWxsO1xuICB0aGlzLmxhc3RJZCA9IDA7XG59XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxTdHJpbmdbXSwgRXJyb3I+fSBtZXRob2RzXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLm1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZSBhIG1ldGhvZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMgb24gdGhlIHdvcmtlclxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtBcnJheX0gW3BhcmFtc11cbiAqIEBwYXJhbSB7e3Jlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gW3Jlc29sdmVyXVxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gIFtvcHRpb25zXVxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKG1ldGhvZCwgcGFyYW1zLCByZXNvbHZlciwgb3B0aW9ucykge1xuICBpZiAoIXJlc29sdmVyKSB7XG4gICAgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIH1cblxuICAvLyBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHRhc2tcbiAgdmFyIGlkID0gKyt0aGlzLmxhc3RJZDtcblxuICAvLyByZWdpc3RlciBhIG5ldyB0YXNrIGFzIGJlaW5nIGluIHByb2dyZXNzXG4gIHRoaXMucHJvY2Vzc2luZ1tpZF0gPSB7XG4gICAgaWQ6IGlkLFxuICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG5cbiAgLy8gYnVpbGQgYSBKU09OLVJQQyByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIGlkOiBpZCxcbiAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICBwYXJhbXM6IHBhcmFtc1xuICB9O1xuXG4gIGlmICh0aGlzLnRlcm1pbmF0ZWQpIHtcbiAgICByZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgaXMgdGVybWluYXRlZCcpKTtcbiAgfSBlbHNlIGlmICh0aGlzLndvcmtlci5yZWFkeSkge1xuICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHdvcmtlclxuICAgIHRoaXMud29ya2VyLnNlbmQocmVxdWVzdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXF1ZXN0UXVldWUucHVzaChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIG9uIGNhbmNlbGxhdGlvbiwgZm9yY2UgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGVcbiAgdmFyIG1lID0gdGhpcztcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUHJvbWlzZS5DYW5jZWxsYXRpb25FcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFByb21pc2UuVGltZW91dEVycm9yKSB7XG4gICAgICAvLyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHF1ZXVlLiBJdCBpcyBhbHJlYWR5IHJlamVjdGVkIChoZW5jZSB0aGlzXG4gICAgICAvLyBjYXRjaCBldmVudCksIGFuZCBlbHNlIGl0IHdpbGwgYmUgcmVqZWN0ZWQgYWdhaW4gd2hlbiB0ZXJtaW5hdGluZ1xuICAgICAgZGVsZXRlIG1lLnByb2Nlc3NpbmdbaWRdO1xuXG4gICAgICAvLyB0ZXJtaW5hdGUgd29ya2VyXG4gICAgICByZXR1cm4gbWUudGVybWluYXRlQW5kTm90aWZ5KHRydWUpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pXG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgd29ya2VyIGlzIHdvcmtpbmcgb3Igbm90XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIHdvcmtlciBpcyBidXN5XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLmJ1c3kgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnByb2Nlc3NpbmcpLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFRlcm1pbmF0ZSB0aGUgd29ya2VyLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VyIGlzIHRlcm1pbmF0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MgY3VycmVudGx5IGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy4gSWYgdHJ1ZSwgdGhlIHdvcmtlciB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrPW51bGxdIElmIHByb3ZpZGVkLCB3aWxsIGJlIGNhbGxlZCB3aGVuIHByb2Nlc3MgdGVybWluYXRlcy5cbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUudGVybWluYXRlID0gZnVuY3Rpb24gKGZvcmNlLCBjYWxsYmFjaykge1xuICB2YXIgbWUgPSB0aGlzO1xuICBpZiAoZm9yY2UpIHtcbiAgICAvLyBjYW5jZWwgYWxsIHRhc2tzIGluIHByb2dyZXNzXG4gICAgZm9yICh2YXIgaWQgaW4gdGhpcy5wcm9jZXNzaW5nKSB7XG4gICAgICBpZiAodGhpcy5wcm9jZXNzaW5nW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1tpZF0ucmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHRlcm1pbmF0ZWQnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy50ZXJtaW5hdGlvbkhhbmRsZXIgPSBjYWxsYmFjaztcbiAgfVxuICBpZiAoIXRoaXMuYnVzeSgpKSB7XG4gICAgLy8gYWxsIHRhc2tzIGFyZSBmaW5pc2hlZC4ga2lsbCB0aGUgd29ya2VyXG4gICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG1lLnRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgaWYgKG1lLndvcmtlciAhPSBudWxsICYmIG1lLndvcmtlci5yZW1vdmVBbGxMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gcmVtb3ZlQWxsTGlzdGVuZXJzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBjaGlsZF9wcm9jZXNzXG4gICAgICAgIG1lLndvcmtlci5yZW1vdmVBbGxMaXN0ZW5lcnMoJ21lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICAgIG1lLndvcmtlciA9IG51bGw7XG4gICAgICBtZS50ZXJtaW5hdGluZyA9IGZhbHNlO1xuICAgICAgaWYgKG1lLnRlcm1pbmF0aW9uSGFuZGxlcikge1xuICAgICAgICBtZS50ZXJtaW5hdGlvbkhhbmRsZXIoZXJyLCBtZSk7XG4gICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud29ya2VyKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMud29ya2VyLmtpbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKHRoaXMud29ya2VyLmtpbGxlZCkge1xuICAgICAgICAgIGNsZWFudXAobmV3IEVycm9yKCd3b3JrZXIgYWxyZWFkeSBraWxsZWQhJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndvcmtlci5pc0NoaWxkUHJvY2Vzcykge1xuICAgICAgICAgIHZhciBjbGVhbkV4aXRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChtZS53b3JrZXIpIHtcbiAgICAgICAgICAgICAgbWUud29ya2VyLmtpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBDSElMRF9QUk9DRVNTX0VYSVRfVElNRU9VVCk7XG5cbiAgICAgICAgICB0aGlzLndvcmtlci5vbmNlKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoY2xlYW5FeGl0VGltZW91dCk7XG4gICAgICAgICAgICBpZiAobWUud29ya2VyKSB7XG4gICAgICAgICAgICAgIG1lLndvcmtlci5raWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMud29ya2VyLnJlYWR5KSB7XG4gICAgICAgICAgICB0aGlzLndvcmtlci5zZW5kKFRFUk1JTkFURV9NRVRIT0RfSUQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKFRFUk1JTkFURV9NRVRIT0RfSUQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdvcmtlcl90aHJlYWRcbiAgICAgICAgICB0aGlzLndvcmtlci5raWxsKCk7XG4gICAgICAgICAgdGhpcy53b3JrZXIua2lsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMud29ya2VyLnRlcm1pbmF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTsgLy8gd2ViIHdvcmtlclxuICAgICAgICB0aGlzLndvcmtlci5raWxsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRlcm1pbmF0ZSB3b3JrZXInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIHdlIGNhbid0IHRlcm1pbmF0ZSBpbW1lZGlhdGVseSwgdGhlcmUgYXJlIHN0aWxsIHRhc2tzIGJlaW5nIGV4ZWN1dGVkXG4gICAgdGhpcy50ZXJtaW5hdGluZyA9IHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogVGVybWluYXRlIHRoZSB3b3JrZXIsIHJldHVybmluZyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXJtaW5hdGlvbiBoYXMgYmVlbiBkb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VyIGlzIHRlcm1pbmF0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyBhbGwgdGFza3MgY3VycmVudGx5IGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy4gSWYgdHJ1ZSwgdGhlIHdvcmtlciB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XSAgICAgICAgSWYgcHJvdmlkZWQgYW5kIG5vbi16ZXJvLCB3b3JrZXIgdGVybWluYXRpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aW1lb3V0IGlmIHdvcmtlciBwcm9jZXNzIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkLlxuICogQHJldHVybiB7UHJvbWlzZS48V29ya2VySGFuZGxlciwgRXJyb3I+fVxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS50ZXJtaW5hdGVBbmROb3RpZnkgPSBmdW5jdGlvbiAoZm9yY2UsIHRpbWVvdXQpIHtcbiAgdmFyIHJlc29sdmVyID0gUHJvbWlzZS5kZWZlcigpO1xuICBpZiAodGltZW91dCkge1xuICAgIHJlc29sdmVyLnByb21pc2UudGltZW91dCA9IHRpbWVvdXQ7XG4gIH1cbiAgdGhpcy50ZXJtaW5hdGUoZm9yY2UsIGZ1bmN0aW9uKGVyciwgd29ya2VyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmVzb2x2ZXIucmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVyLnJlc29sdmUod29ya2VyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gV29ya2VySGFuZGxlcjtcbm1vZHVsZS5leHBvcnRzLl90cnlSZXF1aXJlV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwUHJvY2Vzc1dvcmtlciA9IHNldHVwUHJvY2Vzc1dvcmtlcjtcbm1vZHVsZS5leHBvcnRzLl9zZXR1cEJyb3dzZXJXb3JrZXIgPSBzZXR1cEJyb3dzZXJXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXIgPSBzZXR1cFdvcmtlclRocmVhZFdvcmtlcjtcbm1vZHVsZS5leHBvcnRzLmVuc3VyZVdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9QT1JUUyA9IDY1NTM1O1xubW9kdWxlLmV4cG9ydHMgPSBEZWJ1Z1BvcnRBbGxvY2F0b3I7XG5mdW5jdGlvbiBEZWJ1Z1BvcnRBbGxvY2F0b3IoKSB7XG4gIHRoaXMucG9ydHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG59XG5cbkRlYnVnUG9ydEFsbG9jYXRvci5wcm90b3R5cGUubmV4dEF2YWlsYWJsZVN0YXJ0aW5nQXQgPSBmdW5jdGlvbihzdGFydGluZykge1xuICB3aGlsZSAodGhpcy5wb3J0c1tzdGFydGluZ10gPT09IHRydWUpIHtcbiAgICBzdGFydGluZysrO1xuICB9XG5cbiAgaWYgKHN0YXJ0aW5nID49IE1BWF9QT1JUUykge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyUG9vbCBkZWJ1ZyBwb3J0IGxpbWl0IHJlYWNoZWQ6ICcgKyBzdGFydGluZyArICc+PSAnICsgTUFYX1BPUlRTICk7XG4gIH1cblxuICB0aGlzLnBvcnRzW3N0YXJ0aW5nXSA9IHRydWU7XG4gIHRoaXMubGVuZ3RoKys7XG4gIHJldHVybiBzdGFydGluZztcbn07XG5cbkRlYnVnUG9ydEFsbG9jYXRvci5wcm90b3R5cGUucmVsZWFzZVBvcnQgPSBmdW5jdGlvbihwb3J0KSB7XG4gIGRlbGV0ZSB0aGlzLnBvcnRzW3BvcnRdO1xuICB0aGlzLmxlbmd0aC0tO1xufTtcblxuIiwgInZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgV29ya2VySGFuZGxlciA9IHJlcXVpcmUoJy4vV29ya2VySGFuZGxlcicpO1xudmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xudmFyIERlYnVnUG9ydEFsbG9jYXRvciA9IHJlcXVpcmUoJy4vZGVidWctcG9ydC1hbGxvY2F0b3InKTtcbnZhciBERUJVR19QT1JUX0FMTE9DQVRPUiA9IG5ldyBEZWJ1Z1BvcnRBbGxvY2F0b3IoKTtcbi8qKlxuICogQSBwb29sIHRvIG1hbmFnZSB3b3JrZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gW3NjcmlwdF0gICBPcHRpb25hbCB3b3JrZXIgc2NyaXB0XG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBbb3B0aW9uc10gIFNlZSBkb2NzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUG9vbChzY3JpcHQsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzY3JpcHQgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5zY3JpcHQgPSBzY3JpcHQgfHwgbnVsbDtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gICAgb3B0aW9ucyA9IHNjcmlwdDtcbiAgfVxuXG4gIHRoaXMud29ya2VycyA9IFtdOyAgLy8gcXVldWUgd2l0aCBhbGwgd29ya2Vyc1xuICB0aGlzLnRhc2tzID0gW107ICAgIC8vIHF1ZXVlIHdpdGggdGFza3MgYXdhaXRpbmcgZXhlY3V0aW9uXG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy5mb3JrQXJncyA9IE9iamVjdC5mcmVlemUob3B0aW9ucy5mb3JrQXJncyB8fCBbXSk7XG4gIHRoaXMuZm9ya09wdHMgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMuZm9ya09wdHMgfHwge30pO1xuICB0aGlzLndvcmtlclRocmVhZE9wdHMgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMud29ya2VyVGhyZWFkT3B0cyB8fCB7fSlcbiAgdGhpcy5kZWJ1Z1BvcnRTdGFydCA9IChvcHRpb25zLmRlYnVnUG9ydFN0YXJ0IHx8IDQzMjEwKTtcbiAgdGhpcy5ub2RlV29ya2VyID0gb3B0aW9ucy5ub2RlV29ya2VyO1xuICB0aGlzLndvcmtlclR5cGUgPSBvcHRpb25zLndvcmtlclR5cGUgfHwgb3B0aW9ucy5ub2RlV29ya2VyIHx8ICdhdXRvJ1xuICB0aGlzLm1heFF1ZXVlU2l6ZSA9IG9wdGlvbnMubWF4UXVldWVTaXplIHx8IEluZmluaXR5O1xuXG4gIHRoaXMub25DcmVhdGVXb3JrZXIgPSBvcHRpb25zLm9uQ3JlYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcbiAgdGhpcy5vblRlcm1pbmF0ZVdvcmtlciA9IG9wdGlvbnMub25UZXJtaW5hdGVXb3JrZXIgfHwgKCgpID0+IG51bGwpO1xuXG4gIC8vIGNvbmZpZ3VyYXRpb25cbiAgaWYgKG9wdGlvbnMgJiYgJ21heFdvcmtlcnMnIGluIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU1heFdvcmtlcnMob3B0aW9ucy5tYXhXb3JrZXJzKTtcbiAgICB0aGlzLm1heFdvcmtlcnMgPSBvcHRpb25zLm1heFdvcmtlcnM7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gTWF0aC5tYXgoKGVudmlyb25tZW50LmNwdXMgfHwgNCkgLSAxLCAxKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICYmICdtaW5Xb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgaWYob3B0aW9ucy5taW5Xb3JrZXJzID09PSAnbWF4Jykge1xuICAgICAgdGhpcy5taW5Xb3JrZXJzID0gdGhpcy5tYXhXb3JrZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZU1pbldvcmtlcnMob3B0aW9ucy5taW5Xb3JrZXJzKTtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IG9wdGlvbnMubWluV29ya2VycztcbiAgICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KHRoaXMubWluV29ya2VycywgdGhpcy5tYXhXb3JrZXJzKTsgICAgIC8vIGluIGNhc2UgbWluV29ya2VycyBpcyBoaWdoZXIgdGhhbiBtYXhXb3JrZXJzXG4gICAgfVxuICAgIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kTmV4dCA9IHRoaXMuX25leHQuYmluZCh0aGlzKTtcblxuXG4gIGlmICh0aGlzLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7XG4gICAgV29ya2VySGFuZGxlci5lbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBmdW5jdGlvbiBvbiBhIHdvcmtlci5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICpcbiAqICAgdmFyIHBvb2wgPSBuZXcgUG9vbCgpXG4gKlxuICogICAvLyBjYWxsIGEgZnVuY3Rpb24gYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXJcbiAqICAgcG9vbC5leGVjKCdmaWJvbmFjY2knLCBbNl0pXG4gKlxuICogICAvLyBvZmZsb2FkIGEgZnVuY3Rpb25cbiAqICAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAqICAgICByZXR1cm4gYSArIGJcbiAqICAgfTtcbiAqICAgcG9vbC5leGVjKGFkZCwgWzIsIDRdKVxuICogICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyBvdXRwdXRzIDZcbiAqICAgICAgIH0pXG4gKiAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICogICAgICAgfSk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmcgfCBGdW5jdGlvbn0gbWV0aG9kICBGdW5jdGlvbiBuYW1lIG9yIGZ1bmN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIHN0cmluZywgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG9uIHRoZSB3b3JrZXIgd2lsbCBiZSBleGVjdXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIEZ1bmN0aW9uLCB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzdHJpbmdpZmllZCBhbmQgZXhlY3V0ZWQgdmlhIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIGJ1aWx0LWluIGZ1bmN0aW9uIGBydW4oZm4sIGFyZ3MpYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbXNdICBGdW5jdGlvbiBhcmd1bWVudHMgYXBwbGllZCB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSBbb3B0aW9uc10gIE9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJuIHtQcm9taXNlLjwqLCBFcnJvcj59IHJlc3VsdFxuICovXG5Qb29sLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKG1ldGhvZCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8vIHZhbGlkYXRlIHR5cGUgb2YgYXJndW1lbnRzXG4gIGlmIChwYXJhbXMgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwicGFyYW1zXCInKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgIHZhciByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcblxuICAgIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+PSB0aGlzLm1heFF1ZXVlU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXggcXVldWUgc2l6ZSBvZiAnICsgdGhpcy5tYXhRdWV1ZVNpemUgKyAnIHJlYWNoZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBuZXcgdGFzayB0byB0aGUgcXVldWVcbiAgICB2YXIgdGFza3MgPSB0aGlzLnRhc2tzO1xuICAgIHZhciB0YXNrID0ge1xuICAgICAgbWV0aG9kOiAgbWV0aG9kLFxuICAgICAgcGFyYW1zOiAgcGFyYW1zLFxuICAgICAgcmVzb2x2ZXI6IHJlc29sdmVyLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9O1xuICAgIHRhc2tzLnB1c2godGFzayk7XG5cbiAgICAvLyByZXBsYWNlIHRoZSB0aW1lb3V0IG1ldGhvZCBvZiB0aGUgUHJvbWlzZSB3aXRoIG91ciBvd24sXG4gICAgLy8gd2hpY2ggc3RhcnRzIHRoZSB0aW1lciBhcyBzb29uIGFzIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHN0YXJ0ZWRcbiAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0O1xuICAgIHJlc29sdmVyLnByb21pc2UudGltZW91dCA9IGZ1bmN0aW9uIHRpbWVvdXQgKGRlbGF5KSB7XG4gICAgICBpZiAodGFza3MuaW5kZXhPZih0YXNrKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gdGFzayBpcyBzdGlsbCBxdWV1ZWQgLT4gc3RhcnQgdGhlIHRpbWVyIGxhdGVyIG9uXG4gICAgICAgIHRhc2sudGltZW91dCA9IGRlbGF5O1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyB0YXNrIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQgLT4gc3RhcnQgdGltZXIgaW1tZWRpYXRlbHlcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dC5jYWxsKHJlc29sdmVyLnByb21pc2UsIGRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdHJpZ2dlciB0YXNrIGV4ZWN1dGlvblxuICAgIHRoaXMuX25leHQoKTtcblxuICAgIHJldHVybiByZXNvbHZlci5wcm9taXNlO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBzZW5kIHN0cmluZ2lmaWVkIGZ1bmN0aW9uIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgdG8gd29ya2VyXG4gICAgcmV0dXJuIHRoaXMuZXhlYygncnVuJywgW1N0cmluZyhtZXRob2QpLCBwYXJhbXNdKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgYXJndW1lbnQgXCJtZXRob2RcIicpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHByb3h5IGZvciBjdXJyZW50IHdvcmtlci4gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGxcbiAqIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuIFRoZSBtZXRob2RzIGFsd2F5cyByZXR1cm4gYSBwcm9taXNlLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2UuPE9iamVjdCwgRXJyb3I+fSBwcm94eVxuICovXG5Qb29sLnByb3RvdHlwZS5wcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhcmd1bWVudHMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHZhciBwb29sID0gdGhpcztcbiAgcmV0dXJuIHRoaXMuZXhlYygnbWV0aG9kcycpXG4gICAgICAudGhlbihmdW5jdGlvbiAobWV0aG9kcykge1xuICAgICAgICB2YXIgcHJveHkgPSB7fTtcblxuICAgICAgICBtZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgIHByb3h5W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9vbC5leGVjKG1ldGhvZCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBhcnJheS5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgRnVuY3Rpb24gdGFraW5nIHR3byBhcmd1bWVudHM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxiYWNrKGN1cnJlbnRWYWx1ZSwgaW5kZXgpYFxuICogQHJldHVybiB7UHJvbWlzZS48QXJyYXk+fSBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyAgd2l0aCBhbiBBcnJheVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgYXJyYXkgZWxlbWVudHMuXG4gKi9cbi8qIFRPRE86IGltcGxlbWVudCBtYXBcblBvb2wucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChhcnJheSwgY2FsbGJhY2spIHtcbn07XG4qL1xuXG4vKipcbiAqIEdyYWIgdGhlIGZpcnN0IHRhc2sgZnJvbSB0aGUgcXVldWUsIGZpbmQgYSBmcmVlIHdvcmtlciwgYW5kIGFzc2lnbiB0aGVcbiAqIHdvcmtlciB0byB0aGUgdGFzay5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAvLyB0aGVyZSBhcmUgdGFza3MgaW4gdGhlIHF1ZXVlXG5cbiAgICAvLyBmaW5kIGFuIGF2YWlsYWJsZSB3b3JrZXJcbiAgICB2YXIgd29ya2VyID0gdGhpcy5fZ2V0V29ya2VyKCk7XG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgLy8gZ2V0IHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlXG4gICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgdmFyIHRhc2sgPSB0aGlzLnRhc2tzLnNoaWZ0KCk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSB0YXNrIGlzIHN0aWxsIHBlbmRpbmcgKGFuZCBub3QgY2FuY2VsbGVkIC0+IHByb21pc2UgcmVqZWN0ZWQpXG4gICAgICBpZiAodGFzay5yZXNvbHZlci5wcm9taXNlLnBlbmRpbmcpIHtcbiAgICAgICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgd29ya2VyXG4gICAgICAgIHZhciBwcm9taXNlID0gd29ya2VyLmV4ZWModGFzay5tZXRob2QsIHRhc2sucGFyYW1zLCB0YXNrLnJlc29sdmVyLCB0YXNrLm9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4obWUuX2JvdW5kTmV4dClcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHdvcmtlciBjcmFzaGVkIGFuZCB0ZXJtaW5hdGVkLCByZW1vdmUgaXQgZnJvbSB0aGUgcG9vbFxuICAgICAgICAgICAgaWYgKHdvcmtlci50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZS5fcmVtb3ZlV29ya2VyKHdvcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG1lLl9uZXh0KCk7IC8vIHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHN0YXJ0IHF1ZXVlZCB0aW1lciBub3dcbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrLnRpbWVvdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcHJvbWlzZS50aW1lb3V0KHRhc2sudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0YXNrIHRha2VuIHdhcyBhbHJlYWR5IGNvbXBsZXRlIChlaXRoZXIgcmVqZWN0ZWQgb3IgcmVzb2x2ZWQpLCBzbyBqdXN0IHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICBtZS5fbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYW4gYXZhaWxhYmxlIHdvcmtlci4gSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSBhbmQgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiB3b3JrZXJzIGlzbid0IHlldCByZWFjaGVkLCBhIG5ldyB3b3JrZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIGlzIHJlYWNoZWQsXG4gKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHJldHVybiB7V29ya2VySGFuZGxlciB8IG51bGx9IHdvcmtlclxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2dldFdvcmtlciA9IGZ1bmN0aW9uKCkge1xuICAvLyBmaW5kIGEgbm9uLWJ1c3kgd29ya2VyXG4gIHZhciB3b3JrZXJzID0gdGhpcy53b3JrZXJzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgd29ya2VyID0gd29ya2Vyc1tpXTtcbiAgICBpZiAod29ya2VyLmJ1c3koKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtlcnMubGVuZ3RoIDwgdGhpcy5tYXhXb3JrZXJzKSB7XG4gICAgLy8gY3JlYXRlIGEgbmV3IHdvcmtlclxuICAgIHdvcmtlciA9IHRoaXMuX2NyZWF0ZVdvcmtlckhhbmRsZXIoKTtcbiAgICB3b3JrZXJzLnB1c2god29ya2VyKTtcbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sLlxuICogQXR0ZW1wdHMgdG8gdGVybWluYXRlIHdvcmtlciBpZiBub3QgYWxyZWFkeSB0ZXJtaW5hdGVkLCBhbmQgZW5zdXJlcyB0aGUgbWluaW11bVxuICogcG9vbCBzaXplIGlzIG1ldC5cbiAqIEBwYXJhbSB7V29ya2VySGFuZGxlcn0gd29ya2VyXG4gKiBAcmV0dXJuIHtQcm9taXNlPFdvcmtlckhhbmRsZXI+fVxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyID0gZnVuY3Rpb24od29ya2VyKSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgREVCVUdfUE9SVF9BTExPQ0FUT1IucmVsZWFzZVBvcnQod29ya2VyLmRlYnVnUG9ydCk7XG4gIC8vIF9yZW1vdmVXb3JrZXIgd2lsbCBjYWxsIHRoaXMsIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHJlbW92ZWQgc3luY2hyb25vdXNseVxuICB0aGlzLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCh3b3JrZXIpO1xuICAvLyBJZiBtaW5Xb3JrZXJzIHNldCwgc3BpbiB1cCBuZXcgd29ya2VycyB0byByZXBsYWNlIHRoZSBjcmFzaGVkIG9uZXNcbiAgdGhpcy5fZW5zdXJlTWluV29ya2VycygpO1xuICAvLyB0ZXJtaW5hdGUgdGhlIHdvcmtlciAoaWYgbm90IGFscmVhZHkgdGVybWluYXRlZClcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHdvcmtlci50ZXJtaW5hdGUoZmFsc2UsIGZ1bmN0aW9uKGVycikge1xuICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICBmb3JrQXJnczogd29ya2VyLmZvcmtBcmdzLFxuICAgICAgICBmb3JrT3B0czogd29ya2VyLmZvcmtPcHRzLFxuICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgIH0pO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUod29ya2VyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sIGxpc3QuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyRnJvbUxpc3QgPSBmdW5jdGlvbih3b3JrZXIpIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIGxpc3Qgd2l0aCB3b3JrZXJzXG4gIHZhciBpbmRleCA9IHRoaXMud29ya2Vycy5pbmRleE9mKHdvcmtlcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLndvcmtlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbG9zZSBhbGwgYWN0aXZlIHdvcmtlcnMuIFRhc2tzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCB3aWxsIGJlIGZpbmlzaGVkIGZpcnN0LlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VycyBhcmUgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VycyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XSAgICAgICAgSWYgcHJvdmlkZWQgYW5kIG5vbi16ZXJvLCB3b3JrZXIgdGVybWluYXRpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aW1lb3V0IGlmIHdvcmtlciBwcm9jZXNzIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkLlxuICogQHJldHVybiB7UHJvbWlzZS48dm9pZCwgRXJyb3I+fVxuICovXG5Qb29sLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoZm9yY2UsIHRpbWVvdXQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICAvLyBjYW5jZWwgYW55IHBlbmRpbmcgdGFza3NcbiAgdGhpcy50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgdGFzay5yZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdQb29sIHRlcm1pbmF0ZWQnKSk7XG4gIH0pO1xuICB0aGlzLnRhc2tzLmxlbmd0aCA9IDA7XG5cbiAgdmFyIGYgPSBmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgREVCVUdfUE9SVF9BTExPQ0FUT1IucmVsZWFzZVBvcnQod29ya2VyLmRlYnVnUG9ydCk7XG4gICAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgfTtcbiAgdmFyIHJlbW92ZVdvcmtlciA9IGYuYmluZCh0aGlzKTtcblxuICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgdmFyIHdvcmtlcnMgPSB0aGlzLndvcmtlcnMuc2xpY2UoKTtcbiAgd29ya2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICB2YXIgdGVybVByb21pc2UgPSB3b3JrZXIudGVybWluYXRlQW5kTm90aWZ5KGZvcmNlLCB0aW1lb3V0KVxuICAgICAgLnRoZW4ocmVtb3ZlV29ya2VyKVxuICAgICAgLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICAgIGZvcmtBcmdzOiB3b3JrZXIuZm9ya0FyZ3MsXG4gICAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBwcm9taXNlcy5wdXNoKHRlcm1Qcm9taXNlKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHN0YXRpc3RpY3Mgb24gdGFza3MgYW5kIHdvcmtlcnMuXG4gKiBAcmV0dXJuIHt7dG90YWxXb3JrZXJzOiBudW1iZXIsIGJ1c3lXb3JrZXJzOiBudW1iZXIsIGlkbGVXb3JrZXJzOiBudW1iZXIsIHBlbmRpbmdUYXNrczogbnVtYmVyLCBhY3RpdmVUYXNrczogbnVtYmVyfX0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzdGF0aXN0aWNzXG4gKi9cblBvb2wucHJvdG90eXBlLnN0YXRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG90YWxXb3JrZXJzID0gdGhpcy53b3JrZXJzLmxlbmd0aDtcbiAgdmFyIGJ1c3lXb3JrZXJzID0gdGhpcy53b3JrZXJzLmZpbHRlcihmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgcmV0dXJuIHdvcmtlci5idXN5KCk7XG4gIH0pLmxlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHRvdGFsV29ya2VyczogIHRvdGFsV29ya2VycyxcbiAgICBidXN5V29ya2VyczogICBidXN5V29ya2VycyxcbiAgICBpZGxlV29ya2VyczogICB0b3RhbFdvcmtlcnMgLSBidXN5V29ya2VycyxcblxuICAgIHBlbmRpbmdUYXNrczogIHRoaXMudGFza3MubGVuZ3RoLFxuICAgIGFjdGl2ZVRhc2tzOiAgIGJ1c3lXb3JrZXJzXG4gIH07XG59O1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIG1pbmltdW0gb2YgbWluV29ya2VycyBpcyB1cCBhbmQgcnVubmluZ1xuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fZW5zdXJlTWluV29ya2VycyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5taW5Xb3JrZXJzKSB7XG4gICAgZm9yKHZhciBpID0gdGhpcy53b3JrZXJzLmxlbmd0aDsgaSA8IHRoaXMubWluV29ya2VyczsgaSsrKSB7XG4gICAgICB0aGlzLndvcmtlcnMucHVzaCh0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCkpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IFdvcmtlckhhbmRsZXIgYW5kIHBhc3MgYWxsIG9wdGlvbnMuXG4gKiBAcmV0dXJuIHtXb3JrZXJIYW5kbGVyfVxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2NyZWF0ZVdvcmtlckhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG92ZXJyaWRlblBhcmFtcyA9IHRoaXMub25DcmVhdGVXb3JrZXIoe1xuICAgIGZvcmtBcmdzOiB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiB0aGlzLmZvcmtPcHRzLFxuICAgIHdvcmtlclRocmVhZE9wdHM6IHRoaXMud29ya2VyVGhyZWFkT3B0cyxcbiAgICBzY3JpcHQ6IHRoaXMuc2NyaXB0XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBuZXcgV29ya2VySGFuZGxlcihvdmVycmlkZW5QYXJhbXMuc2NyaXB0IHx8IHRoaXMuc2NyaXB0LCB7XG4gICAgZm9ya0FyZ3M6IG92ZXJyaWRlblBhcmFtcy5mb3JrQXJncyB8fCB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBvdmVycmlkZW5QYXJhbXMuZm9ya09wdHMgfHwgdGhpcy5mb3JrT3B0cyxcbiAgICB3b3JrZXJUaHJlYWRPcHRzOiBvdmVycmlkZW5QYXJhbXMud29ya2VyVGhyZWFkT3B0cyB8fCB0aGlzLndvcmtlclRocmVhZE9wdHMsXG4gICAgZGVidWdQb3J0OiBERUJVR19QT1JUX0FMTE9DQVRPUi5uZXh0QXZhaWxhYmxlU3RhcnRpbmdBdCh0aGlzLmRlYnVnUG9ydFN0YXJ0KSxcbiAgICB3b3JrZXJUeXBlOiB0aGlzLndvcmtlclR5cGVcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIG1heFdvcmtlcnMgb3B0aW9uIGlzIGFuIGludGVnZXIgPj0gMVxuICogQHBhcmFtIHsqfSBtYXhXb3JrZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIG1heFdvcmtlcnMgaGFzIGEgdmFsaWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNYXhXb3JrZXJzKG1heFdvcmtlcnMpIHtcbiAgaWYgKCFpc051bWJlcihtYXhXb3JrZXJzKSB8fCAhaXNJbnRlZ2VyKG1heFdvcmtlcnMpIHx8IG1heFdvcmtlcnMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIG1heFdvcmtlcnMgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciA+PSAxJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgbWluV29ya2VycyBvcHRpb24gaXMgYW4gaW50ZWdlciA+PSAwXG4gKiBAcGFyYW0geyp9IG1pbldvcmtlcnNcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiBtaW5Xb3JrZXJzIGhhcyBhIHZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWluV29ya2VycyhtaW5Xb3JrZXJzKSB7XG4gIGlmICghaXNOdW1iZXIobWluV29ya2VycykgfHwgIWlzSW50ZWdlcihtaW5Xb3JrZXJzKSB8fCBtaW5Xb3JrZXJzIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBtaW5Xb3JrZXJzIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgPj0gMCcpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFyaWFibGUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiB2YWx1ZSBpcyBhIG51bWJlclxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSBudW1iZXIgaXMgYW4gaW50ZWdlclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sO1xuIiwgIi8qKlxuICogd29ya2VyIG11c3QgYmUgc3RhcnRlZCBhcyBhIGNoaWxkIHByb2Nlc3Mgb3IgYSB3ZWIgd29ya2VyLlxuICogSXQgbGlzdGVucyBmb3IgUlBDIG1lc3NhZ2VzIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzLlxuICovXG5cbi8vIHNvdXJjZSBvZiBpbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9yZXF1aXJlLWZvb2wtd2VicGFja1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IGV2YWwoXG4gICAgJ3R5cGVvZiByZXF1aXJlICE9PSBcXCd1bmRlZmluZWRcXCcnICtcbiAgICAnID8gcmVxdWlyZScgK1xuICAgICcgOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcihcXCdNb2R1bGUgXCIgKyBtb2R1bGUgKyBcIiBub3QgZm91bmQuXFwnKSB9J1xuKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIHRoZSB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG4vLyB2YXIgbm9kZU9TUGxhdGZvcm0gPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jykubm9kZU9TUGxhdGZvcm07XG5cbi8vIGNyZWF0ZSBhIHdvcmtlciBBUEkgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBtZXNzYWdlcyB3aGljaCB3b3JrcyBib3RoIG9uXG4vLyBub2RlLmpzIGFuZCBpbiB0aGUgYnJvd3NlclxudmFyIHdvcmtlciA9IHtcbiAgZXhpdDogZnVuY3Rpb24oKSB7fVxufTtcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIHdvcmtlciBpbiB0aGUgYnJvd3NlclxuICB3b3JrZXIub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGNhbGxiYWNrKG1lc3NhZ2UuZGF0YSk7XG4gICAgfSlcbiAgfTtcbiAgd29ya2VyLnNlbmQgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICB9O1xufVxuZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIG5vZGUuanNcblxuICB2YXIgV29ya2VyVGhyZWFkcztcbiAgdHJ5IHtcbiAgICBXb3JrZXJUaHJlYWRzID0gcmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgZXJyb3IuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAvLyBubyB3b3JrZXJfdGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBpZiAoV29ya2VyVGhyZWFkcyAmJlxuICAgIC8qIGlmIHRoZXJlIGlzIGEgcGFyZW50UG9ydCwgd2UgYXJlIGluIGEgV29ya2VyVGhyZWFkICovXG4gICAgV29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0ICE9PSBudWxsKSB7XG4gICAgdmFyIHBhcmVudFBvcnQgID0gV29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0O1xuICAgIHdvcmtlci5zZW5kID0gcGFyZW50UG9ydC5wb3N0TWVzc2FnZS5iaW5kKHBhcmVudFBvcnQpO1xuICAgIHdvcmtlci5vbiA9IHBhcmVudFBvcnQub24uYmluZChwYXJlbnRQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrZXIub24gPSBwcm9jZXNzLm9uLmJpbmQocHJvY2Vzcyk7XG4gICAgd29ya2VyLnNlbmQgPSBwcm9jZXNzLnNlbmQuYmluZChwcm9jZXNzKTtcbiAgICAvLyByZWdpc3RlciBkaXNjb25uZWN0IGhhbmRsZXIgb25seSBmb3Igc3VicHJvY2VzcyB3b3JrZXIgdG8gZXhpdCB3aGVuIHBhcmVudCBpcyBraWxsZWQgdW5leHBlY3RlZGx5XG4gICAgd29ya2VyLm9uKCdkaXNjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH0pO1xuICAgIHdvcmtlci5leGl0ID0gcHJvY2Vzcy5leGl0LmJpbmQocHJvY2Vzcyk7XG4gIH1cbn1cbmVsc2Uge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmlwdCBtdXN0IGJlIGV4ZWN1dGVkIGFzIGEgd29ya2VyJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRFcnJvcihlcnJvcikge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLnJlZHVjZShmdW5jdGlvbihwcm9kdWN0LCBuYW1lKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9kdWN0LCBuYW1lLCB7XG5cdHZhbHVlOiBlcnJvcltuYW1lXSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBQcm9taXNlIHZpYSBkdWNrIHR5cGluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICBoYXZpbmcgZnVuY3Rpb25zIGB0aGVuYCBhbmQgYGNhdGNoYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpICYmICh0eXBlb2YgdmFsdWUuY2F0Y2ggPT09ICdmdW5jdGlvbicpO1xufVxuXG4vLyBmdW5jdGlvbnMgYXZhaWxhYmxlIGV4dGVybmFsbHlcbndvcmtlci5tZXRob2RzID0ge307XG5cbi8qKlxuICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQgYXJndW1lbnRzXG4gKiBAcGFyYW0ge1N0cmluZ30gZm4gICAgIFN0cmluZ2lmaWVkIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc10gIEZ1bmN0aW9uIGFyZ3VtZW50c1xuICogQHJldHVybnMgeyp9XG4gKi9cbndvcmtlci5tZXRob2RzLnJ1biA9IGZ1bmN0aW9uIHJ1bihmbiwgYXJncykge1xuICB2YXIgZiA9IG5ldyBGdW5jdGlvbigncmV0dXJuICgnICsgZm4gKyAnKS5hcHBseShudWxsLCBhcmd1bWVudHMpOycpO1xuICByZXR1cm4gZi5hcHBseShmLCBhcmdzKTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoaXMgd29ya2VyXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX0gbWV0aG9kc1xuICovXG53b3JrZXIubWV0aG9kcy5tZXRob2RzID0gZnVuY3Rpb24gbWV0aG9kcygpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKTtcbn07XG5cbnZhciBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcblxud29ya2VyLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgaWYgKHJlcXVlc3QgPT09IFRFUk1JTkFURV9NRVRIT0RfSUQpIHtcbiAgICByZXR1cm4gd29ya2VyLmV4aXQoMCk7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgbWV0aG9kID0gd29ya2VyLm1ldGhvZHNbcmVxdWVzdC5tZXRob2RdO1xuXG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgY3VycmVudFJlcXVlc3RJZCA9IHJlcXVlc3QuaWQ7XG4gICAgICBcbiAgICAgIC8vIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uXG4gICAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KG1ldGhvZCwgcmVxdWVzdC5wYXJhbXMpO1xuXG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgLy8gcHJvbWlzZSByZXR1cm5lZCwgcmVzb2x2ZSB0aGlzIGFuZCB0aGVuIHJldHVyblxuICAgICAgICByZXN1bHRcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBjb252ZXJ0RXJyb3IoZXJyKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBpbW1lZGlhdGUgcmVzdWx0XG4gICAgICAgIHdvcmtlci5zZW5kKHtcbiAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFwiJyArIHJlcXVlc3QubWV0aG9kICsgJ1wiJyk7XG4gICAgfVxuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICB3b3JrZXIuc2VuZCh7XG4gICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgIGVycm9yOiBjb252ZXJ0RXJyb3IoZXJyKVxuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZWdpc3RlciBtZXRob2RzIHRvIHRoZSB3b3JrZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBtZXRob2RzXG4gKi9cbndvcmtlci5yZWdpc3RlciA9IGZ1bmN0aW9uIChtZXRob2RzKSB7XG5cbiAgaWYgKG1ldGhvZHMpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChtZXRob2RzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHdvcmtlci5tZXRob2RzW25hbWVdID0gbWV0aG9kc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3b3JrZXIuc2VuZCgncmVhZHknKTtcblxufTtcblxud29ya2VyLmVtaXQgPSBmdW5jdGlvbiAocGF5bG9hZCkge1xuICBpZiAoY3VycmVudFJlcXVlc3RJZCkge1xuICAgIHdvcmtlci5zZW5kKHtcbiAgICAgIGlkOiBjdXJyZW50UmVxdWVzdElkLFxuICAgICAgaXNFdmVudDogdHJ1ZSxcbiAgICAgIHBheWxvYWRcbiAgICB9KTtcbiAgfVxufTtcblxuaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICBleHBvcnRzLmFkZCA9IHdvcmtlci5yZWdpc3RlcjtcbiAgZXhwb3J0cy5lbWl0ID0gd29ya2VyLmVtaXQ7XG59XG4iLCAidmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyB3b3JrZXIgcG9vbFxuICogQHBhcmFtIHtzdHJpbmd9IFtzY3JpcHRdXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQb29sfSBwb29sXG4gKi9cbmV4cG9ydHMucG9vbCA9IGZ1bmN0aW9uIHBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIHZhciBQb29sID0gcmVxdWlyZSgnLi9Qb29sJyk7XG5cbiAgcmV0dXJuIG5ldyBQb29sKHNjcmlwdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHdvcmtlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlciBhIHNldCBvZiBtZXRob2RzIHRvIHRoZSB3b3JrZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGhvZHNdXG4gKi9cbmV4cG9ydHMud29ya2VyID0gZnVuY3Rpb24gd29ya2VyKG1ldGhvZHMpIHtcbiAgdmFyIHdvcmtlciA9IHJlcXVpcmUoJy4vd29ya2VyJyk7XG4gIHdvcmtlci5hZGQobWV0aG9kcyk7XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGV2ZW50IHRvIHRoZSBwYXJlbnQgd29ya2VyIHBvb2wuXG4gKiBAcGFyYW0ge2FueX0gcGF5bG9hZCBcbiAqL1xuZXhwb3J0cy53b3JrZXJFbWl0ID0gZnVuY3Rpb24gd29ya2VyRW1pdChwYXlsb2FkKSB7XG4gIHZhciB3b3JrZXIgPSByZXF1aXJlKCcuL3dvcmtlcicpO1xuICB3b3JrZXIuZW1pdChwYXlsb2FkKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZS5cbiAqIEB0eXBlIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cbmV4cG9ydHMuUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xuXG5leHBvcnRzLnBsYXRmb3JtID0gZW52aXJvbm1lbnQucGxhdGZvcm07XG5leHBvcnRzLmlzTWFpblRocmVhZCA9IGVudmlyb25tZW50LmlzTWFpblRocmVhZDtcbmV4cG9ydHMuY3B1cyA9IGVudmlyb25tZW50LmNwdXM7IiwgImltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5cbnR5cGUgU3R5bGVGbiA9IChzdHI6IHN0cmluZykgPT4gc3RyaW5nO1xuY29uc3QgeyBzdGRlcnIgfSA9IHByb2Nlc3M7XG5cbmNvbnN0IGxvZ2dlciA9IChzdHJlYW06IFdyaXRhYmxlLCBzdHlsZXM/OiBTdHlsZUZuW10pID0+IChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHtcbiAgbGV0IHN0ciA9IHV0aWwuZm9ybWF0KGZtdCwgLi4uYXJncyk7XG4gIGlmIChzdHlsZXMgJiYgc3R5bGVzLmxlbmd0aCkge1xuICAgIHN0ciA9IHN0eWxlcy5yZWR1Y2UoKGEsIHN0eWxlKSA9PiBzdHlsZShhKSwgc3RyKTtcbiAgfVxuICBzdHJlYW0ud3JpdGUoc3RyICsgJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHByaW50ID0gbG9nZ2VyKHN0ZGVycik7XG5leHBvcnQgY29uc3QgZXJyb3IgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsucmVkXSk7XG5leHBvcnQgY29uc3Qgd2FybmluZyA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay55ZWxsb3ddKTtcbmV4cG9ydCBjb25zdCBzdWNjZXNzID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLmdyZWVuXSk7XG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0ID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLmJvbGRdKTtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5mcm9tQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZm4uY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgKGVyciwgcmVzKSA9PiAoZXJyICE9IG51bGwpID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlcylcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9XG4gIH0sICduYW1lJywgeyB2YWx1ZTogZm4ubmFtZSB9KVxufVxuXG5leHBvcnRzLmZyb21Qcm9taXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICAgIGVsc2UgZm4uYXBwbHkodGhpcywgYXJncy5zbGljZSgwLCAtMSkpLnRoZW4ociA9PiBjYihudWxsLCByKSwgY2IpXG4gIH0sICduYW1lJywgeyB2YWx1ZTogZm4ubmFtZSB9KVxufVxuIiwgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0IDwgNjAwMDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZzLnN0YXQodG8sIGZ1bmN0aW9uIChzdGF0ZXIsIHN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlciAmJiBzdGF0ZXIuY29kZSA9PT0gXCJFTk9FTlRcIilcbiAgICAgICAgICAgICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgQ0IpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGNiKGVyKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgYmFja29mZilcbiAgICAgICAgICAgIGlmIChiYWNrb2ZmIDwgMTAwKVxuICAgICAgICAgICAgICBiYWNrb2ZmICs9IDEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlbmFtZSwgZnMkcmVuYW1lKVxuICAgICAgcmV0dXJuIHJlbmFtZVxuICAgIH0pKGZzLnJlbmFtZSlcbiAgfVxuXG4gIC8vIGlmIHJlYWQoKSByZXR1cm5zIEVBR0FJTiwgdGhlbiBqdXN0IHRyeSBpdCBhZ2Fpbi5cbiAgZnMucmVhZCA9IHR5cGVvZiBmcy5yZWFkICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFxuICA6IChmdW5jdGlvbiAoZnMkcmVhZCkge1xuICAgIGZ1bmN0aW9uIHJlYWQgKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2tfKSB7XG4gICAgICB2YXIgY2FsbGJhY2tcbiAgICAgIGlmIChjYWxsYmFja18gJiYgdHlwZW9mIGNhbGxiYWNrXyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXIsIF8sIF9fKSB7XG4gICAgICAgICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2tfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZzJHJlYWQuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvLyBUaGlzIGVuc3VyZXMgYHV0aWwucHJvbWlzaWZ5YCB3b3JrcyBhcyBpdCBkb2VzIGZvciBuYXRpdmUgYGZzLnJlYWRgLlxuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZWFkLCBmcyRyZWFkKVxuICAgIHJldHVybiByZWFkXG4gIH0pKGZzLnJlYWQpXG5cbiAgZnMucmVhZFN5bmMgPSB0eXBlb2YgZnMucmVhZFN5bmMgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkU3luY1xuICA6IChmdW5jdGlvbiAoZnMkcmVhZFN5bmMpIHsgcmV0dXJuIGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHtcbiAgICB2YXIgZWFnQ291bnRlciA9IDBcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRTeW5jLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfX0pKGZzLnJlYWRTeW5jKVxuXG4gIGZ1bmN0aW9uIHBhdGNoTGNobW9kIChmcykge1xuICAgIGZzLmxjaG1vZCA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICAgICAgZnMub3BlbiggcGF0aFxuICAgICAgICAgICAgICwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOS1xuICAgICAgICAgICAgICwgbW9kZVxuICAgICAgICAgICAgICwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICAgIGZzLmZjaG1vZChmZCwgbW9kZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbihlcnIyKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciB8fCBlcnIyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSkge1xuICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fV1JPTkxZIHwgY29uc3RhbnRzLk9fU1lNTElOSywgbW9kZSlcblxuICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAvLyBidXQgc3RpbGwgdHJ5IHRvIGNsb3NlLCBhbmQgcmVwb3J0IGNsb3NpbmcgZXJyb3JzIGlmIHRoZXkgb2NjdXIuXG4gICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICB2YXIgcmV0XG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBmcy5mY2htb2RTeW5jKGZkLCBtb2RlKVxuICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdGNoTHV0aW1lcyAoZnMpIHtcbiAgICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KFwiT19TWU1MSU5LXCIpICYmIGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10LCBjYikge1xuICAgICAgICBmcy5vcGVuKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkssIGZ1bmN0aW9uIChlciwgZmQpIHtcbiAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZnMuZnV0aW1lcyhmZCwgYXQsIG10LCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgIGZzLmNsb3NlKGZkLCBmdW5jdGlvbiAoZXIyKSB7XG4gICAgICAgICAgICAgIGlmIChjYikgY2IoZXIgfHwgZXIyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQpIHtcbiAgICAgICAgdmFyIGZkID0gZnMub3BlblN5bmMocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSylcbiAgICAgICAgdmFyIHJldFxuICAgICAgICB2YXIgdGhyZXcgPSB0cnVlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0ID0gZnMuZnV0aW1lc1N5bmMoZmQsIGF0LCBtdClcbiAgICAgICAgICB0aHJldyA9IGZhbHNlXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGZzLmZ1dGltZXMpIHtcbiAgICAgIGZzLmx1dGltZXMgPSBmdW5jdGlvbiAoX2EsIF9iLCBfYywgY2IpIHsgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKSB9XG4gICAgICBmcy5sdXRpbWVzU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG1vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNob3duRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICBpZiAoY2hvd25Fck9rKGVyKSkgZXIgPSBudWxsXG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG93bkZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBjYikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0aW9uc1xuICAgICAgICBvcHRpb25zID0gbnVsbFxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2FsbGJhY2sgKGVyLCBzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICB9XG4gICAgICAgIGlmIChjYikgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgdmFyIHN0YXRzID0gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0KVxuICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgaWYgKHN0YXRzLmdpZCA8IDApIHN0YXRzLmdpZCArPSAweDEwMDAwMDAwMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVOT1NZUyBtZWFucyB0aGF0IHRoZSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIG9wLiBKdXN0IGlnbm9yZVxuICAvLyB0aGF0LCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0dGVyLlxuICAvL1xuICAvLyBpZiB0aGVyZSdzIG5vIGdldHVpZCwgb3IgaWYgZ2V0dWlkKCkgaXMgc29tZXRoaW5nIG90aGVyXG4gIC8vIHRoYW4gMCwgYW5kIHRoZSBlcnJvciBpcyBFSU5WQUwgb3IgRVBFUk0sIHRoZW4ganVzdCBpZ25vcmVcbiAgLy8gaXQuXG4gIC8vXG4gIC8vIFRoaXMgc3BlY2lmaWMgY2FzZSBpcyBhIHNpbGVudCBmYWlsdXJlIGluIGNwLCBpbnN0YWxsLCB0YXIsXG4gIC8vIGFuZCBtb3N0IG90aGVyIHVuaXggdG9vbHMgdGhhdCBtYW5hZ2UgcGVybWlzc2lvbnMuXG4gIC8vXG4gIC8vIFdoZW4gcnVubmluZyBhcyByb290LCBvciBpZiBvdGhlciB0eXBlcyBvZiBlcnJvcnMgYXJlXG4gIC8vIGVuY291bnRlcmVkLCB0aGVuIGl0J3Mgc3RyaWN0LlxuICBmdW5jdGlvbiBjaG93bkVyT2sgKGVyKSB7XG4gICAgaWYgKCFlcilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoZXIuY29kZSA9PT0gXCJFTk9TWVNcIilcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICB2YXIgbm9ucm9vdCA9ICFwcm9jZXNzLmdldHVpZCB8fCBwcm9jZXNzLmdldHVpZCgpICE9PSAwXG4gICAgaWYgKG5vbnJvb3QpIHtcbiAgICAgIGlmIChlci5jb2RlID09PSBcIkVJTlZBTFwiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIilcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cblxubW9kdWxlLmV4cG9ydHMgPSBsZWdhY3lcblxuZnVuY3Rpb24gbGVnYWN5IChmcykge1xuICByZXR1cm4ge1xuICAgIFJlYWRTdHJlYW06IFJlYWRTdHJlYW0sXG4gICAgV3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pKSByZXR1cm4gbmV3IFJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAncic7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ1ZmZlclNpemUgPSA2NCAqIDEwMjQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuY29kaW5nKSB0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZW5kID0gSW5maW5pdHk7XG4gICAgICB9IGVsc2UgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdlbmQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCA+IHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA8PSBlbmQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZkICE9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLl9yZWFkKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5vcGVuKHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZmQgPSBmZDtcbiAgICAgIHNlbGYuZW1pdCgnb3BlbicsIGZkKTtcbiAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pKSByZXR1cm4gbmV3IFdyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5mbGFncyA9ICd3JztcbiAgICB0aGlzLmVuY29kaW5nID0gJ2JpbmFyeSc7XG4gICAgdGhpcy5tb2RlID0gNDM4OyAvKj0wNjY2Ki9cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDA7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1peGluIG9wdGlvbnMgaW50byB0aGlzXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGFydCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlID49IHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIHRoaXMuX3F1ZXVlID0gW107XG5cbiAgICBpZiAodGhpcy5mZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fb3BlbiA9IGZzLm9wZW47XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLCB0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgdW5kZWZpbmVkXSk7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVcblxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX3Byb3RvX19cbn1cblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IGdldFByb3RvdHlwZU9mKG9iaikgfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwgInZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscy5qcycpXG52YXIgbGVnYWN5ID0gcmVxdWlyZSgnLi9sZWdhY3ktc3RyZWFtcy5qcycpXG52YXIgY2xvbmUgPSByZXF1aXJlKCcuL2Nsb25lLmpzJylcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xudmFyIGdyYWNlZnVsUXVldWVcbnZhciBwcmV2aW91c1N5bWJvbFxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAtIG5vZGUgMC54IHBvbHlmaWxsICovXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBncmFjZWZ1bFF1ZXVlID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucXVldWUnKVxuICAvLyBUaGlzIGlzIHVzZWQgaW4gdGVzdGluZyBieSBmdXR1cmUgdmVyc2lvbnNcbiAgcHJldmlvdXNTeW1ib2wgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5wcmV2aW91cycpXG59IGVsc2Uge1xuICBncmFjZWZ1bFF1ZXVlID0gJ19fX2dyYWNlZnVsLWZzLnF1ZXVlJ1xuICBwcmV2aW91c1N5bWJvbCA9ICdfX19ncmFjZWZ1bC1mcy5wcmV2aW91cydcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG5mdW5jdGlvbiBwdWJsaXNoUXVldWUoY29udGV4dCwgcXVldWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIGdyYWNlZnVsUXVldWUsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHF1ZXVlXG4gICAgfVxuICB9KVxufVxuXG52YXIgZGVidWcgPSBub29wXG5pZiAodXRpbC5kZWJ1Z2xvZylcbiAgZGVidWcgPSB1dGlsLmRlYnVnbG9nKCdnZnM0JylcbmVsc2UgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSlcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbSA9IHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cylcbiAgICBtID0gJ0dGUzQ6ICcgKyBtLnNwbGl0KC9cXG4vKS5qb2luKCdcXG5HRlM0OiAnKVxuICAgIGNvbnNvbGUuZXJyb3IobSlcbiAgfVxuXG4vLyBPbmNlIHRpbWUgaW5pdGlhbGl6YXRpb25cbmlmICghZnNbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgLy8gVGhpcyBxdWV1ZSBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlIGxvYWRlZCBpbnN0YW5jZXNcbiAgdmFyIHF1ZXVlID0gZ2xvYmFsW2dyYWNlZnVsUXVldWVdIHx8IFtdXG4gIHB1Ymxpc2hRdWV1ZShmcywgcXVldWUpXG5cbiAgLy8gUGF0Y2ggZnMuY2xvc2UvY2xvc2VTeW5jIHRvIHNoYXJlZCBxdWV1ZSB2ZXJzaW9uLCBiZWNhdXNlIHdlIG5lZWRcbiAgLy8gdG8gcmV0cnkoKSB3aGVuZXZlciBhIGNsb3NlIGhhcHBlbnMgKmFueXdoZXJlKiBpbiB0aGUgcHJvZ3JhbS5cbiAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgd2hlbiBtdWx0aXBsZSBncmFjZWZ1bC1mcyBpbnN0YW5jZXMgYXJlXG4gIC8vIGluIHBsYXkgYXQgdGhlIHNhbWUgdGltZS5cbiAgZnMuY2xvc2UgPSAoZnVuY3Rpb24gKGZzJGNsb3NlKSB7XG4gICAgZnVuY3Rpb24gY2xvc2UgKGZkLCBjYikge1xuICAgICAgcmV0dXJuIGZzJGNsb3NlLmNhbGwoZnMsIGZkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VcbiAgfSkoZnMuY2xvc2UpXG5cbiAgZnMuY2xvc2VTeW5jID0gKGZ1bmN0aW9uIChmcyRjbG9zZVN5bmMpIHtcbiAgICBmdW5jdGlvbiBjbG9zZVN5bmMgKGZkKSB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgZnMkY2xvc2VTeW5jLmFwcGx5KGZzLCBhcmd1bWVudHMpXG4gICAgICByZXNldFF1ZXVlKClcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2VTeW5jLCBwcmV2aW91c1N5bWJvbCwge1xuICAgICAgdmFsdWU6IGZzJGNsb3NlU3luY1xuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlU3luY1xuICB9KShmcy5jbG9zZVN5bmMpXG5cbiAgaWYgKC9cXGJnZnM0XFxiL2kudGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnKSkge1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKGZzW2dyYWNlZnVsUXVldWVdKVxuICAgICAgcmVxdWlyZSgnYXNzZXJ0JykuZXF1YWwoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoLCAwKVxuICAgIH0pXG4gIH1cbn1cblxuaWYgKCFnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0pIHtcbiAgcHVibGlzaFF1ZXVlKGdsb2JhbCwgZnNbZ3JhY2VmdWxRdWV1ZV0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGNsb25lKGZzKSlcbmlmIChwcm9jZXNzLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCAmJiAhZnMuX19wYXRjaGVkKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXRjaChmcylcbiAgICBmcy5fX3BhdGNoZWQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBwYXRjaCAoZnMpIHtcbiAgLy8gRXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZXMgdGhlIG9wZW4oKSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbiBoZXJlXG4gIHBvbHlmaWxscyhmcylcbiAgZnMuZ3JhY2VmdWxpZnkgPSBwYXRjaFxuXG4gIGZzLmNyZWF0ZVJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtXG4gIGZzLmNyZWF0ZVdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW1cbiAgdmFyIGZzJHJlYWRGaWxlID0gZnMucmVhZEZpbGVcbiAgZnMucmVhZEZpbGUgPSByZWFkRmlsZVxuICBmdW5jdGlvbiByZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRyZWFkRmlsZSAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kcmVhZEZpbGUsIFtwYXRoLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyR3cml0ZUZpbGUgPSBmcy53cml0ZUZpbGVcbiAgZnMud3JpdGVGaWxlID0gd3JpdGVGaWxlXG4gIGZ1bmN0aW9uIHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkd3JpdGVGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kd3JpdGVGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkYXBwZW5kRmlsZSA9IGZzLmFwcGVuZEZpbGVcbiAgaWYgKGZzJGFwcGVuZEZpbGUpXG4gICAgZnMuYXBwZW5kRmlsZSA9IGFwcGVuZEZpbGVcbiAgZnVuY3Rpb24gYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kYXBwZW5kRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGNvcHlGaWxlID0gZnMuY29weUZpbGVcbiAgaWYgKGZzJGNvcHlGaWxlKVxuICAgIGZzLmNvcHlGaWxlID0gY29weUZpbGVcbiAgZnVuY3Rpb24gY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBmbGFnc1xuICAgICAgZmxhZ3MgPSAwXG4gICAgfVxuICAgIHJldHVybiBnbyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRjb3B5RmlsZSwgW3NyYywgZGVzdCwgZmxhZ3MsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHJlYWRkaXIgPSBmcy5yZWFkZGlyXG4gIGZzLnJlYWRkaXIgPSByZWFkZGlyXG4gIHZhciBub1JlYWRkaXJPcHRpb25WZXJzaW9ucyA9IC9edlswLTVdXFwuL1xuICBmdW5jdGlvbiByZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHZhciBnbyRyZWFkZGlyID0gbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMudGVzdChwcm9jZXNzLnZlcnNpb24pXG4gICAgICA/IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cbiAgICAgIDogZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBvcHRpb25zLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuXG4gICAgcmV0dXJuIGdvJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBmcyRyZWFkZGlyQ2FsbGJhY2sgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCBmaWxlcykge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtcbiAgICAgICAgICAgIGdvJHJlYWRkaXIsXG4gICAgICAgICAgICBbcGF0aCwgb3B0aW9ucywgY2JdLFxuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgc3RhcnRUaW1lIHx8IERhdGUubm93KCksXG4gICAgICAgICAgICBEYXRlLm5vdygpXG4gICAgICAgICAgXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVzICYmIGZpbGVzLnNvcnQpXG4gICAgICAgICAgICBmaWxlcy5zb3J0KClcblxuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5jYWxsKHRoaXMsIGVyciwgZmlsZXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy52ZXJzaW9uLnN1YnN0cigwLCA0KSA9PT0gJ3YwLjgnKSB7XG4gICAgdmFyIGxlZ1N0cmVhbXMgPSBsZWdhY3koZnMpXG4gICAgUmVhZFN0cmVhbSA9IGxlZ1N0cmVhbXMuUmVhZFN0cmVhbVxuICAgIFdyaXRlU3RyZWFtID0gbGVnU3RyZWFtcy5Xcml0ZVN0cmVhbVxuICB9XG5cbiAgdmFyIGZzJFJlYWRTdHJlYW0gPSBmcy5SZWFkU3RyZWFtXG4gIGlmIChmcyRSZWFkU3RyZWFtKSB7XG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFJlYWRTdHJlYW0ucHJvdG90eXBlKVxuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBSZWFkU3RyZWFtJG9wZW5cbiAgfVxuXG4gIHZhciBmcyRXcml0ZVN0cmVhbSA9IGZzLldyaXRlU3RyZWFtXG4gIGlmIChmcyRXcml0ZVN0cmVhbSkge1xuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkV3JpdGVTdHJlYW0ucHJvdG90eXBlKVxuICAgIFdyaXRlU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gV3JpdGVTdHJlYW0kb3BlblxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1dyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIFdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIC8vIGxlZ2FjeSBuYW1lc1xuICB2YXIgRmlsZVJlYWRTdHJlYW0gPSBSZWFkU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVSZWFkU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICB2YXIgRmlsZVdyaXRlU3RyZWFtID0gV3JpdGVTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVdyaXRlU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEZpbGVXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRSZWFkU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gUmVhZFN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFJlYWRTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAodGhhdC5hdXRvQ2xvc2UpXG4gICAgICAgICAgdGhhdC5kZXN0cm95KClcblxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgICB0aGF0LnJlYWQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JpdGVTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkV3JpdGVTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbS5hcHBseShPYmplY3QuY3JlYXRlKFdyaXRlU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoYXQuZGVzdHJveSgpXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLlJlYWRTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5Xcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgdmFyIGZzJG9wZW4gPSBmcy5vcGVuXG4gIGZzLm9wZW4gPSBvcGVuXG4gIGZ1bmN0aW9uIG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYikge1xuICAgIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gbW9kZSwgbW9kZSA9IG51bGxcblxuICAgIHJldHVybiBnbyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJG9wZW4gKHBhdGgsIGZsYWdzLCBtb2RlLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkb3BlbihwYXRoLCBmbGFncywgbW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kb3BlbiwgW3BhdGgsIGZsYWdzLCBtb2RlLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmc1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlIChlbGVtKSB7XG4gIGRlYnVnKCdFTlFVRVVFJywgZWxlbVswXS5uYW1lLCBlbGVtWzFdKVxuICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gIHJldHJ5KClcbn1cblxuLy8ga2VlcCB0cmFjayBvZiB0aGUgdGltZW91dCBiZXR3ZWVuIHJldHJ5KCkgY2FsbHNcbnZhciByZXRyeVRpbWVyXG5cbi8vIHJlc2V0IHRoZSBzdGFydFRpbWUgYW5kIGxhc3RUaW1lIHRvIG5vd1xuLy8gdGhpcyByZXNldHMgdGhlIHN0YXJ0IG9mIHRoZSA2MCBzZWNvbmQgb3ZlcmFsbCB0aW1lb3V0IGFzIHdlbGwgYXMgdGhlXG4vLyBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzIHNvIHRoYXQgd2UnbGwgcmV0cnkgdGhlc2Ugam9icyBzb29uZXJcbmZ1bmN0aW9uIHJlc2V0UXVldWUgKCkge1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gZW50cmllcyB0aGF0IGFyZSBvbmx5IGEgbGVuZ3RoIG9mIDIgYXJlIGZyb20gYW4gb2xkZXIgdmVyc2lvbiwgZG9uJ3RcbiAgICAvLyBib3RoZXIgbW9kaWZ5aW5nIHRob3NlIHNpbmNlIHRoZXknbGwgYmUgcmV0cmllZCBhbnl3YXkuXG4gICAgaWYgKGZzW2dyYWNlZnVsUXVldWVdW2ldLmxlbmd0aCA+IDIpIHtcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzNdID0gbm93IC8vIHN0YXJ0VGltZVxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bNF0gPSBub3cgLy8gbGFzdFRpbWVcbiAgICB9XG4gIH1cbiAgLy8gY2FsbCByZXRyeSB0byBtYWtlIHN1cmUgd2UncmUgYWN0aXZlbHkgcHJvY2Vzc2luZyB0aGUgcXVldWVcbiAgcmV0cnkoKVxufVxuXG5mdW5jdGlvbiByZXRyeSAoKSB7XG4gIC8vIGNsZWFyIHRoZSB0aW1lciBhbmQgcmVtb3ZlIGl0IHRvIGhlbHAgcHJldmVudCB1bmludGVuZGVkIGNvbmN1cnJlbmN5XG4gIGNsZWFyVGltZW91dChyZXRyeVRpbWVyKVxuICByZXRyeVRpbWVyID0gdW5kZWZpbmVkXG5cbiAgaWYgKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm5cblxuICB2YXIgZWxlbSA9IGZzW2dyYWNlZnVsUXVldWVdLnNoaWZ0KClcbiAgdmFyIGZuID0gZWxlbVswXVxuICB2YXIgYXJncyA9IGVsZW1bMV1cbiAgLy8gdGhlc2UgaXRlbXMgbWF5IGJlIHVuc2V0IGlmIHRoZXkgd2VyZSBhZGRlZCBieSBhbiBvbGRlciBncmFjZWZ1bC1mc1xuICB2YXIgZXJyID0gZWxlbVsyXVxuICB2YXIgc3RhcnRUaW1lID0gZWxlbVszXVxuICB2YXIgbGFzdFRpbWUgPSBlbGVtWzRdXG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0VGltZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmIHdlJ3ZlIHdhaXRlZFxuICAvLyBsb25nIGVub3VnaCwgc28gZ28gYWhlYWQgYW5kIHJldHJ5IHRoaXMgaXRlbSBub3dcbiAgaWYgKHN0YXJ0VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICBmbi5hcHBseShudWxsLCBhcmdzKVxuICB9IGVsc2UgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPj0gNjAwMDApIHtcbiAgICAvLyBpdCdzIGJlZW4gbW9yZSB0aGFuIDYwIHNlY29uZHMgdG90YWwsIGJhaWwgbm93XG4gICAgZGVidWcoJ1RJTUVPVVQnLCBmbi5uYW1lLCBhcmdzKVxuICAgIHZhciBjYiA9IGFyZ3MucG9wKClcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IuY2FsbChudWxsLCBlcnIpXG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGhlIGxhc3QgYXR0ZW1wdCBhbmQgcmlnaHQgbm93XG4gICAgdmFyIHNpbmNlQXR0ZW1wdCA9IERhdGUubm93KCkgLSBsYXN0VGltZVxuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHdoZW4gd2UgZmlyc3QgdHJpZWQsIGFuZCB3aGVuIHdlIGxhc3QgdHJpZWRcbiAgICAvLyByb3VuZGVkIHVwIHRvIGF0IGxlYXN0IDFcbiAgICB2YXIgc2luY2VTdGFydCA9IE1hdGgubWF4KGxhc3RUaW1lIC0gc3RhcnRUaW1lLCAxKVxuICAgIC8vIGJhY2tvZmYuIHdhaXQgbG9uZ2VyIHRoYW4gdGhlIHRvdGFsIHRpbWUgd2UndmUgYmVlbiByZXRyeWluZywgYnV0IG9ubHlcbiAgICAvLyB1cCB0byBhIG1heGltdW0gb2YgMTAwbXNcbiAgICB2YXIgZGVzaXJlZERlbGF5ID0gTWF0aC5taW4oc2luY2VTdGFydCAqIDEuMiwgMTAwKVxuICAgIC8vIGl0J3MgYmVlbiBsb25nIGVub3VnaCBzaW5jZSB0aGUgbGFzdCByZXRyeSwgZG8gaXQgYWdhaW5cbiAgICBpZiAoc2luY2VBdHRlbXB0ID49IGRlc2lyZWREZWxheSkge1xuICAgICAgZGVidWcoJ1JFVFJZJywgZm4ubmFtZSwgYXJncylcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KFtzdGFydFRpbWVdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgY2FuJ3QgZG8gdGhpcyBqb2IgeWV0LCBwdXNoIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgICAvLyBhbmQgbGV0IHRoZSBuZXh0IGl0ZXJhdGlvbiBjaGVjayBhZ2FpblxuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICAgIH1cbiAgfVxuXG4gIC8vIHNjaGVkdWxlIG91ciBuZXh0IHJ1biBpZiBvbmUgaXNuJ3QgYWxyZWFkeSBzY2hlZHVsZWRcbiAgaWYgKHJldHJ5VGltZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KHJldHJ5LCAwKVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG4vLyBUaGlzIGlzIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9ybWFsaXplL216XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiBKb25hdGhhbiBPbmcgbWVAam9uZ2xlYmVycnkuY29tIGFuZCBDb250cmlidXRvcnNcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG5jb25zdCBhcGkgPSBbXG4gICdhY2Nlc3MnLFxuICAnYXBwZW5kRmlsZScsXG4gICdjaG1vZCcsXG4gICdjaG93bicsXG4gICdjbG9zZScsXG4gICdjb3B5RmlsZScsXG4gICdmY2htb2QnLFxuICAnZmNob3duJyxcbiAgJ2ZkYXRhc3luYycsXG4gICdmc3RhdCcsXG4gICdmc3luYycsXG4gICdmdHJ1bmNhdGUnLFxuICAnZnV0aW1lcycsXG4gICdsY2htb2QnLFxuICAnbGNob3duJyxcbiAgJ2xpbmsnLFxuICAnbHN0YXQnLFxuICAnbWtkaXInLFxuICAnbWtkdGVtcCcsXG4gICdvcGVuJyxcbiAgJ29wZW5kaXInLFxuICAncmVhZGRpcicsXG4gICdyZWFkRmlsZScsXG4gICdyZWFkbGluaycsXG4gICdyZWFscGF0aCcsXG4gICdyZW5hbWUnLFxuICAncm0nLFxuICAncm1kaXInLFxuICAnc3RhdCcsXG4gICdzeW1saW5rJyxcbiAgJ3RydW5jYXRlJyxcbiAgJ3VubGluaycsXG4gICd1dGltZXMnLFxuICAnd3JpdGVGaWxlJ1xuXS5maWx0ZXIoa2V5ID0+IHtcbiAgLy8gU29tZSBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBzb21lIHN5c3RlbXMuIEV4OlxuICAvLyBmcy5vcGVuZGlyIHdhcyBhZGRlZCBpbiBOb2RlLmpzIHYxMi4xMi4wXG4gIC8vIGZzLnJtIHdhcyBhZGRlZCBpbiBOb2RlLmpzIHYxNC4xNC4wXG4gIC8vIGZzLmxjaG93biBpcyBub3QgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IHNvbWUgTGludXhcbiAgcmV0dXJuIHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nXG59KVxuXG4vLyBFeHBvcnQgYWxsIGtleXM6XG5PYmplY3Qua2V5cyhmcykuZm9yRWFjaChrZXkgPT4ge1xuICBpZiAoa2V5ID09PSAncHJvbWlzZXMnKSB7XG4gICAgLy8gZnMucHJvbWlzZXMgaXMgYSBnZXR0ZXIgcHJvcGVydHkgdGhhdCB0cmlnZ2VycyBFeHBlcmltZW50YWxXYXJuaW5nXG4gICAgLy8gRG9uJ3QgcmUtZXhwb3J0IGl0IGhlcmUsIHRoZSBnZXR0ZXIgaXMgZGVmaW5lZCBpbiBcImxpYi9pbmRleC5qc1wiXG4gICAgcmV0dXJuXG4gIH1cbiAgZXhwb3J0c1trZXldID0gZnNba2V5XVxufSlcblxuLy8gVW5pdmVyc2FsaWZ5IGFzeW5jIG1ldGhvZHM6XG5hcGkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBleHBvcnRzW21ldGhvZF0gPSB1KGZzW21ldGhvZF0pXG59KVxuXG4vLyBXZSBkaWZmZXIgZnJvbSBtei9mcyBpbiB0aGF0IHdlIHN0aWxsIHNoaXAgdGhlIG9sZCwgYnJva2VuLCBmcy5leGlzdHMoKVxuLy8gc2luY2Ugd2UgYXJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIG5hdGl2ZSBtb2R1bGVcbmV4cG9ydHMuZXhpc3RzID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIHJlc29sdmUpXG4gIH0pXG59XG5cbi8vIGZzLnJlYWQoKSwgZnMud3JpdGUoKSwgJiBmcy53cml0ZXYoKSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byBtdWx0aXBsZSBjYWxsYmFjayBhcmdzXG5cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gYmVcbi8vIGZzLndyaXRlKGZkLCBidWZmZXJbLCBvZmZzZXRbLCBsZW5ndGhbLCBwb3NpdGlvbl1dXSwgY2FsbGJhY2spXG4vLyBPUlxuLy8gZnMud3JpdGUoZmQsIHN0cmluZ1ssIHBvc2l0aW9uWywgZW5jb2RpbmddXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIGZzLndyaXRldiBvbmx5IGF2YWlsYWJsZSBpbiBOb2RlIHYxMi45LjArXG5pZiAodHlwZW9mIGZzLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBGdW5jdGlvbiBzaWduYXR1cmUgaXNcbiAgLy8gcy53cml0ZXYoZmQsIGJ1ZmZlcnNbLCBwb3NpdGlvbl0sIGNhbGxiYWNrKVxuICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuICBleHBvcnRzLndyaXRldiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVycykgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVycyB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbi8vIGZzLnJlYWxwYXRoLm5hdGl2ZSBvbmx5IGF2YWlsYWJsZSBpbiBOb2RlIHY5LjIrXG5pZiAodHlwZW9mIGZzLnJlYWxwYXRoLm5hdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBleHBvcnRzLnJlYWxwYXRoLm5hdGl2ZSA9IHUoZnMucmVhbHBhdGgubmF0aXZlKVxufVxuIiwgIm1vZHVsZS5leHBvcnRzID0gciA9PiB7XG4gIGNvbnN0IG4gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpXG4gIHIgPSByLnNwbGl0KCcuJykubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKVxuICByZXR1cm4gblswXSA+IHJbMF0gfHwgKG5bMF0gPT09IHJbMF0gJiYgKG5bMV0gPiByWzFdIHx8IChuWzFdID09PSByWzFdICYmIG5bMl0gPj0gclsyXSkpKVxufVxuIiwgIi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21ha2UtZGlyXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCdcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgYXRMZWFzdE5vZGUgPSByZXF1aXJlKCdhdC1sZWFzdC1ub2RlJylcblxuY29uc3QgdXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uID0gYXRMZWFzdE5vZGUoJzEwLjEyLjAnKVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzg5ODdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ1di9saWJ1di9wdWxsLzEwODhcbmNvbnN0IGNoZWNrUGF0aCA9IHB0aCA9PiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgcGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzID0gL1s8PjpcInw/Kl0vLnRlc3QocHRoLnJlcGxhY2UocGF0aC5wYXJzZShwdGgpLnJvb3QsICcnKSlcblxuICAgIGlmIChwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtwdGh9YClcbiAgICAgIGVycm9yLmNvZGUgPSAnRUlOVkFMJ1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc09wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgb3B0aW9ucyA9IHsgbW9kZTogb3B0aW9ucyB9XG4gIHJldHVybiB7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH1cbn1cblxuY29uc3QgcGVybWlzc2lvbkVycm9yID0gcHRoID0+IHtcbiAgLy8gVGhpcyByZXBsaWNhdGVzIHRoZSBleGNlcHRpb24gb2YgYGZzLm1rZGlyYCB3aXRoIG5hdGl2ZSB0aGVcbiAgLy8gYHJlY3VzaXZlYCBvcHRpb24gd2hlbiBydW4gb24gYW4gaW52YWxpZCBkcml2ZSB1bmRlciBXaW5kb3dzLlxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgb3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQsIG1rZGlyICcke3B0aH0nYClcbiAgZXJyb3IuY29kZSA9ICdFUEVSTSdcbiAgZXJyb3IuZXJybm8gPSAtNDA0OFxuICBlcnJvci5wYXRoID0gcHRoXG4gIGVycm9yLnN5c2NhbGwgPSAnbWtkaXInXG4gIHJldHVybiBlcnJvclxufVxuXG5tb2R1bGUuZXhwb3J0cy5tYWtlRGlyID0gYXN5bmMgKGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChpbnB1dClcbiAgb3B0aW9ucyA9IHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cbiAgaWYgKHVzZU5hdGl2ZVJlY3Vyc2l2ZU9wdGlvbikge1xuICAgIGNvbnN0IHB0aCA9IHBhdGgucmVzb2x2ZShpbnB1dClcblxuICAgIHJldHVybiBmcy5ta2RpcihwdGgsIHtcbiAgICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtYWtlID0gYXN5bmMgcHRoID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIocHRoLCBvcHRpb25zLm1vZGUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHB0aCkgPT09IHB0aCkge1xuICAgICAgICAgIHRocm93IHBlcm1pc3Npb25FcnJvcihwdGgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbnVsbCBieXRlcycpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG1ha2UocGF0aC5kaXJuYW1lKHB0aCkpXG4gICAgICAgIHJldHVybiBtYWtlKHB0aClcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHB0aClcbiAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgLy8gVGhpcyBlcnJvciBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSB1c2VyXG4gICAgICAgICAgLy8gaXQgaXMgY2F1Z2h0IGJlbG93LCBhbmQgdGhlIG9yaWdpbmFsIGVycm9yIGlzIHRocm93blxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhdGggaXMgbm90IGEgZGlyZWN0b3J5JylcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ha2UocGF0aC5yZXNvbHZlKGlucHV0KSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGlucHV0KVxuICBvcHRpb25zID0gcHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblxuICBpZiAodXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uKSB7XG4gICAgY29uc3QgcHRoID0gcGF0aC5yZXNvbHZlKGlucHV0KVxuXG4gICAgcmV0dXJuIGZzLm1rZGlyU3luYyhwdGgsIHtcbiAgICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtYWtlID0gcHRoID0+IHtcbiAgICB0cnkge1xuICAgICAgZnMubWtkaXJTeW5jKHB0aCwgb3B0aW9ucy5tb2RlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgaWYgKHBhdGguZGlybmFtZShwdGgpID09PSBwdGgpIHtcbiAgICAgICAgICB0aHJvdyBwZXJtaXNzaW9uRXJyb3IocHRoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ251bGwgYnl0ZXMnKSkge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBtYWtlKHBhdGguZGlybmFtZShwdGgpKVxuICAgICAgICByZXR1cm4gbWFrZShwdGgpXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZnMuc3RhdFN5bmMocHRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgLy8gVGhpcyBlcnJvciBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSB1c2VyXG4gICAgICAgICAgLy8gaXQgaXMgY2F1Z2h0IGJlbG93LCBhbmQgdGhlIG9yaWdpbmFsIGVycm9yIGlzIHRocm93blxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhdGggaXMgbm90IGEgZGlyZWN0b3J5JylcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ha2UocGF0aC5yZXNvbHZlKGlucHV0KSlcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgeyBtYWtlRGlyOiBfbWFrZURpciwgbWFrZURpclN5bmMgfSA9IHJlcXVpcmUoJy4vbWFrZS1kaXInKVxuY29uc3QgbWFrZURpciA9IHUoX21ha2VEaXIpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBta2RpcnM6IG1ha2VEaXIsXG4gIG1rZGlyc1N5bmM6IG1ha2VEaXJTeW5jLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IG1ha2VEaXIsXG4gIG1rZGlycFN5bmM6IG1ha2VEaXJTeW5jLFxuICBlbnN1cmVEaXI6IG1ha2VEaXIsXG4gIGVuc3VyZURpclN5bmM6IG1ha2VEaXJTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXMgKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spIHtcbiAgLy8gaWYgKCFIQVNfTUlMTElTX1JFUykgcmV0dXJuIGZzLnV0aW1lcyhwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKVxuICBmcy5vcGVuKHBhdGgsICdyKycsIChlcnIsIGZkKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBmcy5mdXRpbWVzKGZkLCBhdGltZSwgbXRpbWUsIGZ1dGltZXNFcnIgPT4ge1xuICAgICAgZnMuY2xvc2UoZmQsIGNsb3NlRXJyID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhmdXRpbWVzRXJyIHx8IGNsb3NlRXJyKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXNTeW5jIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncisnKVxuICBmcy5mdXRpbWVzU3luYyhmZCwgYXRpbWUsIG10aW1lKVxuICByZXR1cm4gZnMuY2xvc2VTeW5jKGZkKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXRpbWVzTWlsbGlzLFxuICB1dGltZXNNaWxsaXNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgYXRMZWFzdE5vZGUgPSByZXF1aXJlKCdhdC1sZWFzdC1ub2RlJylcblxuY29uc3Qgbm9kZVN1cHBvcnRzQmlnSW50ID0gYXRMZWFzdE5vZGUoJzEwLjUuMCcpXG5jb25zdCBzdGF0ID0gKGZpbGUpID0+IG5vZGVTdXBwb3J0c0JpZ0ludCA/IGZzLnN0YXQoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSkgOiBmcy5zdGF0KGZpbGUpXG5jb25zdCBzdGF0U3luYyA9IChmaWxlKSA9PiBub2RlU3VwcG9ydHNCaWdJbnQgPyBmcy5zdGF0U3luYyhmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KSA6IGZzLnN0YXRTeW5jKGZpbGUpXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICBzdGF0KHNyYyksXG4gICAgc3RhdChkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCkge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRTeW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRTeW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIGNiKSB7XG4gIHV0aWwuY2FsbGJhY2tpZnkoZ2V0U3RhdHMpKHNyYywgZGVzdCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IHN0YXRzXG4gICAgaWYgKGRlc3RTdGF0ICYmIGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ1NvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuJykpXG4gICAgfVxuICAgIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgaXNTcmNTdWJkaXIoc3JjLCBkZXN0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpKVxuICAgIH1cbiAgICByZXR1cm4gY2IobnVsbCwgeyBzcmNTdGF0LCBkZXN0U3RhdCB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1BhdGhzU3luYyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBnZXRTdGF0c1N5bmMoc3JjLCBkZXN0KVxuICBpZiAoZGVzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICB9XG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgaXNTcmNTdWJkaXIoc3JjLCBkZXN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cbiAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQgfVxufVxuXG4vLyByZWN1cnNpdmVseSBjaGVjayBpZiBkZXN0IHBhcmVudCBpcyBhIHN1YmRpcmVjdG9yeSBvZiBzcmMuXG4vLyBJdCB3b3JrcyBmb3IgYWxsIGZpbGUgdHlwZXMgaW5jbHVkaW5nIHN5bWxpbmtzIHNpbmNlIGl0XG4vLyBjaGVja3MgdGhlIHNyYyBhbmQgZGVzdCBpbm9kZXMuIEl0IHN0YXJ0cyBmcm9tIHRoZSBkZWVwZXN0XG4vLyBwYXJlbnQgYW5kIHN0b3BzIG9uY2UgaXQgcmVhY2hlcyB0aGUgc3JjIHBhcmVudCBvciB0aGUgcm9vdCBwYXRoLlxuZnVuY3Rpb24gY2hlY2tQYXJlbnRQYXRocyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSwgY2IpIHtcbiAgY29uc3Qgc3JjUGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShzcmMpKVxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShkZXN0KSlcbiAgaWYgKGRlc3RQYXJlbnQgPT09IHNyY1BhcmVudCB8fCBkZXN0UGFyZW50ID09PSBwYXRoLnBhcnNlKGRlc3RQYXJlbnQpLnJvb3QpIHJldHVybiBjYigpXG4gIGNvbnN0IGNhbGxiYWNrID0gKGVyciwgZGVzdFN0YXQpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gY2IoKVxuICAgICAgcmV0dXJuIGNiKGVycilcbiAgICB9XG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKSlcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0UGFyZW50LCBmdW5jTmFtZSwgY2IpXG4gIH1cbiAgaWYgKG5vZGVTdXBwb3J0c0JpZ0ludCkgZnMuc3RhdChkZXN0UGFyZW50LCB7IGJpZ2ludDogdHJ1ZSB9LCBjYWxsYmFjaylcbiAgZWxzZSBmcy5zdGF0KGRlc3RQYXJlbnQsIGNhbGxiYWNrKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gc3RhdFN5bmMoZGVzdFBhcmVudClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIGlmIChkZXN0U3RhdC5pbm8gJiYgZGVzdFN0YXQuZGV2ICYmIGRlc3RTdGF0LmlubyA9PT0gc3JjU3RhdC5pbm8gJiYgZGVzdFN0YXQuZGV2ID09PSBzcmNTdGF0LmRldikge1xuICAgIGlmIChub2RlU3VwcG9ydHNCaWdJbnQgfHwgZGVzdFN0YXQuaW5vIDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgIC8vIGRlZmluaXRpdmUgYW5zd2VyXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBVc2UgYWRkaXRpb25hbCBoZXVyaXN0aWNzIGlmIHdlIGNhbid0IHVzZSAnYmlnaW50Jy5cbiAgICAvLyBEaWZmZXJlbnQgJ2lubycgY291bGQgYmUgcmVwcmVzZW50ZWQgdGhlIHNhbWUgaWYgdGhleSBhcmUgPj0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAvLyBTZWUgaXNzdWUgNjU3XG4gICAgaWYgKGRlc3RTdGF0LnNpemUgPT09IHNyY1N0YXQuc2l6ZSAmJlxuICAgICAgICBkZXN0U3RhdC5tb2RlID09PSBzcmNTdGF0Lm1vZGUgJiZcbiAgICAgICAgZGVzdFN0YXQubmxpbmsgPT09IHNyY1N0YXQubmxpbmsgJiZcbiAgICAgICAgZGVzdFN0YXQuYXRpbWVNcyA9PT0gc3JjU3RhdC5hdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0Lm10aW1lTXMgPT09IHNyY1N0YXQubXRpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5jdGltZU1zID09PSBzcmNTdGF0LmN0aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQuYmlydGh0aW1lTXMgPT09IHNyY1N0YXQuYmlydGh0aW1lTXMpIHtcbiAgICAgIC8vIGhldXJpc3RpYyBhbnN3ZXJcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyByZXR1cm4gdHJ1ZSBpZiBkZXN0IGlzIGEgc3ViZGlyIG9mIHNyYywgb3RoZXJ3aXNlIGZhbHNlLlxuLy8gSXQgb25seSBjaGVja3MgdGhlIHBhdGggc3RyaW5ncy5cbmZ1bmN0aW9uIGlzU3JjU3ViZGlyIChzcmMsIGRlc3QpIHtcbiAgY29uc3Qgc3JjQXJyID0gcGF0aC5yZXNvbHZlKHNyYykuc3BsaXQocGF0aC5zZXApLmZpbHRlcihpID0+IGkpXG4gIGNvbnN0IGRlc3RBcnIgPSBwYXRoLnJlc29sdmUoZGVzdCkuc3BsaXQocGF0aC5zZXApLmZpbHRlcihpID0+IGkpXG4gIHJldHVybiBzcmNBcnIucmVkdWNlKChhY2MsIGN1ciwgaSkgPT4gYWNjICYmIGRlc3RBcnJbaV0gPT09IGN1ciwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gZXJyTXNnIChzcmMsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIHJldHVybiBgQ2Fubm90ICR7ZnVuY05hbWV9ICcke3NyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7ZGVzdH0nLmBcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNoZWNrUGF0aHMsXG4gIGNoZWNrUGF0aHNTeW5jLFxuICBjaGVja1BhcmVudFBhdGhzLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgaXNTcmNTdWJkaXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnNTeW5jID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJzU3luY1xuY29uc3QgdXRpbWVzTWlsbGlzU3luYyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzU3luY1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIGNvcHlTeW5jIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0cyA9IHsgZmlsdGVyOiBvcHRzIH1cbiAgfVxuXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybihgZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjlgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdjb3B5JylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcbiAgcmV0dXJuIGhhbmRsZUZpbHRlckFuZENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gaGFuZGxlRmlsdGVyQW5kQ29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKHNyYywgZGVzdCkpIHJldHVyblxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkZXN0UGFyZW50KSkgbWtkaXJzU3luYyhkZXN0UGFyZW50KVxuICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAob3B0cy5maWx0ZXIgJiYgIW9wdHMuZmlsdGVyKHNyYywgZGVzdCkpIHJldHVyblxuICByZXR1cm4gZ2V0U3RhdHMoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHMgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdFN5bmMgPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdFN5bmMgOiBmcy5sc3RhdFN5bmNcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRTeW5jKHNyYylcblxuICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gb25EaXIoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZpbGUoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKCkpIHJldHVybiBvbkZpbGUoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc1N5bWJvbGljTGluaygpKSByZXR1cm4gb25MaW5rKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGlua1N5bmMoZGVzdClcbiAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSBoYW5kbGVUaW1lc3RhbXBzKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0KVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzIChzcmNNb2RlLCBzcmMsIGRlc3QpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSlcbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdClcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kU3luYyhkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0KSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyYylcbiAgcmV0dXJuIHV0aW1lc01pbGxpc1N5bmMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQgJiYgIWRlc3RTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgfVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLm1rZGlyU3luYyhkZXN0KVxuICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5yZWFkZGlyU3luYyhzcmMpLmZvckVhY2goaXRlbSA9PiBjb3B5RGlySXRlbShpdGVtLCBzcmMsIGRlc3QsIG9wdHMpKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHNyY0l0ZW0gPSBwYXRoLmpvaW4oc3JjLCBpdGVtKVxuICBjb25zdCBkZXN0SXRlbSA9IHBhdGguam9pbihkZXN0LCBpdGVtKVxuICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScpXG4gIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzKVxufVxuXG5mdW5jdGlvbiBvbkxpbmsgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgbGV0IHJlc29sdmVkU3JjID0gZnMucmVhZGxpbmtTeW5jKHNyYylcbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgfVxuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH0gZWxzZSB7XG4gICAgbGV0IHJlc29sdmVkRGVzdFxuICAgIHRyeSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBmcy5yZWFkbGlua1N5bmMoZGVzdClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGRlc3QgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnksXG4gICAgICAvLyBXaW5kb3dzIG1heSB0aHJvdyBVTktOT1dOIGVycm9yLiBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLFxuICAgICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFSU5WQUwnIHx8IGVyci5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgcmVzb2x2ZWREZXN0ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkRGVzdClcbiAgICB9XG4gICAgaWYgKHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWRTcmMsIHJlc29sdmVkRGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7cmVzb2x2ZWRTcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3Jlc29sdmVkRGVzdH0nLmApXG4gICAgfVxuXG4gICAgLy8gcHJldmVudCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICBpZiAoZnMuc3RhdFN5bmMoZGVzdCkuaXNEaXJlY3RvcnkoKSAmJiBzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cmVzb2x2ZWREZXN0fScgd2l0aCAnJHtyZXNvbHZlZFNyY30nLmApXG4gICAgfVxuICAgIHJldHVybiBjb3B5TGluayhyZXNvbHZlZFNyYywgZGVzdClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5TGluayAocmVzb2x2ZWRTcmMsIGRlc3QpIHtcbiAgZnMudW5saW5rU3luYyhkZXN0KVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bmNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHlTeW5jOiByZXF1aXJlKCcuL2NvcHktc3luYycpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuXG5mdW5jdGlvbiBwYXRoRXhpc3RzIChwYXRoKSB7XG4gIHJldHVybiBmcy5hY2Nlc3MocGF0aCkudGhlbigoKSA9PiB0cnVlKS5jYXRjaCgoKSA9PiBmYWxzZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhdGhFeGlzdHM6IHUocGF0aEV4aXN0cyksXG4gIHBhdGhFeGlzdHNTeW5jOiBmcy5leGlzdHNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJzXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5jb25zdCB1dGltZXNNaWxsaXMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIGNvcHkgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nICYmICFjYikge1xuICAgIGNiID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0cyA9IHsgZmlsdGVyOiBvcHRzIH1cbiAgfVxuXG4gIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkge31cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBjb25zb2xlLndhcm4oYGZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XFxuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5YClcbiAgfVxuXG4gIHN0YXQuY2hlY2tQYXRocyhzcmMsIGRlc3QsICdjb3B5JywgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IHN0YXRzXG4gICAgc3RhdC5jaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGlmIChvcHRzLmZpbHRlcikgcmV0dXJuIGhhbmRsZUZpbHRlcihjaGVja1BhcmVudERpciwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgICByZXR1cm4gY2hlY2tQYXJlbnREaXIoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJlbnREaXIgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgcGF0aEV4aXN0cyhkZXN0UGFyZW50LCAoZXJyLCBkaXJFeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgbWtkaXJzKGRlc3RQYXJlbnQsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXIgKG9uSW5jbHVkZSwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgUHJvbWlzZS5yZXNvbHZlKG9wdHMuZmlsdGVyKHNyYywgZGVzdCkpLnRoZW4oaW5jbHVkZSA9PiB7XG4gICAgaWYgKGluY2x1ZGUpIHJldHVybiBvbkluY2x1ZGUoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgcmV0dXJuIGNiKClcbiAgfSwgZXJyb3IgPT4gY2IoZXJyb3IpKVxufVxuXG5mdW5jdGlvbiBzdGFydENvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmIChvcHRzLmZpbHRlcikgcmV0dXJuIGhhbmRsZUZpbHRlcihnZXRTdGF0cywgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHMgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IHN0YXQgPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdCA6IGZzLmxzdGF0XG4gIHN0YXQoc3JjLCAoZXJyLCBzcmNTdGF0KSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcblxuICAgIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKCkpIHJldHVybiBvbkZpbGUoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgZWxzZSBpZiAoc3JjU3RhdC5pc1N5bWJvbGljTGluaygpKSByZXR1cm4gb25MaW5rKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkZpbGUgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gbWF5Q29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rKGRlc3QsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSBlbHNlIGlmIChvcHRzLmVycm9yT25FeGlzdCkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApKVxuICB9IGVsc2UgcmV0dXJuIGNiKClcbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMuY29weUZpbGUoc3JjLCBkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSByZXR1cm4gaGFuZGxlVGltZXN0YW1wc0FuZE1vZGUoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIGNiKVxuICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzQW5kTW9kZSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYikge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkge1xuICAgIHJldHVybiBtYWtlRmlsZVdyaXRhYmxlKGRlc3QsIHNyY01vZGUsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzQW5kTW9kZShzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzQW5kTW9kZShzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSwgY2IpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMCwgY2IpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzQW5kTW9kZSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYikge1xuICBzZXREZXN0VGltZXN0YW1wcyhzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNldERlc3RNb2RlIChkZXN0LCBzcmNNb2RlLCBjYikge1xuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjTW9kZSwgY2IpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QsIGNiKSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBmcy5zdGF0KHNyYywgKGVyciwgdXBkYXRlZFNyY1N0YXQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiB1dGltZXNNaWxsaXMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25EaXIgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICBpZiAoZGVzdFN0YXQgJiYgIWRlc3RTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7ZGVzdH0nIHdpdGggZGlyZWN0b3J5ICcke3NyY30nLmApKVxuICB9XG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5ta2RpcihkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29weURpcihzcmMsIGRlc3QsIG9wdHMsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMucmVhZGRpcihzcmMsIChlcnIsIGl0ZW1zKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gY29weURpckl0ZW1zKGl0ZW1zLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbXMgKGl0ZW1zLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IGl0ZW0gPSBpdGVtcy5wb3AoKVxuICBpZiAoIWl0ZW0pIHJldHVybiBjYigpXG4gIHJldHVybiBjb3B5RGlySXRlbShpdGVtcywgaXRlbSwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW1zLCBpdGVtLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGNvbnN0IHNyY0l0ZW0gPSBwYXRoLmpvaW4oc3JjLCBpdGVtKVxuICBjb25zdCBkZXN0SXRlbSA9IHBhdGguam9pbihkZXN0LCBpdGVtKVxuICBzdGF0LmNoZWNrUGF0aHMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5JywgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXRzXG4gICAgc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmNJdGVtLCBkZXN0SXRlbSwgb3B0cywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gY29weURpckl0ZW1zKGl0ZW1zLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMucmVhZGxpbmsoc3JjLCAoZXJyLCByZXNvbHZlZFNyYykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICAgIH1cblxuICAgIGlmICghZGVzdFN0YXQpIHtcbiAgICAgIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICB9IGVsc2Uge1xuICAgICAgZnMucmVhZGxpbmsoZGVzdCwgKGVyciwgcmVzb2x2ZWREZXN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgICAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAgICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRUlOVkFMJyB8fCBlcnIuY29kZSA9PT0gJ1VOS05PV04nKSByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gICAgICAgICAgcmV0dXJuIGNiKGVycilcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWRTcmMsIHJlc29sdmVkRGVzdCkpIHtcbiAgICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYCkpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBkbyBub3QgY29weSBpZiBzcmMgaXMgYSBzdWJkaXIgb2YgZGVzdCBzaW5jZSB1bmxpbmtpbmdcbiAgICAgICAgLy8gZGVzdCBpbiB0aGlzIGNhc2Ugd291bGQgcmVzdWx0IGluIHJlbW92aW5nIHNyYyBjb250ZW50c1xuICAgICAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICAgICAgaWYgKGRlc3RTdGF0LmlzRGlyZWN0b3J5KCkgJiYgc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cmVzb2x2ZWREZXN0fScgd2l0aCAnJHtyZXNvbHZlZFNyY30nLmApKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3B5TGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weUxpbmsgKHJlc29sdmVkU3JjLCBkZXN0LCBjYikge1xuICBmcy51bmxpbmsoZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5OiB1KHJlcXVpcmUoJy4vY29weScpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGlzV2luZG93cyA9IChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKVxuXG5mdW5jdGlvbiBkZWZhdWx0cyAob3B0aW9ucykge1xuICBjb25zdCBtZXRob2RzID0gW1xuICAgICd1bmxpbmsnLFxuICAgICdjaG1vZCcsXG4gICAgJ3N0YXQnLFxuICAgICdsc3RhdCcsXG4gICAgJ3JtZGlyJyxcbiAgICAncmVhZGRpcidcbiAgXVxuICBtZXRob2RzLmZvckVhY2gobSA9PiB7XG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgICBtID0gbSArICdTeW5jJ1xuICAgIG9wdGlvbnNbbV0gPSBvcHRpb25zW21dIHx8IGZzW21dXG4gIH0pXG5cbiAgb3B0aW9ucy5tYXhCdXN5VHJpZXMgPSBvcHRpb25zLm1heEJ1c3lUcmllcyB8fCAzXG59XG5cbmZ1bmN0aW9uIHJpbXJhZiAocCwgb3B0aW9ucywgY2IpIHtcbiAgbGV0IGJ1c3lUcmllcyA9IDBcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdGlvbnNcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIGFzc2VydChwLCAncmltcmFmOiBtaXNzaW5nIHBhdGgnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHAsICdzdHJpbmcnLCAncmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZycpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgY2IsICdmdW5jdGlvbicsICdyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgZGVmYXVsdHMob3B0aW9ucylcblxuICByaW1yYWZfKHAsIG9wdGlvbnMsIGZ1bmN0aW9uIENCIChlcikge1xuICAgIGlmIChlcikge1xuICAgICAgaWYgKChlci5jb2RlID09PSAnRUJVU1knIHx8IGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpICYmXG4gICAgICAgICAgYnVzeVRyaWVzIDwgb3B0aW9ucy5tYXhCdXN5VHJpZXMpIHtcbiAgICAgICAgYnVzeVRyaWVzKytcbiAgICAgICAgY29uc3QgdGltZSA9IGJ1c3lUcmllcyAqIDEwMFxuICAgICAgICAvLyB0cnkgYWdhaW4sIHdpdGggdGhlIHNhbWUgZXhhY3QgY2FsbGJhY2sgYXMgdGhpcyBvbmUuXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHJpbXJhZl8ocCwgb3B0aW9ucywgQ0IpLCB0aW1lKVxuICAgICAgfVxuXG4gICAgICAvLyBhbHJlYWR5IGdvbmVcbiAgICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykgZXIgPSBudWxsXG4gICAgfVxuXG4gICAgY2IoZXIpXG4gIH0pXG59XG5cbi8vIFR3byBwb3NzaWJsZSBzdHJhdGVnaWVzLlxuLy8gMS4gQXNzdW1lIGl0J3MgYSBmaWxlLiAgdW5saW5rIGl0LCB0aGVuIGRvIHRoZSBkaXIgc3R1ZmYgb24gRVBFUk0gb3IgRUlTRElSXG4vLyAyLiBBc3N1bWUgaXQncyBhIGRpcmVjdG9yeS4gIHJlYWRkaXIsIHRoZW4gZG8gdGhlIGZpbGUgc3R1ZmYgb24gRU5PVERJUlxuLy9cbi8vIEJvdGggcmVzdWx0IGluIGFuIGV4dHJhIHN5c2NhbGwgd2hlbiB5b3UgZ3Vlc3Mgd3JvbmcuICBIb3dldmVyLCB0aGVyZVxuLy8gYXJlIGxpa2VseSBmYXIgbW9yZSBub3JtYWwgZmlsZXMgaW4gdGhlIHdvcmxkIHRoYW4gZGlyZWN0b3JpZXMuICBUaGlzXG4vLyBpcyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGZpbGVzIHBlclxuLy8gZGlyZWN0b3J5IGlzID49IDEuXG4vL1xuLy8gSWYgYW55b25lIGV2ZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHRoZW4gSSBndWVzcyB0aGUgc3RyYXRlZ3kgY291bGRcbi8vIGJlIG1hZGUgY29uZmlndXJhYmxlIHNvbWVob3cuICBCdXQgdW50aWwgdGhlbiwgWUFHTkkuXG5mdW5jdGlvbiByaW1yYWZfIChwLCBvcHRpb25zLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgLy8gc3Vub3MgbGV0cyB0aGUgcm9vdCB1c2VyIHVubGluayBkaXJlY3Rvcmllcywgd2hpY2ggaXMuLi4gd2VpcmQuXG4gIC8vIHNvIHdlIGhhdmUgdG8gbHN0YXQgaGVyZSBhbmQgbWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlyLlxuICBvcHRpb25zLmxzdGF0KHAsIChlciwgc3QpID0+IHtcbiAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybiBjYihudWxsKVxuICAgIH1cblxuICAgIC8vIFdpbmRvd3MgY2FuIEVQRVJNIG9uIHN0YXQuICBMaWZlIGlzIHN1ZmZlcmluZy5cbiAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VQRVJNJyAmJiBpc1dpbmRvd3MpIHtcbiAgICAgIHJldHVybiBmaXhXaW5FUEVSTShwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgfVxuXG4gICAgaWYgKHN0ICYmIHN0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgfVxuXG4gICAgb3B0aW9ucy51bmxpbmsocCwgZXIgPT4ge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiBjYihudWxsKVxuICAgICAgICB9XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgcmV0dXJuIChpc1dpbmRvd3MpXG4gICAgICAgICAgICA/IGZpeFdpbkVQRVJNKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgICAgIDogcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChlci5jb2RlID09PSAnRUlTRElSJykge1xuICAgICAgICAgIHJldHVybiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjYihlcilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBmaXhXaW5FUEVSTSAocCwgb3B0aW9ucywgZXIsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICBvcHRpb25zLmNobW9kKHAsIDBvNjY2LCBlcjIgPT4ge1xuICAgIGlmIChlcjIpIHtcbiAgICAgIGNiKGVyMi5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5zdGF0KHAsIChlcjMsIHN0YXRzKSA9PiB7XG4gICAgICAgIGlmIChlcjMpIHtcbiAgICAgICAgICBjYihlcjMuY29kZSA9PT0gJ0VOT0VOVCcgPyBudWxsIDogZXIpXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zLnVubGluayhwLCBjYilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNU3luYyAocCwgb3B0aW9ucywgZXIpIHtcbiAgbGV0IHN0YXRzXG5cbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5jaG1vZFN5bmMocCwgMG82NjYpXG4gIH0gY2F0Y2ggKGVyMikge1xuICAgIGlmIChlcjIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBvcHRpb25zLnN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyMykge1xuICAgIGlmIChlcjMuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyIChwLCBvcHRpb25zLCBvcmlnaW5hbEVyLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgLy8gdHJ5IHRvIHJtZGlyIGZpcnN0LCBhbmQgb25seSByZWFkZGlyIG9uIEVOT1RFTVBUWSBvciBFRVhJU1QgKFN1bk9TKVxuICAvLyBpZiB3ZSBndWVzc2VkIHdyb25nLCBhbmQgaXQncyBub3QgYSBkaXJlY3RvcnksIHRoZW5cbiAgLy8gcmFpc2UgdGhlIG9yaWdpbmFsIGVycm9yLlxuICBvcHRpb25zLnJtZGlyKHAsIGVyID0+IHtcbiAgICBpZiAoZXIgJiYgKGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFRVhJU1QnIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpKSB7XG4gICAgICBybWtpZHMocCwgb3B0aW9ucywgY2IpXG4gICAgfSBlbHNlIGlmIChlciAmJiBlci5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIGNiKG9yaWdpbmFsRXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKGVyKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcm1raWRzIChwLCBvcHRpb25zLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgb3B0aW9ucy5yZWFkZGlyKHAsIChlciwgZmlsZXMpID0+IHtcbiAgICBpZiAoZXIpIHJldHVybiBjYihlcilcblxuICAgIGxldCBuID0gZmlsZXMubGVuZ3RoXG4gICAgbGV0IGVyclN0YXRlXG5cbiAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG9wdGlvbnMucm1kaXIocCwgY2IpXG5cbiAgICBmaWxlcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgcmltcmFmKHBhdGguam9pbihwLCBmKSwgb3B0aW9ucywgZXIgPT4ge1xuICAgICAgICBpZiAoZXJyU3RhdGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXIpIHJldHVybiBjYihlcnJTdGF0ZSA9IGVyKVxuICAgICAgICBpZiAoLS1uID09PSAwKSB7XG4gICAgICAgICAgb3B0aW9ucy5ybWRpcihwLCBjYilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyB0aGlzIGxvb2tzIHNpbXBsZXIsIGFuZCBpcyBzdHJpY3RseSAqZmFzdGVyKiwgYnV0IHdpbGxcbi8vIHRpZSB1cCB0aGUgSmF2YVNjcmlwdCB0aHJlYWQgYW5kIGZhaWwgb24gZXhjZXNzaXZlbHlcbi8vIGRlZXAgZGlyZWN0b3J5IHRyZWVzLlxuZnVuY3Rpb24gcmltcmFmU3luYyAocCwgb3B0aW9ucykge1xuICBsZXQgc3RcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICBkZWZhdWx0cyhvcHRpb25zKVxuXG4gIGFzc2VydChwLCAncmltcmFmOiBtaXNzaW5nIHBhdGgnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHAsICdzdHJpbmcnLCAncmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZycpXG4gIGFzc2VydChvcHRpb25zLCAncmltcmFmOiBtaXNzaW5nIG9wdGlvbnMnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIG9wdGlvbnMsICdvYmplY3QnLCAncmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QnKVxuXG4gIHRyeSB7XG4gICAgc3QgPSBvcHRpb25zLmxzdGF0U3luYyhwKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gV2luZG93cyBjYW4gRVBFUk0gb24gc3RhdC4gIExpZmUgaXMgc3VmZmVyaW5nLlxuICAgIGlmIChlci5jb2RlID09PSAnRVBFUk0nICYmIGlzV2luZG93cykge1xuICAgICAgZml4V2luRVBFUk1TeW5jKHAsIG9wdGlvbnMsIGVyKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc3Vub3MgbGV0cyB0aGUgcm9vdCB1c2VyIHVubGluayBkaXJlY3Rvcmllcywgd2hpY2ggaXMuLi4gd2VpcmQuXG4gICAgaWYgKHN0ICYmIHN0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnVubGlua1N5bmMocClcbiAgICB9XG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgIHJldHVybiBpc1dpbmRvd3MgPyBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpIDogcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSAhPT0gJ0VJU0RJUicpIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgfVxufVxuXG5mdW5jdGlvbiBybWRpclN5bmMgKHAsIG9wdGlvbnMsIG9yaWdpbmFsRXIpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5ybWRpclN5bmMocClcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICB0aHJvdyBvcmlnaW5hbEVyXG4gICAgfSBlbHNlIGlmIChlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRUVYSVNUJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICBybWtpZHNTeW5jKHAsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChlci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcm1raWRzU3luYyAocCwgb3B0aW9ucykge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIG9wdGlvbnMucmVhZGRpclN5bmMocCkuZm9yRWFjaChmID0+IHJpbXJhZlN5bmMocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zKSlcblxuICBpZiAoaXNXaW5kb3dzKSB7XG4gICAgLy8gV2Ugb25seSBlbmQgdXAgaGVyZSBvbmNlIHdlIGdvdCBFTk9URU1QVFkgYXQgbGVhc3Qgb25jZSwgYW5kXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSByZW1vdmVkIGFsbCB0aGUga2lkcy5cbiAgICAvLyBTbywgd2Uga25vdyB0aGF0IGl0IHdvbid0IGJlIEVOT0VOVCBvciBFTk9URElSIG9yIGFueXRoaW5nIGVsc2UuXG4gICAgLy8gdHJ5IHJlYWxseSBoYXJkIHRvIGRlbGV0ZSBzdHVmZiBvbiB3aW5kb3dzLCBiZWNhdXNlIGl0IGhhcyBhXG4gICAgLy8gUFJPRk9VTkRMWSBhbm5veWluZyBoYWJpdCBvZiBub3QgY2xvc2luZyBoYW5kbGVzIHByb21wdGx5IHdoZW5cbiAgICAvLyBmaWxlcyBhcmUgZGVsZXRlZCwgcmVzdWx0aW5nIGluIHNwdXJpb3VzIEVOT1RFTVBUWSBlcnJvcnMuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGRvIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJldCA9IG9wdGlvbnMucm1kaXJTeW5jKHAsIG9wdGlvbnMpXG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgNTAwKSAvLyBnaXZlIHVwIGFmdGVyIDUwMG1zXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmV0ID0gb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByaW1yYWZcbnJpbXJhZi5zeW5jID0gcmltcmFmU3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCByaW1yYWYgPSByZXF1aXJlKCcuL3JpbXJhZicpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICByZW1vdmU6IHUocmltcmFmKSxcbiAgcmVtb3ZlU3luYzogcmltcmFmLnN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoZnVuY3Rpb24gZW1wdHlEaXIgKGRpciwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fVxuICBmcy5yZWFkZGlyKGRpciwgKGVyciwgaXRlbXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gbWtkaXIubWtkaXJzKGRpciwgY2FsbGJhY2spXG5cbiAgICBpdGVtcyA9IGl0ZW1zLm1hcChpdGVtID0+IHBhdGguam9pbihkaXIsIGl0ZW0pKVxuXG4gICAgZGVsZXRlSXRlbSgpXG5cbiAgICBmdW5jdGlvbiBkZWxldGVJdGVtICgpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtcy5wb3AoKVxuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgcmVtb3ZlLnJlbW92ZShpdGVtLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBkZWxldGVJdGVtKClcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufSlcblxuZnVuY3Rpb24gZW1wdHlEaXJTeW5jIChkaXIpIHtcbiAgbGV0IGl0ZW1zXG4gIHRyeSB7XG4gICAgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgfVxuXG4gIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgaXRlbSA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgcmVtb3ZlLnJlbW92ZVN5bmMoaXRlbSlcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVtcHR5RGlyU3luYyxcbiAgZW1wdHlkaXJTeW5jOiBlbXB0eURpclN5bmMsXG4gIGVtcHR5RGlyLFxuICBlbXB0eWRpcjogZW1wdHlEaXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGUgKGZpbGUsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIG1ha2VGaWxlICgpIHtcbiAgICBmcy53cml0ZUZpbGUoZmlsZSwgJycsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2soKVxuICAgIH0pXG4gIH1cblxuICBmcy5zdGF0KGZpbGUsIChlcnIsIHN0YXRzKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgIGlmICghZXJyICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm4gY2FsbGJhY2soKVxuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICAgIGZzLnN0YXQoZGlyLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIG1ha2UgaXRcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgIG1ha2VGaWxlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSBtYWtlRmlsZSgpXG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gcGFyZW50IGlzIG5vdCBhIGRpcmVjdG9yeVxuICAgICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgICAgZnMucmVhZGRpcihkaXIsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWxlU3luYyAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGUpXG4gIH0gY2F0Y2gge31cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLnN0YXRTeW5jKGRpcikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgLy8gcGFyZW50IGlzIG5vdCBhIGRpcmVjdG9yeVxuICAgICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgICBmcy5yZWFkZGlyU3luYyhkaXIpXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJZiB0aGUgc3RhdCBjYWxsIGFib3ZlIGZhaWxlZCBiZWNhdXNlIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0XG4gICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICAgIGVsc2UgdGhyb3cgZXJyXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsICcnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlRmlsZTogdShjcmVhdGVGaWxlKSxcbiAgY3JlYXRlRmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIG1ha2VMaW5rIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gICAgZnMubGluayhzcmNwYXRoLCBkc3RwYXRoLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGNhbGxiYWNrKG51bGwpXG4gICAgfSlcbiAgfVxuXG4gIHBhdGhFeGlzdHMoZHN0cGF0aCwgKGVyciwgZGVzdGluYXRpb25FeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgZnMubHN0YXQoc3JjcGF0aCwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBkaXJFeGlzdHMpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIG1ha2VMaW5rKHNyY3BhdGgsIGRzdHBhdGgpXG4gICAgICAgIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICBtYWtlTGluayhzcmNwYXRoLCBkc3RwYXRoKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBjb25zdCBkZXN0aW5hdGlvbkV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZHN0cGF0aClcbiAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgdHJ5IHtcbiAgICBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBkaXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuXG4gIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlTGluazogdShjcmVhdGVMaW5rKSxcbiAgY3JlYXRlTGlua1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHR3byB0eXBlcyBvZiBwYXRocywgb25lIHJlbGF0aXZlIHRvIHN5bWxpbmssIGFuZCBvbmVcbiAqIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBDaGVja3MgaWYgcGF0aCBpcyBhYnNvbHV0ZSBvclxuICogcmVsYXRpdmUuIElmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgcGF0aCBpc1xuICogcmVsYXRpdmUgdG8gc3ltbGluayBvciByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGlzIGlzIGFuXG4gKiBpbml0aWF0aXZlIHRvIGZpbmQgYSBzbWFydGVyIGBzcmNwYXRoYCB0byBzdXBwbHkgd2hlbiBidWlsZGluZyBzeW1saW5rcy5cbiAqIFRoaXMgYWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgd2hpY2ggcGF0aCB0byB1c2Ugb3V0IG9mIG9uZSBvZiB0aHJlZSBwb3NzaWJsZVxuICogdHlwZXMgb2Ygc291cmNlIHBhdGhzLiBUaGUgZmlyc3QgaXMgYW4gYWJzb2x1dGUgcGF0aC4gVGhpcyBpcyBkZXRlY3RlZCBieVxuICogYHBhdGguaXNBYnNvbHV0ZSgpYC4gV2hlbiBhbiBhYnNvbHV0ZSBwYXRoIGlzIHByb3ZpZGVkLCBpdCBpcyBjaGVja2VkIHRvXG4gKiBzZWUgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIGl0J3MgdXNlZCwgaWYgbm90IGFuIGVycm9yIGlzIHJldHVybmVkXG4gKiAoY2FsbGJhY2spLyB0aHJvd24gKHN5bmMpLiBUaGUgb3RoZXIgdHdvIG9wdGlvbnMgZm9yIGBzcmNwYXRoYCBhcmUgYVxuICogcmVsYXRpdmUgdXJsLiBCeSBkZWZhdWx0IE5vZGUncyBgZnMuc3ltbGlua2Agd29ya3MgYnkgY3JlYXRpbmcgYSBzeW1saW5rXG4gKiB1c2luZyBgZHN0cGF0aGAgYW5kIGV4cGVjdHMgdGhlIGBzcmNwYXRoYCB0byBiZSByZWxhdGl2ZSB0byB0aGUgbmV3bHlcbiAqIGNyZWF0ZWQgc3ltbGluay4gSWYgeW91IHByb3ZpZGUgYSBgc3JjcGF0aGAgdGhhdCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZmlsZVxuICogc3lzdGVtIGl0IHJlc3VsdHMgaW4gYSBicm9rZW4gc3ltbGluay4gVG8gbWluaW1pemUgdGhpcywgdGhlIGZ1bmN0aW9uXG4gKiBjaGVja3MgdG8gc2VlIGlmIHRoZSAncmVsYXRpdmUgdG8gc3ltbGluaycgc291cmNlIGZpbGUgZXhpc3RzLCBhbmQgaWYgaXRcbiAqIGRvZXMgaXQgd2lsbCB1c2UgaXQuIElmIGl0IGRvZXMgbm90LCBpdCBjaGVja3MgaWYgdGhlcmUncyBhIGZpbGUgdGhhdFxuICogZXhpc3RzIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGlmIGRvZXMgaXRzIHVzZWQuXG4gKiBUaGlzIHByZXNlcnZlcyB0aGUgZXhwZWN0YXRpb25zIG9mIHRoZSBvcmlnaW5hbCBmcy5zeW1saW5rIHNwZWMgYW5kIGFkZHNcbiAqIHRoZSBhYmlsaXR5IHRvIHBhc3MgaW4gYHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY290cnlgIHBhdGhzLlxuICovXG5cbmZ1bmN0aW9uIHN5bWxpbmtQYXRocyAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHJldHVybiBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlU3ltbGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICAgIH0pXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICByZXR1cm4gcGF0aEV4aXN0cyhyZWxhdGl2ZVRvRHN0LCAoZXJyLCBleGlzdHMpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgICAgICAgIHRvRHN0OiBwYXRoLnJlbGF0aXZlKGRzdGRpciwgc3JjcGF0aClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBsZXQgZXhpc3RzXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoc3JjcGF0aCkpIHtcbiAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHNyY3BhdGgpXG4gICAgaWYgKCFleGlzdHMpIHRocm93IG5ldyBFcnJvcignYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgY29uc3QgcmVsYXRpdmVUb0RzdCA9IHBhdGguam9pbihkc3RkaXIsIHNyY3BhdGgpXG4gICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhyZWxhdGl2ZVRvRHN0KVxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvQ3dkOiByZWxhdGl2ZVRvRHN0LFxuICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHNyY3BhdGgpXG4gICAgICBpZiAoIWV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0JylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHMsXG4gIHN5bWxpbmtQYXRoc1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmZ1bmN0aW9uIHN5bWxpbmtUeXBlIChzcmNwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyB0eXBlIDogY2FsbGJhY2tcbiAgdHlwZSA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyBmYWxzZSA6IHR5cGVcbiAgaWYgKHR5cGUpIHJldHVybiBjYWxsYmFjayhudWxsLCB0eXBlKVxuICBmcy5sc3RhdChzcmNwYXRoLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhudWxsLCAnZmlsZScpXG4gICAgdHlwZSA9IChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSA/ICdkaXInIDogJ2ZpbGUnXG4gICAgY2FsbGJhY2sobnVsbCwgdHlwZSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gc3ltbGlua1R5cGVTeW5jIChzcmNwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuXG4gIGlmICh0eXBlKSByZXR1cm4gdHlwZVxuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtUeXBlLFxuICBzeW1saW5rVHlwZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBfbWtkaXJzID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IG1rZGlycyA9IF9ta2RpcnMubWtkaXJzXG5jb25zdCBta2RpcnNTeW5jID0gX21rZGlycy5ta2RpcnNTeW5jXG5cbmNvbnN0IF9zeW1saW5rUGF0aHMgPSByZXF1aXJlKCcuL3N5bWxpbmstcGF0aHMnKVxuY29uc3Qgc3ltbGlua1BhdGhzID0gX3N5bWxpbmtQYXRocy5zeW1saW5rUGF0aHNcbmNvbnN0IHN5bWxpbmtQYXRoc1N5bmMgPSBfc3ltbGlua1BhdGhzLnN5bWxpbmtQYXRoc1N5bmNcblxuY29uc3QgX3N5bWxpbmtUeXBlID0gcmVxdWlyZSgnLi9zeW1saW5rLXR5cGUnKVxuY29uc3Qgc3ltbGlua1R5cGUgPSBfc3ltbGlua1R5cGUuc3ltbGlua1R5cGVcbmNvbnN0IHN5bWxpbmtUeXBlU3luYyA9IF9zeW1saW5rVHlwZS5zeW1saW5rVHlwZVN5bmNcblxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyB0eXBlIDogY2FsbGJhY2tcbiAgdHlwZSA9ICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyBmYWxzZSA6IHR5cGVcblxuICBwYXRoRXhpc3RzKGRzdHBhdGgsIChlcnIsIGRlc3RpbmF0aW9uRXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiBjYWxsYmFjayhudWxsKVxuICAgIHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoLCAoZXJyLCByZWxhdGl2ZSkgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICAgICAgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUsIChlcnIsIHR5cGUpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICAgIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBkaXJFeGlzdHMpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBmcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKVxuICAgICAgICAgIG1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgZnMuc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaylcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBjb25zdCBkZXN0aW5hdGlvbkV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZHN0cGF0aClcbiAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgcmVsYXRpdmUgPSBzeW1saW5rUGF0aHNTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICB0eXBlID0gc3ltbGlua1R5cGVTeW5jKHJlbGF0aXZlLnRvQ3dkLCB0eXBlKVxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiB1KGNyZWF0ZVN5bWxpbmspLFxuICBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmaWxlID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IGxpbmsgPSByZXF1aXJlKCcuL2xpbmsnKVxuY29uc3Qgc3ltbGluayA9IHJlcXVpcmUoJy4vc3ltbGluaycpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBmaWxlXG4gIGNyZWF0ZUZpbGU6IGZpbGUuY3JlYXRlRmlsZSxcbiAgY3JlYXRlRmlsZVN5bmM6IGZpbGUuY3JlYXRlRmlsZVN5bmMsXG4gIGVuc3VyZUZpbGU6IGZpbGUuY3JlYXRlRmlsZSxcbiAgZW5zdXJlRmlsZVN5bmM6IGZpbGUuY3JlYXRlRmlsZVN5bmMsXG4gIC8vIGxpbmtcbiAgY3JlYXRlTGluazogbGluay5jcmVhdGVMaW5rLFxuICBjcmVhdGVMaW5rU3luYzogbGluay5jcmVhdGVMaW5rU3luYyxcbiAgZW5zdXJlTGluazogbGluay5jcmVhdGVMaW5rLFxuICBlbnN1cmVMaW5rU3luYzogbGluay5jcmVhdGVMaW5rU3luYyxcbiAgLy8gc3ltbGlua1xuICBjcmVhdGVTeW1saW5rOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmssXG4gIGNyZWF0ZVN5bWxpbmtTeW5jOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmtTeW5jLFxuICBlbnN1cmVTeW1saW5rOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBzeW1saW5rLmNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiZnVuY3Rpb24gc3RyaW5naWZ5IChvYmosIHsgRU9MID0gJ1xcbicsIGZpbmFsRU9MID0gdHJ1ZSwgcmVwbGFjZXIgPSBudWxsLCBzcGFjZXMgfSA9IHt9KSB7XG4gIGNvbnN0IEVPRiA9IGZpbmFsRU9MID8gRU9MIDogJydcbiAgY29uc3Qgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2VzKVxuXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxuL2csIEVPTCkgKyBFT0Zcbn1cblxuZnVuY3Rpb24gc3RyaXBCb20gKGNvbnRlbnQpIHtcbiAgLy8gd2UgZG8gdGhpcyBiZWNhdXNlIEpTT04ucGFyc2Ugd291bGQgY29udmVydCBpdCB0byBhIHV0Zjggc3RyaW5nIGlmIGVuY29kaW5nIHdhc24ndCBzcGVjaWZpZWRcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSkgY29udGVudCA9IGNvbnRlbnQudG9TdHJpbmcoJ3V0ZjgnKVxuICByZXR1cm4gY29udGVudC5yZXBsYWNlKC9eXFx1RkVGRi8sICcnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgc3RyaW5naWZ5LCBzdHJpcEJvbSB9XG4iLCAibGV0IF9mc1xudHJ5IHtcbiAgX2ZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxufSBjYXRjaCAoXykge1xuICBfZnMgPSByZXF1aXJlKCdmcycpXG59XG5jb25zdCB1bml2ZXJzYWxpZnkgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKVxuY29uc3QgeyBzdHJpbmdpZnksIHN0cmlwQm9tIH0gPSByZXF1aXJlKCcuL3V0aWxzJylcblxuYXN5bmMgZnVuY3Rpb24gX3JlYWRGaWxlIChmaWxlLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzaG91bGRUaHJvdyA9ICd0aHJvd3MnIGluIG9wdGlvbnMgPyBvcHRpb25zLnRocm93cyA6IHRydWVcblxuICBsZXQgZGF0YSA9IGF3YWl0IHVuaXZlcnNhbGlmeS5mcm9tQ2FsbGJhY2soZnMucmVhZEZpbGUpKGZpbGUsIG9wdGlvbnMpXG5cbiAgZGF0YSA9IHN0cmlwQm9tKGRhdGEpXG5cbiAgbGV0IG9ialxuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2UoZGF0YSwgb3B0aW9ucyA/IG9wdGlvbnMucmV2aXZlciA6IG51bGwpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmNvbnN0IHJlYWRGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF9yZWFkRmlsZSlcblxuZnVuY3Rpb24gcmVhZEZpbGVTeW5jIChmaWxlLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7IGVuY29kaW5nOiBvcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzaG91bGRUaHJvdyA9ICd0aHJvd3MnIGluIG9wdGlvbnMgPyBvcHRpb25zLnRocm93cyA6IHRydWVcblxuICB0cnkge1xuICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIG9wdGlvbnMpXG4gICAgY29udGVudCA9IHN0cmlwQm9tKGNvbnRlbnQpXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCwgb3B0aW9ucy5yZXZpdmVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF93cml0ZUZpbGUgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuXG4gIGF3YWl0IHVuaXZlcnNhbGlmeS5mcm9tQ2FsbGJhY2soZnMud3JpdGVGaWxlKShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbmNvbnN0IHdyaXRlRmlsZSA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZShfd3JpdGVGaWxlKVxuXG5mdW5jdGlvbiB3cml0ZUZpbGVTeW5jIChmaWxlLCBvYmosIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KG9iaiwgb3B0aW9ucylcbiAgLy8gbm90IHN1cmUgaWYgZnMud3JpdGVGaWxlU3luYyByZXR1cm5zIGFueXRoaW5nLCBidXQganVzdCBpbiBjYXNlXG4gIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3QganNvbmZpbGUgPSB7XG4gIHJlYWRGaWxlLFxuICByZWFkRmlsZVN5bmMsXG4gIHdyaXRlRmlsZSxcbiAgd3JpdGVGaWxlU3luY1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25maWxlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKc29uU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKc29uU3luYzoganNvbkZpbGUud3JpdGVGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gb3V0cHV0RmlsZSAoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICBwYXRoRXhpc3RzKGRpciwgKGVyciwgaXREb2VzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBpZiAoaXREb2VzKSByZXR1cm4gZnMud3JpdGVGaWxlKGZpbGUsIGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaylcblxuICAgIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuXG4gICAgICBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG91dHB1dEZpbGVTeW5jIChmaWxlLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICBpZiAoZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgLi4uYXJncylcbiAgfVxuICBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgb3V0cHV0RmlsZTogdShvdXRwdXRGaWxlKSxcbiAgb3V0cHV0RmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0JylcblxuYXN5bmMgZnVuY3Rpb24gb3V0cHV0SnNvbiAoZmlsZSwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShkYXRhLCBvcHRpb25zKVxuXG4gIGF3YWl0IG91dHB1dEZpbGUoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4uL291dHB1dCcpXG5cbmZ1bmN0aW9uIG91dHB1dEpzb25TeW5jIChmaWxlLCBkYXRhLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShkYXRhLCBvcHRpb25zKVxuXG4gIG91dHB1dEZpbGVTeW5jKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRwdXRKc29uU3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb24gPSB1KHJlcXVpcmUoJy4vb3V0cHV0LWpzb24nKSlcbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT04gPSBqc29uRmlsZS5vdXRwdXRKc29uXG5qc29uRmlsZS5vdXRwdXRKU09OU3luYyA9IGpzb25GaWxlLm91dHB1dEpzb25TeW5jXG5qc29uRmlsZS53cml0ZUpTT04gPSBqc29uRmlsZS53cml0ZUpzb25cbmpzb25GaWxlLndyaXRlSlNPTlN5bmMgPSBqc29uRmlsZS53cml0ZUpzb25TeW5jXG5qc29uRmlsZS5yZWFkSlNPTiA9IGpzb25GaWxlLnJlYWRKc29uXG5qc29uRmlsZS5yZWFkSlNPTlN5bmMgPSBqc29uRmlsZS5yZWFkSnNvblN5bmNcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGNvcHlTeW5jID0gcmVxdWlyZSgnLi4vY29weS1zeW5jJykuY29weVN5bmNcbmNvbnN0IHJlbW92ZVN5bmMgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVTeW5jXG5jb25zdCBta2RpcnBTeW5jID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJwU3luY1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIG1vdmVTeW5jIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgY29uc3Qgb3ZlcndyaXRlID0gb3B0cy5vdmVyd3JpdGUgfHwgb3B0cy5jbG9iYmVyIHx8IGZhbHNlXG5cbiAgY29uc3QgeyBzcmNTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ21vdmUnKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ21vdmUnKVxuICBta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSlcbiAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJlbW92ZVN5bmMoZGVzdClcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJylcbiAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICB0cnkge1xuICAgIGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHRocm93IGVyclxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZVxuICB9XG4gIGNvcHlTeW5jKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZVN5bmMoc3JjKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3ZlU3luYzogcmVxdWlyZSgnLi9tb3ZlLXN5bmMnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGNvcHkgPSByZXF1aXJlKCcuLi9jb3B5JykuY29weVxuY29uc3QgcmVtb3ZlID0gcmVxdWlyZSgnLi4vcmVtb3ZlJykucmVtb3ZlXG5jb25zdCBta2RpcnAgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBtb3ZlIChzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0c1xuICAgIG9wdHMgPSB7fVxuICB9XG5cbiAgY29uc3Qgb3ZlcndyaXRlID0gb3B0cy5vdmVyd3JpdGUgfHwgb3B0cy5jbG9iYmVyIHx8IGZhbHNlXG5cbiAgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0IH0gPSBzdGF0c1xuICAgIHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBta2RpcnAocGF0aC5kaXJuYW1lKGRlc3QpLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGlmIChvdmVyd3JpdGUpIHtcbiAgICByZXR1cm4gcmVtb3ZlKGRlc3QsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gICAgfSlcbiAgfVxuICBwYXRoRXhpc3RzKGRlc3QsIChlcnIsIGRlc3RFeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChkZXN0RXhpc3RzKSByZXR1cm4gY2IobmV3IEVycm9yKCdkZXN0IGFscmVhZHkgZXhpc3RzLicpKVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYikge1xuICBmcy5yZW5hbWUoc3JjLCBkZXN0LCBlcnIgPT4ge1xuICAgIGlmICghZXJyKSByZXR1cm4gY2IoKVxuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYikge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWVcbiAgfVxuICBjb3B5KHNyYywgZGVzdCwgb3B0cywgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiByZW1vdmUoc3JjLCBjYilcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3ZlOiB1KHJlcXVpcmUoJy4vbW92ZScpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5LXN5bmMnKSxcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZS1zeW5jJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dCcpLFxuICAuLi5yZXF1aXJlKCcuL3BhdGgtZXhpc3RzJyksXG4gIC4uLnJlcXVpcmUoJy4vcmVtb3ZlJylcbn1cblxuLy8gRXhwb3J0IGZzLnByb21pc2VzIGFzIGEgZ2V0dGVyIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgdHJpZ2dlclxuLy8gRXhwZXJpbWVudGFsV2FybmluZyBiZWZvcmUgZnMucHJvbWlzZXMgaXMgYWN0dWFsbHkgYWNjZXNzZWQuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJylcbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZzLCAncHJvbWlzZXMnKSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdwcm9taXNlcycsIHtcbiAgICBnZXQgKCkgeyByZXR1cm4gZnMucHJvbWlzZXMgfVxuICB9KVxufVxuIiwgImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5cbmNvbnN0IENES19PVVRESVJfUFJFRklYID0gJ2Nkay1pbnRlZy5vdXQnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgaW50ZWdyYXRpb24gdGVzdFxuICpcbiAqIFRoaXMgdHlwZSBpcyBhIGRhdGEtb25seSBzdHJ1Y3R1cmUsIHNvIGl0IGNhbiB0cml2aWFsbHkgYmUgcGFzc2VkIHRvIHdvcmtlcnMuXG4gKiBEZXJpdmVkIGF0dHJpYnV0ZXMgYXJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGBJbnRlZ1Rlc3RgIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEluZm8ge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGRpcmVjdG9yeSB3ZSBkaXNjb3ZlcmVkIHRoaXMgdGVzdCBmcm9tXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkaXNjb3ZlcnlSb290OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVyaXZlZCBpbmZvcm1hdGlvbiBmb3IgSW50ZWdUZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdUZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbGF0aXZlIHBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFJlbGF0aXZlIGZyb20gdGhlIFwiZGlzY292ZXJ5IHJvb3RcIi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGVGaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdGhlIHRlc3QgaXMgaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheSBuYW1lIGZvciB0aGUgdGVzdFxuICAgKlxuICAgKiBEZXBlbmRzIG9uIHRoZSBkaXNjb3ZlcnkgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBMb29rcyBsaWtlIGBpbnRlZy5teXRlc3RgIG9yIGBwYWNrYWdlL3Rlc3QvaW50ZWcubXl0ZXN0YC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBzbmFwc2hvdCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90RGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRlbXBvcmFyeSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGlzIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZW1wb3JhcnlPdXRwdXREaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaW5mbzogSW50ZWdUZXN0SW5mbykge1xuICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShpbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpbmZvLmZpbGVOYW1lKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhdGgucGFyc2UodGhpcy5maWxlTmFtZSk7XG4gICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShpbmZvLmRpc2NvdmVyeVJvb3QsIGluZm8uZmlsZU5hbWUpO1xuICAgIHRoaXMuZGlyZWN0b3J5ID0gcGFyc2VkLmRpcjtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgcGFja2FnZSBkaXJlY3RvcnkgdGhlbiBqdXN0IHVzZSB0aGUgZmlsZU5hbWVcbiAgICAvLyBhcyB0aGUgdGVzdG5hbWUsIGJ1dCBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhcmVudCBkaXJlY3Rvcnkgd2l0aFxuICAgIC8vIG11bHRpcGxlIHBhY2thZ2VzIHRoZW4gdXNlIHRoZSBkaXJlY3RvcnkvZmlsZW5hbWUgYXMgdGhlIHRlc3RuYW1lXG4gICAgLy9cbiAgICAvLyBMb29rcyBlaXRoZXIgbGlrZSBgaW50ZWcubXl0ZXN0YCBvciBgcGFja2FnZS90ZXN0L2ludGVnLm15dGVzdGAuXG4gICAgY29uc3QgcmVsRGlzY292ZXJ5Um9vdCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgaW5mby5kaXNjb3ZlcnlSb290KTtcbiAgICB0aGlzLnRlc3ROYW1lID0gdGhpcy5kaXJlY3RvcnkgPT09IHBhdGguam9pbihyZWxEaXNjb3ZlcnlSb290LCAndGVzdCcpIHx8IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdClcbiAgICAgID8gcGFyc2VkLm5hbWVcbiAgICAgIDogcGF0aC5qb2luKHBhdGgucmVsYXRpdmUodGhpcy5pbmZvLmRpc2NvdmVyeVJvb3QsIHBhcnNlZC5kaXIpLCBwYXJzZWQubmFtZSk7XG5cbiAgICBjb25zdCBuYWtlZFRlc3ROYW1lID0gcGFyc2VkLm5hbWUuc2xpY2UoNik7IC8vIExlYXZlIG5hbWUgd2l0aG91dCAnaW50ZWcuJyBhbmQgJy50cydcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtuYWtlZFRlc3ROYW1lfS5pbnRlZy5zbmFwc2hvdGApO1xuICAgIHRoaXMudGVtcG9yYXJ5T3V0cHV0RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtDREtfT1VURElSX1BSRUZJWH0uJHtuYWtlZFRlc3ROYW1lfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0ZXN0IG1hdGNoZXMgdGhlIHVzZXItZ2l2ZW4gbmFtZVxuICAgKlxuICAgKiBXZSBhcmUgdmVyeSBsZW5pZW50IGhlcmUuIEEgbmFtZSBtYXRjaGVzIGlmIGl0IG1hdGNoZXM6XG4gICAqXG4gICAqIC0gVGhlIENXRC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBkaXNjb3Zlcnkgcm9vdC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBzdWl0ZSBuYW1lXG4gICAqIC0gVGhlIGFic29sdXRlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlcyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgIHRoaXMudGVzdE5hbWUsXG4gICAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUsXG4gICAgXS5pbmNsdWRlcyhuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1biBjYW4gYmUgcHJvdmlkZWQgaW4gYSBmaWxlXG4gKiBpbnN0ZWFkIG9mIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGxpc3Qgb2YgdGVzdHNcbiAgICogcHJvdmlkZWQgd2lsbCBiZSBleGNsdWRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdyYXRpb25UZXN0cyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGZpbGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgdGVzdFxuICAgKiB0byBlaXRoZXIgcnVuIG9yIGV4Y2x1ZGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIEludGVncmF0aW9uIFRlc3RzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZmlsZTogSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgICBjb25zdCBmb3VuZFRlc3RzID0gYXdhaXQgdGhpcy5kaXNjb3ZlcigpO1xuXG4gICAgY29uc3QgYWxsVGVzdHMgPSB0aGlzLmZpbHRlclRlc3RzKGZvdW5kVGVzdHMsIGZpbGUudGVzdHMsIGZpbGUuZXhjbHVkZSk7XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVzZXIgcHJvdmlkZXMgYSBsaXN0IG9mIHRlc3RzLCB0aGVzZSBjYW4gZWl0aGVyIGJlIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIG9yIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLlxuICAgKlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgcHJvdmlkZWQgdmFsaWQgdGVzdHMuXG4gICAqICAgSWYgdGhleSBoYXZlIHByb3ZpZGVkIGEgdGVzdCBuYW1lIHRoYXQgd2UgZG9uJ3QgZmluZCwgdGhlbiB3ZSB3cml0ZSBvdXQgdGhhdCBlcnJvciBtZXNzYWdlLlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLCB0aGVuIHdlIGRpc2NvdmVyIGFsbCBhdmFpbGFibGUgdGVzdHMgYW5kIGZpbHRlciBvdXQgdGhlIHRlc3RzIHRoYXQgd2VyZSBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgZmlsdGVyVGVzdHMoZGlzY292ZXJlZFRlc3RzOiBJbnRlZ1Rlc3RbXSwgcmVxdWVzdGVkVGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgaWYgKCFyZXF1ZXN0ZWRUZXN0cykge1xuICAgICAgcmV0dXJuIGRpc2NvdmVyZWRUZXN0cztcbiAgICB9XG5cblxuICAgIGNvbnN0IGFsbFRlc3RzID0gZGlzY292ZXJlZFRlc3RzLmZpbHRlcih0ID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0ZWRUZXN0cy5zb21lKHBhdHRlcm4gPT4gdC5tYXRjaGVzKHBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBtYXRjaGVzICE9PSAhIWV4Y2x1ZGU7IC8vIExvb2tzIHdlaXJkIGJ1dCBpcyBlcXVhbCB0byAobWF0Y2hlcyAmJiAhZXhjbHVkZSkgfHwgKCFtYXRjaGVzICYmIGV4Y2x1ZGUpXG4gICAgfSk7XG5cbiAgICAvLyBJZiBub3QgZXhjbHVkaW5nLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIG1hdGNoZWQgYXQgbGVhc3Qgb25lIHRlc3RcbiAgICBpZiAoIWV4Y2x1ZGUpIHtcbiAgICAgIGNvbnN0IHVubWF0Y2hlZFBhdHRlcm5zID0gcmVxdWVzdGVkVGVzdHMuZmlsdGVyKHBhdHRlcm4gPT4gIWRpc2NvdmVyZWRUZXN0cy5zb21lKHQgPT4gdC5tYXRjaGVzKHBhdHRlcm4pKSk7XG4gICAgICBmb3IgKGNvbnN0IHVubWF0Y2hlZCBvZiB1bm1hdGNoZWRQYXR0ZXJucykge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgTm8gc3VjaCBpbnRlZyB0ZXN0OiAke3VubWF0Y2hlZH1cXG5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1bm1hdGNoZWRQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBBdmFpbGFibGUgdGVzdHM6ICR7ZGlzY292ZXJlZFRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignICcpfVxcbmApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgdGVzdHMgdG8gbG9vayBmb3IsIG90aGVyd2lzZVxuICAgKiBpdCB3aWxsIGxvb2sgZm9yIGFsbCB0ZXN0cyBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICpcbiAgICogQHBhcmFtIHRlc3RzIFRlc3RzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSwgdW5kZWZpbmVkIG1lYW5zIGluY2x1ZGUgYWxsIHRlc3RzLlxuICAgKiBAcGFyYW0gZXhjbHVkZSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlBcmdzKHRlc3RzPzogc3RyaW5nW10sIGV4Y2x1ZGU/OiBib29sZWFuKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGRpc2NvdmVyZWRUZXN0cyA9IGF3YWl0IHRoaXMuZGlzY292ZXIoKTtcblxuICAgIGNvbnN0IGFsbFRlc3RzID0gdGhpcy5maWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHMsIHRlc3RzLCBleGNsdWRlKTtcblxuICAgIHJldHVybiBhbGxUZXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGlzY292ZXIoKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5yZWFkVHJlZSgpO1xuICAgIGNvbnN0IGludGVncyA9IGZpbGVzLmZpbHRlcihmaWxlTmFtZSA9PiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5zdGFydHNXaXRoKCdpbnRlZy4nKSAmJiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5lbmRzV2l0aCgnLmpzJykpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoaW50ZWdzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdChmaWxlczogc3RyaW5nW10pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgcmV0dXJuIGZpbGVzLm1hcChmaWxlTmFtZSA9PiBuZXcgSW50ZWdUZXN0KHsgZGlzY292ZXJ5Um9vdDogdGhpcy5kaXJlY3RvcnksIGZpbGVOYW1lIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHsgcmV0LnB1c2goZnVsbFBhdGgpOyB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7IGF3YWl0IHJlY3Vyc2UocGF0aC5qb2luKGZ1bGxQYXRoKSk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCByZWN1cnNlKHRoaXMuZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcblxuLyoqXG4gKiBUaGUgYWdncmVnYXRlIHJlc3VsdHMgZnJvbSBydW5uaW5nIGFzc2VydGlvbnMgb24gYSB0ZXN0IGNhc2VcbiAqL1xuZXhwb3J0IHR5cGUgQXNzZXJ0aW9uUmVzdWx0cyA9IHsgW2lkOiBzdHJpbmddOiBBc3NlcnRpb25SZXN1bHQgfTtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGluZGl2aWR1YWwgYXNzZXJ0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXJ0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gbWVzc2FnZS4gSWYgdGhlIGFzc2VydGlvbiBmYWlsZWQsIHRoaXMgd2lsbFxuICAgKiBpbmNsdWRlIHRoZSByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFzc2VydGlvbiBzdWNjZWVkZWQgb3IgZmFpbGVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdzdWNjZXNzJyB8ICdmYWlsJztcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIGFuIGludGVncmF0aW9uIHRlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RXb3JrZXJDb25maWcgZXh0ZW5kcyBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdHJ1Y3RpdmVDaGFuZ2VzPzogRGVzdHJ1Y3RpdmVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvbiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlc3RydWN0aXZlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBsb2dpY2FsSWQgb2YgdGhlIHJlc291cmNlIHdpdGggYSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhY2sgdGhhdCBjb250YWlucyB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGltcGFjdCBvZiB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBpbXBhY3Q6IFJlc291cmNlSW1wYWN0O1xufVxuXG5cbi8qKlxuICogUmVwcmVzZW50cyBpbnRlZ3JhdGlvbiB0ZXN0cyBtZXRyaWNzIGZvciBhIGdpdmVuIHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyTWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB0ZXN0IHdhcyBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHdvcmtlci5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWwgdGVzdCBkdXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQgdGhlXG4gICAqIHdvcmtlciBleGVjdXRlZC5cbiAgICpcbiAgICogTWFwIG9mIHRlc3ROYW1lIHRvIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgdGhhdCB3YXMgdXNlZCB0byBydW4gdGhlIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJldGFpbiBmYWlsZWQgc25hcHNob3QgY29tcGFyaXNvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2UgbW9kZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCByZXN1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdCYXRjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmFpbGVkIHRlc3RzXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRUZXN0czogSW50ZWdUZXN0SW5mb1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEludGVncmF0aW9uIHRlc3QgbWV0cmljcy4gRWFjaCBlbnRyeSBpbiB0aGVcbiAgICogbGlzdCByZXByZXNlbnRzIG1ldHJpY3MgZnJvbSBhIHNpbmdsZSB3b3JrZXIgKGFjY291bnQgKyByZWdpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW107XG59XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBydW5cbiAgICogaW4gdGhpcyBiYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHRoZSBzdGFja3MgYXQgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBpcyBzZXQgdG8gYHRydWVgIHRoZSBzbmFwc2hvdCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQgX3dpdGhvdXRfIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogVGhlIHJlc3VsdGluZyBzbmFwc2hvdCBTSE9VTEQgTk9UIGJlIGNoZWNrZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHZlcmJvc2UgbG9nZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgc3RhY2sgdXBkYXRlIHdvcmtmbG93IHdpbGwgYmUgZGlzYWJsZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlV29ya2Zsb3c/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgcG9zc2libGUgcmVhc29ucyBmb3IgYSBkaWFnbm9zdGljXG4gKi9cbmV4cG9ydCBlbnVtIERpYWdub3N0aWNSZWFzb24ge1xuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlcmVcbiAgICogaXMgbm90IGV4aXN0aW5nIHNuYXBzaG90XG4gICAqL1xuICBOT19TTkFQU0hPVCA9ICdOT19TTkFQU0hPVCcsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGZhaWxlZFxuICAgKi9cbiAgVEVTVF9GQUlMRUQgPSAnVEVTVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgVEVTVF9FUlJPUiA9ICdURVNUX0VSUk9SJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlIGFjdHVhbFxuICAgKiBzbmFwc2hvdCB3YXMgZGlmZmVyZW50IHRoYW4gdGhlIGV4cGVjdGVkIHNuYXBzaG90XG4gICAqL1xuICBTTkFQU0hPVF9GQUlMRUQgPSAnU05BUFNIT1RfRkFJTEVEJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlcmUgd2FzIGFuIGVycm9yIGV4ZWN1dGluZyBpdFxuICAgKi9cbiAgU05BUFNIT1RfRVJST1IgPSAnU05BUFNIT1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBzdWNjZWVkZWRcbiAgICovXG4gIFNOQVBTSE9UX1NVQ0NFU1MgPSAnU05BUFNIT1RfU1VDQ0VTUycsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgVEVTVF9TVUNDRVNTID0gJ1RFU1RfU1VDQ0VTUycsXG5cbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gZmFpbGVkXG4gICAqL1xuICBBU1NFUlRJT05fRkFJTEVEID0gJ0FTU0VSVElPTl9GQUlMRUQnLFxufVxuXG4vKipcbiAqIEludGVncmF0aW9uIHRlc3QgZGlhZ25vc3RpY3NcbiAqIFRoaXMgaXMgdXNlZCB0byByZXBvcnQgYmFjayB0aGUgc3RhdHVzIG9mIGVhY2ggdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3N0aWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljIG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgaXQgdG9vayB0byBydW4gdGhlIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIGZvciB0aGUgZGlhZ25vc3RpY1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1lc3NhZ2VzIHRvIHByaW50XG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsTWVzc2FnZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50U3VtbWFyeSh0b3RhbDogbnVtYmVyLCBmYWlsZWQ6IG51bWJlcik6IHZvaWQge1xuICBpZiAoZmFpbGVkID4gMCkge1xuICAgIGxvZ2dlci5wcmludCgnJXM6ICAgICVzICVzLCAlcyB0b3RhbCcsIGNoYWxrLmJvbGQoJ1Rlc3RzJyksIGNoYWxrLnJlZChmYWlsZWQpLCBjaGFsay5yZWQoJ2ZhaWxlZCcpLCB0b3RhbCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsuZ3JlZW4odG90YWwpLCBjaGFsay5ncmVlbigncGFzc2VkJyksIHRvdGFsKTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgYXNzZXJ0aW9uIHJlc3VsdHMgc28gdGhhdCB0aGUgcmVzdWx0cyBjYW4gYmVcbiAqIHByaW50ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFzc2VydGlvblJlc3VsdHMocmVzdWx0czogQXNzZXJ0aW9uUmVzdWx0cyk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHRzKVxuICAgIC5tYXAoKFtpZCwgcmVzdWx0XSkgPT4gZm9ybWF0KCclc1xcbiVzJywgaWQsIHJlc3VsdC5tZXNzYWdlKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUHJpbnQgb3V0IHRoZSByZXN1bHRzIGZyb20gdGVzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50UmVzdWx0cyhkaWFnbm9zdGljOiBEaWFnbm9zdGljKTogdm9pZCB7XG4gIHN3aXRjaCAoZGlhZ25vc3RpYy5yZWFzb24pIHtcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFVOQ0hBTkdFRCAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX1NVQ0NFU1M6XG4gICAgICBsb2dnZXIuc3VjY2VzcygnICBTVUNDRVNTICAgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uTk9fU05BUFNIT1Q6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgTkVXICAgICAgICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBDSEFOR0VEICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0VSUk9SOlxuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0VSUk9SOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEVSUk9SICAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRkFJTEVEICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5BU1NFUlRJT05fRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEFTU0VSVCAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgfVxuICBmb3IgKGNvbnN0IGFkZGwgb2YgZGlhZ25vc3RpYy5hZGRpdGlvbmFsTWVzc2FnZXMgPz8gW10pIHtcbiAgICBsb2dnZXIucHJpbnQoYCAgICAgICR7YWRkbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMYWdnYXJkcyh0ZXN0TmFtZXM6IFNldDxzdHJpbmc+KSB7XG4gIGNvbnN0IHBhcnRzID0gW1xuICAgICcgICcsXG4gICAgYFdhaXRpbmcgZm9yICR7dGVzdE5hbWVzLnNpemV9IG1vcmVgLFxuICAgIHRlc3ROYW1lcy5zaXplIDwgMTAgPyBbJygnLCBBcnJheS5mcm9tKHRlc3ROYW1lcykuam9pbignLCAnKSwgJyknXS5qb2luKCcnKSA6ICcnLFxuICBdO1xuXG4gIGxvZ2dlci5wcmludChjaGFsay5ncmV5KHBhcnRzLmZpbHRlcih4ID0+IHgpLmpvaW4oJyAnKSkpO1xufVxuIiwgIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIENESyBFeGVjXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuLyoqXG4gKiBPdXIgb3duIGV4ZWN1dGUgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCB1c2Ugc2hlbGxzIGFuZCBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZTogc3RyaW5nW10sIG9wdGlvbnM6IHsgY3dkPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbiwgZW52PzogYW55IH0gPSB7IH0pOiBhbnkge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNvbW1hbmRMaW5lWzBdLCBjb21tYW5kTGluZS5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgb3B0aW9ucy52ZXJib3NlID8gJ2luaGVyaXQnIDogJ3BpcGUnXSwgLy8gaW5oZXJpdCBTVERFUlIgaW4gdmVyYm9zZSBtb2RlXG4gICAgZW52OiB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgIH0sXG4gICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgfSk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHsgdGhyb3cgcHJvYy5lcnJvcjsgfVxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvY2Vzcy5zdGRlcnIpIHsgLy8gd2lsbCBiZSAnbnVsbCcgaW4gdmVyYm9zZSBtb2RlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShwcm9jLnN0ZGVycik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBleGl0ZWQgd2l0aCAke3Byb2Muc3RhdHVzID8gYHN0YXR1cyAke3Byb2Muc3RhdHVzfWAgOiBgc2lnbmFsICR7cHJvYy5zaWduYWx9YH1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHByb2Muc3Rkb3V0LnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogQ2hhaW4gY29tbWFuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNvbW1hbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kcy5maWx0ZXIoYyA9PiAhIWMpLmpvaW4oJyAmJiAnKTtcbn1cblxuXG4vKipcbiAqIEEgY2xhc3MgaG9sZGluZyBhIHNldCBvZiBpdGVtcyB3aGljaCBhcmUgYmVpbmcgY3Jvc3NlZCBvZmYgaW4gdGltZVxuICpcbiAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGNyb3NzIG9mZiBhIG5ldyBpdGVtLCBwcmludCB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtMaXN0PEE+IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1haW5pbmcgPSBuZXcgU2V0KHRoaXMuaXRlbXMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IEFbXSwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBXb3JrTGlzdE9wdGlvbnM8QT4gPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyA2MF8wMDA7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3Jvc3NPZmYoaXRlbTogQSkge1xuICAgIHRoaXMucmVtYWluaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5zaXplID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvbmUoKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUaW1lcigpIHtcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlcG9ydCgpLCB0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVGltZW91dD8uKHRoaXMucmVtYWluaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtMaXN0T3B0aW9uczxBPiB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHJlcGx5IHdpdGggcmVtYWluaW5nIGl0ZW1zXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGltZW91dCBoaXRzXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoeDogU2V0PEE+KSA9PiB2b2lkO1xufSIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMsIHByaW50U3VtbWFyeSwgSW50ZWdCYXRjaFJlc3BvbnNlLCBJbnRlZ1Rlc3RPcHRpb25zLCBJbnRlZ1J1bm5lck1ldHJpY3MgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdCBiYXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEJhdGNoUmVxdWVzdCBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gdG8gcnVuIHRoaXMgYmF0Y2ggaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIHdoZW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyBhbGwgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RSdW5PcHRpb25zIGV4dGVuZHMgSW50ZWdUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzIGFjcm9zcy5cbiAgICogVGhpcyBhbGxvd3MgdGhlIHJ1bm5lciB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWxcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEFXUyBwcm9maWxlcy4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgcmVnaW9uc2BcbiAgICogdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhY2NvdW50cyArIHJlZ2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JrZXJwb29sIHRvIHVzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sO1xufVxuXG4vKipcbiAqIFJ1biBJbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHMob3B0aW9uczogSW50ZWdUZXN0UnVuT3B0aW9ucyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuLCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSB9PiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgZm9yIGZhaWxlZCB0ZXN0cy4uLlxcbicpO1xuICBsb2dnZXIucHJpbnQoXG4gICAgJ1J1bm5pbmcgaW4gcGFyYWxsZWwgYWNyb3NzICVzcmVnaW9uczogJXMnLFxuICAgIG9wdGlvbnMucHJvZmlsZXMgPyBgcHJvZmlsZXMgJHtvcHRpb25zLnByb2ZpbGVzLmpvaW4oJywgJyl9IGFuZCBgOiAnJyxcbiAgICBvcHRpb25zLnJlZ2lvbnMuam9pbignLCAnKSk7XG4gIGNvbnN0IHRvdGFsVGVzdHMgPSBvcHRpb25zLnRlc3RzLmxlbmd0aDtcblxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzSW5QYXJhbGxlbChvcHRpb25zKTtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVGVzdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRvdGFsVGVzdHMsIHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGggPT09IDAsXG4gICAgbWV0cmljczogcmVzcG9uc2VzLm1ldHJpY3MsXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHdvcmtlciBmb3IgYSBzaW5nbGUgYWNjb3VudCArIHJlZ2lvblxuICovXG5pbnRlcmZhY2UgQWNjb3VudFdvcmtlciB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB3b3JrZXIgc2hvdWxkIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0aGF0IHRoZSB3b3JrZXIgc2hvdWxkIHVzZVxuICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSAnLS1wcm9maWxlJyBvcHRpb24gdG8gdGhlIENESyBDTElcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgQWNjb3VudFdvcmtlcnMgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVnaW9ucyBhbmQgcHJvZmlsZXNcbiAqIGdpdmVuIHRvIHRoZSBDTEkuXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRXb3JrZXJzKHJlZ2lvbnM6IHN0cmluZ1tdLCBwcm9maWxlcz86IHN0cmluZ1tdKTogQWNjb3VudFdvcmtlcltdIHtcbiAgY29uc3Qgd29ya2VyczogQWNjb3VudFdvcmtlcltdID0gW107XG4gIGZ1bmN0aW9uIHB1c2hXb3JrZXIocHJvZmlsZT86IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIHdvcmtlcnMucHVzaCh7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgcHJvZmlsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAocHJvZmlsZXMgJiYgcHJvZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBwcm9maWxlcyA/PyBbXSkge1xuICAgICAgcHVzaFdvcmtlcihwcm9maWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHVzaFdvcmtlcigpO1xuICB9XG4gIHJldHVybiB3b3JrZXJzO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzZXQgb2YgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwgYWNyb3NzIGEgbGlzdCBvZiBBV1MgcmVnaW9ucy5cbiAqIE9ubHkgYSBzaW5nbGUgdGVzdCBjYW4gYmUgcnVuIGF0IGEgdGltZSBpbiBhIGdpdmVuIHJlZ2lvbi4gT25jZSBhIHJlZ2lvblxuICogaXMgZG9uZSBydW5uaW5nIGEgdGVzdCwgdGhlIG5leHQgdGVzdCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBxdWV1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwoXG4gIG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnQmF0Y2hSZXNwb25zZT4ge1xuXG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucy50ZXN0cztcbiAgY29uc3QgcmVzdWx0czogSW50ZWdCYXRjaFJlc3BvbnNlID0ge1xuICAgIG1ldHJpY3M6IFtdLFxuICAgIGZhaWxlZFRlc3RzOiBbXSxcbiAgfTtcbiAgY29uc3QgYWNjb3VudFdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IGdldEFjY291bnRXb3JrZXJzKG9wdGlvbnMucmVnaW9ucywgb3B0aW9ucy5wcm9maWxlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh3b3JrZXI6IEFjY291bnRXb3JrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGlmICghdGVzdCkgYnJlYWs7XG4gICAgICBjb25zdCB0ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgbG9nZ2VyLmhpZ2hsaWdodChgUnVubmluZyB0ZXN0ICR7dGVzdC5maWxlTmFtZX0gaW4gJHt3b3JrZXIucHJvZmlsZSA/IHdvcmtlci5wcm9maWxlICsgJy8nIDogJyd9JHt3b3JrZXIucmVnaW9ufWApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEludGVnVGVzdEluZm9bXVtdID0gYXdhaXQgb3B0aW9ucy5wb29sLmV4ZWMoJ2ludGVnVGVzdFdvcmtlcicsIFt7XG4gICAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgICAgcHJvZmlsZTogd29ya2VyLnByb2ZpbGUsXG4gICAgICAgIHRlc3RzOiBbdGVzdF0sXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgIHVwZGF0ZVdvcmtmbG93OiBvcHRpb25zLnVwZGF0ZVdvcmtmbG93LFxuICAgICAgfV0sIHtcbiAgICAgICAgb246IHByaW50UmVzdWx0cyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLmZhaWxlZFRlc3RzLnB1c2goLi4uZmxhdHRlbihyZXNwb25zZSkpO1xuICAgICAgdGVzdHNbdGVzdC5maWxlTmFtZV0gPSAoRGF0ZS5ub3coKSAtIHRlc3RTdGFydCkgLyAxMDAwO1xuICAgIH0gd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljcyA9IHtcbiAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIHRlc3RzLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLm1ldHJpY3MucHVzaChtZXRyaWNzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJzID0gYWNjb3VudFdvcmtlcnMubWFwKCh3b3JrZXIpID0+IHJ1blRlc3Qod29ya2VyKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgZmxhdHRlbiwgV29ya0xpc3QgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFN1bW1hcnksIHByaW50UmVzdWx0cywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMsIHByaW50TGFnZ2FyZHMgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogUnVuIFNuYXBzaG90IHRlc3RzXG4gKiBGaXJzdCBiYXRjaCB1cCB0aGUgdGVzdHMuIEJ5IGRlZmF1bHQgdGhlcmUgd2lsbCBiZSAzIHRlc3RzIHBlciBiYXRjaC5cbiAqIFVzZSBhIHdvcmtlcnBvb2wgdG8gcnVuIHRoZSBiYXRjaGVzIGluIHBhcmFsbGVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU25hcHNob3RUZXN0cyhcbiAgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sLFxuICB0ZXN0czogSW50ZWdUZXN0W10sXG4gIG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVmVyaWZ5aW5nIGludGVncmF0aW9uIHRlc3Qgc25hcHNob3RzLi4uXFxuJyk7XG5cbiAgY29uc3QgdG9kbyA9IG5ldyBXb3JrTGlzdCh0ZXN0cy5tYXAodCA9PiB0LnRlc3ROYW1lKSwge1xuICAgIG9uVGltZW91dDogcHJpbnRMYWdnYXJkcyxcbiAgfSk7XG5cbiAgY29uc3QgZmFpbGVkVGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0ZXN0cy5tYXAoKHRlc3QpID0+IHBvb2wuZXhlYygnc25hcHNob3RUZXN0V29ya2VyJywgW3Rlc3QuaW5mbyAvKiBEZWh5ZHJhdGUgY2xhc3MgLT4gZGF0YSAqLywgb3B0aW9uc10sIHtcbiAgICAgIG9uOiAoeCkgPT4ge1xuICAgICAgICB0b2RvLmNyb3NzT2ZmKHgudGVzdE5hbWUpO1xuICAgICAgICBwcmludFJlc3VsdHMoeCk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKTtcbiAgdG9kby5kb25lKCk7XG4gIGNvbnN0IHRlc3RzVG9SdW4gPSBmbGF0dGVuKGZhaWxlZFRlc3RzKTtcblxuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5TbmFwc2hvdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRlc3RzLmxlbmd0aCwgdGVzdHNUb1J1bi5sZW5ndGgpO1xuICByZXR1cm4gdGVzdHNUb1J1bjtcblxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdC13b3JrZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlZy1zbmFwc2hvdC13b3JrZXInO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmxldCBzaGltO1xuY2xhc3MgWTE4TiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICAvLyBjb25maWd1cmFibGUgb3B0aW9ucy5cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIHRoaXMuZGlyZWN0b3J5ID0gb3B0cy5kaXJlY3RvcnkgfHwgJy4vbG9jYWxlcyc7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXMgPSB0eXBlb2Ygb3B0cy51cGRhdGVGaWxlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy51cGRhdGVGaWxlcyA6IHRydWU7XG4gICAgICAgIHRoaXMubG9jYWxlID0gb3B0cy5sb2NhbGUgfHwgJ2VuJztcbiAgICAgICAgdGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgPSB0eXBlb2Ygb3B0cy5mYWxsYmFja1RvTGFuZ3VhZ2UgPT09ICdib29sZWFuJyA/IG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlIDogdHJ1ZTtcbiAgICAgICAgLy8gaW50ZXJuYWwgc3R1ZmYuXG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLndyaXRlUXVldWUgPSBbXTtcbiAgICB9XG4gICAgX18oLi4uYXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWdnZWRMaXRlcmFsKGFyZ3VtZW50c1swXSwgLi4uYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7IH07IC8vIG5vb3AuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdICYmIHRoaXMudXBkYXRlRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gPSBzdHI7XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbG9jYWxlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhlc2UgdmFsdWVzIGNvdWxkIGNoYW5nZSBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyB3cml0ZSBpcyBwZXJmb3JtZWQuXG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlV3JpdGUoe1xuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgW3RoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gfHwgc3RyXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBfX24oKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICBjb25zdCBzaW5ndWxhciA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBxdWFudGl0eSA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBzdGFydCB3aXRoIG5vb3AuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgbGV0IHN0ciA9IHF1YW50aXR5ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWw7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdO1xuICAgICAgICAgICAgc3RyID0gZW50cnlbcXVhbnRpdHkgPT09IDEgPyAnb25lJyA6ICdvdGhlciddO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlJ3ZlIG9ic2VydmVkIGEgbmV3IHN0cmluZywgdXBkYXRlIHRoZSBsYW5ndWFnZSBmaWxlLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gPSB7XG4gICAgICAgICAgICAgICAgb25lOiBzaW5ndWxhcixcbiAgICAgICAgICAgICAgICBvdGhlcjogcGx1cmFsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhICVkIHBsYWNlaG9sZGVyIGlzIHByb3ZpZGVkLCBhZGQgcXVhbnRpdHlcbiAgICAgICAgLy8gdG8gdGhlIGFyZ3VtZW50cyBleHBhbmRlZCBieSB1dGlsLmZvcm1hdC5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gW3N0cl07XG4gICAgICAgIGlmICh+c3RyLmluZGV4T2YoJyVkJykpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChxdWFudGl0eSk7XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgdmFsdWVzLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICAgIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuICAgIGdldExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICAgIH1cbiAgICB1cGRhdGVMb2NhbGUob2JqKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1ba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF90YWdnZWRMaXRlcmFsKHBhcnRzLCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCwgaSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICBzdHIgKz0gcGFydDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHN0ciArPSAnJXMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX18uYXBwbHkodGhpcywgW3N0cl0uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncywgMSkpKTtcbiAgICB9XG4gICAgX2VucXVldWVXcml0ZSh3b3JrKSB7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZS5wdXNoKHdvcmspO1xuICAgICAgICBpZiAodGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgfVxuICAgIF9wcm9jZXNzV3JpdGVRdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjb25zdCB3b3JrID0gdGhpcy53cml0ZVF1ZXVlWzBdO1xuICAgICAgICAvLyBkZXN0cnVjdHVyZSB0aGUgZW5xdWV1ZWQgd29yay5cbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gd29yay5kaXJlY3Rvcnk7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHdvcmsubG9jYWxlO1xuICAgICAgICBjb25zdCBjYiA9IHdvcmsuY2I7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExvY2FsZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVbbG9jYWxlXSwgbnVsbCwgMik7XG4gICAgICAgIHNoaW0uZnMud3JpdGVGaWxlKGxhbmd1YWdlRmlsZSwgc2VyaWFsaXplZExvY2FsZSwgJ3V0Zi04JywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgX3RoaXMud3JpdGVRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKF90aGlzLndyaXRlUXVldWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1dyaXRlUXVldWUoKTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcmVhZExvY2FsZUZpbGUoKSB7XG4gICAgICAgIGxldCBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gdGhpcy5fcmVzb2x2ZUxvY2FsZUZpbGUodGhpcy5kaXJlY3RvcnksIHRoaXMubG9jYWxlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgYSBidW5kbGVyIHN1Y2ggYXMgd2VicGFjaywgcmVhZEZpbGVTeW5jIG1heSBub3QgYmUgZGVmaW5lZDpcbiAgICAgICAgICAgIGlmIChzaGltLmZzLnJlYWRGaWxlU3luYykge1xuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IEpTT04ucGFyc2Uoc2hpbS5mcy5yZWFkRmlsZVN5bmMobGFuZ3VhZ2VGaWxlLCAndXRmLTgnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSAnc3ludGF4IGVycm9yIGluICcgKyBsYW5ndWFnZUZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKVxuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IHt9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSA9IGxvY2FsZUxvb2t1cDtcbiAgICB9XG4gICAgX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKSB7XG4gICAgICAgIGxldCBmaWxlID0gc2hpbS5yZXNvbHZlKGRpcmVjdG9yeSwgJy4vJywgbG9jYWxlICsgJy5qc29uJyk7XG4gICAgICAgIGlmICh0aGlzLmZhbGxiYWNrVG9MYW5ndWFnZSAmJiAhdGhpcy5fZmlsZUV4aXN0c1N5bmMoZmlsZSkgJiYgfmxvY2FsZS5sYXN0SW5kZXhPZignXycpKSB7XG4gICAgICAgICAgICAvLyBhdHRlbXB0IGZhbGxiYWNrIHRvIGxhbmd1YWdlIG9ubHlcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZS5zcGxpdCgnXycpWzBdICsgJy5qc29uJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4aXN0c1N5bmMobGFuZ3VhZ2VGaWxlKSlcbiAgICAgICAgICAgICAgICBmaWxlID0gbGFuZ3VhZ2VGaWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgICBfZmlsZUV4aXN0c1N5bmMoZmlsZSkge1xuICAgICAgICByZXR1cm4gc2hpbS5leGlzdHMoZmlsZSk7XG4gICAgfVxufVxuZnVuY3Rpb24geTE4biQxKG9wdHMsIF9zaGltKSB7XG4gICAgc2hpbSA9IF9zaGltO1xuICAgIGNvbnN0IHkxOG4gPSBuZXcgWTE4TihvcHRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBfXzogeTE4bi5fXy5iaW5kKHkxOG4pLFxuICAgICAgICBfX246IHkxOG4uX19uLmJpbmQoeTE4biksXG4gICAgICAgIHNldExvY2FsZTogeTE4bi5zZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgZ2V0TG9jYWxlOiB5MThuLmdldExvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICB1cGRhdGVMb2NhbGU6IHkxOG4udXBkYXRlTG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGxvY2FsZTogeTE4bi5sb2NhbGVcbiAgICB9O1xufVxuXG52YXIgbm9kZVBsYXRmb3JtU2hpbSA9IHtcbiAgICBmczoge1xuICAgICAgICByZWFkRmlsZVN5bmM6IGZzLnJlYWRGaWxlU3luYyxcbiAgICAgICAgd3JpdGVGaWxlOiBmcy53cml0ZUZpbGVcbiAgICB9LFxuICAgIGZvcm1hdDogdXRpbC5mb3JtYXQsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIGV4aXN0czogKGZpbGUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmcy5zdGF0U3luYyhmaWxlKS5pc0ZpbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCB5MThuID0gKG9wdHMpID0+IHtcbiAgICByZXR1cm4geTE4biQxKG9wdHMsIG5vZGVQbGF0Zm9ybVNoaW0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB5MThuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpIHtcbiAgICBjb25zdCBpc0NhbWVsQ2FzZSA9IHN0ciAhPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIWlzQ2FtZWxDYXNlKSB7XG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoc3RyLmluZGV4T2YoJy0nKSA9PT0gLTEgJiYgc3RyLmluZGV4T2YoJ18nKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjYW1lbGNhc2UgPSAnJztcbiAgICAgICAgbGV0IG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBsZWFkaW5nSHlwaGVucyA9IHN0ci5tYXRjaCgvXi0rLyk7XG4gICAgICAgIGZvciAobGV0IGkgPSBsZWFkaW5nSHlwaGVucyA/IGxlYWRpbmdIeXBoZW5zWzBdLmxlbmd0aCA6IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaHIgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKG5leHRDaHJVcHBlcikge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNociA9IGNoci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgIT09IDAgJiYgKGNociA9PT0gJy0nIHx8IGNociA9PT0gJ18nKSkge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgIT09ICctJyAmJiBjaHIgIT09ICdfJykge1xuICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBjaHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbWVsY2FzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWNhbWVsaXplKHN0ciwgam9pblN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyY2FzZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGpvaW5TdHJpbmcgPSBqb2luU3RyaW5nIHx8ICctJztcbiAgICBsZXQgbm90Q2FtZWxjYXNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hyTG93ZXIgPSBsb3dlcmNhc2UuY2hhckF0KGkpO1xuICAgICAgICBjb25zdCBjaHJTdHJpbmcgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpZiAoY2hyTG93ZXIgIT09IGNoclN0cmluZyAmJiBpID4gMCkge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGAke2pvaW5TdHJpbmd9JHtsb3dlcmNhc2UuY2hhckF0KGkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RDYW1lbGNhc2UgKz0gY2hyU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3RDYW1lbGNhc2U7XG59XG5mdW5jdGlvbiBsb29rc0xpa2VOdW1iZXIoeCkge1xuICAgIGlmICh4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoeCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgvXjBbXi5dLy50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIC9eWy1dPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoZVstK10/XFxkKyk/JC8udGVzdCh4KTtcbn1cblxuZnVuY3Rpb24gdG9rZW5pemVBcmdTdHJpbmcoYXJnU3RyaW5nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gYXJnU3RyaW5nLm1hcChlID0+IHR5cGVvZiBlICE9PSAnc3RyaW5nJyA/IGUgKyAnJyA6IGUpO1xuICAgIH1cbiAgICBhcmdTdHJpbmcgPSBhcmdTdHJpbmcudHJpbSgpO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgcHJldkMgPSBudWxsO1xuICAgIGxldCBjID0gbnVsbDtcbiAgICBsZXQgb3BlbmluZyA9IG51bGw7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHByZXZDID0gYztcbiAgICAgICAgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaWkpO1xuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBpZiAoIShwcmV2QyA9PT0gJyAnKSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSBvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykgJiYgIW9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBjO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnc1tpXSlcbiAgICAgICAgICAgIGFyZ3NbaV0gPSAnJztcbiAgICAgICAgYXJnc1tpXSArPSBjO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cblxudmFyIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5O1xuKGZ1bmN0aW9uIChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSkge1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbn0pKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IHx8IChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSA9IHt9KSk7XG5cbmxldCBtaXhpbjtcbmNsYXNzIFlhcmdzUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihfbWl4aW4pIHtcbiAgICAgICAgbWl4aW4gPSBfbWl4aW47XG4gICAgfVxuICAgIHBhcnNlKGFyZ3NJbnB1dCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBhbGlhczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJyYXk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJvb2xlYW46IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29lcmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW52UHJlZml4OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYXJnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub3JtYWxpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0cmluZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBfXzogdW5kZWZpbmVkLFxuICAgICAgICAgICAga2V5OiB1bmRlZmluZWRcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0b2tlbml6ZUFyZ1N0cmluZyhhcmdzSW5wdXQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gY29tYmluZUFsaWFzZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmFsaWFzKSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICdib29sZWFuLW5lZ2F0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdjYW1lbC1jYXNlLWV4cGFuc2lvbic6IHRydWUsXG4gICAgICAgICAgICAnY29tYmluZS1hcnJheXMnOiBmYWxzZSxcbiAgICAgICAgICAgICdkb3Qtbm90YXRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknOiB0cnVlLFxuICAgICAgICAgICAgJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnZ3JlZWR5LWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnaGFsdC1hdC1ub24tb3B0aW9uJzogZmFsc2UsXG4gICAgICAgICAgICAnbmFyZ3MtZWF0cy1vcHRpb25zJzogZmFsc2UsXG4gICAgICAgICAgICAnbmVnYXRpb24tcHJlZml4JzogJ25vLScsXG4gICAgICAgICAgICAncGFyc2UtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogdHJ1ZSxcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogZmFsc2UsXG4gICAgICAgICAgICAnc2V0LXBsYWNlaG9sZGVyLWtleSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3Nob3J0LW9wdGlvbi1ncm91cHMnOiB0cnVlLFxuICAgICAgICAgICAgJ3N0cmlwLWFsaWFzZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICdzdHJpcC1kYXNoZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICd1bmtub3duLW9wdGlvbnMtYXMtYXJncyc6IGZhbHNlXG4gICAgICAgIH0sIG9wdHMuY29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmRlZmF1bHQpO1xuICAgICAgICBjb25zdCBjb25maWdPYmplY3RzID0gb3B0cy5jb25maWdPYmplY3RzIHx8IFtdO1xuICAgICAgICBjb25zdCBlbnZQcmVmaXggPSBvcHRzLmVudlByZWZpeDtcbiAgICAgICAgY29uc3Qgbm90RmxhZ3NPcHRpb24gPSBjb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzQXJndiA9IG5vdEZsYWdzT3B0aW9uID8gJy0tJyA6ICdfJztcbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IF9fID0gb3B0cy5fXyB8fCBtaXhpbi5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGZsYWdzID0ge1xuICAgICAgICAgICAgYWxpYXNlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGFycmF5czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGJvb2xzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgc3RyaW5nczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG51bWJlcnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb3VudHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBub3JtYWxpemU6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb25maWdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbmFyZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb2VyY2lvbnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBrZXlzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZWdhdGl2ZSA9IC9eLShbMC05XSsoXFwuWzAtOV0rKT98XFwuWzAtOV0rKSQvO1xuICAgICAgICBjb25zdCBuZWdhdGVkQm9vbGVhbiA9IG5ldyBSZWdFeHAoJ14tLScgKyBjb25maWd1cmF0aW9uWyduZWdhdGlvbi1wcmVmaXgnXSArICcoLispJyk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmFycmF5IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IG9wdC5rZXkgOiBvcHQ7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50ID0gT2JqZWN0LmtleXMob3B0KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5RmxhZ0tleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJvb2xlYW46ICdib29scycsXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZzogJ3N0cmluZ3MnLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXI6ICdudW1iZXJzJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RmxhZ0tleXNba2V5XTtcbiAgICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5wb3AoKTtcbiAgICAgICAgICAgIGlmIChhc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgZmxhZ3NbYXNzaWdubWVudF1ba2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFncy5hcnJheXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmJvb2xlYW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmJvb2xzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5zdHJpbmcgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLnN0cmluZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm51bWJlciB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MubnVtYmVyc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuY291bnQgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmNvdW50c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMubm9ybWFsaXplIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ub3JtYWxpemVba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYXJnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5uYXJnKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5uYXJnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jb2VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvZXJjZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5jb2VyY2lvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29uZmlnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cy5jb25maWcpIHx8IHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQob3B0cy5jb25maWcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29uZmlnc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvbmZpZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXh0ZW5kQWxpYXNlcyhvcHRzLmtleSwgYWxpYXNlcywgb3B0cy5kZWZhdWx0LCBmbGFncy5hcnJheXMpO1xuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW2FsaWFzXSA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGNoZWNrQ29uZmlndXJhdGlvbigpO1xuICAgICAgICBsZXQgbm90RmxhZ3MgPSBbXTtcbiAgICAgICAgY29uc3QgYXJndiA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgeyBfOiBbXSB9KTtcbiAgICAgICAgY29uc3QgYXJndlJldHVybiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRBcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tLScpO1xuICAgICAgICAgICAgbGV0IGJyb2tlbjtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICBsZXQgbGV0dGVycztcbiAgICAgICAgICAgIGxldCBtO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICBpZiAoYXJnICE9PSAnLS0nICYmIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHJ1bmNhdGVkQXJnLm1hdGNoKC8tLS0rKD18JCkvKSkge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rPS8pIHx8ICghY29uZmlndXJhdGlvblsnc2hvcnQtb3B0aW9uLWdyb3VwcyddICYmIGFyZy5tYXRjaCgvXi0uKz0vKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KFtePV0rKT0oW1xcc1xcU10qKSQvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKG1bMV0sIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBtWzFdLCBhcmdzLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbikgJiYgY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykgPyBbZmFsc2VdIDogZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0tLisvKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tW14tXSsvKSkpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLS0/KC4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghbmV4dC5tYXRjaCgvXi0vKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0uXFwuLis9LykpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLShbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oLlxcLi4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICFuZXh0Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tW14tXSsvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIGxldHRlcnMgPSBhcmcuc2xpY2UoMSwgLTEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldHRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZy5zbGljZShqICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBsZXR0ZXJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMobmV4dCwgZmxhZ3MuYm9vbHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBkZWZhdWx0VmFsdWUobGV0dGVyc1tqXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtleSA9IGFyZy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKCFicm9rZW4gJiYga2V5ICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIS9eKC18LS0pW14tXS8udGVzdChuZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi1bMC05XSQvKSAmJlxuICAgICAgICAgICAgICAgIGFyZy5tYXRjaChuZWdhdGl2ZSkgJiZcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoYXJnLnNsaWNlKDEpLCBmbGFncy5ib29scykpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb25bJ2hhbHQtYXQtbm9uLW9wdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgdHJ1ZSk7XG4gICAgICAgIGFwcGx5RW52VmFycyhhcmd2LCBmYWxzZSk7XG4gICAgICAgIHNldENvbmZpZyhhcmd2KTtcbiAgICAgICAgc2V0Q29uZmlnT2JqZWN0cygpO1xuICAgICAgICBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhhcmd2LCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgIGFwcGx5Q29lcmNpb25zKGFyZ3YpO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnc2V0LXBsYWNlaG9sZGVyLWtleSddKVxuICAgICAgICAgICAgc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpO1xuICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb3VudHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwga2V5LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vdEZsYWdzT3B0aW9uICYmIG5vdEZsYWdzLmxlbmd0aClcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XSA9IFtdO1xuICAgICAgICBub3RGbGFncy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBjb25maWd1cmF0aW9uWydzdHJpcC1kYXNoZWQnXSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZmlsdGVyKGtleSA9PiBrZXkgIT09ICctLScgJiYga2V5LmluY2x1ZGVzKCctJykpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndltrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3N0cmlwLWFsaWFzZWQnXSkge1xuICAgICAgICAgICAgW10uY29uY2F0KC4uLk9iamVjdC5rZXlzKGFsaWFzZXMpLm1hcChrID0+IGFsaWFzZXNba10pKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBhbGlhcy5pbmNsdWRlcygnLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2FsaWFzLnNwbGl0KCcuJykubWFwKHByb3AgPT4gY2FtZWxDYXNlKHByb3ApKS5qb2luKCcuJyldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhc107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwdXNoUG9zaXRpb25hbChhcmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQ29lcmNlZE51bWJlciA9IG1heWJlQ29lcmNlTnVtYmVyKCdfJywgYXJnKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5wdXNoKG1heWJlQ29lcmNlZE51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWF0TmFyZ3MoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGlpO1xuICAgICAgICAgICAgbGV0IHRvRWF0ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgdG9FYXQgPSB0eXBlb2YgdG9FYXQgIT09ICdudW1iZXInIHx8IGlzTmFOKHRvRWF0KSA/IDEgOiB0b0VhdDtcbiAgICAgICAgICAgIGlmICh0b0VhdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0FyZ3VtZW50IHVuZXhwZWN0ZWQgZm9yOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYXZhaWxhYmxlID0gaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pID8gMCA6IDE7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnbmFyZ3MtZWF0cy1vcHRpb25zJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggLSAoaSArIDEpICsgYXZhaWxhYmxlIDwgdG9FYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSB0b0VhdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3NbaWldLm1hdGNoKC9eLVteMC05XS8pIHx8IGFyZ3NbaWldLm1hdGNoKG5lZ2F0aXZlKSB8fCBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmdzW2lpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUrKztcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUgPCB0b0VhdClcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNvbnN1bWVkID0gTWF0aC5taW4oYXZhaWxhYmxlLCB0b0VhdCk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiBjb25zdW1lZCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdBZnRlckVxdWFsU2lnbik7XG4gICAgICAgICAgICAgICAgY29uc3VtZWQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCAoY29uc3VtZWQgKyBpICsgMSk7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzW2lpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGkgKyBjb25zdW1lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGFyZ3NUb1NldCA9IFtdO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBhcmdBZnRlckVxdWFsU2lnbiB8fCBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5hcmdzQ291bnQgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncyk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICEoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NUb1NldC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZmluZWQobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAoaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pICYmIC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZWYWwgPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQgPSBBcnJheS5pc0FycmF5KGRlZlZhbCkgPyBkZWZWYWwgOiBbZGVmVmFsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBhcmdBZnRlckVxdWFsU2lnbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbmZpZ3VyYXRpb25bJ2dyZWVkeS1hcnJheXMnXSAmJiBhcmdzVG9TZXQubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChuYXJnc0NvdW50ICYmIHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiBhcmdzVG9TZXQubGVuZ3RoID49IG5hcmdzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2lpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IGlpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBuZXh0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiAoKG5hcmdzQ291bnQgJiYgYXJnc1RvU2V0Lmxlbmd0aCA8IG5hcmdzQ291bnQpIHx8XG4gICAgICAgICAgICAgICAgKGlzTmFOKG5hcmdzQ291bnQpICYmIGFyZ3NUb1NldC5sZW5ndGggPT09IDApKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NUb1NldCk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRBcmcoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIGlmICgvLS8udGVzdChrZXkpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlhcyA9IGtleS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKHByb3ApO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhrZXksIGFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBzZXRLZXkoYXJndiwgc3BsaXRLZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNwbGl0S2V5Lmxlbmd0aCA+IDEgJiYgY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1tzcGxpdEtleVswXV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleVByb3BlcnRpZXMgPSB4LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBbXS5jb25jYXQoc3BsaXRLZXkpO1xuICAgICAgICAgICAgICAgICAgICBhLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGtleVByb3BlcnRpZXMgPSBrZXlQcm9wZXJ0aWVzLmNvbmNhdChhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5pbmNsdWRlcyhrZXlQcm9wZXJ0aWVzLmpvaW4oJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShhcmd2LCBrZXlQcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ub3JtYWxpemUpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcmd2UmV0dXJuLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbWl4aW4ubm9ybWFsaXplKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGROZXdBbGlhcyhrZXksIGFsaWFzKSB7XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2tleV0gJiYgZmxhZ3MuYWxpYXNlc1trZXldLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbYWxpYXNdO1xuICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbYWxpYXNdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNbYWxpYXNdICYmIGZsYWdzLmFsaWFzZXNbYWxpYXNdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhhbGlhcywga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICh2YWxbMF0gPT09IFwiJ1wiIHx8IHZhbFswXSA9PT0gJ1wiJykgJiZcbiAgICAgICAgICAgICAgICB2YWxbdmFsLmxlbmd0aCAtIDFdID09PSB2YWxbMF0pIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDEsIHZhbC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgfHwgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsID09PSAndHJ1ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbClcbiAgICAgICAgICAgICAgICA/IHZhbC5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdik7IH0pXG4gICAgICAgICAgICAgICAgOiBtYXliZUNvZXJjZU51bWJlcihrZXksIHZhbCk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWwubWFwKCh2YWwpID0+IHsgcmV0dXJuIG1peGluLm5vcm1hbGl6ZSh2YWwpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWl4aW4ubm9ybWFsaXplKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSAmJiBrZXkgPT09ICdfJylcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLnN0cmluZ3MpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ29lcmNlTnVtYmVyID0gbG9va3NMaWtlTnVtYmVyKHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydwYXJzZS1udW1iZXJzJ10gJiYgKE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ29lcmNlTnVtYmVyIHx8ICghaXNVbmRlZmluZWQodmFsdWUpICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZyhhcmd2KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWdMb29rdXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoY29uZmlnTG9va3VwLCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb25maWdzKS5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdQYXRoID0gYXJndltjb25maWdLZXldIHx8IGNvbmZpZ0xvb2t1cFtjb25maWdLZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnUGF0aCA9IG1peGluLnJlc29sdmUobWl4aW4uY3dkKCksIGNvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZUNvbmZpZyA9IGZsYWdzLmNvbmZpZ3NbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZUNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IHJlc29sdmVDb25maWcocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gbWl4aW4ucmVxdWlyZShyZXNvbHZlZENvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXgubmFtZSA9PT0gJ1Blcm1pc3Npb25EZW5pZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2NvbmZpZ0tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBKU09OIGNvbmZpZyBmaWxlOiAlcycsIGNvbmZpZ1BhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdChjb25maWcsIHByZXYpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJldiA/IHByZXYgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShhcmd2LCBmdWxsS2V5LnNwbGl0KCcuJykpIHx8IChjaGVja0FsbEFsaWFzZXMoZnVsbEtleSwgZmxhZ3MuYXJyYXlzKSAmJiBjb25maWd1cmF0aW9uWydjb21iaW5lLWFycmF5cyddKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGZ1bGxLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdHMoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ09iamVjdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnT2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZ09iamVjdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlFbnZWYXJzKGFyZ3YsIGNvbmZpZ09ubHkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW52UHJlZml4ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0eXBlb2YgZW52UHJlZml4ID09PSAnc3RyaW5nJyA/IGVudlByZWZpeCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZW52ID0gbWl4aW4uZW52KCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goZnVuY3Rpb24gKGVudlZhcikge1xuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT09ICcnIHx8IGVudlZhci5sYXN0SW5kZXhPZihwcmVmaXgsIDApID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBlbnZWYXIuc3BsaXQoJ19fJykubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2Uoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGNvbmZpZ09ubHkgJiYgZmxhZ3MuY29uZmlnc1trZXlzLmpvaW4oJy4nKV0pIHx8ICFjb25maWdPbmx5KSAmJiAhaGFzS2V5KGFyZ3YsIGtleXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5cy5qb2luKCcuJyksIGVudltlbnZWYXJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5Q29lcmNpb25zKGFyZ3YpIHtcbiAgICAgICAgICAgIGxldCBjb2VyY2U7XG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBsaWVkLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZXJjZSA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvZXJjaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCBjb2VyY2UoYXJndltrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSkpLmZvckVhY2goYWxpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZC5hZGQoYWxpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlthbGldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRQbGFjZWhvbGRlcktleXMoYXJndikge1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofmtleS5pbmRleE9mKCcuJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMob2JqLCBhbGlhc2VzLCBkZWZhdWx0cywgY2FuTG9nID0gZmFsc2UpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShvYmosIGtleS5zcGxpdCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5Mb2cpXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ZWRba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIChhbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNLZXkob2JqLCB4LnNwbGl0KCcuJykpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEtleShvYmosIHguc3BsaXQoJy4nKSwgZGVmYXVsdHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0tleShvYmosIGtleXMpIHtcbiAgICAgICAgICAgIGxldCBvID0gb2JqO1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSlcbiAgICAgICAgICAgICAgICBrZXlzID0gW2tleXMuam9pbignLicpXTtcbiAgICAgICAgICAgIGtleXMuc2xpY2UoMCwgLTEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIG8gPSAob1trZXldIHx8IHt9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBvO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldEtleShvYmosIGtleXMsIHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgb1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldLnB1c2goe30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwge31dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV1bb1trZXldLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IG9ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNhbml0aXplS2V5KGtleXNba2V5cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBjb25zdCBpc1R5cGVBcnJheSA9IGNoZWNrQWxsQWxpYXNlcyhrZXlzLmpvaW4oJy4nKSwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgbGV0IGR1cGxpY2F0ZSA9IGNvbmZpZ3VyYXRpb25bJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknXTtcbiAgICAgICAgICAgIGlmICghZHVwbGljYXRlICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCghaXNVbmRlZmluZWQob1trZXldKSAmJiBmbGFncy5uYXJnc1trZXldID09PSAxKSB8fCAoQXJyYXkuaXNBcnJheShvW2tleV0pICYmIG9ba2V5XS5sZW5ndGggPT09IGZsYWdzLm5hcmdzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGluY3JlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaW5jcmVtZW50KG9ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlICYmIGlzVHlwZUFycmF5ICYmIGlzVmFsdWVBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBjb25maWd1cmF0aW9uWydmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnXSA/IG9ba2V5XS5jb25jYXQodmFsdWUpIDogKEFycmF5LmlzQXJyYXkob1trZXldWzBdKSA/IG9ba2V5XSA6IFtvW2tleV1dKS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFkdXBsaWNhdGUgJiYgQm9vbGVhbihpc1R5cGVBcnJheSkgPT09IEJvb2xlYW4oaXNWYWx1ZUFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IG9ba2V5XS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob1trZXldID09PSB1bmRlZmluZWQgJiYgaXNUeXBlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBpc1ZhbHVlQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkdXBsaWNhdGUgJiYgIShvW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwgdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXh0ZW5kQWxpYXNlcyguLi5hcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9iaiB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFtdLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8tLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2FtZWxDYXNlKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID4gMSAmJiAvW0EtWl0vLnRlc3QoeCkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBkZWNhbWVsaXplKHgsICctJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IGtleSAmJiBmbGFncy5hbGlhc2VzW2tleV0uaW5kZXhPZihjKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW3hdID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XS5maWx0ZXIoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAhPT0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFnKSB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmbGFnKTtcbiAgICAgICAgICAgIGNvbnN0IHNldEFsaWFzID0gdG9DaGVjay5maW5kKGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIHNldEFsaWFzID8gZmxhZ1tzZXRBbGlhc10gOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNBbnlGbGFnKGtleSkge1xuICAgICAgICAgICAgY29uc3QgZmxhZ3NLZXlzID0gT2JqZWN0LmtleXMoZmxhZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFnc0tleXMubWFwKGsgPT4gZmxhZ3Nba10pKTtcbiAgICAgICAgICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmbGFnKSA/IGZsYWcuaW5jbHVkZXMoa2V5KSA6IGZsYWdba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCAuLi5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdCguLi5wYXR0ZXJucyk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBhcmcubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIGhhc0FueUZsYWcobWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQWxsU2hvcnRGbGFncyhhcmcpIHtcbiAgICAgICAgICAgIGlmIChhcmcubWF0Y2gobmVnYXRpdmUpIHx8ICFhcmcubWF0Y2goL14tW14tXSsvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBoYXNBbGxGbGFncyA9IHRydWU7XG4gICAgICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgICAgIGNvbnN0IGxldHRlcnMgPSBhcmcuc2xpY2UoMSkuc3BsaXQoJycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlGbGFnKGxldHRlcnNbal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FsbEZsYWdzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdID09PSAnPScpIHx8XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPT09ICctJyB8fFxuICAgICAgICAgICAgICAgICAgICAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFzQWxsRmxhZ3M7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSAmJiBpc1Vua25vd25PcHRpb24oYXJnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1Vua25vd25PcHRpb24oYXJnKSB7XG4gICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tJyk7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBbGxTaG9ydEZsYWdzKGFyZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmbGFnV2l0aEVxdWFscyA9IC9eLSsoW149XSs/KT1bXFxzXFxTXSokLztcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbEZsYWcgPSAvXi0rKFtePV0rPykkLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkh5cGhlbiA9IC9eLSsoW149XSs/KS0kLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkRpZ2l0cyA9IC9eLSsoW149XSs/XFxkKykkLztcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbk5vbldvcmRDaGFyYWN0ZXJzID0gL14tKyhbXj1dKz8pXFxXKy4qJC87XG4gICAgICAgICAgICByZXR1cm4gIWhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCBmbGFnV2l0aEVxdWFscywgbmVnYXRlZEJvb2xlYW4sIG5vcm1hbEZsYWcsIGZsYWdFbmRpbmdJbkh5cGhlbiwgZmxhZ0VuZGluZ0luRGlnaXRzLCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlKGtleSkge1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJlxuICAgICAgICAgICAgICAgIGAke2tleX1gIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZvclR5cGUoZ3Vlc3NUeXBlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTl06IHRydWUsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklOR106ICcnLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVJdOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZXTogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZGVmW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGd1ZXNzVHlwZShrZXkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuU1RSSU5HO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5Lk5VTUJFUjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5maW5kKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLmFycmF5LicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5uYXJnLicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIGZsYWdzLmFsaWFzZXMpLFxuICAgICAgICAgICAgYXJndjogT2JqZWN0LmFzc2lnbihhcmd2UmV0dXJuLCBhcmd2KSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0ZWQ6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRlZCksXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBuZXdBbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBuZXdBbGlhc2VzKVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbWJpbmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICBjb25zdCBhbGlhc0FycmF5cyA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgY2hhbmdlID0gdHJ1ZTtcbiAgICBPYmplY3Qua2V5cyhhbGlhc2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgYWxpYXNBcnJheXMucHVzaChbXS5jb25jYXQoYWxpYXNlc1trZXldLCBrZXkpKTtcbiAgICB9KTtcbiAgICB3aGlsZSAoY2hhbmdlKSB7XG4gICAgICAgIGNoYW5nZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdCA9IGFsaWFzQXJyYXlzW2ldLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXNBcnJheXNbaWldLmluZGV4T2YodikgIT09IC0xO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzW2ldID0gYWxpYXNBcnJheXNbaV0uY29uY2F0KGFsaWFzQXJyYXlzW2lpXSk7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzLnNwbGljZShpaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhbGlhc0FycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhc0FycmF5KSB7XG4gICAgICAgIGFsaWFzQXJyYXkgPSBhbGlhc0FycmF5LmZpbHRlcihmdW5jdGlvbiAodiwgaSwgc2VsZikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2KSA9PT0gaTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGlhcyA9IGFsaWFzQXJyYXkucG9wKCk7XG4gICAgICAgIGlmIChsYXN0QWxpYXMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGFzdEFsaWFzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29tYmluZWRbbGFzdEFsaWFzXSA9IGFsaWFzQXJyYXk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG59XG5mdW5jdGlvbiBpbmNyZW1lbnQob3JpZykge1xuICAgIHJldHVybiBvcmlnICE9PSB1bmRlZmluZWQgPyBvcmlnICsgMSA6IDE7XG59XG5mdW5jdGlvbiBzYW5pdGl6ZUtleShrZXkpIHtcbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY29uc3QgbWluTm9kZVZlcnNpb24gPSAocHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgID8gTnVtYmVyKHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT04pXG4gICAgOiAxMDtcbmlmIChwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbikge1xuICAgIGNvbnN0IG1ham9yID0gTnVtYmVyKHByb2Nlc3MudmVyc2lvbi5tYXRjaCgvdihbXi5dKykvKVsxXSk7XG4gICAgaWYgKG1ham9yIDwgbWluTm9kZVZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYHlhcmdzIHBhcnNlciBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MtcGFyc2VyI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBlbnYgPSBwcm9jZXNzID8gcHJvY2Vzcy5lbnYgOiB7fTtcbmNvbnN0IHBhcnNlciA9IG5ldyBZYXJnc1BhcnNlcih7XG4gICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICBlbnY6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9LFxuICAgIGZvcm1hdDogdXRpbC5mb3JtYXQsXG4gICAgbm9ybWFsaXplOiBwYXRoLm5vcm1hbGl6ZSxcbiAgICByZXNvbHZlOiBwYXRoLnJlc29sdmUsXG4gICAgcmVxdWlyZTogKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvXFwuanNvbiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLCAndXRmOCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ29ubHkgLmpzb24gY29uZmlnIGZpbGVzIGFyZSBzdXBwb3J0ZWQgaW4gRVNNJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmNvbnN0IHlhcmdzUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyKGFyZ3MsIG9wdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbiAgICByZXR1cm4gcmVzdWx0LmFyZ3Y7XG59O1xueWFyZ3NQYXJzZXIuZGV0YWlsZWQgPSBmdW5jdGlvbiAoYXJncywgb3B0cykge1xuICAgIHJldHVybiBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbn07XG55YXJnc1BhcnNlci5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG55YXJnc1BhcnNlci5kZWNhbWVsaXplID0gZGVjYW1lbGl6ZTtcbnlhcmdzUGFyc2VyLmxvb2tzTGlrZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcjtcblxubW9kdWxlLmV4cG9ydHMgPSB5YXJnc1BhcnNlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkgPT4ge1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHRcdCdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpJyxcblx0XHQnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSknXG5cdF0uam9pbignfCcpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmcgPT4gdHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycgPyBzdHJpbmcucmVwbGFjZShhbnNpUmVnZXgoKSwgJycpIDogc3RyaW5nO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIHlvZGEgKi9cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNGdWxsd2lkdGhDb2RlUG9pbnQgPSBjb2RlUG9pbnQgPT4ge1xuXHRpZiAoTnVtYmVyLmlzTmFOKGNvZGVQb2ludCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBDb2RlIHBvaW50cyBhcmUgZGVyaXZlZCBmcm9tOlxuXHQvLyBodHRwOi8vd3d3LnVuaXgub3JnL1B1YmxpYy9VTklEQVRBL0Vhc3RBc2lhbldpZHRoLnR4dFxuXHRpZiAoXG5cdFx0Y29kZVBvaW50ID49IDB4MTEwMCAmJiAoXG5cdFx0XHRjb2RlUG9pbnQgPD0gMHgxMTVGIHx8IC8vIEhhbmd1bCBKYW1vXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyOSB8fCAvLyBMRUZULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHRcdGNvZGVQb2ludCA9PT0gMHgyMzJBIHx8IC8vIFJJR0hULVBPSU5USU5HIEFOR0xFIEJSQUNLRVRcblx0XHRcdC8vIENKSyBSYWRpY2FscyBTdXBwbGVtZW50IC4uIEVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHNcblx0XHRcdCgweDJFODAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyNDcgJiYgY29kZVBvaW50ICE9PSAweDMwM0YpIHx8XG5cdFx0XHQvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIC4uIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEFcblx0XHRcdCgweDMyNTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDREQkYpIHx8XG5cdFx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIC4uIFlpIFJhZGljYWxzXG5cdFx0XHQoMHg0RTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBNEM2KSB8fFxuXHRcdFx0Ly8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVxuXHRcdFx0KDB4QTk2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTk3QykgfHxcblx0XHRcdC8vIEhhbmd1bCBTeWxsYWJsZXNcblx0XHRcdCgweEFDMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEQ3QTMpIHx8XG5cdFx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzXG5cdFx0XHQoMHhGOTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGQUZGKSB8fFxuXHRcdFx0Ly8gVmVydGljYWwgRm9ybXNcblx0XHRcdCgweEZFMTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFMTkpIHx8XG5cdFx0XHQvLyBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAuLiBTbWFsbCBGb3JtIFZhcmlhbnRzXG5cdFx0XHQoMHhGRTMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTZCKSB8fFxuXHRcdFx0Ly8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXNcblx0XHRcdCgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG5cdFx0XHQoMHhGRkUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkU2KSB8fFxuXHRcdFx0Ly8gS2FuYSBTdXBwbGVtZW50XG5cdFx0XHQoMHgxQjAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUIwMDEpIHx8XG5cdFx0XHQvLyBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50XG5cdFx0XHQoMHgxRjIwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyNTEpIHx8XG5cdFx0XHQvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCIC4uIFRlcnRpYXJ5IElkZW9ncmFwaGljIFBsYW5lXG5cdFx0XHQoMHgyMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4M0ZGRkQpXG5cdFx0KVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQ7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gaXNGdWxsd2lkdGhDb2RlUG9pbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL210aHMuYmUvZW1vamlcbiAgcmV0dXJuIC9cXHVEODNDXFx1REZGNFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjIoPzpcXHVEQjQwXFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REI0MFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURCNDBcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3RnxcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1xcdURGRkJ8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRFxcdURDNjh8KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGfFxcdUQ4M0RbXFx1REM2NlxcdURDNjddfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXwoPzpcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSlcXHVGRTBGfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSlcXHVEODNDXFx1REZGQnxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCXFx1REZGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGRVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRF0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEXFx1REM0MVxcdUZFMEZcXHUyMDBEXFx1RDgzRFxcdURERTh8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDXFx1REZGRlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRVxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQ1xcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGQlxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHVEODNDXFx1REZGRFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XXxcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pfCg/Oig/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpXFx1RkUwRnxcXHVEODNEXFx1REM2RnxcXHVEODNFW1xcdUREM0NcXHVERERFXFx1RERERl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzooPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml0pfFxcdUQ4M0NcXHVERkY0XFx1MjAwRFxcdTI2MjApXFx1RkUwRnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8XFx1RDgzQ1xcdURGRjNcXHVGRTBGXFx1MjAwRFxcdUQ4M0NcXHVERjA4fFxcdUQ4M0RcXHVEQzE1XFx1MjAwRFxcdUQ4M0VcXHVEREJBfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY3fFxcdUQ4M0NcXHVEREZEXFx1RDgzQ1xcdURERjB8XFx1RDgzQ1xcdURERjRcXHVEODNDXFx1RERGMnxcXHVEODNDXFx1RERGNlxcdUQ4M0NcXHVEREU2fFsjXFwqMC05XVxcdUZFMEZcXHUyMEUzfFxcdUQ4M0NcXHVEREU3KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRlxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERGOSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVEXFx1RERFRi1cXHVEREY0XFx1RERGN1xcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkZdKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzQ1xcdURERjcoPzpcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXSl8XFx1RDgzRFxcdURDNjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREYyKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERTYoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdKXxcXHVEODNDXFx1RERGMCg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRCg/OlxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXSl8XFx1RDgzQ1xcdURERTkoPzpcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdKXxcXHVEODNDXFx1RERGRSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjldKXxcXHVEODNDXFx1RERFQyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREY4KD86XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERUIoPzpcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN10pfFxcdUQ4M0NcXHVEREY1KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREYzKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdKXxcXHVEODNDXFx1RERFOCg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY1XFx1RERGN1xcdURERkEtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYxKD86XFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdKXxcXHVEODNDXFx1RERGRig/OlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXSl8XFx1RDgzQ1xcdURERkMoPzpcXHVEODNDW1xcdURERUJcXHVEREY4XSl8XFx1RDgzQ1xcdURERkEoPzpcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFRSg/OlxcdUQ4M0NbXFx1RERFOC1cXHVEREVBXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XSl8XFx1RDgzQ1xcdURERUYoPzpcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdKXwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ2LVxcdURERERdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86XFx1MjZGOXxcXHVEODNDW1xcdURGQ0JcXHVERkNDXXxcXHVEODNEXFx1REQ3NSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyNjFEXFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyXFx1REZDN118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1RENBQVxcdURENzRcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBGXFx1REQxOC1cXHVERDFDXFx1REQxRVxcdUREMUZcXHVERDMwLVxcdUREMzZcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyLVxcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTIzMUFcXHUyMzFCXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjVGRVxcdTI2MTRcXHUyNjE1XFx1MjY0OC1cXHUyNjUzXFx1MjY3RlxcdTI2OTNcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGMlxcdTI2RjNcXHUyNkY1XFx1MjZGQVxcdTI2RkRcXHUyNzA1XFx1MjcwQVxcdTI3MEJcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjkzXFx1REZBMC1cXHVERkNBXFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGNFxcdURGRjgtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDM0VcXHVEQzQwXFx1REM0Mi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ3QVxcdUREOTVcXHVERDk2XFx1RERBNFxcdURERkItXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0NcXHVERUQwLVxcdURFRDJcXHVERUQ1XFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSl8KD86WyNcXCowLTlcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjNDRlxcdTIzRTktXFx1MjNGM1xcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQi1cXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjFEXFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5Mi1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVENVxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUVCXFx1REVFQ1xcdURFRjBcXHVERUYzLVxcdURFRkFcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REQwRC1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERDcxXFx1REQ3My1cXHVERDc2XFx1REQ3QS1cXHVEREEyXFx1RERBNS1cXHVEREFBXFx1RERBRS1cXHVERENBXFx1RERDRC1cXHVEREZGXFx1REU3MC1cXHVERTczXFx1REU3OC1cXHVERTdBXFx1REU4MC1cXHVERTgyXFx1REU5MC1cXHVERTk1XSlcXHVGRTBGfCg/OltcXHUyNjFEXFx1MjZGOVxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMi1cXHVERkM0XFx1REZDN1xcdURGQ0EtXFx1REZDQ118XFx1RDgzRFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjYtXFx1REM3OFxcdURDN0NcXHVEQzgxLVxcdURDODNcXHVEQzg1LVxcdURDODdcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDc0XFx1REQ3NVxcdUREN0FcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVERTQ1LVxcdURFNDdcXHVERTRCLVxcdURFNEZcXHVERUEzXFx1REVCNC1cXHVERUI2XFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMjZcXHVERDMwLVxcdUREMzlcXHVERDNDLVxcdUREM0VcXHVEREI1XFx1RERCNlxcdUREQjhcXHVEREI5XFx1RERCQlxcdUREQ0QtXFx1RERDRlxcdURERDEtXFx1RERERF0pL2c7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gcmVxdWlyZSgnaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQnKTtcbmNvbnN0IGVtb2ppUmVnZXggPSByZXF1aXJlKCdlbW9qaS1yZWdleCcpO1xuXG5jb25zdCBzdHJpbmdXaWR0aCA9IHN0cmluZyA9PiB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoZW1vamlSZWdleCgpLCAnICAnKTtcblxuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY29kZSA9IHN0cmluZy5jb2RlUG9pbnRBdChpKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZSA8PSAweDFGIHx8IChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gU3Vycm9nYXRlc1xuXHRcdGlmIChjb2RlID4gMHhGRkZGKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0d2lkdGggKz0gaXNGdWxsd2lkdGhDb2RlUG9pbnQoY29kZSkgPyAyIDogMTtcblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nV2lkdGg7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5nV2lkdGg7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IFNldChbXG5cdCdcXHUwMDFCJyxcblx0J1xcdTAwOUInXG5dKTtcblxuY29uc3QgRU5EX0NPREUgPSAzOTtcblxuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5cbmNvbnN0IHdyYXBBbnNpID0gY29kZSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfQ1NJfSR7Y29kZX0ke0FOU0lfU0dSX1RFUk1JTkFUT1J9YDtcbmNvbnN0IHdyYXBBbnNpSHlwZXJsaW5rID0gdXJpID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9FU0NBUEVfTElOS30ke3VyaX0ke0FOU0lfRVNDQVBFX0JFTEx9YDtcblxuLy8gQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2Ygd29yZHMgc3BsaXQgb24gJyAnLCBpZ25vcmluZ1xuLy8gdGhlIGV4dHJhIGNoYXJhY3RlcnMgYWRkZWQgYnkgYW5zaSBlc2NhcGUgY29kZXNcbmNvbnN0IHdvcmRMZW5ndGhzID0gc3RyaW5nID0+IHN0cmluZy5zcGxpdCgnICcpLm1hcChjaGFyYWN0ZXIgPT4gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKSk7XG5cbi8vIFdyYXAgYSBsb25nIHdvcmQgYWNyb3NzIG11bHRpcGxlIHJvd3Ncbi8vIEFuc2kgZXNjYXBlIGNvZGVzIGRvIG5vdCBjb3VudCB0b3dhcmRzIGxlbmd0aFxuY29uc3Qgd3JhcFdvcmQgPSAocm93cywgd29yZCwgY29sdW1ucykgPT4ge1xuXHRjb25zdCBjaGFyYWN0ZXJzID0gWy4uLndvcmRdO1xuXG5cdGxldCBpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRsZXQgaXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdGxldCB2aXNpYmxlID0gc3RyaW5nV2lkdGgoc3RyaXBBbnNpKHJvd3Nbcm93cy5sZW5ndGggLSAxXSkpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIGNoYXJhY3RlcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcblxuXHRcdGlmICh2aXNpYmxlICsgY2hhcmFjdGVyTGVuZ3RoIDw9IGNvbHVtbnMpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSBjaGFyYWN0ZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuXHRcdFx0dmlzaWJsZSA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGlzSW5zaWRlRXNjYXBlID0gdHJ1ZTtcblx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGNoYXJhY3RlcnMuc2xpY2UoaW5kZXggKyAxKS5qb2luKCcnKS5zdGFydHNXaXRoKEFOU0lfRVNDQVBFX0xJTkspO1xuXHRcdH1cblxuXHRcdGlmIChpc0luc2lkZUVzY2FwZSkge1xuXHRcdFx0aWYgKGlzSW5zaWRlTGlua0VzY2FwZSkge1xuXHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG5cdFx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfU0dSX1RFUk1JTkFUT1IpIHtcblx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmlzaWJsZSArPSBjaGFyYWN0ZXJMZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZSA9PT0gY29sdW1ucyAmJiBpbmRleCA8IGNoYXJhY3RlcnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGFzdCByb3cgd2UgY29weSBvdmVyIGlzIG9ubHlcblx0Ly8gYW5zaSBlc2NhcGUgY2hhcmFjdGVycywgaGFuZGxlIHRoaXMgZWRnZS1jYXNlXG5cdGlmICghdmlzaWJsZSAmJiByb3dzW3Jvd3MubGVuZ3RoIC0gMV0ubGVuZ3RoID4gMCAmJiByb3dzLmxlbmd0aCA+IDEpIHtcblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMl0gKz0gcm93cy5wb3AoKTtcblx0fVxufTtcblxuLy8gVHJpbXMgc3BhY2VzIGZyb20gYSBzdHJpbmcgaWdub3JpbmcgaW52aXNpYmxlIHNlcXVlbmNlc1xuY29uc3Qgc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCA9IHN0cmluZyA9PiB7XG5cdGNvbnN0IHdvcmRzID0gc3RyaW5nLnNwbGl0KCcgJyk7XG5cdGxldCBsYXN0ID0gd29yZHMubGVuZ3RoO1xuXG5cdHdoaWxlIChsYXN0ID4gMCkge1xuXHRcdGlmIChzdHJpbmdXaWR0aCh3b3Jkc1tsYXN0IC0gMV0pID4gMCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0bGFzdC0tO1xuXHR9XG5cblx0aWYgKGxhc3QgPT09IHdvcmRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRyZXR1cm4gd29yZHMuc2xpY2UoMCwgbGFzdCkuam9pbignICcpICsgd29yZHMuc2xpY2UobGFzdCkuam9pbignJyk7XG59O1xuXG4vLyBUaGUgd3JhcC1hbnNpIG1vZHVsZSBjYW4gYmUgaW52b2tlZCBpbiBlaXRoZXIgJ2hhcmQnIG9yICdzb2Z0JyB3cmFwIG1vZGVcbi8vXG4vLyAnaGFyZCcgd2lsbCBuZXZlciBhbGxvdyBhIHN0cmluZyB0byB0YWtlIHVwIG1vcmUgdGhhbiBjb2x1bW5zIGNoYXJhY3RlcnNcbi8vXG4vLyAnc29mdCcgYWxsb3dzIGxvbmcgd29yZHMgdG8gZXhwYW5kIHBhc3QgdGhlIGNvbHVtbiBsZW5ndGhcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UgJiYgc3RyaW5nLnRyaW0oKSA9PT0gJycpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0bGV0IGVzY2FwZUNvZGU7XG5cdGxldCBlc2NhcGVVcmw7XG5cblx0Y29uc3QgbGVuZ3RocyA9IHdvcmRMZW5ndGhzKHN0cmluZyk7XG5cdGxldCByb3dzID0gWycnXTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygc3RyaW5nLnNwbGl0KCcgJykuZW50cmllcygpKSB7XG5cdFx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSA9IHJvd3Nbcm93cy5sZW5ndGggLSAxXS50cmltU3RhcnQoKTtcblx0XHR9XG5cblx0XHRsZXQgcm93TGVuZ3RoID0gc3RyaW5nV2lkdGgocm93c1tyb3dzLmxlbmd0aCAtIDFdKTtcblxuXHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0aWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBzdGFydCB3aXRoIGEgbmV3IHdvcmQgYnV0IHRoZSBjdXJyZW50IHJvdyBsZW5ndGggZXF1YWxzIHRoZSBsZW5ndGggb2YgdGhlIGNvbHVtbnMsIGFkZCBhIG5ldyByb3dcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdFx0cm93TGVuZ3RoID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuXHRcdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gJyAnO1xuXHRcdFx0XHRyb3dMZW5ndGgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJbiAnaGFyZCcgd3JhcCBtb2RlLCB0aGUgbGVuZ3RoIG9mIGEgbGluZSBpcyBuZXZlciBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0ICdjb2x1bW5zJ1xuXHRcdGlmIChvcHRpb25zLmhhcmQgJiYgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb2x1bW5zID0gKGNvbHVtbnMgLSByb3dMZW5ndGgpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgcm93TGVuZ3RoID4gMCAmJiBsZW5ndGhzW2luZGV4XSA+IDApIHtcblx0XHRcdGlmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSAmJiByb3dMZW5ndGggPCBjb2x1bW5zKSB7XG5cdFx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlKSB7XG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSB3b3JkO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRyb3dzID0gcm93cy5tYXAoc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCk7XG5cdH1cblxuXHRjb25zdCBwcmUgPSBbLi4ucm93cy5qb2luKCdcXG4nKV07XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIGNoYXJhY3Rlcl0gb2YgcHJlLmVudHJpZXMoKSkge1xuXHRcdHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjb25zdCB7Z3JvdXBzfSA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgKS5leGVjKHByZS5zbGljZShpbmRleCkuam9pbignJykpIHx8IHtncm91cHM6IHt9fTtcblx0XHRcdGlmIChncm91cHMuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG5cdFx0XHRcdGVzY2FwZUNvZGUgPSBjb2RlID09PSBFTkRfQ09ERSA/IHVuZGVmaW5lZCA6IGNvZGU7XG5cdFx0XHR9IGVsc2UgaWYgKGdyb3Vwcy51cmkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29kZSA9IGFuc2lTdHlsZXMuY29kZXMuZ2V0KE51bWJlcihlc2NhcGVDb2RlKSk7XG5cblx0XHRpZiAocHJlW2luZGV4ICsgMV0gPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaShjb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koZXNjYXBlQ29kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoZXNjYXBlVXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG4vLyBGb3IgZWFjaCBuZXdsaW5lLCBpbnZva2UgdGhlIG1ldGhvZCBzZXBhcmF0ZWx5XG5tb2R1bGUuZXhwb3J0cyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIFN0cmluZyhzdHJpbmcpXG5cdFx0Lm5vcm1hbGl6ZSgpXG5cdFx0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGV4ZWMobGluZSwgY29sdW1ucywgb3B0aW9ucykpXG5cdFx0LmpvaW4oJ1xcbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGFsaWduID0ge1xuICAgIHJpZ2h0OiBhbGlnblJpZ2h0LFxuICAgIGNlbnRlcjogYWxpZ25DZW50ZXJcbn07XG5jb25zdCB0b3AgPSAwO1xuY29uc3QgcmlnaHQgPSAxO1xuY29uc3QgYm90dG9tID0gMjtcbmNvbnN0IGxlZnQgPSAzO1xuY2xhc3MgVUkge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLndpZHRoID0gb3B0cy53aWR0aDtcbiAgICAgICAgdGhpcy53cmFwID0gKF9hID0gb3B0cy53cmFwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlO1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgc3BhbiguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLmRpdiguLi5hcmdzKTtcbiAgICAgICAgY29scy5zcGFuID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzZXRPdXRwdXQoKSB7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBkaXYoLi4uYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGl2KCcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cmFwICYmIHRoaXMuc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUxheW91dERTTChhcmdzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gYXJncy5tYXAoYXJnID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbEZyb21TdHJpbmcoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvd3MucHVzaChjb2xzKTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuICAgIHNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgL1tcXHRcXG5dLy50ZXN0KGFyZ3NbMF0pO1xuICAgIH1cbiAgICBhcHBseUxheW91dERTTChzdHIpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHN0ci5zcGxpdCgnXFxuJykubWFwKHJvdyA9PiByb3cuc3BsaXQoJ1xcdCcpKTtcbiAgICAgICAgbGV0IGxlZnRDb2x1bW5XaWR0aCA9IDA7XG4gICAgICAgIC8vIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGxheW91dCwgbWFrZSBzdXJlIHRoZVxuICAgICAgICAvLyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwIGFsb25nIHRoZSBsZWZ0LWhhbmQuXG4gICAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBmaXJzdCBjb2x1bW4gdG8gdGFrZSB1cCBtb3JlXG4gICAgICAgIC8vIHRoYW4gNTAlIG9mIHRoZSBzY3JlZW4uXG4gICAgICAgIHJvd3MuZm9yRWFjaChjb2x1bW5zID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDEgJiYgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkgPiBsZWZ0Q29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBsZWZ0Q29sdW1uV2lkdGggPSBNYXRoLm1pbihNYXRoLmZsb29yKHRoaXMud2lkdGggKiAwLjUpLCBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBnZW5lcmF0ZSBhIHRhYmxlOlxuICAgICAgICAvLyAgcmVwbGFjaW5nICcgJyB3aXRoIHBhZGRpbmcgY2FsY3VsYXRpb25zLlxuICAgICAgICAvLyAgdXNpbmcgdGhlIGFsZ29yaXRobWljYWxseSBnZW5lcmF0ZWQgd2lkdGguXG4gICAgICAgIHJvd3MuZm9yRWFjaChjb2x1bW5zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGl2KC4uLmNvbHVtbnMubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogci50cmltKCksXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcociksXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoaSA9PT0gMCAmJiBjb2x1bW5zLmxlbmd0aCA+IDEpID8gbGVmdENvbHVtbldpZHRoIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3NbdGhpcy5yb3dzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBjb2xGcm9tU3RyaW5nKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHRleHQpXG4gICAgICAgIH07XG4gICAgfVxuICAgIG1lYXN1cmVQYWRkaW5nKHN0cikge1xuICAgICAgICAvLyBtZWFzdXJlIHBhZGRpbmcgd2l0aG91dCBhbnNpIGVzY2FwZSBjb2Rlc1xuICAgICAgICBjb25zdCBub0Fuc2kgPSBtaXhpbi5zdHJpcEFuc2koc3RyKTtcbiAgICAgICAgcmV0dXJuIFswLCBub0Fuc2kubWF0Y2goL1xccyokLylbMF0ubGVuZ3RoLCAwLCBub0Fuc2kubWF0Y2goL15cXHMqLylbMF0ubGVuZ3RoXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgICAgIHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd1RvU3RyaW5nKHJvdywgbGluZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gZG9uJ3QgZGlzcGxheSBhbnkgbGluZXMgd2l0aCB0aGVcbiAgICAgICAgLy8gaGlkZGVuIGZsYWcgc2V0LlxuICAgICAgICByZXR1cm4gbGluZXNcbiAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiAhbGluZS5oaWRkZW4pXG4gICAgICAgICAgICAubWFwKGxpbmUgPT4gbGluZS50ZXh0KVxuICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByb3dUb1N0cmluZyhyb3csIGxpbmVzKSB7XG4gICAgICAgIHRoaXMucmFzdGVyaXplKHJvdykuZm9yRWFjaCgocnJvdywgcikgPT4ge1xuICAgICAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICAgICAgcnJvdy5mb3JFYWNoKChjb2wsIGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSByb3dbY107IC8vIHRoZSB3aWR0aCB3aXRoIHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcFdpZHRoID0gdGhpcy5uZWdhdGVQYWRkaW5nKHJvd1tjXSk7IC8vIHRoZSB3aWR0aCB3aXRob3V0IHBhZGRpbmcuXG4gICAgICAgICAgICAgICAgbGV0IHRzID0gY29sOyAvLyB0ZW1wb3Jhcnkgc3RyaW5nIHVzZWQgZHVyaW5nIGFsaWdubWVudC9wYWRkaW5nLlxuICAgICAgICAgICAgICAgIGlmICh3cmFwV2lkdGggPiBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQod3JhcFdpZHRoIC0gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFsaWduIHRoZSBzdHJpbmcgd2l0aGluIGl0cyBjb2x1bW4uXG4gICAgICAgICAgICAgICAgaWYgKHJvd1tjXS5hbGlnbiAmJiByb3dbY10uYWxpZ24gIT09ICdsZWZ0JyAmJiB0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm4gPSBhbGlnbltyb3dbY10uYWxpZ25dO1xuICAgICAgICAgICAgICAgICAgICB0cyA9IGZuKHRzLCB3cmFwV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWl4aW4uc3RyaW5nV2lkdGgodHMpIDwgd3JhcFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KCh3aWR0aCB8fCAwKSAtIG1peGluLnN0cmluZ1dpZHRoKHRzKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGFwcGx5IGJvcmRlciBhbmQgcGFkZGluZyB0byBzdHJpbmcuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IHJvd1tjXS5wYWRkaW5nIHx8IFswLCAwLCAwLCAwXTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZ1tsZWZ0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW2xlZnRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyICs9IGFkZEJvcmRlcihyb3dbY10sIHRzLCAnfCAnKTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gdHM7XG4gICAgICAgICAgICAgICAgc3RyICs9IGFkZEJvcmRlcihyb3dbY10sIHRzLCAnIHwnKTtcbiAgICAgICAgICAgICAgICBpZiAocGFkZGluZ1tyaWdodF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tyaWdodF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiBwcmlvciByb3cgaXMgc3BhbiwgdHJ5IHRvIHJlbmRlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50IHJvdyBvbiB0aGUgcHJpb3IgbGluZS5cbiAgICAgICAgICAgICAgICBpZiAociA9PT0gMCAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMucmVuZGVySW5saW5lKHN0ciwgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuXG4gICAgICAgICAgICBsaW5lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdHIucmVwbGFjZSgvICskLywgJycpLFxuICAgICAgICAgICAgICAgIHNwYW46IHJvdy5zcGFuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgLy8gaWYgdGhlIGZ1bGwgJ3NvdXJjZScgY2FuIHJlbmRlciBpblxuICAgIC8vIHRoZSB0YXJnZXQgbGluZSwgZG8gc28uXG4gICAgcmVuZGVySW5saW5lKHNvdXJjZSwgcHJldmlvdXNMaW5lKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gc291cmNlLm1hdGNoKC9eICovKTtcbiAgICAgICAgY29uc3QgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaCA/IG1hdGNoWzBdLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHByZXZpb3VzTGluZS50ZXh0O1xuICAgICAgICBjb25zdCB0YXJnZXRUZXh0V2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aCh0YXJnZXQudHJpbVJpZ2h0KCkpO1xuICAgICAgICBpZiAoIXByZXZpb3VzTGluZS5zcGFuKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBhcHBseWluZyB3cmFwcGluZyBsb2dpYyxcbiAgICAgICAgLy8ganVzdCBhbHdheXMgYXBwZW5kIHRvIHRoZSBzcGFuLlxuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICsgc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWFkaW5nV2hpdGVzcGFjZSA8IHRhcmdldFRleHRXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRhcmdldC50cmltUmlnaHQoKSArICcgJy5yZXBlYXQobGVhZGluZ1doaXRlc3BhY2UgLSB0YXJnZXRUZXh0V2lkdGgpICsgc291cmNlLnRyaW1MZWZ0KCk7XG4gICAgfVxuICAgIHJhc3Rlcml6ZShyb3cpIHtcbiAgICAgICAgY29uc3QgcnJvd3MgPSBbXTtcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gdGhpcy5jb2x1bW5XaWR0aHMocm93KTtcbiAgICAgICAgbGV0IHdyYXBwZWQ7XG4gICAgICAgIC8vIHdvcmQgd3JhcCBhbGwgY29sdW1ucywgYW5kIGNyZWF0ZVxuICAgICAgICAvLyBhIGRhdGEtc3RydWN0dXJlIHRoYXQgaXMgZWFzeSB0byByYXN0ZXJpemUuXG4gICAgICAgIHJvdy5mb3JFYWNoKChjb2wsIGMpID0+IHtcbiAgICAgICAgICAgIC8vIGxlYXZlIHJvb20gZm9yIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcuXG4gICAgICAgICAgICBjb2wud2lkdGggPSB3aWR0aHNbY107XG4gICAgICAgICAgICBpZiAodGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZCA9IG1peGluLndyYXAoY29sLnRleHQsIHRoaXMubmVnYXRlUGFkZGluZyhjb2wpLCB7IGhhcmQ6IHRydWUgfSkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZCA9IGNvbC50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KCcuJyArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArICcuJyk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKFwiJ1wiICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRkIHRvcCBhbmQgYm90dG9tIHBhZGRpbmcuXG4gICAgICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW3RvcF0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbYm90dG9tXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwcGVkLmZvckVhY2goKHN0ciwgcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnJvd3Nbcl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcnJvd3MucHVzaChbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJyb3cgPSBycm93c1tyXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnJvd1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBycm93LnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJyb3cucHVzaChzdHIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcnJvd3M7XG4gICAgfVxuICAgIG5lZ2F0ZVBhZGRpbmcoY29sKSB7XG4gICAgICAgIGxldCB3cmFwV2lkdGggPSBjb2wud2lkdGggfHwgMDtcbiAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gKGNvbC5wYWRkaW5nW2xlZnRdIHx8IDApICsgKGNvbC5wYWRkaW5nW3JpZ2h0XSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IDQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBXaWR0aDtcbiAgICB9XG4gICAgY29sdW1uV2lkdGhzKHJvdykge1xuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5tYXAoY29sID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLndpZHRoIHx8IG1peGluLnN0cmluZ1dpZHRoKGNvbC50ZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB1bnNldCA9IHJvdy5sZW5ndGg7XG4gICAgICAgIGxldCByZW1haW5pbmdXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIC8vIGNvbHVtbiB3aWR0aHMgY2FuIGJlIHNldCBpbiBjb25maWcuXG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHJvdy5tYXAoY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wud2lkdGgpIHtcbiAgICAgICAgICAgICAgICB1bnNldC0tO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IGNvbC53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFueSB1bnNldCB3aWR0aHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gICAgICAgIGNvbnN0IHVuc2V0V2lkdGggPSB1bnNldCA/IE1hdGguZmxvb3IocmVtYWluaW5nV2lkdGggLyB1bnNldCkgOiAwO1xuICAgICAgICByZXR1cm4gd2lkdGhzLm1hcCgodywgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh1bnNldFdpZHRoLCBfbWluV2lkdGgocm93W2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkQm9yZGVyKGNvbCwgdHMsIHN0eWxlKSB7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgaWYgKC9bLiddLStbLiddLy50ZXN0KHRzKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cy50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcgICc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cbi8vIGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gd2lkdGggb2Zcbi8vIGEgY29sdW1uLCBiYXNlZCBvbiBwYWRkaW5nIHByZWZlcmVuY2VzLlxuZnVuY3Rpb24gX21pbldpZHRoKGNvbCkge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBjb2wucGFkZGluZyB8fCBbXTtcbiAgICBjb25zdCBtaW5XaWR0aCA9IDEgKyAocGFkZGluZ1tsZWZ0XSB8fCAwKSArIChwYWRkaW5nW3JpZ2h0XSB8fCAwKTtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICByZXR1cm4gbWluV2lkdGggKyA0O1xuICAgIH1cbiAgICByZXR1cm4gbWluV2lkdGg7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3dXaWR0aCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGVwZW5kcyBvbiB0ZXJtaW5hbCAqL1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy5zdGRvdXQgJiYgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIDgwO1xufVxuZnVuY3Rpb24gYWxpZ25SaWdodChzdHIsIHdpZHRoKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBjb25zdCBzdHJXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHN0cik7XG4gICAgaWYgKHN0cldpZHRoIDwgd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuICcgJy5yZXBlYXQod2lkdGggLSBzdHJXaWR0aCkgKyBzdHI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5mdW5jdGlvbiBhbGlnbkNlbnRlcihzdHIsIHdpZHRoKSB7XG4gICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICBjb25zdCBzdHJXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHN0cik7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZnVuY3Rpb24gY2xpdWkob3B0cywgX21peGluKSB7XG4gICAgbWl4aW4gPSBfbWl4aW47XG4gICAgcmV0dXJuIG5ldyBVSSh7XG4gICAgICAgIHdpZHRoOiAob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndpZHRoKSB8fCBnZXRXaW5kb3dXaWR0aCgpLFxuICAgICAgICB3cmFwOiBvcHRzID09PSBudWxsIHx8IG9wdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdHMud3JhcFxuICAgIH0pO1xufVxuXG4vLyBCb290c3RyYXAgY2xpdWkgd2l0aCBDb21tb25KUyBkZXBlbmRlbmNpZXM6XG5jb25zdCBzdHJpbmdXaWR0aCA9IHJlcXVpcmUoJ3N0cmluZy13aWR0aCcpO1xuY29uc3Qgc3RyaXBBbnNpID0gcmVxdWlyZSgnc3RyaXAtYW5zaScpO1xuY29uc3Qgd3JhcCA9IHJlcXVpcmUoJ3dyYXAtYW5zaScpO1xuZnVuY3Rpb24gdWkob3B0cykge1xuICAgIHJldHVybiBjbGl1aShvcHRzLCB7XG4gICAgICAgIHN0cmluZ1dpZHRoLFxuICAgICAgICBzdHJpcEFuc2ksXG4gICAgICAgIHdyYXBcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1aTtcbiIsICJjb25zdCB7IGRpcm5hbWUsIHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHsgcmVhZGRpclN5bmMsIHN0YXRTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFydCwgY2FsbGJhY2spIHtcblx0bGV0IGRpciA9IHJlc29sdmUoJy4nLCBzdGFydCk7XG5cdGxldCB0bXAsIHN0YXRzID0gc3RhdFN5bmMoZGlyKTtcblxuXHRpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRkaXIgPSBkaXJuYW1lKGRpcik7XG5cdH1cblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRtcCA9IGNhbGxiYWNrKGRpciwgcmVhZGRpclN5bmMoZGlyKSk7XG5cdFx0aWYgKHRtcCkgcmV0dXJuIHJlc29sdmUoZGlyLCB0bXApO1xuXHRcdGRpciA9IGRpcm5hbWUodG1wID0gZGlyKTtcblx0XHRpZiAodG1wID09PSBkaXIpIGJyZWFrO1xuXHR9XG59XG4iLCBudWxsLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnMgPSByZXF1aXJlKCdmcycpLFxuICBqb2luID0gcmVxdWlyZSgncGF0aCcpLmpvaW4sXG4gIHJlc29sdmUgPSByZXF1aXJlKCdwYXRoJykucmVzb2x2ZSxcbiAgZGlybmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5kaXJuYW1lLFxuICBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBleHRlbnNpb25zOiBbJ2pzJywgJ2pzb24nLCAnY29mZmVlJ10sXG4gICAgcmVjdXJzZTogdHJ1ZSxcbiAgICByZW5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9LFxuICAgIHZpc2l0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfTtcblxuZnVuY3Rpb24gY2hlY2tGaWxlSW5jbHVzaW9uKHBhdGgsIGZpbGVuYW1lLCBvcHRpb25zKSB7XG4gIHJldHVybiAoXG4gICAgLy8gdmVyaWZ5IGZpbGUgaGFzIHZhbGlkIGV4dGVuc2lvblxuICAgIChuZXcgUmVnRXhwKCdcXFxcLignICsgb3B0aW9ucy5leHRlbnNpb25zLmpvaW4oJ3wnKSArICcpJCcsICdpJykudGVzdChmaWxlbmFtZSkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBSZWdFeHAsIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggcGFzc2VzXG4gICAgIShvcHRpb25zLmluY2x1ZGUgJiYgb3B0aW9ucy5pbmNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmICFvcHRpb25zLmluY2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuaW5jbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmluY2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgIW9wdGlvbnMuaW5jbHVkZShwYXRoLCBmaWxlbmFtZSkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmV4Y2x1ZGUgaXMgYSBSZWdFeHAsIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBwYXNzXG4gICAgIShvcHRpb25zLmV4Y2x1ZGUgJiYgb3B0aW9ucy5leGNsdWRlIGluc3RhbmNlb2YgUmVnRXhwICYmIG9wdGlvbnMuZXhjbHVkZS50ZXN0KHBhdGgpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgZnVuY3Rpb24sIGV2YWx1YXRlIGl0IGFuZCBtYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBwYXNzXG4gICAgIShvcHRpb25zLmV4Y2x1ZGUgJiYgdHlwZW9mIG9wdGlvbnMuZXhjbHVkZSA9PT0gJ2Z1bmN0aW9uJyAmJiBvcHRpb25zLmV4Y2x1ZGUocGF0aCwgZmlsZW5hbWUpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlRGlyZWN0b3J5KG0sIHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIHJldHZhbCA9IHt9O1xuXG4gIC8vIHBhdGggaXMgb3B0aW9uYWxcbiAgaWYgKHBhdGggJiYgIW9wdGlvbnMgJiYgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHBhdGg7XG4gICAgcGF0aCA9IG51bGw7XG4gIH1cblxuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdE9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNbcHJvcF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRpb25zW3Byb3BdID0gZGVmYXVsdE9wdGlvbnNbcHJvcF07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgbm8gcGF0aCB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhlIGVxdWl2ZWxhbnQgb2YgX19kaXJuYW1lIGZyb20gY2FsbGVyXG4gIC8vIG90aGVyd2lzZSwgcmVzb2x2ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBlcXVpdmFsZW50IG9mIF9fZGlybmFtZVxuICBwYXRoID0gIXBhdGggPyBkaXJuYW1lKG0uZmlsZW5hbWUpIDogcmVzb2x2ZShkaXJuYW1lKG0uZmlsZW5hbWUpLCBwYXRoKTtcblxuICAvLyBnZXQgdGhlIHBhdGggb2YgZWFjaCBmaWxlIGluIHNwZWNpZmllZCBkaXJlY3RvcnksIGFwcGVuZCB0byBjdXJyZW50IHRyZWUgbm9kZSwgcmVjdXJzZVxuICBmcy5yZWFkZGlyU3luYyhwYXRoKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlbmFtZSkge1xuICAgIHZhciBqb2luZWQgPSBqb2luKHBhdGgsIGZpbGVuYW1lKSxcbiAgICAgIGZpbGVzLFxuICAgICAga2V5LFxuICAgICAgb2JqO1xuXG4gICAgaWYgKGZzLnN0YXRTeW5jKGpvaW5lZCkuaXNEaXJlY3RvcnkoKSAmJiBvcHRpb25zLnJlY3Vyc2UpIHtcbiAgICAgIC8vIHRoaXMgbm9kZSBpcyBhIGRpcmVjdG9yeTsgcmVjdXJzZVxuICAgICAgZmlsZXMgPSByZXF1aXJlRGlyZWN0b3J5KG0sIGpvaW5lZCwgb3B0aW9ucyk7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGRpcmVjdG9yaWVzXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmlsZXMpLmxlbmd0aCkge1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoZmlsZW5hbWUsIGpvaW5lZCwgZmlsZW5hbWUpXSA9IGZpbGVzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoam9pbmVkICE9PSBtLmZpbGVuYW1lICYmIGNoZWNrRmlsZUluY2x1c2lvbihqb2luZWQsIGZpbGVuYW1lLCBvcHRpb25zKSkge1xuICAgICAgICAvLyBoYXNoIG5vZGUga2V5IHNob3VsZG4ndCBpbmNsdWRlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgIGtleSA9IGZpbGVuYW1lLnN1YnN0cmluZygwLCBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgb2JqID0gbS5yZXF1aXJlKGpvaW5lZCk7XG4gICAgICAgIHJldHZhbFtvcHRpb25zLnJlbmFtZShrZXksIGpvaW5lZCwgZmlsZW5hbWUpXSA9IG9wdGlvbnMudmlzaXQob2JqLCBqb2luZWQsIGZpbGVuYW1lKSB8fCBvYmo7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmV0dmFsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmVEaXJlY3Rvcnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0cyA9IGRlZmF1bHRPcHRpb25zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuXG5jbGFzcyBZRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgICAgIHN1cGVyKG1zZyB8fCAneWFyZ3MgZXJyb3InKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1lFcnJvcic7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFlFcnJvcik7XG4gICAgfVxufVxuXG5sZXQgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzID0gW107XG5sZXQgc2hpbTtcbmZ1bmN0aW9uIGFwcGx5RXh0ZW5kcyhjb25maWcsIGN3ZCwgbWVyZ2VFeHRlbmRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBsZXQgZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAnZXh0ZW5kcycpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmV4dGVuZHMgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25maWc7XG4gICAgICAgIGNvbnN0IGlzUGF0aCA9IC9cXC5qc29ufFxcLi4qcmMkLy50ZXN0KGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgbGV0IHBhdGhUb0RlZmF1bHQgPSBudWxsO1xuICAgICAgICBpZiAoIWlzUGF0aCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gcmVxdWlyZS5yZXNvbHZlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhdGhUb0RlZmF1bHQgPSBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzKHBhdGhUb0RlZmF1bHQpO1xuICAgICAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MucHVzaChwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgZGVmYXVsdENvbmZpZyA9IGlzUGF0aFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHNoaW0ucmVhZEZpbGVTeW5jKHBhdGhUb0RlZmF1bHQsICd1dGY4JykpXG4gICAgICAgICAgICA6IHJlcXVpcmUoY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICBkZWxldGUgY29uZmlnLmV4dGVuZHM7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBhcHBseUV4dGVuZHMoZGVmYXVsdENvbmZpZywgc2hpbS5wYXRoLmRpcm5hbWUocGF0aFRvRGVmYXVsdCksIG1lcmdlRXh0ZW5kcywgc2hpbSk7XG4gICAgfVxuICAgIHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xuICAgIHJldHVybiBtZXJnZUV4dGVuZHNcbiAgICAgICAgPyBtZXJnZURlZXAoZGVmYXVsdENvbmZpZywgY29uZmlnKVxuICAgICAgICA6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG59XG5mdW5jdGlvbiBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhjZmdQYXRoKSB7XG4gICAgaWYgKHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncy5pbmRleE9mKGNmZ1BhdGgpID4gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgQ2lyY3VsYXIgZXh0ZW5kZWQgY29uZmlndXJhdGlvbnM6ICcke2NmZ1BhdGh9Jy5gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRQYXRoVG9EZWZhdWx0Q29uZmlnKGN3ZCwgcGF0aFRvRXh0ZW5kKSB7XG4gICAgcmV0dXJuIHNoaW0ucGF0aC5yZXNvbHZlKGN3ZCwgcGF0aFRvRXh0ZW5kKTtcbn1cbmZ1bmN0aW9uIG1lcmdlRGVlcChjb25maWcxLCBjb25maWcyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIGNvbmZpZzEpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZzIpKSB7XG4gICAgICAgIGlmIChpc09iamVjdChjb25maWcyW2tleV0pICYmIGlzT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoY29uZmlnMVtrZXldLCBjb25maWcyW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBjb25maWcyW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21tYW5kKGNtZCkge1xuICAgIGNvbnN0IGV4dHJhU3BhY2VzU3RyaXBwZWRDb21tYW5kID0gY21kLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKTtcbiAgICBjb25zdCBzcGxpdENvbW1hbmQgPSBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZC5zcGxpdCgvXFxzKyg/IVteW10qXXxbXjxdKj4pLyk7XG4gICAgY29uc3QgYnJlZ2V4ID0gL1xcLipbXFxdWzw+XS9nO1xuICAgIGNvbnN0IGZpcnN0Q29tbWFuZCA9IHNwbGl0Q29tbWFuZC5zaGlmdCgpO1xuICAgIGlmICghZmlyc3RDb21tYW5kKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgZm91bmQgaW46ICR7Y21kfWApO1xuICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSB7XG4gICAgICAgIGNtZDogZmlyc3RDb21tYW5kLnJlcGxhY2UoYnJlZ2V4LCAnJyksXG4gICAgICAgIGRlbWFuZGVkOiBbXSxcbiAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH07XG4gICAgc3BsaXRDb21tYW5kLmZvckVhY2goKGNtZCwgaSkgPT4ge1xuICAgICAgICBsZXQgdmFyaWFkaWMgPSBmYWxzZTtcbiAgICAgICAgY21kID0gY21kLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGlmICgvXFwuK1tcXF0+XS8udGVzdChjbWQpICYmIGkgPT09IHNwbGl0Q29tbWFuZC5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdmFyaWFkaWMgPSB0cnVlO1xuICAgICAgICBpZiAoL15cXFsvLnRlc3QoY21kKSkge1xuICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5vcHRpb25hbC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZC5yZXBsYWNlKGJyZWdleCwgJycpLnNwbGl0KCd8JyksXG4gICAgICAgICAgICAgICAgdmFyaWFkaWMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuZGVtYW5kZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkQ29tbWFuZDtcbn1cblxuY29uc3QgcG9zaXRpb25OYW1lID0gWydmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnLCAnZm91cnRoJywgJ2ZpZnRoJywgJ3NpeHRoJ107XG5mdW5jdGlvbiBhcmdzZXJ0KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBmdW5jdGlvbiBwYXJzZUFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gW3sgZGVtYW5kZWQ6IFtdLCBvcHRpb25hbDogW10gfSwgYXJnMSwgYXJnMl1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHBhcnNlQ29tbWFuZChgY21kICR7YXJnMX1gKSxcbiAgICAgICAgICAgICAgICBhcmcyLFxuICAgICAgICAgICAgICAgIGFyZzMsXG4gICAgICAgICAgICBdO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgICBjb25zdCBbcGFyc2VkLCBjYWxsZXJBcmd1bWVudHMsIF9sZW5ndGhdID0gcGFyc2VBcmdzKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGNhbGxlckFyZ3VtZW50cyk7XG4gICAgICAgIHdoaWxlIChhcmdzLmxlbmd0aCAmJiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBOb3QgZW5vdWdoIGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgJHtwYXJzZWQuZGVtYW5kZWQubGVuZ3RofSBidXQgcmVjZWl2ZWQgJHthcmdzLmxlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxDb21tYW5kcyA9IHBhcnNlZC5kZW1hbmRlZC5sZW5ndGggKyBwYXJzZWQub3B0aW9uYWwubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID4gdG90YWxDb21tYW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLiBFeHBlY3RlZCBtYXggJHt0b3RhbENvbW1hbmRzfSBidXQgcmVjZWl2ZWQgJHtsZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGRlbWFuZGVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVkVHlwZSA9IGd1ZXNzVHlwZShhcmcpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUeXBlcyA9IGRlbWFuZGVkLmNtZC5maWx0ZXIodHlwZSA9PiB0eXBlID09PSBvYnNlcnZlZFR5cGUgfHwgdHlwZSA9PT0gJyonKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1R5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGRlbWFuZGVkLmNtZCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlZC5vcHRpb25hbC5mb3JFYWNoKG9wdGlvbmFsID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBvcHRpb25hbC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBvcHRpb25hbC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGd1ZXNzVHlwZShhcmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBhcmc7XG59XG5mdW5jdGlvbiBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGFsbG93ZWRUeXBlcywgcG9zaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgWUVycm9yKGBJbnZhbGlkICR7cG9zaXRpb25OYW1lW3Bvc2l0aW9uXSB8fCAnbWFueWl0aCd9IGFyZ3VtZW50LiBFeHBlY3RlZCAke2FsbG93ZWRUeXBlcy5qb2luKCcgb3IgJyl9IGJ1dCByZWNlaXZlZCAke29ic2VydmVkVHlwZX0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShtYXliZVByb21pc2UpIHtcbiAgICByZXR1cm4gKCEhbWF5YmVQcm9taXNlICYmXG4gICAgICAgICEhbWF5YmVQcm9taXNlLnRoZW4gJiZcbiAgICAgICAgdHlwZW9mIG1heWJlUHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc2hpbSwgbWVzc2FnZSkge1xuICAgIHNoaW0uYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gYXNzZXJ0U2luZ2xlS2V5KGFjdHVhbCwgc2hpbSkge1xuICAgIHNoaW0uYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhY3R1YWwsICdzdHJpbmcnKTtcbn1cbmZ1bmN0aW9uIG9iamVjdEtleXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIG9iakZpbHRlcihvcmlnaW5hbCA9IHt9LCBmaWx0ZXIgPSAoKSA9PiB0cnVlKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgb2JqZWN0S2V5cyhvcmlnaW5hbCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyKGtleSwgb3JpZ2luYWxba2V5XSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrLCBhcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2tbaV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ21pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrW2ldLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGdsb2JhbE1pZGRsZXdhcmUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgIGdsb2JhbE1pZGRsZXdhcmUucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSkge1xuICAgIGlmICghY29tbWFuZE1pZGRsZXdhcmUpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gY29tbWFuZE1pZGRsZXdhcmUubWFwKG1pZGRsZXdhcmUgPT4ge1xuICAgICAgICBtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZShhcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICBjb25zdCBiZWZvcmVWYWxpZGF0aW9uRXJyb3IgPSBuZXcgRXJyb3IoJ21pZGRsZXdhcmUgY2Fubm90IHJldHVybiBhIHByb21pc2Ugd2hlbiBhcHBseUJlZm9yZVZhbGlkYXRpb24gaXMgdHJ1ZScpO1xuICAgIHJldHVybiBtaWRkbGV3YXJlcy5yZWR1Y2UoKGFjYywgbWlkZGxld2FyZSkgPT4ge1xuICAgICAgICBpZiAobWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gIT09IGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShhY2MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICAgICAgLnRoZW4oaW5pdGlhbE9iaiA9PiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgaW5pdGlhbE9iaixcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlKGluaXRpYWxPYmosIHlhcmdzKSxcbiAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgICAgIC50aGVuKChbaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9ial0pID0+IE9iamVjdC5hc3NpZ24oaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9iaikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbWlkZGxld2FyZShhY2MsIHlhcmdzKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVWYWxpZGF0aW9uICYmIGlzUHJvbWlzZShyZXN1bHQpKVxuICAgICAgICAgICAgICAgIHRocm93IGJlZm9yZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UocmVzdWx0KVxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRoZW4obWlkZGxld2FyZU9iaiA9PiBPYmplY3QuYXNzaWduKGFjYywgbWlkZGxld2FyZU9iaikpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKGFjYywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0sIGFyZ3YpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkge1xuICAgIGlmIChpc0J1bmRsZWRFbGVjdHJvbkFwcCgpKVxuICAgICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMTtcbn1cbmZ1bmN0aW9uIGlzQnVuZGxlZEVsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiBpc0VsZWN0cm9uQXBwKCkgJiYgIXByb2Nlc3MuZGVmYXVsdEFwcDtcbn1cbmZ1bmN0aW9uIGlzRWxlY3Ryb25BcHAoKSB7XG4gICAgcmV0dXJuICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbjtcbn1cbmZ1bmN0aW9uIGhpZGVCaW4oYXJndikge1xuICAgIHJldHVybiBhcmd2LnNsaWNlKGdldFByb2Nlc3NBcmd2QmluSW5kZXgoKSArIDEpO1xufVxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndltnZXRQcm9jZXNzQXJndkJpbkluZGV4KCldO1xufVxuXG52YXIgcHJvY2Vzc0FyZ3YgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGlkZUJpbjogaGlkZUJpbixcbiAgZ2V0UHJvY2Vzc0FyZ3ZCaW46IGdldFByb2Nlc3NBcmd2QmluXG59KTtcblxuZnVuY3Rpb24gd2hpY2hNb2R1bGUoZXhwb3J0ZWQpIHtcbiAgICBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMCwgZmlsZXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlLmNhY2hlKSwgbW9kOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW9kID0gcmVxdWlyZS5jYWNoZVtmaWxlc1tpXV07XG4gICAgICAgIGlmIChtb2QuZXhwb3J0cyA9PT0gZXhwb3J0ZWQpXG4gICAgICAgICAgICByZXR1cm4gbW9kO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgREVGQVVMVF9NQVJLRVIgPSAvKF5cXCopfCheXFwkMCkvO1xuZnVuY3Rpb24gY29tbWFuZCh5YXJncywgdXNhZ2UsIHZhbGlkYXRpb24sIGdsb2JhbE1pZGRsZXdhcmUgPSBbXSwgc2hpbSkge1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBsZXQgaGFuZGxlcnMgPSB7fTtcbiAgICBsZXQgYWxpYXNNYXAgPSB7fTtcbiAgICBsZXQgZGVmYXVsdENvbW1hbmQ7XG4gICAgc2VsZi5hZGRIYW5kbGVyID0gZnVuY3Rpb24gYWRkSGFuZGxlcihjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBjb21tYW5kTWlkZGxld2FyZSwgZGVwcmVjYXRlZCkge1xuICAgICAgICBsZXQgYWxpYXNlcyA9IFtdO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSk7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICgoKSA9PiB7IH0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBpZiAoaXNDb21tYW5kQW5kQWxpYXNlcyhjbWQpKSB7XG4gICAgICAgICAgICAgICAgW2NtZCwgLi4uYWxpYXNlc10gPSBjbWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcihjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSkge1xuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBBcnJheS5pc0FycmF5KGNtZC5jb21tYW5kKSB8fCB0eXBlb2YgY21kLmNvbW1hbmQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjbWQuY29tbWFuZFxuICAgICAgICAgICAgICAgIDogbW9kdWxlTmFtZShjbWQpO1xuICAgICAgICAgICAgaWYgKGNtZC5hbGlhc2VzKVxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBbXS5jb25jYXQoY29tbWFuZCkuY29uY2F0KGNtZC5hbGlhc2VzKTtcbiAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcihjb21tYW5kLCBleHRyYWN0RGVzYyhjbWQpLCBjbWQuYnVpbGRlciwgY21kLmhhbmRsZXIsIGNtZC5taWRkbGV3YXJlcywgY21kLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoW2NtZF0uY29uY2F0KGFsaWFzZXMpLCBkZXNjcmlwdGlvbiwgYnVpbGRlci5idWlsZGVyLCBidWlsZGVyLmhhbmRsZXIsIGJ1aWxkZXIubWlkZGxld2FyZXMsIGJ1aWxkZXIuZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjbWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRDb21tYW5kID0gcGFyc2VDb21tYW5kKGNtZCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gYWxpYXNlcy5tYXAoYWxpYXMgPT4gcGFyc2VDb21tYW5kKGFsaWFzKS5jbWQpO1xuICAgICAgICAgICAgbGV0IGlzRGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQWxpYXNlcyA9IFtwYXJzZWRDb21tYW5kLmNtZF0uY29uY2F0KGFsaWFzZXMpLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoREVGQVVMVF9NQVJLRVIudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICBpc0RlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkQWxpYXNlcy5sZW5ndGggPT09IDAgJiYgaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIHBhcnNlZEFsaWFzZXMucHVzaCgnJDAnKTtcbiAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRDb21tYW5kLmNtZCA9IHBhcnNlZEFsaWFzZXNbMF07XG4gICAgICAgICAgICAgICAgYWxpYXNlcyA9IHBhcnNlZEFsaWFzZXMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgY21kID0gY21kLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsIHBhcnNlZENvbW1hbmQuY21kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgYWxpYXNNYXBbYWxpYXNdID0gcGFyc2VkQ29tbWFuZC5jbWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5jb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyc1twYXJzZWRDb21tYW5kLmNtZF0gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IGNtZCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgfHwge30sXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZXMsXG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCxcbiAgICAgICAgICAgICAgICBkZW1hbmRlZDogcGFyc2VkQ29tbWFuZC5kZW1hbmRlZCxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogcGFyc2VkQ29tbWFuZC5vcHRpb25hbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb21tYW5kID0gaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmFkZERpcmVjdG9yeSA9IGZ1bmN0aW9uIGFkZERpcmVjdG9yeShkaXIsIGNvbnRleHQsIHJlcSwgY2FsbGVyRmlsZSwgb3B0cykge1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLnJlY3Vyc2UgIT09ICdib29sZWFuJylcbiAgICAgICAgICAgIG9wdHMucmVjdXJzZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0cy5leHRlbnNpb25zKSlcbiAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IFsnanMnXTtcbiAgICAgICAgY29uc3QgcGFyZW50VmlzaXQgPSB0eXBlb2Ygb3B0cy52aXNpdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMudmlzaXQgOiAobykgPT4gbztcbiAgICAgICAgb3B0cy52aXNpdCA9IGZ1bmN0aW9uIHZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgdmlzaXRlZCA9IHBhcmVudFZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICh+Y29udGV4dC5maWxlcy5pbmRleE9mKGpvaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsZXMucHVzaChqb2luZWQpO1xuICAgICAgICAgICAgICAgIHNlbGYuYWRkSGFuZGxlcih2aXNpdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2aXNpdGVkO1xuICAgICAgICB9O1xuICAgICAgICBzaGltLnJlcXVpcmVEaXJlY3RvcnkoeyByZXF1aXJlOiByZXEsIGZpbGVuYW1lOiBjYWxsZXJGaWxlIH0sIGRpciwgb3B0cyk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtb2R1bGVOYW1lKG9iaikge1xuICAgICAgICBjb25zdCBtb2QgPSB3aGljaE1vZHVsZShvYmopO1xuICAgICAgICBpZiAoIW1vZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29tbWFuZCBuYW1lIGdpdmVuIGZvciBtb2R1bGU6ICR7c2hpbS5pbnNwZWN0KG9iail9YCk7XG4gICAgICAgIHJldHVybiBjb21tYW5kRnJvbUZpbGVuYW1lKG1vZC5maWxlbmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1hbmRGcm9tRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0ucGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgc2hpbS5wYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdERlc2MoeyBkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2MsIH0pIHtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0IG9mIFtkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2NdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnIHx8IHRlc3QgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodGVzdCwgdHJ1ZSwgc2hpbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gT2JqZWN0LmtleXMoaGFuZGxlcnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc01hcCkpO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEhhbmRsZXJzID0gKCkgPT4gaGFuZGxlcnM7XG4gICAgc2VsZi5oYXNEZWZhdWx0Q29tbWFuZCA9ICgpID0+ICEhZGVmYXVsdENvbW1hbmQ7XG4gICAgc2VsZi5ydW5Db21tYW5kID0gZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kLCB5YXJncywgcGFyc2VkLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgY29uc3QgY29tbWFuZEhhbmRsZXIgPSBoYW5kbGVyc1tjb21tYW5kXSB8fCBoYW5kbGVyc1thbGlhc01hcFtjb21tYW5kXV0gfHwgZGVmYXVsdENvbW1hbmQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBsZXQgbnVtRmlsZXMgPSBjdXJyZW50Q29udGV4dC5maWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gY3VycmVudENvbnRleHQuY29tbWFuZHMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGlubmVyQXJndiA9IHBhcnNlZC5hcmd2O1xuICAgICAgICBsZXQgcG9zaXRpb25hbE1hcCA9IHt9O1xuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wdXNoKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gY29tbWFuZEhhbmRsZXIuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlck91dHB1dCA9IGJ1aWxkZXIoeWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpKTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyWWFyZ3MgPSBpc1lhcmdzSW5zdGFuY2UoYnVpbGRlck91dHB1dCkgPyBidWlsZGVyT3V0cHV0IDogeWFyZ3M7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAgICAgLnVzYWdlKHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5uZXJBcmd2ID0gaW5uZXJZYXJncy5fcGFyc2VBcmdzKG51bGwsIG51bGwsIHRydWUsIGNvbW1hbmRJbmRleCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyWWFyZ3MgPSB5YXJncy5yZXNldChwYXJzZWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoaW5uZXJZYXJncykpIHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAgICAgLnVzYWdlKHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZEhhbmRsZXIuYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlubmVyWWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gaW5uZXJZYXJncy5fcGFyc2VBcmdzKG51bGwsIG51bGwsIHRydWUsIGNvbW1hbmRJbmRleCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXlhcmdzLl9oYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcCA9IHBvcHVsYXRlUG9zaXRpb25hbHMoY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzID0gZ2xvYmFsTWlkZGxld2FyZVxuICAgICAgICAgICAgLnNsaWNlKDApXG4gICAgICAgICAgICAuY29uY2F0KGNvbW1hbmRIYW5kbGVyLm1pZGRsZXdhcmVzKTtcbiAgICAgICAgYXBwbHlNaWRkbGV3YXJlKGlubmVyQXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCB0cnVlKTtcbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9ydW5WYWxpZGF0aW9uKGlubmVyQXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgeWFyZ3MucGFyc2VkLmVycm9yLCAhY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRIYW5kbGVyLmhhbmRsZXIgJiYgIXlhcmdzLl9oYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgeWFyZ3MuX3NldEhhc091dHB1dCgpO1xuICAgICAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISF5YXJncy5nZXRPcHRpb25zKCkuY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICAgICAgeWFyZ3MuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGhhbmRsZXJSZXN1bHQ7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGlubmVyQXJndikpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gaW5uZXJBcmd2LnRoZW4oYXJndiA9PiBjb21tYW5kSGFuZGxlci5oYW5kbGVyKGFyZ3YpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJSZXN1bHQgPSBjb21tYW5kSGFuZGxlci5oYW5kbGVyKGlubmVyQXJndik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IHlhcmdzLmdldEhhbmRsZXJGaW5pc2hDb21tYW5kKCk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGhhbmRsZXJSZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNhY2hlSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGaW5pc2hDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwobnVsbCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZChoYW5kbGVyUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnBvcCgpO1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZnVsbENvbW1hbmRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoIC0gbnVtRmlsZXM7XG4gICAgICAgIGlmIChudW1GaWxlcyA+IDApXG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5maWxlcy5zcGxpY2UobnVtRmlsZXMgKiAtMSwgbnVtRmlsZXMpO1xuICAgICAgICByZXR1cm4gaW5uZXJBcmd2O1xuICAgIH07XG4gICAgZnVuY3Rpb24gc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgheWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlRGlzYWJsZWQoKSAmJlxuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlKCkubGVuZ3RoID09PSAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlcihwYXJlbnRDb21tYW5kcywgY29tbWFuZEhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgYyA9IERFRkFVTFRfTUFSS0VSLnRlc3QoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpXG4gICAgICAgICAgICA/IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsICcnKS50cmltKClcbiAgICAgICAgICAgIDogY29tbWFuZEhhbmRsZXIub3JpZ2luYWw7XG4gICAgICAgIGNvbnN0IHBjID0gcGFyZW50Q29tbWFuZHMuZmlsdGVyKGMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFERUZBVUxUX01BUktFUi50ZXN0KGMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGAkMCAke3BjLmpvaW4oJyAnKX1gO1xuICAgIH1cbiAgICBzZWxmLnJ1bkRlZmF1bHRCdWlsZGVyT24gPSBmdW5jdGlvbiAoeWFyZ3MpIHtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZGVmYXVsdENvbW1hbmQsIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVVc2FnZSh5YXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBERUZBVUxUX01BUktFUi50ZXN0KGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsKVxuICAgICAgICAgICAgICAgID8gZGVmYXVsdENvbW1hbmQub3JpZ2luYWxcbiAgICAgICAgICAgICAgICA6IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsLnJlcGxhY2UoL15bXltcXF08Pl0qLywgJyQwICcpO1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLnVzYWdlKGNvbW1hbmRTdHJpbmcsIGRlZmF1bHRDb21tYW5kLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gZGVmYXVsdENvbW1hbmQuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgYnVpbGRlcih5YXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhidWlsZGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgeWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBhcmd2LCBjb250ZXh0KSB7XG4gICAgICAgIGFyZ3YuXyA9IGFyZ3YuXy5zbGljZShjb250ZXh0LmNvbW1hbmRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkID0gY29tbWFuZEhhbmRsZXIuZGVtYW5kZWQuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gY29tbWFuZEhhbmRsZXIub3B0aW9uYWwuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgdmFsaWRhdGlvbi5wb3NpdGlvbmFsQ291bnQoZGVtYW5kZWQubGVuZ3RoLCBhcmd2Ll8ubGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gZGVtYW5kZWQuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlUG9zaXRpb25hbChkZW1hbmQsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChvcHRpb25hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlID0gb3B0aW9uYWwuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlUG9zaXRpb25hbChtYXliZSwgYXJndiwgcG9zaXRpb25hbE1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJndi5fID0gY29udGV4dC5jb21tYW5kcy5jb25jYXQoYXJndi5fLm1hcChhID0+ICcnICsgYSkpO1xuICAgICAgICBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uYWxNYXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUG9zaXRpb25hbChwb3NpdGlvbmFsLCBhcmd2LCBwb3NpdGlvbmFsTWFwKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IHBvc2l0aW9uYWwuY21kWzBdO1xuICAgICAgICBpZiAocG9zaXRpb25hbC52YXJpYWRpYykge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtjbWRdID0gYXJndi5fLnNwbGljZSgwKS5tYXAoU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IFtTdHJpbmcoYXJndi5fLnNoaWZ0KCkpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHBhcnNlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgeWFyZ3MuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0ID0gT2JqZWN0LmFzc2lnbihwYXJzZU9wdGlvbnMuZGVmYXVsdCwgb3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VPcHRpb25zLmFsaWFzKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldID0gKG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSkuY29uY2F0KHBhcnNlT3B0aW9ucy5hbGlhc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmFycmF5ID0gb3B0aW9ucy5hcnJheS5jb25jYXQocGFyc2VPcHRpb25zLmFycmF5KTtcbiAgICAgICAgb3B0aW9ucy5jb25maWcgPSB7fTtcbiAgICAgICAgY29uc3QgdW5wYXJzZWQgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtrZXldLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5rZXlba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaChgLS0ke2tleX1gKTtcbiAgICAgICAgICAgICAgICB1bnBhcnNlZC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1bnBhcnNlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbS5QYXJzZXIuZGV0YWlsZWQodW5wYXJzZWQsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZyxcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAocGFyc2VkLmVycm9yKSB7XG4gICAgICAgICAgICB5YXJncy5nZXRVc2FnZUluc3RhbmNlKCkuZmFpbChwYXJzZWQuZXJyb3IubWVzc2FnZSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbEtleXMucHVzaCguLi5wYXJzZWQuYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyc2VkLmFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25hbEtleXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvc2l0aW9uYWxNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5jbWRUb1BhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIChjbWRTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbW1hbmQoY21kU3RyaW5nKTtcbiAgICAgICAgcGFyc2VkLmRlbWFuZGVkLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IGQuY21kO1xuICAgICAgICAgICAgaWYgKGQudmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZW1hbmRbY21kXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFsaWFzZXNdID0gby5jbWQ7XG4gICAgICAgICAgICBpZiAoby52YXJpYWRpYykge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hcnJheS5wdXNoKGNtZCk7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlZmF1bHRbY21kXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2NtZF0gPSBhbGlhc2VzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucztcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIGhhbmRsZXJzID0ge307XG4gICAgICAgIGFsaWFzTWFwID0ge307XG4gICAgICAgIGRlZmF1bHRDb21tYW5kID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGhhbmRsZXJzLFxuICAgICAgICAgICAgYWxpYXNNYXAsXG4gICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGhhbmRsZXJzLCBhbGlhc01hcCwgZGVmYXVsdENvbW1hbmQgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBidWlsZGVyID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhIWJ1aWxkZXIuYnVpbGRlciAmJlxuICAgICAgICB0eXBlb2YgYnVpbGRlci5oYW5kbGVyID09PSAnZnVuY3Rpb24nKTtcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSB7XG4gICAgaWYgKGNtZC5ldmVyeShjID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikge1xuICAgIHJldHVybiB0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbihjbWQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNtZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY21kKTtcbn1cblxuZnVuY3Rpb24gc2V0QmxvY2tpbmcoYmxvY2tpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm47XG4gICAgW3Byb2Nlc3Muc3Rkb3V0LCBwcm9jZXNzLnN0ZGVycl0uZm9yRWFjaChfc3RyZWFtID0+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gX3N0cmVhbTtcbiAgICAgICAgaWYgKHN0cmVhbS5faGFuZGxlICYmXG4gICAgICAgICAgICBzdHJlYW0uaXNUVFkgJiZcbiAgICAgICAgICAgIHR5cGVvZiBzdHJlYW0uX2hhbmRsZS5zZXRCbG9ja2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcoYmxvY2tpbmcpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzYWdlKHlhcmdzLCB5MThuLCBzaGltKSB7XG4gICAgY29uc3QgX18gPSB5MThuLl9fO1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBjb25zdCBmYWlscyA9IFtdO1xuICAgIHNlbGYuZmFpbEZuID0gZnVuY3Rpb24gZmFpbEZuKGYpIHtcbiAgICAgICAgZmFpbHMucHVzaChmKTtcbiAgICB9O1xuICAgIGxldCBmYWlsTWVzc2FnZSA9IG51bGw7XG4gICAgbGV0IHNob3dIZWxwT25GYWlsID0gdHJ1ZTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWxGbihhcmcxID0gdHJ1ZSwgYXJnMikge1xuICAgICAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uQXJncygpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ3N0cmluZycgPyBbdHJ1ZSwgYXJnMV0gOiBbYXJnMSwgYXJnMl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2VuYWJsZWQsIG1lc3NhZ2VdID0gcGFyc2VGdW5jdGlvbkFyZ3MoKTtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBzaG93SGVscE9uRmFpbCA9IGVuYWJsZWQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGZhaWx1cmVPdXRwdXQgPSBmYWxzZTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1zZywgZXJyKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoZmFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmFpbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBmYWlsc1tpXShtc2csIGVyciwgc2VsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0RXhpdFByb2Nlc3MoKSlcbiAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZU91dHB1dCkge1xuICAgICAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChzaG93SGVscE9uRmFpbCkge1xuICAgICAgICAgICAgICAgICAgICB5YXJncy5zaG93SGVscCgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnIHx8IGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGZhaWxNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZhaWxNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnIgPSBlcnIgfHwgbmV3IFlFcnJvcihtc2cpO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHlhcmdzLl9oYXNQYXJzZUNhbGxiYWNrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgdXNhZ2VzID0gW107XG4gICAgbGV0IHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBzZWxmLnVzYWdlID0gKG1zZywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG1zZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdXNhZ2VzLnB1c2goW21zZywgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VzO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZURpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VEaXNhYmxlZDtcbiAgICB9O1xuICAgIHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9fKCdQb3NpdGlvbmFsczonKTtcbiAgICB9O1xuICAgIGxldCBleGFtcGxlcyA9IFtdO1xuICAgIHNlbGYuZXhhbXBsZSA9IChjbWQsIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGV4YW1wbGVzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICB9O1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIHNlbGYuY29tbWFuZCA9IGZ1bmN0aW9uIGNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5tYXAoY21kQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgIGNtZEFycmF5WzJdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZEFycmF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMucHVzaChbY21kLCBkZXNjcmlwdGlvbiB8fCAnJywgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkXSk7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gY29tbWFuZHM7XG4gICAgbGV0IGRlc2NyaXB0aW9ucyA9IHt9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiBkZXNjcmliZShrZXlPcktleXMsIGRlc2MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuICAgICAgICAgICAga2V5T3JLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBkZXNjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlPcktleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXlPcktleXMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBrZXlPcktleXNba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNba2V5T3JLZXlzXSA9IGRlc2M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVzY3JpcHRpb25zID0gKCkgPT4gZGVzY3JpcHRpb25zO1xuICAgIGxldCBlcGlsb2dzID0gW107XG4gICAgc2VsZi5lcGlsb2cgPSBtc2cgPT4ge1xuICAgICAgICBlcGlsb2dzLnB1c2gobXNnKTtcbiAgICB9O1xuICAgIGxldCB3cmFwU2V0ID0gZmFsc2U7XG4gICAgbGV0IHdyYXA7XG4gICAgc2VsZi53cmFwID0gY29scyA9PiB7XG4gICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB3cmFwID0gY29scztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFdyYXAoKSB7XG4gICAgICAgIGlmICghd3JhcFNldCkge1xuICAgICAgICAgICAgd3JhcCA9IHdpbmRvd1dpZHRoKCk7XG4gICAgICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcDtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJZMThuTG9va3VwUHJlZml4ID0gJ19feWFyZ3NTdHJpbmdfXzonO1xuICAgIHNlbGYuZGVmZXJZMThuTG9va3VwID0gc3RyID0+IGRlZmVyWTE4bkxvb2t1cFByZWZpeCArIHN0cjtcbiAgICBzZWxmLmhlbHAgPSBmdW5jdGlvbiBoZWxwKCkge1xuICAgICAgICBpZiAoY2FjaGVkSGVscE1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgICAgIG5vcm1hbGl6ZUFsaWFzZXMoKTtcbiAgICAgICAgY29uc3QgYmFzZSQwID0geWFyZ3MuY3VzdG9tU2NyaXB0TmFtZVxuICAgICAgICAgICAgPyB5YXJncy4kMFxuICAgICAgICAgICAgOiBzaGltLnBhdGguYmFzZW5hbWUoeWFyZ3MuJDApO1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB5YXJncy5nZXREZXByZWNhdGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBncm91cHMgPSB5YXJncy5nZXRHcm91cHMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IGtleXMgPSBbXTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlc2NyaXB0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRPcHRpb25zKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZW1hbmRlZENvbW1hbmRzKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvcHRpb25zLmRlZmF1bHQpKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpO1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAnXycpXG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29uc3QgdGhlV3JhcCA9IGdldFdyYXAoKTtcbiAgICAgICAgY29uc3QgdWkgPSBzaGltLmNsaXVpKHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGVXcmFwLFxuICAgICAgICAgICAgd3JhcDogISF0aGVXcmFwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1c2FnZURpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodXNhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHVzYWdlcy5mb3JFYWNoKHVzYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KGAke3VzYWdlWzBdLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVsxXX1gLCBwYWRkaW5nOiBbMSwgMCwgMCwgMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fKSB7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBgJHtiYXNlJDB9IDwke19fKCdjb21tYW5kJyl9PlxcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSBbJHtfXygnY29tbWFuZCcpfV1cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1aS5kaXYoYCR7dX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0NvbW1hbmRzOicpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGNvbnRleHQuY29tbWFuZHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBgJHtjb250ZXh0LmNvbW1hbmRzLmpvaW4oJyAnKX0gYFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydzb3J0LWNvbW1hbmRzJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcyA9IGNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IGFbMF0ubG9jYWxlQ29tcGFyZShiWzBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBgJHtiYXNlJDB9ICR7cGFyZW50Q29tbWFuZHN9JHtjb21tYW5kWzBdLnJlcGxhY2UoL15cXCQwID8vLCAnJyl9YDtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY29tbWFuZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbWF4V2lkdGgoY29tbWFuZHMsIHRoZVdyYXAsIGAke2Jhc2UkMH0ke3BhcmVudENvbW1hbmRzfWApICsgNCxcbiAgICAgICAgICAgICAgICB9LCB7IHRleHQ6IGNvbW1hbmRbMV0gfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGludHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFsyXSlcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlZmF1bHQnKX1dYCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbM10gJiYgY29tbWFuZFszXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2FsaWFzZXM6Jyl9ICR7Y29tbWFuZFszXS5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kWzRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgY29tbWFuZFs0XSl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhpbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaGludHMuam9pbignICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDAsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGlhc0tleXMgPSAoT2JqZWN0LmtleXMob3B0aW9ucy5hbGlhcykgfHwgW10pLmNvbmNhdChPYmplY3Qua2V5cyh5YXJncy5wYXJzZWQubmV3QWxpYXNlcykgfHwgW10pO1xuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+ICF5YXJncy5wYXJzZWQubmV3QWxpYXNlc1trZXldICYmXG4gICAgICAgICAgICBhbGlhc0tleXMuZXZlcnkoYWxpYXMgPT4gKG9wdGlvbnMuYWxpYXNbYWxpYXNdIHx8IFtdKS5pbmRleE9mKGtleSkgPT09IC0xKSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRHcm91cCA9IF9fKCdPcHRpb25zOicpO1xuICAgICAgICBpZiAoIWdyb3Vwc1tkZWZhdWx0R3JvdXBdKVxuICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0gPSBbXTtcbiAgICAgICAgYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBvcHRpb25zLmFsaWFzLCBncm91cHMsIGRlZmF1bHRHcm91cCk7XG4gICAgICAgIGNvbnN0IGlzTG9uZ1N3aXRjaCA9IChzdykgPT4gL14tLS8udGVzdChnZXRUZXh0KHN3KSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZEdyb3VwcyA9IE9iamVjdC5rZXlzKGdyb3VwcylcbiAgICAgICAgICAgIC5maWx0ZXIoZ3JvdXBOYW1lID0+IGdyb3Vwc1tncm91cE5hbWVdLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKGdyb3VwTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5cyA9IGdyb3Vwc1tncm91cE5hbWVdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofmFsaWFzS2V5cy5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGFsaWFzS2V5OyAoYWxpYXNLZXkgPSBhbGlhc0tleXNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAofihvcHRpb25zLmFsaWFzW2FsaWFzS2V5XSB8fCBbXSkuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzS2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH07XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5vcm1hbGl6ZWRLZXlzIH0pID0+IG5vcm1hbGl6ZWRLZXlzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKCh7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3dpdGNoZXMgPSBub3JtYWxpemVkS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSBba2V5XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChzdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cE5hbWUgPT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN3O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKC9eWzAtOV0kLy50ZXN0KHN3KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gfm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctJykgKyBzdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoc3cxLCBzdzIpID0+IGlzTG9uZ1N3aXRjaChzdzEpID09PSBpc0xvbmdTd2l0Y2goc3cyKVxuICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiBpc0xvbmdTd2l0Y2goc3cxKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC0xKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNob3J0U3dpdGNoZXNVc2VkID0gZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGdyb3VwTmFtZSB9KSA9PiBncm91cE5hbWUgIT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgLnNvbWUoKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+ICFub3JtYWxpemVkS2V5cy5ldmVyeShrZXkgPT4gaXNMb25nU3dpdGNoKHN3aXRjaGVzW2tleV0pKSk7XG4gICAgICAgIGlmIChzaG9ydFN3aXRjaGVzVXNlZCkge1xuICAgICAgICAgICAgZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoeyBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoZXNba2V5XSA9IGFkZEluZGVudGF0aW9uKHN3aXRjaGVzW2tleV0sICcteCwgJy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwbGF5ZWRHcm91cHMuZm9yRWFjaCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICB1aS5kaXYoZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrc3dpdGNoID0gc3dpdGNoZXNba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgZGVzYyA9IGRlc2NyaXB0aW9uc1trZXldIHx8ICcnO1xuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAofmRlc2MubGFzdEluZGV4T2YoZGVmZXJZMThuTG9va3VwUHJlZml4KSlcbiAgICAgICAgICAgICAgICAgICAgZGVzYyA9IF9fKGRlc2Muc3Vic3RyaW5nKGRlZmVyWTE4bkxvb2t1cFByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2Jvb2xlYW4nKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdjb3VudCcpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5zdHJpbmcuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdzdHJpbmcnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubm9ybWFsaXplLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnYXJyYXknKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubnVtYmVyLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnbnVtYmVyJyl9XWA7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcmVjYXRlZEV4dHJhID0gKGRlcHJlY2F0ZWQpID0+IHR5cGVvZiBkZXByZWNhdGVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnZGVwcmVjYXRlZDogJXMnLCBkZXByZWNhdGVkKX1dYFxuICAgICAgICAgICAgICAgICAgICA6IGBbJHtfXygnZGVwcmVjYXRlZCcpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gW1xuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVwcmVjYXRlZE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVwcmVjYXRlZEV4dHJhKGRlcHJlY2F0ZWRPcHRpb25zW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtleSBpbiBkZW1hbmRlZE9wdGlvbnMgPyBgWyR7X18oJ3JlcXVpcmVkJyl9XWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNob2ljZXMgJiYgb3B0aW9ucy5jaG9pY2VzW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYFske19fKCdjaG9pY2VzOicpfSAke3NlbGYuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pfV1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHJpbmcob3B0aW9ucy5kZWZhdWx0W2tleV0sIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHVpLnNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0KGtzd2l0Y2gpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMiArIGdldEluZGVudGF0aW9uKGtzd2l0Y2gpXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKHN3aXRjaGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgZGVzYyk7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhKVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBleHRyYSwgcGFkZGluZzogWzAsIDAsIDAsIDJdLCBhbGlnbjogJ3JpZ2h0JyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChleGFtcGxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHVpLmRpdihfXygnRXhhbXBsZXM6JykpO1xuICAgICAgICAgICAgZXhhbXBsZXMuZm9yRWFjaChleGFtcGxlID0+IHtcbiAgICAgICAgICAgICAgICBleGFtcGxlWzBdID0gZXhhbXBsZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4YW1wbGVbMV0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGV4YW1wbGVzLCB0aGVXcmFwKSArIDQsXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGV4YW1wbGVbMV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVwaWxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IGVwaWxvZ3NcbiAgICAgICAgICAgICAgICAubWFwKGVwaWxvZyA9PiBlcGlsb2cucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApKVxuICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIHVpLmRpdihgJHtlfVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aS50b1N0cmluZygpLnJlcGxhY2UoL1xccyokLywgJycpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbWF4V2lkdGgodGFibGUsIHRoZVdyYXAsIG1vZGlmaWVyKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YWJsZSkpIHtcbiAgICAgICAgICAgIHRhYmxlID0gT2JqZWN0LnZhbHVlcyh0YWJsZSkubWFwKHYgPT4gW3ZdKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZS5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heChzaGltLnN0cmluZ1dpZHRoKG1vZGlmaWVyID8gYCR7bW9kaWZpZXJ9ICR7Z2V0VGV4dCh2WzBdKX1gIDogZ2V0VGV4dCh2WzBdKSkgKyBnZXRJbmRlbnRhdGlvbih2WzBdKSwgd2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoZVdyYXApXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBwYXJzZUludCgodGhlV3JhcCAqIDAuNSkudG9TdHJpbmcoKSwgMTApKTtcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVBbGlhc2VzKCkge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmFsaWFzW2tleV0uZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1thbGlhc10pXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBkZXNjcmlwdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gZGVtYW5kZWRPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5kZW1hbmRPcHRpb24oa2V5LCBkZW1hbmRlZE9wdGlvbnNbYWxpYXNdKTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYm9vbGVhbi5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuYm9vbGVhbihrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5jb3VudC5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuY291bnQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMubm9ybWFsaXplLmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuYXJyYXkuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MubnVtYmVyKGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBjYWNoZWRIZWxwTWVzc2FnZTtcbiAgICBzZWxmLmNhY2hlSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdGhpcy5oZWxwKCk7XG4gICAgfTtcbiAgICBzZWxmLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhY2hlZEhlbHBNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24gYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBhbGlhc2VzLCBncm91cHMsIGRlZmF1bHRHcm91cCkge1xuICAgICAgICBsZXQgZ3JvdXBlZEtleXMgPSBbXTtcbiAgICAgICAgbGV0IHRvQ2hlY2sgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgZ3JvdXBlZEtleXMgPSBncm91cGVkS2V5cy5jb25jYXQoZ3JvdXBzW2dyb3VwXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRvQ2hlY2sgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIGlmICghdG9DaGVjay5zb21lKGsgPT4gZ3JvdXBlZEtleXMuaW5kZXhPZihrKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRLZXlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWx0ZXJIaWRkZW5PcHRpb25zKGtleSkge1xuICAgICAgICByZXR1cm4gKHlhcmdzLmdldE9wdGlvbnMoKS5oaWRkZW5PcHRpb25zLmluZGV4T2Yoa2V5KSA8IDAgfHxcbiAgICAgICAgICAgIHlhcmdzLnBhcnNlZC5hcmd2W3lhcmdzLmdldE9wdGlvbnMoKS5zaG93SGlkZGVuT3B0XSk7XG4gICAgfVxuICAgIHNlbGYuc2hvd0hlbHAgPSAobGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuX2dldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGlmICghbGV2ZWwpXG4gICAgICAgICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgICAgIGNvbnN0IGVtaXQgPSB0eXBlb2YgbGV2ZWwgPT09ICdmdW5jdGlvbicgPyBsZXZlbCA6IGxvZ2dlcltsZXZlbF07XG4gICAgICAgIGVtaXQoc2VsZi5oZWxwKCkpO1xuICAgIH07XG4gICAgc2VsZi5mdW5jdGlvbkRlc2NyaXB0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGZuLm5hbWVcbiAgICAgICAgICAgID8gc2hpbS5QYXJzZXIuZGVjYW1lbGl6ZShmbi5uYW1lLCAnLScpXG4gICAgICAgICAgICA6IF9fKCdnZW5lcmF0ZWQtdmFsdWUnKTtcbiAgICAgICAgcmV0dXJuIFsnKCcsIGRlc2NyaXB0aW9uLCAnKSddLmpvaW4oJycpO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmdpZmllZFZhbHVlcyA9IGZ1bmN0aW9uIHN0cmluZ2lmaWVkVmFsdWVzKHZhbHVlcywgc2VwYXJhdG9yKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSAnJztcbiAgICAgICAgY29uc3Qgc2VwID0gc2VwYXJhdG9yIHx8ICcsICc7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW10uY29uY2F0KHZhbHVlcyk7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICFhcnJheS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICBhcnJheS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBzZXA7XG4gICAgICAgICAgICBzdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGRlZmF1bHRTdHJpbmcodmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICBsZXQgc3RyaW5nID0gYFske19fKCdkZWZhdWx0OicpfSBgO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhZGVmYXVsdERlc2NyaXB0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtzdHJpbmd9XWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpbmRvd1dpZHRoKCkge1xuICAgICAgICBjb25zdCBtYXhXaWR0aCA9IDgwO1xuICAgICAgICBpZiAoc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhXaWR0aCwgc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSB2ZXIgPT4ge1xuICAgICAgICB2ZXJzaW9uID0gdmVyO1xuICAgIH07XG4gICAgc2VsZi5zaG93VmVyc2lvbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuX2dldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGxvZ2dlci5sb2codmVyc2lvbik7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcyA9IFtdO1xuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGVwaWxvZ3MgPSBbXTtcbiAgICAgICAgZXhhbXBsZXMgPSBbXTtcbiAgICAgICAgY29tbWFuZHMgPSBbXTtcbiAgICAgICAgZGVzY3JpcHRpb25zID0gb2JqRmlsdGVyKGRlc2NyaXB0aW9ucywgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSgpIHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgKHtcbiAgICAgICAgICAgIGZhaWxNZXNzYWdlLFxuICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQsXG4gICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzSW5kZW50ZWRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRleHQgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gYWRkSW5kZW50YXRpb24odGV4dCwgaW5kZW50KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpXG4gICAgICAgID8geyB0ZXh0OiB0ZXh0LnRleHQsIGluZGVudGF0aW9uOiB0ZXh0LmluZGVudGF0aW9uICsgaW5kZW50IH1cbiAgICAgICAgOiB7IHRleHQsIGluZGVudGF0aW9uOiBpbmRlbnQgfTtcbn1cbmZ1bmN0aW9uIGdldEluZGVudGF0aW9uKHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LmluZGVudGF0aW9uIDogMDtcbn1cbmZ1bmN0aW9uIGdldFRleHQodGV4dCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KSA/IHRleHQudGV4dCA6IHRleHQ7XG59XG5cbmNvbnN0IGNvbXBsZXRpb25TaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly5iYXNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl95YXJnc19jb21wbGV0aW9ucygpXG57XG4gICAgbG9jYWwgY3VyX3dvcmQgYXJncyB0eXBlX2xpc3RcblxuICAgIGN1cl93b3JkPVwiXFwke0NPTVBfV09SRFNbQ09NUF9DV09SRF19XCJcbiAgICBhcmdzPShcIlxcJHtDT01QX1dPUkRTW0BdfVwiKVxuXG4gICAgIyBhc2sgeWFyZ3MgdG8gZ2VuZXJhdGUgY29tcGxldGlvbnMuXG4gICAgdHlwZV9saXN0PSQoe3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke2FyZ3NbQF19XCIpXG5cbiAgICBDT01QUkVQTFk9KCAkKGNvbXBnZW4gLVcgXCJcXCR7dHlwZV9saXN0fVwiIC0tIFxcJHtjdXJfd29yZH0pIClcblxuICAgICMgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLCBmYWxsIGJhY2sgdG8gZmlsZW5hbWUgY29tcGxldGlvblxuICAgIGlmIFsgXFwkeyNDT01QUkVQTFlbQF19IC1lcSAwIF07IHRoZW5cbiAgICAgIENPTVBSRVBMWT0oKVxuICAgIGZpXG5cbiAgICByZXR1cm4gMFxufVxuY29tcGxldGUgLW8gZGVmYXVsdCAtRiBfeWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5jb25zdCBjb21wbGV0aW9uWnNoVGVtcGxhdGUgPSBgIyMjLWJlZ2luLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbiNcbiMgeWFyZ3MgY29tbWFuZCBjb21wbGV0aW9uIHNjcmlwdFxuI1xuIyBJbnN0YWxsYXRpb246IHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICBsb2NhbCByZXBseVxuICBsb2NhbCBzaT0kSUZTXG4gIElGUz0kJ1xcbicgcmVwbHk9KCQoQ09NUF9DV09SRD1cIiQoKENVUlJFTlQtMSkpXCIgQ09NUF9MSU5FPVwiJEJVRkZFUlwiIENPTVBfUE9JTlQ9XCIkQ1VSU09SXCIge3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke3dvcmRzW0BdfVwiKSlcbiAgSUZTPSRzaVxuICBfZGVzY3JpYmUgJ3ZhbHVlcycgcmVwbHlcbn1cbmNvbXBkZWYgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyB7e2FwcF9uYW1lfX1cbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcblxuZnVuY3Rpb24gY29tcGxldGlvbih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge1xuICAgICAgICBjb21wbGV0aW9uS2V5OiAnZ2V0LXlhcmdzLWNvbXBsZXRpb25zJyxcbiAgICB9O1xuICAgIGxldCBhbGlhc2VzO1xuICAgIHNlbGYuc2V0UGFyc2VkID0gZnVuY3Rpb24gc2V0UGFyc2VkKHBhcnNlZCkge1xuICAgICAgICBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgfTtcbiAgICBjb25zdCB6c2hTaGVsbCA9IChzaGltLmdldEVudignU0hFTEwnKSAmJiBzaGltLmdldEVudignU0hFTEwnKS5pbmRleE9mKCd6c2gnKSAhPT0gLTEpIHx8XG4gICAgICAgIChzaGltLmdldEVudignWlNIX05BTUUnKSAmJiBzaGltLmdldEVudignWlNIX05BTUUnKS5pbmRleE9mKCd6c2gnKSAhPT0gLTEpO1xuICAgIHNlbGYuZ2V0Q29tcGxldGlvbiA9IGZ1bmN0aW9uIGdldENvbXBsZXRpb24oYXJncywgZG9uZSkge1xuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYXJncy5sZW5ndGggPyBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gOiAnJztcbiAgICAgICAgY29uc3QgYXJndiA9IHlhcmdzLnBhcnNlKGFyZ3MsIHRydWUpO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IHlhcmdzLmdldENvbnRleHQoKS5jb21tYW5kcztcbiAgICAgICAgZnVuY3Rpb24gcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGNvbXBsZXRpb25GdW5jdGlvbiwgbnVsbCwgc2hpbSk7XG4gICAgICAgICAgICBpZiAoaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndik7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGxpc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hpbS5wcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2LCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wbGV0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UoYXJndilcbiAgICAgICAgICAgICAgICA/IGFyZ3YudGhlbihydW5Db21wbGV0aW9uRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgOiBydW5Db21wbGV0aW9uRnVuY3Rpb24oYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBjb21tYW5kLmdldENvbW1hbmRIYW5kbGVycygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyc1thcmdzW2ldXSAmJiBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IGhhbmRsZXJzW2FyZ3NbaV1dLmJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0geWFyZ3MucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlcih5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkuYXJndjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICBwYXJlbnRDb21tYW5kc1twYXJlbnRDb21tYW5kcy5sZW5ndGggLSAxXSAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgdXNhZ2UuZ2V0Q29tbWFuZHMoKS5mb3JFYWNoKHVzYWdlQ29tbWFuZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBwYXJzZUNvbW1hbmQodXNhZ2VDb21tYW5kWzBdKS5jbWQ7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuaW5kZXhPZihjb21tYW5kTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IHVzYWdlQ29tbWFuZFsxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUucmVwbGFjZSgvOi9nLCAnXFxcXDonKSArICc6JyArIGRlc2MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQubWF0Y2goL14tLykgfHwgKGN1cnJlbnQgPT09ICcnICYmIGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NzID0gdXNhZ2UuZ2V0RGVzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5rZXkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZWdhYmxlID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgICAgICAgICBsZXQga2V5QW5kQWxpYXNlcyA9IFtrZXldLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhYmxlKVxuICAgICAgICAgICAgICAgICAgICBrZXlBbmRBbGlhc2VzID0ga2V5QW5kQWxpYXNlcy5jb25jYXQoa2V5QW5kQWxpYXNlcy5tYXAoa2V5ID0+IGBuby0ke2tleX1gKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGVPcHRpb25LZXkoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdEluQXJncyA9IGtleUFuZEFsaWFzZXMuZXZlcnkodmFsID0+IGFyZ3MuaW5kZXhPZihgLS0ke3ZhbH1gKSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm90SW5BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydHNCeVR3b0Rhc2hlcyA9IChzKSA9PiAvXi0tLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTaG9ydE9wdGlvbiA9IChzKSA9PiAvXlteMC05XSQvLnRlc3Qocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXNoZXMgPSAhc3RhcnRzQnlUd29EYXNoZXMoY3VycmVudCkgJiYgaXNTaG9ydE9wdGlvbihrZXkpID8gJy0nIDogJy0tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gZGVzY3Nba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2tleS5yZXBsYWNlKC86L2csICdcXFxcOicpfToke2Rlc2MucmVwbGFjZSgnX195YXJnc1N0cmluZ19fOicsICcnKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhYmxlICYmICEhb3B0aW9ucy5kZWZhdWx0W2tleV0pXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uS2V5KGBuby0ke2tleX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvbmUoY29tcGxldGlvbnMpO1xuICAgIH07XG4gICAgc2VsZi5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQgPSBmdW5jdGlvbiBnZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCkge1xuICAgICAgICBsZXQgc2NyaXB0ID0genNoU2hlbGxcbiAgICAgICAgICAgID8gY29tcGxldGlvblpzaFRlbXBsYXRlXG4gICAgICAgICAgICA6IGNvbXBsZXRpb25TaFRlbXBsYXRlO1xuICAgICAgICBjb25zdCBuYW1lID0gc2hpbS5wYXRoLmJhc2VuYW1lKCQwKTtcbiAgICAgICAgaWYgKCQwLm1hdGNoKC9cXC5qcyQvKSlcbiAgICAgICAgICAgICQwID0gYC4vJHskMH1gO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3thcHBfbmFtZX19L2csIG5hbWUpO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3tjb21wbGV0aW9uX2NvbW1hbmR9fS9nLCBjbWQpO1xuICAgICAgICByZXR1cm4gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX3BhdGh9fS9nLCAkMCk7XG4gICAgfTtcbiAgICBsZXQgY29tcGxldGlvbkZ1bmN0aW9uID0gbnVsbDtcbiAgICBzZWxmLnJlZ2lzdGVyRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICAgIGNvbXBsZXRpb25GdW5jdGlvbiA9IGZuO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc1N5bmNDb21wbGV0aW9uRnVuY3Rpb24oY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbi5sZW5ndGggPCAzO1xufVxuXG5mdW5jdGlvbiBsZXZlbnNodGVpbihhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYi5sZW5ndGg7XG4gICAgaWYgKGIubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gW107XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG1hdHJpeFswXVtqXSA9IGo7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4obWF0cml4W2kgLSAxXVtqIC0gMV0gKyAxLCBNYXRoLm1pbihtYXRyaXhbaV1baiAtIDFdICsgMSwgbWF0cml4W2kgLSAxXVtqXSArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG5cbmNvbnN0IHNwZWNpYWxLZXlzID0gWyckMCcsICctLScsICdfJ107XG5mdW5jdGlvbiB2YWxpZGF0aW9uKHlhcmdzLCB1c2FnZSwgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBfX24gPSB5MThuLl9fbjtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgc2VsZi5ub25PcHRpb25Db3VudCA9IGZ1bmN0aW9uIG5vbk9wdGlvbkNvdW50KGFyZ3YpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbENvdW50ID0gYXJndi5fLmxlbmd0aCArIChhcmd2WyctLSddID8gYXJndlsnLS0nXS5sZW5ndGggOiAwKTtcbiAgICAgICAgY29uc3QgX3MgPSBwb3NpdGlvbmFsQ291bnQgLSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHMubGVuZ3RoO1xuICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fICYmXG4gICAgICAgICAgICAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluIHx8IF9zID4gZGVtYW5kZWRDb21tYW5kcy5fLm1heCkpIHtcbiAgICAgICAgICAgIGlmIChfcyA8IGRlbWFuZGVkQ29tbWFuZHMuXy5taW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5taW4udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsICdUb28gbWFueSBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBtYXhpbXVtIG9mICVzJywgX3MsIF9zLnRvU3RyaW5nKCksIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5wb3NpdGlvbmFsQ291bnQgPSBmdW5jdGlvbiBwb3NpdGlvbmFsQ291bnQocmVxdWlyZWQsIG9ic2VydmVkKSB7XG4gICAgICAgIGlmIChvYnNlcnZlZCA8IHJlcXVpcmVkKSB7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIG9ic2VydmVkLCBvYnNlcnZlZCArICcnLCByZXF1aXJlZCArICcnKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZWRBcmd1bWVudHMgPSBmdW5jdGlvbiByZXF1aXJlZEFyZ3VtZW50cyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkT3B0aW9ucyA9IHlhcmdzLmdldERlbWFuZGVkT3B0aW9ucygpO1xuICAgICAgICBsZXQgbWlzc2luZyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgYXJndltrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nIHx8IHt9O1xuICAgICAgICAgICAgICAgIG1pc3Npbmdba2V5XSA9IGRlbWFuZGVkT3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaXNzaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2dzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtaXNzaW5nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IG1pc3Npbmdba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIGN1c3RvbU1zZ3MuaW5kZXhPZihtc2cpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21Nc2dzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2cgPSBjdXN0b21Nc2dzLmxlbmd0aCA/IGBcXG4ke2N1c3RvbU1zZ3Muam9pbignXFxuJyl9YCA6ICcnO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQ6ICVzJywgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnRzOiAlcycsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmxlbmd0aCwgT2JqZWN0LmtleXMobWlzc2luZykuam9pbignLCAnKSArIGN1c3RvbU1zZykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Bcmd1bWVudHMgPSBmdW5jdGlvbiB1bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIGlzRGVmYXVsdENvbW1hbmQsIGNoZWNrUG9zaXRpb25hbHMgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRLZXlzID0geWFyZ3MuZ2V0Q29tbWFuZEluc3RhbmNlKCkuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgdW5rbm93biA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKHNwZWNpYWxLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBvc2l0aW9uYWxNYXAsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHlhcmdzLl9nZXRQYXJzZUNvbnRleHQoKSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyhrZXksIGFsaWFzZXMpKSB7XG4gICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2hlY2tQb3NpdGlvbmFscyAmJlxuICAgICAgICAgICAgKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgICBjb21tYW5kS2V5cy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgaXNEZWZhdWx0Q29tbWFuZCkpIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZEtleXMuaW5kZXhPZignJyArIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gYXJndW1lbnQ6ICVzJywgJ1Vua25vd24gYXJndW1lbnRzOiAlcycsIHVua25vd24ubGVuZ3RoLCB1bmtub3duLmpvaW4oJywgJykpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQ29tbWFuZHMgPSBmdW5jdGlvbiB1bmtub3duQ29tbWFuZHMoYXJndikge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8IGNvbW1hbmRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZEtleXMuaW5kZXhPZignJyArIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gY29tbWFuZDogJXMnLCAnVW5rbm93biBjb21tYW5kczogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcgPSBmdW5jdGlvbiBpc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsaWFzZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0geWFyZ3MucGFyc2VkLm5ld0FsaWFzZXM7XG4gICAgICAgIGZvciAoY29uc3QgYSBvZiBba2V5LCAuLi5hbGlhc2VzW2tleV1dKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdBbGlhc2VzLCBhKSB8fFxuICAgICAgICAgICAgICAgICFuZXdBbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBzZWxmLmxpbWl0ZWRDaG9pY2VzID0gZnVuY3Rpb24gbGltaXRlZENob2ljZXMoYXJndikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBpbnZhbGlkID0ge307XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMob3B0aW9ucy5jaG9pY2VzKS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuY2hvaWNlcywga2V5KSkge1xuICAgICAgICAgICAgICAgIFtdLmNvbmNhdChhcmd2W2tleV0pLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaG9pY2VzW2tleV0uaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkW2tleV0gPSAoaW52YWxpZFtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGludmFsaWQpO1xuICAgICAgICBpZiAoIWludmFsaWRLZXlzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1zZyA9IF9fKCdJbnZhbGlkIHZhbHVlczonKTtcbiAgICAgICAgaW52YWxpZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgbXNnICs9IGBcXG4gICR7X18oJ0FyZ3VtZW50OiAlcywgR2l2ZW46ICVzLCBDaG9pY2VzOiAlcycsIGtleSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMoaW52YWxpZFtrZXldKSwgdXNhZ2Uuc3RyaW5naWZpZWRWYWx1ZXMob3B0aW9ucy5jaG9pY2VzW2tleV0pKX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgIH07XG4gICAgbGV0IGNoZWNrcyA9IFtdO1xuICAgIHNlbGYuY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhmLCBnbG9iYWwpIHtcbiAgICAgICAgY2hlY2tzLnB1c2goe1xuICAgICAgICAgICAgZnVuYzogZixcbiAgICAgICAgICAgIGdsb2JhbCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLmN1c3RvbUNoZWNrcyA9IGZ1bmN0aW9uIGN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBmOyAoZiA9IGNoZWNrc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jID0gZi5mdW5jO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoYXJndiwgYWxpYXNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogZXJyLCBlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdBcmd1bWVudCBjaGVjayBmYWlsZWQ6ICVzJywgZnVuYy50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwocmVzdWx0LnRvU3RyaW5nKCksIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBpbXBsaWVkID0ge307XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8bnVtYmVyfHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWFyZ3MuZ2xvYmFsKGtleSk7XG4gICAgICAgICAgICBpZiAoIWltcGxpZWRba2V5XSkge1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuaW1wbGllcyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHZhbHVlLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRJbXBsaWVkID0gZnVuY3Rpb24gZ2V0SW1wbGllZCgpIHtcbiAgICAgICAgcmV0dXJuIGltcGxpZWQ7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBrZXlFeGlzdHMoYXJndiwgdmFsKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgICAgICB2YWwgPSBpc05hTihudW0pID8gdmFsIDogbnVtO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3YuXy5sZW5ndGggPj0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5tYXRjaCgvXi0tbm8tLisvKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsLm1hdGNoKC9eLS1uby0oLispLylbMV07XG4gICAgICAgICAgICB2YWwgPSAhYXJndlt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gYXJndlt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHNlbGYuaW1wbGljYXRpb25zID0gZnVuY3Rpb24gaW1wbGljYXRpb25zKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgaW1wbHlGYWlsID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGltcGxpZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdLZXkgPSBrZXk7XG4gICAgICAgICAgICAoaW1wbGllZFtrZXldIHx8IFtdKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gb3JpZ0tleTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXlFeGlzdHMoYXJndiwga2V5KTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGtleUV4aXN0cyhhcmd2LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1wbHlGYWlsLnB1c2goYCAke29yaWdLZXl9IC0+ICR7b3JpZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGltcGx5RmFpbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBtc2cgPSBgJHtfXygnSW1wbGljYXRpb25zIGZhaWxlZDonKX1cXG5gO1xuICAgICAgICAgICAgaW1wbHlGYWlsLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChtc2cpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29uZmxpY3RpbmcgPSB7fTtcbiAgICBzZWxmLmNvbmZsaWN0cyA9IGZ1bmN0aW9uIGNvbmZsaWN0cyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8c3RyaW5nXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmxpY3RzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuY29uZmxpY3RzKGtleSwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRDb25mbGljdGluZyA9ICgpID0+IGNvbmZsaWN0aW5nO1xuICAgIHNlbGYuY29uZmxpY3RpbmcgPSBmdW5jdGlvbiBjb25mbGljdGluZ0ZuKGFyZ3YpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgYXJndltrZXldICE9PSB1bmRlZmluZWQgJiYgYXJndlt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnRzICVzIGFuZCAlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJywga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5yZWNvbW1lbmRDb21tYW5kcyA9IGZ1bmN0aW9uIHJlY29tbWVuZENvbW1hbmRzKGNtZCwgcG90ZW50aWFsQ29tbWFuZHMpIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMztcbiAgICAgICAgcG90ZW50aWFsQ29tbWFuZHMgPSBwb3RlbnRpYWxDb21tYW5kcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcbiAgICAgICAgbGV0IHJlY29tbWVuZGVkID0gbnVsbDtcbiAgICAgICAgbGV0IGJlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2FuZGlkYXRlOyAoY2FuZGlkYXRlID0gcG90ZW50aWFsQ29tbWFuZHNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZCA9IGxldmVuc2h0ZWluKGNtZCwgY2FuZGlkYXRlKTtcbiAgICAgICAgICAgIGlmIChkIDw9IHRocmVzaG9sZCAmJiBkIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgYmVzdERpc3RhbmNlID0gZDtcbiAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCA9IGNhbmRpZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjb21tZW5kZWQpXG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdEaWQgeW91IG1lYW4gJXM/JywgcmVjb21tZW5kZWQpKTtcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldChsb2NhbExvb2t1cCkge1xuICAgICAgICBpbXBsaWVkID0gb2JqRmlsdGVyKGltcGxpZWQsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY29uZmxpY3RpbmcgPSBvYmpGaWx0ZXIoY29uZmxpY3RpbmcsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgY2hlY2tzID0gY2hlY2tzLmZpbHRlcihjID0+IGMuZ2xvYmFsKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBpbXBsaWVkLFxuICAgICAgICAgICAgY2hlY2tzLFxuICAgICAgICAgICAgY29uZmxpY3RpbmcsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7IGltcGxpZWQsIGNoZWNrcywgY29uZmxpY3RpbmcgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cblxubGV0IHNoaW0kMTtcbmZ1bmN0aW9uIFlhcmdzV2l0aFNoaW0oX3NoaW0pIHtcbiAgICBzaGltJDEgPSBfc2hpbTtcbiAgICByZXR1cm4gWWFyZ3M7XG59XG5mdW5jdGlvbiBZYXJncyhwcm9jZXNzQXJncyA9IFtdLCBjd2QgPSBzaGltJDEucHJvY2Vzcy5jd2QoKSwgcGFyZW50UmVxdWlyZSkge1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBsZXQgY29tbWFuZCQxO1xuICAgIGxldCBjb21wbGV0aW9uJDEgPSBudWxsO1xuICAgIGxldCBncm91cHMgPSB7fTtcbiAgICBjb25zdCBnbG9iYWxNaWRkbGV3YXJlID0gW107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIGNvbnN0IHByZXNlcnZlZEdyb3VwcyA9IHt9O1xuICAgIGxldCB1c2FnZSQxO1xuICAgIGxldCB2YWxpZGF0aW9uJDE7XG4gICAgbGV0IGhhbmRsZXJGaW5pc2hDb21tYW5kID0gbnVsbDtcbiAgICBjb25zdCB5MThuID0gc2hpbSQxLnkxOG47XG4gICAgc2VsZi5taWRkbGV3YXJlID0gZ2xvYmFsTWlkZGxld2FyZUZhY3RvcnkoZ2xvYmFsTWlkZGxld2FyZSwgc2VsZik7XG4gICAgc2VsZi5zY3JpcHROYW1lID0gZnVuY3Rpb24gKHNjcmlwdE5hbWUpIHtcbiAgICAgICAgc2VsZi5jdXN0b21TY3JpcHROYW1lID0gdHJ1ZTtcbiAgICAgICAgc2VsZi4kMCA9IHNjcmlwdE5hbWU7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGRlZmF1bHQkMDtcbiAgICBpZiAoL1xcYihub2RlfGlvanN8ZWxlY3Ryb24pKFxcLmV4ZSk/JC8udGVzdChzaGltJDEucHJvY2Vzcy5hcmd2KClbMF0pKSB7XG4gICAgICAgIGRlZmF1bHQkMCA9IHNoaW0kMS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgxLCAyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRlZmF1bHQkMCA9IHNoaW0kMS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgwLCAxKTtcbiAgICB9XG4gICAgc2VsZi4kMCA9IGRlZmF1bHQkMFxuICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICBjb25zdCBiID0gcmViYXNlKGN3ZCwgeCk7XG4gICAgICAgIHJldHVybiB4Lm1hdGNoKC9eKFxcL3woW2EtekEtWl06KT9cXFxcKS8pICYmIGIubGVuZ3RoIDwgeC5sZW5ndGggPyBiIDogeDtcbiAgICB9KVxuICAgICAgICAuam9pbignICcpXG4gICAgICAgIC50cmltKCk7XG4gICAgaWYgKHNoaW0kMS5nZXRFbnYoJ18nKSAmJiBzaGltJDEuZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSA9PT0gc2hpbSQxLmdldEVudignXycpKSB7XG4gICAgICAgIHNlbGYuJDAgPSBzaGltJDFcbiAgICAgICAgICAgIC5nZXRFbnYoJ18nKVxuICAgICAgICAgICAgLnJlcGxhY2UoYCR7c2hpbSQxLnBhdGguZGlybmFtZShzaGltJDEucHJvY2Vzcy5leGVjUGF0aCgpKX0vYCwgJycpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0geyByZXNldHM6IC0xLCBjb21tYW5kczogW10sIGZ1bGxDb21tYW5kczogW10sIGZpbGVzOiBbXSB9O1xuICAgIHNlbGYuZ2V0Q29udGV4dCA9ICgpID0+IGNvbnRleHQ7XG4gICAgbGV0IGhhc091dHB1dCA9IGZhbHNlO1xuICAgIGxldCBleGl0RXJyb3IgPSBudWxsO1xuICAgIHNlbGYuZXhpdCA9IChjb2RlLCBlcnIpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgZXhpdEVycm9yID0gZXJyO1xuICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICBzaGltJDEucHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25Db21tYW5kID0gbnVsbDtcbiAgICBzZWxmLmNvbXBsZXRpb24gPSBmdW5jdGlvbiAoY21kLCBkZXNjLCBmbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nfGJvb2xlYW58ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBbY21kLCBkZXNjLCBmbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nO1xuICAgICAgICBpZiAoIWRlc2MgJiYgZGVzYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlc2MgPSAnZ2VuZXJhdGUgY29tcGxldGlvbiBzY3JpcHQnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuY29tbWFuZChjb21wbGV0aW9uQ29tbWFuZCwgZGVzYyk7XG4gICAgICAgIGlmIChmbilcbiAgICAgICAgICAgIGNvbXBsZXRpb24kMS5yZWdpc3RlckZ1bmN0aW9uKGZuKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBzZWxmLnJlc2V0T3B0aW9ucyA9IHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldE9wdGlvbnMoYWxpYXNlcyA9IHt9KSB7XG4gICAgICAgIGNvbnRleHQucmVzZXRzKys7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCB0bXBPcHRpb25zID0ge307XG4gICAgICAgIHRtcE9wdGlvbnMubG9jYWwgPSBvcHRpb25zLmxvY2FsID8gb3B0aW9ucy5sb2NhbCA6IFtdO1xuICAgICAgICB0bXBPcHRpb25zLmNvbmZpZ09iamVjdHMgPSBvcHRpb25zLmNvbmZpZ09iamVjdHNcbiAgICAgICAgICAgID8gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBjb25zdCBsb2NhbExvb2t1cCA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsLmZvckVhY2gobCA9PiB7XG4gICAgICAgICAgICBsb2NhbExvb2t1cFtsXSA9IHRydWU7XG4gICAgICAgICAgICAoYWxpYXNlc1tsXSB8fCBbXSkuZm9yRWFjaChhID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbExvb2t1cFthXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocHJlc2VydmVkR3JvdXBzLCBPYmplY3Qua2V5cyhncm91cHMpLnJlZHVjZSgoYWNjLCBncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBncm91cHNbZ3JvdXBOYW1lXS5maWx0ZXIoa2V5ID0+ICEoa2V5IGluIGxvY2FsTG9va3VwKSk7XG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBrZXlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgZ3JvdXBzID0ge307XG4gICAgICAgIGNvbnN0IGFycmF5T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICdhcnJheScsXG4gICAgICAgICAgICAnYm9vbGVhbicsXG4gICAgICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgICAgICdza2lwVmFsaWRhdGlvbicsXG4gICAgICAgICAgICAnY291bnQnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnbnVtYmVyJyxcbiAgICAgICAgICAgICdoaWRkZW5PcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgb2JqZWN0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICduYXJnJyxcbiAgICAgICAgICAgICdrZXknLFxuICAgICAgICAgICAgJ2FsaWFzJyxcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnZGVtYW5kZWRPcHRpb25zJyxcbiAgICAgICAgICAgICdkZW1hbmRlZENvbW1hbmRzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ2RlcHJlY2F0ZWRPcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgYXJyYXlPcHRpb25zLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICB0bXBPcHRpb25zW2tdID0gKG9wdGlvbnNba10gfHwgW10pLmZpbHRlcigoaykgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdE9wdGlvbnMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IG9iakZpbHRlcihvcHRpb25zW2tdLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0bXBPcHRpb25zLmVudlByZWZpeCA9IG9wdGlvbnMuZW52UHJlZml4O1xuICAgICAgICBvcHRpb25zID0gdG1wT3B0aW9ucztcbiAgICAgICAgdXNhZ2UkMSA9IHVzYWdlJDEgPyB1c2FnZSQxLnJlc2V0KGxvY2FsTG9va3VwKSA6IHVzYWdlKHNlbGYsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIHZhbGlkYXRpb24kMSA9IHZhbGlkYXRpb24kMVxuICAgICAgICAgICAgPyB2YWxpZGF0aW9uJDEucmVzZXQobG9jYWxMb29rdXApXG4gICAgICAgICAgICA6IHZhbGlkYXRpb24oc2VsZiwgdXNhZ2UkMSwgeTE4biwgc2hpbSQxKTtcbiAgICAgICAgY29tbWFuZCQxID0gY29tbWFuZCQxXG4gICAgICAgICAgICA/IGNvbW1hbmQkMS5yZXNldCgpXG4gICAgICAgICAgICA6IGNvbW1hbmQoc2VsZiwgdXNhZ2UkMSwgdmFsaWRhdGlvbiQxLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltJDEpO1xuICAgICAgICBpZiAoIWNvbXBsZXRpb24kMSlcbiAgICAgICAgICAgIGNvbXBsZXRpb24kMSA9IGNvbXBsZXRpb24oc2VsZiwgdXNhZ2UkMSwgY29tbWFuZCQxLCBzaGltJDEpO1xuICAgICAgICBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgICAgIG91dHB1dCA9ICcnO1xuICAgICAgICBleGl0RXJyb3IgPSBudWxsO1xuICAgICAgICBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5wYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogb3B0aW9ucy5jb25maWdPYmplY3RzLnNsaWNlKDApLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3MsXG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBzdHJpY3QsXG4gICAgICAgICAgICBzdHJpY3RDb21tYW5kcyxcbiAgICAgICAgICAgIHN0cmljdE9wdGlvbnMsXG4gICAgICAgICAgICBjb21wbGV0aW9uQ29tbWFuZCxcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgIGV4aXRFcnJvcixcbiAgICAgICAgICAgIGhhc091dHB1dCxcbiAgICAgICAgICAgIHBhcnNlZDogc2VsZi5wYXJzZWQsXG4gICAgICAgICAgICBwYXJzZUZuLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0LFxuICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgICAgICB1c2FnZSQxLmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuZnJlZXplKCk7XG4gICAgICAgIGNvbW1hbmQkMS5mcmVlemUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICBsZXQgY29uZmlnT2JqZWN0cztcbiAgICAgICAgKHtcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjb25maWdPYmplY3RzLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3MsXG4gICAgICAgICAgICBncm91cHMsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBwYXJzZUZuLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0LFxuICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSBjb25maWdPYmplY3RzO1xuICAgICAgICB1c2FnZSQxLnVuZnJlZXplKCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS51bmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEudW5mcmVlemUoKTtcbiAgICB9XG4gICAgc2VsZi5ib29sZWFuID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYm9vbGVhbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuYXJyYXkgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdhcnJheScsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubnVtYmVyID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbnVtYmVyJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5ub3JtYWxpemUgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdub3JtYWxpemUnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvdW50ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnY291bnQnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnN0cmluZyA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ3N0cmluZycsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZXNBcmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nfG9iamVjdD4gW251bWJlcl0nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnICYmIG9wdGlvbnMubmFyZ1trZXlzXSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5yZXF1aXJlc0FyZywgJ25hcmcnLCBrZXlzLCBOYU4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5za2lwVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ3NraXBWYWxpZGF0aW9uJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkodHlwZSwga2V5cykge1xuICAgICAgICBrZXlzID0gW10uY29uY2F0KGtleXMpO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGtleSA9IHNhbml0aXplS2V5KGtleSk7XG4gICAgICAgICAgICBvcHRpb25zW3R5cGVdLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNlbGYubmFyZ3MgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdHxhcnJheT4gW251bWJlcl0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5uYXJncywgJ25hcmcnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNob2ljZXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoc2VsZi5jaG9pY2VzLCAnY2hvaWNlcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuYWxpYXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoc2VsZi5hbGlhcywgJ2FsaWFzJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZWZhdWx0ID0gc2VsZi5kZWZhdWx0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFsqXSBbc3RyaW5nXScsIFtrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgc2hpbSQxKTtcbiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gdXNhZ2UkMS5mdW5jdGlvbkRlc2NyaXB0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShzZWxmLmRlZmF1bHQsICdkZWZhdWx0Jywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZXNjcmliZSA9IGZ1bmN0aW9uIChrZXksIGRlc2MpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleSwgZGVzY10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzZXRLZXkoa2V5LCB0cnVlKTtcbiAgICAgICAgdXNhZ2UkMS5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNldEtleShrZXksIHNldCkge1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2V0S2V5LCAna2V5Jywga2V5LCBzZXQpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVtYW5kT3B0aW9uKGtleXMsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBba2V5cywgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShzZWxmLmRlbWFuZE9wdGlvbiwgJ2RlbWFuZGVkT3B0aW9ucycsIGtleXMsIG1zZyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICBzZWxmLmRlbWFuZE9wdGlvbiA9IGRlbWFuZE9wdGlvbjtcbiAgICBzZWxmLmNvZXJjZSA9IGZ1bmN0aW9uIChrZXlzLCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW2Z1bmN0aW9uXScsIFtrZXlzLCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5jb2VyY2UsICdjb2VyY2UnLCBrZXlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUsICh0eXBlLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zW3R5cGVdW2tleV0gPSAob3B0aW9uc1t0eXBlXVtrZXldIHx8IFtdKS5jb25jYXQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCBzaW5nbGVLZXlIYW5kbGVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKChrZXkpID0+IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKShrZXkpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygb2JqZWN0S2V5cyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRlcihrLCBrZXlba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2luZ2xlS2V5SGFuZGxlcih0eXBlLCBzYW5pdGl6ZUtleShrZXkpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKVxuICAgICAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KG9wdGlvbktleSkge1xuICAgICAgICBvYmplY3RLZXlzKG9wdGlvbnMpLmZvckVhY2goKGhpbnRLZXkpID0+IHtcbiAgICAgICAgICAgIGlmICgoKGtleSkgPT4ga2V5ID09PSAnY29uZmlnT2JqZWN0cycpKGhpbnRLZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGhpbnQgPSBvcHRpb25zW2hpbnRLZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGludCkpIHtcbiAgICAgICAgICAgICAgICBpZiAofmhpbnQuaW5kZXhPZihvcHRpb25LZXkpKVxuICAgICAgICAgICAgICAgICAgICBoaW50LnNwbGljZShoaW50LmluZGV4T2Yob3B0aW9uS2V5KSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaGludCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGludFtvcHRpb25LZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHVzYWdlJDEuZ2V0RGVzY3JpcHRpb25zKClbb3B0aW9uS2V5XTtcbiAgICB9XG4gICAgc2VsZi5jb25maWcgPSBmdW5jdGlvbiBjb25maWcoa2V5ID0gJ2NvbmZpZycsIG1zZywgcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbb2JqZWN0fHN0cmluZ10gW3N0cmluZ3xmdW5jdGlvbl0gW2Z1bmN0aW9uXScsIFtrZXksIG1zZywgcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAga2V5ID0gYXBwbHlFeHRlbmRzKGtleSwgY3dkLCBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnZGVlcC1tZXJnZS1jb25maWcnXSB8fCBmYWxzZSwgc2hpbSQxKTtcbiAgICAgICAgICAgIG9wdGlvbnMuY29uZmlnT2JqZWN0cyA9IChvcHRpb25zLmNvbmZpZ09iamVjdHMgfHwgW10pLmNvbmNhdChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnUGF0aCB0byBKU09OIGNvbmZpZyBmaWxlJykpO1xuICAgICAgICAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5IDogW2tleV0pLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ1trXSA9IHBhcnNlRm4gfHwgdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5leGFtcGxlID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBjbWQuZm9yRWFjaChleGFtcGxlUGFyYW1zID0+IHNlbGYuZXhhbXBsZSguLi5leGFtcGxlUGFyYW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLmV4YW1wbGUoY21kLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiAoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheXxvYmplY3Q+IFtzdHJpbmd8Ym9vbGVhbl0gW2Z1bmN0aW9ufG9iamVjdF0gW2Z1bmN0aW9uXSBbYXJyYXldIFtib29sZWFufHN0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tbWFuZCQxLmFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29tbWFuZERpciA9IGZ1bmN0aW9uIChkaXIsIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW29iamVjdF0nLCBbZGlyLCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlcSA9IHBhcmVudFJlcXVpcmUgfHwgc2hpbSQxLnJlcXVpcmU7XG4gICAgICAgIGNvbW1hbmQkMS5hZGREaXJlY3RvcnkoZGlyLCBzZWxmLmdldENvbnRleHQoKSwgcmVxLCBzaGltJDEuZ2V0Q2FsbGVyRmlsZSgpLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmRlbWFuZCA9IHNlbGYucmVxdWlyZWQgPSBzZWxmLnJlcXVpcmUgPSBmdW5jdGlvbiBkZW1hbmQoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF4KSkge1xuICAgICAgICAgICAgbWF4LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgc2hpbSQxKTtcbiAgICAgICAgICAgIHNlbGYuZGVtYW5kQ29tbWFuZChrZXlzLCBtYXgsIG1zZywgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cgPT09IHRydWUgfHwgdHlwZW9mIG1zZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBkZW1hbmRPcHRpb24oa2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmRlbWFuZENvbW1hbmQgPSBmdW5jdGlvbiBkZW1hbmRDb21tYW5kKG1pbiA9IDEsIG1heCwgbWluTXNnLCBtYXhNc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW251bWJlcl0gW251bWJlcnxzdHJpbmddIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdJywgW21pbiwgbWF4LCBtaW5Nc2csIG1heE1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1pbk1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZ2xvYmFsKCdfJywgZmFsc2UpO1xuICAgICAgICBvcHRpb25zLmRlbWFuZGVkQ29tbWFuZHMuXyA9IHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIG1pbk1zZyxcbiAgICAgICAgICAgIG1heE1zZyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlbWFuZGVkT3B0aW9ucztcbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVtYW5kZWRDb21tYW5kcyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlbWFuZGVkQ29tbWFuZHM7XG4gICAgfTtcbiAgICBzZWxmLmRlcHJlY2F0ZU9wdGlvbiA9IGZ1bmN0aW9uIGRlcHJlY2F0ZU9wdGlvbihvcHRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ3xib29sZWFuXScsIFtvcHRpb24sIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgb3B0aW9ucy5kZXByZWNhdGVkT3B0aW9uc1tvcHRpb25dID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERlcHJlY2F0ZWRPcHRpb25zID0gKCkgPT4ge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmltcGxpZXMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW251bWJlcnxzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmltcGxpZXMoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiAoa2V5MSwga2V5Mikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW3N0cmluZ3xhcnJheV0nLCBba2V5MSwga2V5Ml0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RzKGtleTEsIGtleTIpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYudXNhZ2UgPSBmdW5jdGlvbiAobXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG51bGx8dW5kZWZpbmVkPiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbbXNnLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCBudWxsLCBzaGltJDEpO1xuICAgICAgICAgICAgaWYgKChtc2cgfHwgJycpLm1hdGNoKC9eXFwkMCggfCQpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21tYW5kKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnVzYWdlKCkgZGVzY3JpcHRpb24gbXVzdCBzdGFydCB3aXRoICQwIGlmIGJlaW5nIHVzZWQgYXMgYWxpYXMgZm9yIC5jb21tYW5kKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVzYWdlJDEudXNhZ2UobXNnKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmVwaWxvZ3VlID0gc2VsZi5lcGlsb2cgPSBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+JywgW21zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLmVwaWxvZyhtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZmFpbCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLmZhaWxGbihmKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm9uRmluaXNoQ29tbWFuZCA9IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IGY7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCA9ICgpID0+IGhhbmRsZXJGaW5pc2hDb21tYW5kO1xuICAgIHNlbGYuY2hlY2sgPSBmdW5jdGlvbiAoZiwgX2dsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+IFtib29sZWFuXScsIFtmLCBfZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5jaGVjayhmLCBfZ2xvYmFsICE9PSBmYWxzZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nbG9iYWwgPSBmdW5jdGlvbiBnbG9iYWwoZ2xvYmFscywgZ2xvYmFsKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtib29sZWFuXScsIFtnbG9iYWxzLCBnbG9iYWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZ2xvYmFscyA9IFtdLmNvbmNhdChnbG9iYWxzKTtcbiAgICAgICAgaWYgKGdsb2JhbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubG9jYWwgPSBvcHRpb25zLmxvY2FsLmZpbHRlcihsID0+IGdsb2JhbHMuaW5kZXhPZihsKSA9PT0gLTEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFscy5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvY2FsLmluZGV4T2YoZykgPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvY2FsLnB1c2goZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYucGtnQ29uZiA9IGZ1bmN0aW9uIHBrZ0NvbmYoa2V5LCByb290UGF0aCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbc3RyaW5nXScsIFtrZXksIHJvb3RQYXRoXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBjb25mID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAocm9vdFBhdGggfHwgY3dkKTtcbiAgICAgICAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbmYgPSBhcHBseUV4dGVuZHMob2JqW2tleV0sIHJvb3RQYXRoIHx8IGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoY29uZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBwa2dzID0ge307XG4gICAgZnVuY3Rpb24gcGtnVXAocm9vdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbnBhdGggPSByb290UGF0aCB8fCAnKic7XG4gICAgICAgIGlmIChwa2dzW25wYXRoXSlcbiAgICAgICAgICAgIHJldHVybiBwa2dzW25wYXRoXTtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGlyID0gcm9vdFBhdGggfHwgc2hpbSQxLm1haW5GaWxlbmFtZTtcbiAgICAgICAgICAgIGlmICghcm9vdFBhdGggJiYgc2hpbSQxLnBhdGguZXh0bmFtZShzdGFydERpcikpIHtcbiAgICAgICAgICAgICAgICBzdGFydERpciA9IHNoaW0kMS5wYXRoLmRpcm5hbWUoc3RhcnREaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGtnSnNvblBhdGggPSBzaGltJDEuZmluZFVwKHN0YXJ0RGlyLCAoZGlyLCBuYW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lcy5pbmNsdWRlcygncGFja2FnZS5qc29uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdwYWNrYWdlLmpzb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHBrZ0pzb25QYXRoLCB1bmRlZmluZWQsIHNoaW0kMSk7XG4gICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKHNoaW0kMS5yZWFkRmlsZVN5bmMocGtnSnNvblBhdGgsICd1dGY4JykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfbm9vcCkgeyB9XG4gICAgICAgIHBrZ3NbbnBhdGhdID0gb2JqIHx8IHt9O1xuICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgfVxuICAgIGxldCBwYXJzZUZuID0gbnVsbDtcbiAgICBsZXQgcGFyc2VDb250ZXh0ID0gbnVsbDtcbiAgICBzZWxmLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGFycmF5XSBbZnVuY3Rpb258Ym9vbGVhbnxvYmplY3RdIFtmdW5jdGlvbl0nLCBbYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBmcmVlemUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgYXJndiA9IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgICAgICBjb25zdCB0bXBQYXJzZWQgPSBzZWxmLnBhcnNlZDtcbiAgICAgICAgICAgIHVuZnJlZXplKCk7XG4gICAgICAgICAgICBzZWxmLnBhcnNlZCA9IHRtcFBhcnNlZDtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcGFyc2VDb250ZXh0ID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gX3BhcnNlRm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzaG9ydENpcmN1aXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBzaG9ydENpcmN1aXQ7XG4gICAgICAgICAgICBzaG9ydENpcmN1aXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNob3J0Q2lyY3VpdClcbiAgICAgICAgICAgIHByb2Nlc3NBcmdzID0gYXJncztcbiAgICAgICAgaWYgKHBhcnNlRm4pXG4gICAgICAgICAgICBleGl0UHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBzZWxmLl9wYXJzZUFyZ3MoYXJncywgISFzaG9ydENpcmN1aXQpO1xuICAgICAgICBjb21wbGV0aW9uJDEuc2V0UGFyc2VkKHNlbGYucGFyc2VkKTtcbiAgICAgICAgaWYgKHBhcnNlRm4pXG4gICAgICAgICAgICBwYXJzZUZuKGV4aXRFcnJvciwgcGFyc2VkLCBvdXRwdXQpO1xuICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH07XG4gICAgc2VsZi5fZ2V0UGFyc2VDb250ZXh0ID0gKCkgPT4gcGFyc2VDb250ZXh0IHx8IHt9O1xuICAgIHNlbGYuX2hhc1BhcnNlQ2FsbGJhY2sgPSAoKSA9PiAhIXBhcnNlRm47XG4gICAgc2VsZi5vcHRpb24gPSBzZWxmLm9wdGlvbnMgPSBmdW5jdGlvbiBvcHRpb24oa2V5LCBvcHQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtvYmplY3RdJywgW2tleSwgb3B0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYub3B0aW9ucyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBvcHQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICBzZWxmLmFsaWFzKGtleSwgb3B0LmFsaWFzKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZSA9IG9wdC5kZXByZWNhdGUgfHwgb3B0LmRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICBpZiAoZGVwcmVjYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXByZWNhdGVPcHRpb24oa2V5LCBkZXByZWNhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gb3B0LmRlbWFuZCB8fCBvcHQucmVxdWlyZWQgfHwgb3B0LnJlcXVpcmU7XG4gICAgICAgICAgICBpZiAoZGVtYW5kKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmQoa2V5LCBkZW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5kZW1hbmRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlbWFuZE9wdGlvbihrZXksIHR5cGVvZiBvcHQuZGVtYW5kT3B0aW9uID09PSAnc3RyaW5nJyA/IG9wdC5kZW1hbmRPcHRpb24gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25mbGljdHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrZXksIG9wdC5jb25mbGljdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBvcHQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmRlZmF1bHQoa2V5LCBvcHQuZGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmltcGxpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW1wbGllcyhrZXksIG9wdC5pbXBsaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubmFyZ3Moa2V5LCBvcHQubmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb25maWcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZyhrZXksIG9wdC5jb25maWdQYXJzZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5vcm1hbGl6ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jaG9pY2VzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaG9pY2VzKGtleSwgb3B0LmNob2ljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb2VyY2UpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvZXJjZShrZXksIG9wdC5jb2VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ncm91cCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ3JvdXAoa2V5LCBvcHQuZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5ib29sZWFuIHx8IG9wdC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb2xlYW4ob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYXJyYXkgfHwgb3B0LnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFycmF5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hcnJheShvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5udW1iZXIgfHwgb3B0LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5udW1iZXIoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLm51bWJlcihvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5zdHJpbmcgfHwgb3B0LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmluZyhvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5jb3VudCB8fCBvcHQudHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgICAgICAgICAgIHNlbGYuY291bnQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0Lmdsb2JhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nbG9iYWwoa2V5LCBvcHQuZ2xvYmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IG9wdC5kZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5za2lwVmFsaWRhdGlvbihrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzYyA9IG9wdC5kZXNjcmliZSB8fCBvcHQuZGVzY3JpcHRpb24gfHwgb3B0LmRlc2M7XG4gICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzYyk7XG4gICAgICAgICAgICBpZiAob3B0LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHNlbGYuaGlkZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5yZXF1aXJlc0FyZykge1xuICAgICAgICAgICAgICAgIHNlbGYucmVxdWlyZXNBcmcoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0T3B0aW9ucyA9ICgpID0+IG9wdGlvbnM7XG4gICAgc2VsZi5wb3NpdGlvbmFsID0gZnVuY3Rpb24gKGtleSwgb3B0cykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiA8b2JqZWN0PicsIFtrZXksIG9wdHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGNvbnRleHQucmVzZXRzID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKFwiLnBvc2l0aW9uYWwoKSBjYW4gb25seSBiZSBjYWxsZWQgaW4gYSBjb21tYW5kJ3MgYnVpbGRlciBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdXBwb3J0ZWRPcHRzID0gW1xuICAgICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2RlZmF1bHREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnaW1wbGllcycsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgICAgICdjb25mbGljdHMnLFxuICAgICAgICAgICAgJ2NvZXJjZScsXG4gICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAnZGVzY3JpYmUnLFxuICAgICAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgIF07XG4gICAgICAgIG9wdHMgPSBvYmpGaWx0ZXIob3B0cywgKGssIHYpID0+IHtcbiAgICAgICAgICAgIGxldCBhY2NlcHQgPSBzdXBwb3J0ZWRPcHRzLmluZGV4T2YoaykgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGsgPT09ICd0eXBlJyAmJiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluZGV4T2YodikgPT09IC0xKVxuICAgICAgICAgICAgICAgIGFjY2VwdCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGZ1bGxDb21tYW5kID0gY29udGV4dC5mdWxsQ29tbWFuZHNbY29udGV4dC5mdWxsQ29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IGZ1bGxDb21tYW5kXG4gICAgICAgICAgICA/IGNvbW1hbmQkMS5jbWRUb1BhcnNlT3B0aW9ucyhmdWxsQ29tbWFuZClcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIG9iamVjdEtleXMocGFyc2VPcHRpb25zKS5mb3JFYWNoKHBrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlT3B0aW9uID0gcGFyc2VPcHRpb25zW3BrXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlT3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZU9wdGlvbi5pbmRleE9mKGtleSkgIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb25ba2V5XSAmJiAhKHBrIGluIG9wdHMpKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHBhcnNlT3B0aW9uW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLmdyb3VwKGtleSwgdXNhZ2UkMS5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpO1xuICAgICAgICByZXR1cm4gc2VsZi5vcHRpb24oa2V5LCBvcHRzKTtcbiAgICB9O1xuICAgIHNlbGYuZ3JvdXAgPSBmdW5jdGlvbiBncm91cChvcHRzLCBncm91cE5hbWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gPHN0cmluZz4nLCBbb3B0cywgZ3JvdXBOYW1lXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0gfHwgZ3JvdXBzW2dyb3VwTmFtZV07XG4gICAgICAgIGlmIChwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICAgICAgZ3JvdXBzW2dyb3VwTmFtZV0gPSAoZXhpc3RpbmcgfHwgW10pLmNvbmNhdChvcHRzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuW2tleV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIChzZWVuW2tleV0gPSB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRHcm91cHMgPSAoKSA9PiBPYmplY3QuYXNzaWduKHt9LCBncm91cHMsIHByZXNlcnZlZEdyb3Vwcyk7XG4gICAgc2VsZi5lbnYgPSBmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0nLCBbcHJlZml4XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKVxuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuZW52UHJlZml4O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRpb25zLmVudlByZWZpeCA9IHByZWZpeCB8fCAnJztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLndyYXAgPSBmdW5jdGlvbiAoY29scykge1xuICAgICAgICBhcmdzZXJ0KCc8bnVtYmVyfG51bGx8dW5kZWZpbmVkPicsIFtjb2xzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEud3JhcChjb2xzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgc3RyaWN0ID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3QgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzdHJpY3QgPSBlbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFN0cmljdCA9ICgpID0+IHN0cmljdDtcbiAgICBsZXQgc3RyaWN0Q29tbWFuZHMgPSBmYWxzZTtcbiAgICBzZWxmLnN0cmljdENvbW1hbmRzID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0Q29tbWFuZHMgPSBlbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFN0cmljdENvbW1hbmRzID0gKCkgPT4gc3RyaWN0Q29tbWFuZHM7XG4gICAgbGV0IHN0cmljdE9wdGlvbnMgPSBmYWxzZTtcbiAgICBzZWxmLnN0cmljdE9wdGlvbnMgPSBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBzdHJpY3RPcHRpb25zID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RPcHRpb25zID0gKCkgPT4gc3RyaWN0T3B0aW9ucztcbiAgICBsZXQgcGFyc2VyQ29uZmlnID0ge307XG4gICAgc2VsZi5wYXJzZXJDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gcGFyc2VyQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbY29uZmlnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBhcnNlckNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24gPSAoKSA9PiBwYXJzZXJDb25maWc7XG4gICAgc2VsZi5zaG93SGVscCA9IGZ1bmN0aW9uIChsZXZlbCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGZ1bmN0aW9uXScsIFtsZXZlbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoIXNlbGYucGFyc2VkKVxuICAgICAgICAgICAgc2VsZi5fcGFyc2VBcmdzKHByb2Nlc3NBcmdzKTtcbiAgICAgICAgaWYgKGNvbW1hbmQkMS5oYXNEZWZhdWx0Q29tbWFuZCgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICAgICAgY29tbWFuZCQxLnJ1bkRlZmF1bHRCdWlsZGVyT24oc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgdXNhZ2UkMS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHZlcnNpb25PcHQgPSBudWxsO1xuICAgIHNlbGYudmVyc2lvbiA9IGZ1bmN0aW9uIHZlcnNpb24ob3B0LCBtc2csIHZlcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmVyc2lvbk9wdCA9ICd2ZXJzaW9uJztcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXSBbc3RyaW5nXScsIFtvcHQsIG1zZywgdmVyXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh2ZXJzaW9uT3B0KSB7XG4gICAgICAgICAgICBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdCh2ZXJzaW9uT3B0KTtcbiAgICAgICAgICAgIHVzYWdlJDEudmVyc2lvbih1bmRlZmluZWQpO1xuICAgICAgICAgICAgdmVyc2lvbk9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZlciA9IGd1ZXNzVmVyc2lvbigpO1xuICAgICAgICAgICAgb3B0ID0gZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlciA9IG9wdDtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHZlciA9IG1zZztcbiAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2ZXJzaW9uT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgbXNnID0gbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IHZlcnNpb24gbnVtYmVyJyk7XG4gICAgICAgIHVzYWdlJDEudmVyc2lvbih2ZXIgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgc2VsZi5ib29sZWFuKHZlcnNpb25PcHQpO1xuICAgICAgICBzZWxmLmRlc2NyaWJlKHZlcnNpb25PcHQsIG1zZyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZ3Vlc3NWZXJzaW9uKCkge1xuICAgICAgICBjb25zdCBvYmogPSBwa2dVcCgpO1xuICAgICAgICByZXR1cm4gb2JqLnZlcnNpb24gfHwgJ3Vua25vd24nO1xuICAgIH1cbiAgICBsZXQgaGVscE9wdCA9IG51bGw7XG4gICAgc2VsZi5hZGRIZWxwT3B0ID0gc2VsZi5oZWxwID0gZnVuY3Rpb24gYWRkSGVscE9wdChvcHQsIG1zZykge1xuICAgICAgICBjb25zdCBkZWZhdWx0SGVscE9wdCA9ICdoZWxwJztcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoaGVscE9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QoaGVscE9wdCk7XG4gICAgICAgICAgICBoZWxwT3B0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgaGVscE9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdEhlbHBPcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihoZWxwT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShoZWxwT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGVscCcpKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0U2hvd0hpZGRlbk9wdCA9ICdzaG93LWhpZGRlbic7XG4gICAgb3B0aW9ucy5zaG93SGlkZGVuT3B0ID0gZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgc2VsZi5hZGRTaG93SGlkZGVuT3B0ID0gc2VsZi5zaG93SGlkZGVuID0gZnVuY3Rpb24gYWRkU2hvd0hpZGRlbk9wdChvcHQsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dIFtzdHJpbmddJywgW29wdCwgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAob3B0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG93SGlkZGVuT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0U2hvd0hpZGRlbk9wdDtcbiAgICAgICAgc2VsZi5ib29sZWFuKHNob3dIaWRkZW5PcHQpO1xuICAgICAgICBzZWxmLmRlc2NyaWJlKHNob3dIaWRkZW5PcHQsIG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyBoaWRkZW4gb3B0aW9ucycpKTtcbiAgICAgICAgb3B0aW9ucy5zaG93SGlkZGVuT3B0ID0gc2hvd0hpZGRlbk9wdDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmhpZGUgPSBmdW5jdGlvbiBoaWRlKGtleSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFtrZXldLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgb3B0aW9ucy5oaWRkZW5PcHRpb25zLnB1c2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnNob3dIZWxwT25GYWlsID0gZnVuY3Rpb24gc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbnxzdHJpbmddIFtzdHJpbmddJywgW2VuYWJsZWQsIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5zaG93SGVscE9uRmFpbChlbmFibGVkLCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZXhpdFByb2Nlc3MgPSB0cnVlO1xuICAgIHNlbGYuZXhpdFByb2Nlc3MgPSBmdW5jdGlvbiAoZW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZXhpdFByb2Nlc3MgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0RXhpdFByb2Nlc3MgPSAoKSA9PiBleGl0UHJvY2VzcztcbiAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gKCQwLCBjbWQpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ10nLCBbJDAsIGNtZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICAkMCA9ICQwIHx8IHNlbGYuJDA7XG4gICAgICAgIF9sb2dnZXIubG9nKGNvbXBsZXRpb24kMS5nZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCB8fCBjb21wbGV0aW9uQ29tbWFuZCB8fCAnY29tcGxldGlvbicpKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiAoYXJncywgZG9uZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXk+IDxmdW5jdGlvbj4nLCBbYXJncywgZG9uZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKTtcbiAgICB9O1xuICAgIHNlbGYubG9jYWxlID0gZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXScsIFtsb2NhbGVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICByZXR1cm4geTE4bi5nZXRMb2NhbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi5zZXRMb2NhbGUobG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVwZGF0ZVN0cmluZ3MgPSBzZWxmLnVwZGF0ZUxvY2FsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbb2JqXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGRldGVjdExvY2FsZSA9IGZhbHNlO1xuICAgICAgICB5MThuLnVwZGF0ZUxvY2FsZShvYmopO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZXRlY3RMb2NhbGUgPSB0cnVlO1xuICAgIHNlbGYuZGV0ZWN0TG9jYWxlID0gZnVuY3Rpb24gKGRldGVjdCkge1xuICAgICAgICBhcmdzZXJ0KCc8Ym9vbGVhbj4nLCBbZGV0ZWN0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGRldGVjdExvY2FsZSA9IGRldGVjdDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldERldGVjdExvY2FsZSA9ICgpID0+IGRldGVjdExvY2FsZTtcbiAgICBjb25zdCBfbG9nZ2VyID0ge1xuICAgICAgICBsb2coLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgICAgICAgICBoYXNPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcXG4nO1xuICAgICAgICAgICAgb3V0cHV0ICs9IGFyZ3Muam9pbignICcpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX2hhc1BhcnNlQ2FsbGJhY2soKSlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHNlbGYuX2dldExvZ2dlckluc3RhbmNlID0gKCkgPT4gX2xvZ2dlcjtcbiAgICBzZWxmLl9oYXNPdXRwdXQgPSAoKSA9PiBoYXNPdXRwdXQ7XG4gICAgc2VsZi5fc2V0SGFzT3V0cHV0ID0gKCkgPT4ge1xuICAgICAgICBoYXNPdXRwdXQgPSB0cnVlO1xuICAgIH07XG4gICAgbGV0IHJlY29tbWVuZENvbW1hbmRzO1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiAocmVjb21tZW5kID0gdHJ1ZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbcmVjb21tZW5kXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHJlY29tbWVuZENvbW1hbmRzID0gcmVjb21tZW5kO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VJbnN0YW5jZSA9ICgpID0+IHVzYWdlJDE7XG4gICAgc2VsZi5nZXRWYWxpZGF0aW9uSW5zdGFuY2UgPSAoKSA9PiB2YWxpZGF0aW9uJDE7XG4gICAgc2VsZi5nZXRDb21tYW5kSW5zdGFuY2UgPSAoKSA9PiBjb21tYW5kJDE7XG4gICAgc2VsZi50ZXJtaW5hbFdpZHRoID0gKCkgPT4ge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIHNoaW0kMS5wcm9jZXNzLnN0ZENvbHVtbnM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgJ2FyZ3YnLCB7XG4gICAgICAgIGdldDogKCkgPT4gc2VsZi5fcGFyc2VBcmdzKHByb2Nlc3NBcmdzKSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBzZWxmLl9wYXJzZUFyZ3MgPSBmdW5jdGlvbiBwYXJzZUFyZ3MoYXJncywgc2hvcnRDaXJjdWl0LCBfY2FsbGVkRnJvbUNvbW1hbmQsIGNvbW1hbmRJbmRleCkge1xuICAgICAgICBsZXQgc2tpcFZhbGlkYXRpb24gPSAhIV9jYWxsZWRGcm9tQ29tbWFuZDtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwgcHJvY2Vzc0FyZ3M7XG4gICAgICAgIG9wdGlvbnMuX18gPSB5MThuLl9fO1xuICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25maWd1cmF0aW9uLCB7XG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBzaGltJDEuUGFyc2VyLmRldGFpbGVkKGFyZ3MsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IE9iamVjdC5hc3NpZ24oeyAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogZmFsc2UgfSwgY29uZmlnKSxcbiAgICAgICAgfSkpO1xuICAgICAgICBsZXQgYXJndiA9IHBhcnNlZC5hcmd2O1xuICAgICAgICBpZiAocGFyc2VDb250ZXh0KVxuICAgICAgICAgICAgYXJndiA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3YsIHBhcnNlQ29udGV4dCk7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgYXJndi4kMCA9IHNlbGYuJDA7XG4gICAgICAgIHNlbGYucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ3Vlc3NMb2NhbGUoKTtcbiAgICAgICAgICAgIGlmIChzaG9ydENpcmN1aXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWxwQ21kcyA9IFtoZWxwT3B0XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFsaWFzZXNbaGVscE9wdF0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLmxlbmd0aCA+IDEpO1xuICAgICAgICAgICAgICAgIGlmICh+aGVscENtZHMuaW5kZXhPZignJyArIGFyZ3YuX1thcmd2Ll8ubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgYXJndltoZWxwT3B0XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlcktleXMgPSBjb21tYW5kJDEuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDb21wbGV0aW9ucyA9IGNvbXBsZXRpb24kMS5jb21wbGV0aW9uS2V5IGluIGFyZ3Y7XG4gICAgICAgICAgICBjb25zdCBza2lwUmVjb21tZW5kYXRpb24gPSBhcmd2W2hlbHBPcHRdIHx8IHJlcXVlc3RDb21wbGV0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IHNraXBEZWZhdWx0Q29tbWFuZCA9IHNraXBSZWNvbW1lbmRhdGlvbiAmJlxuICAgICAgICAgICAgICAgIChoYW5kbGVyS2V5cy5sZW5ndGggPiAxIHx8IGhhbmRsZXJLZXlzWzBdICE9PSAnJDAnKTtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RVbmtub3duQ29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbW1hbmRJbmRleCB8fCAwLCBjbWQ7IGFyZ3YuX1tpXSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFN0cmluZyhhcmd2Ll9baV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5oYW5kbGVyS2V5cy5pbmRleE9mKGNtZCkgJiYgY21kICE9PSBjb21wbGV0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQXJndiA9IGNvbW1hbmQkMS5ydW5Db21tYW5kKGNtZCwgc2VsZiwgcGFyc2VkLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdFVua25vd25Db21tYW5kICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFVua25vd25Db21tYW5kID0gY21kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChudWxsLCBzZWxmLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjb21tZW5kQ29tbWFuZHMgJiYgZmlyc3RVbmtub3duQ29tbWFuZCAmJiAhc2tpcFJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uJDEucmVjb21tZW5kQ29tbWFuZHMoZmlyc3RVbmtub3duQ29tbWFuZCwgaGFuZGxlcktleXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0aW9uQ29tbWFuZCAmJlxuICAgICAgICAgICAgICAgICAgICB+YXJndi5fLmluZGV4T2YoY29tcGxldGlvbkNvbW1hbmQpICYmXG4gICAgICAgICAgICAgICAgICAgICFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2hvd0NvbXBsZXRpb25TY3JpcHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmQkMS5oYXNEZWZhdWx0Q29tbWFuZCgpICYmICFza2lwRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChudWxsLCBzZWxmLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gW10uY29uY2F0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb25BcmdzID0gYXJncy5zbGljZShhcmdzLmluZGV4T2YoYC0tJHtjb21wbGV0aW9uJDEuY29tcGxldGlvbktleX1gKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBsZXRpb24kMS5nZXRDb21wbGV0aW9uKGNvbXBsZXRpb25BcmdzLCBjb21wbGV0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW9ucyB8fCBbXSkuZm9yRWFjaChjb21wbGV0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKGNvbXBsZXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhhcmd2LCAhcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IGhlbHBPcHQgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dIZWxwKCdsb2cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IHZlcnNpb25PcHQgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdFByb2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSQxLnNob3dWZXJzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2tpcFZhbGlkYXRpb24gJiYgb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSBPYmplY3Qua2V5cyhhcmd2KS5zb21lKGtleSA9PiBvcHRpb25zLnNraXBWYWxpZGF0aW9uLmluZGV4T2Yoa2V5KSA+PSAwICYmIGFyZ3Zba2V5XSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZWQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuVmFsaWRhdGlvbihhcmd2LCBhbGlhc2VzLCB7fSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFlFcnJvcilcbiAgICAgICAgICAgICAgICB1c2FnZSQxLmZhaWwoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIF9jYWxsZWRGcm9tQ29tbWFuZCk7XG4gICAgfTtcbiAgICBzZWxmLl9wb3N0UHJvY2VzcyA9IGZ1bmN0aW9uIChhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIGNhbGxlZEZyb21Db21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShhcmd2KSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBpZiAoY2FsbGVkRnJvbUNvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKCFwb3B1bGF0ZURvdWJsZURhc2gpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBzZWxmLl9jb3B5RG91YmxlRGFzaChhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddIHx8XG4gICAgICAgICAgICBzZWxmLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHBhcnNlUG9zaXRpb25hbE51bWJlcnMpIHtcbiAgICAgICAgICAgIGFyZ3YgPSBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH07XG4gICAgc2VsZi5fY29weURvdWJsZURhc2ggPSBmdW5jdGlvbiAoYXJndikge1xuICAgICAgICBpZiAoIWFyZ3YuXyB8fCAhYXJndlsnLS0nXSlcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBhcmd2Ll8ucHVzaC5hcHBseShhcmd2Ll8sIGFyZ3ZbJy0tJ10pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbJy0tJ107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3BhcnNlUG9zaXRpb25hbE51bWJlcnMgPSBmdW5jdGlvbiAoYXJndikge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10gOiBhcmd2Ll87XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBhcmc7IChhcmcgPSBhcmdzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzaGltJDEuUGFyc2VyLmxvb2tzTGlrZU51bWJlcihhcmcpICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzU2FmZUludGVnZXIoTWF0aC5mbG9vcihwYXJzZUZsb2F0KGAke2FyZ31gKSkpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tpXSA9IE51bWJlcihhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH07XG4gICAgc2VsZi5fcnVuVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHJ1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgcGFyc2VFcnJvcnMsIGlzRGVmYXVsdENvbW1hbmQgPSBmYWxzZSkge1xuICAgICAgICBpZiAocGFyc2VFcnJvcnMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKHBhcnNlRXJyb3JzLm1lc3NhZ2UpO1xuICAgICAgICB2YWxpZGF0aW9uJDEubm9uT3B0aW9uQ291bnQoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5yZXF1aXJlZEFyZ3VtZW50cyhhcmd2KTtcbiAgICAgICAgbGV0IGZhaWxlZFN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgZmFpbGVkU3RyaWN0Q29tbWFuZHMgPSB2YWxpZGF0aW9uJDEudW5rbm93bkNvbW1hbmRzKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpY3QgJiYgIWZhaWxlZFN0cmljdENvbW1hbmRzKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uJDEudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHJpY3RPcHRpb25zKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uJDEudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCB7fSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0aW9uJDEuY3VzdG9tQ2hlY2tzKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICB2YWxpZGF0aW9uJDEubGltaXRlZENob2ljZXMoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWNhdGlvbnMoYXJndik7XG4gICAgICAgIHZhbGlkYXRpb24kMS5jb25mbGljdGluZyhhcmd2KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzTG9jYWxlKCkge1xuICAgICAgICBpZiAoIWRldGVjdExvY2FsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gc2hpbSQxLmdldEVudignTENfQUxMJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xDX01FU1NBR0VTJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkcnKSB8fFxuICAgICAgICAgICAgc2hpbSQxLmdldEVudignTEFOR1VBR0UnKSB8fFxuICAgICAgICAgICAgJ2VuX1VTJztcbiAgICAgICAgc2VsZi5sb2NhbGUobG9jYWxlLnJlcGxhY2UoL1suOl0uKi8sICcnKSk7XG4gICAgfVxuICAgIHNlbGYuaGVscCgpO1xuICAgIHNlbGYudmVyc2lvbigpO1xuICAgIHJldHVybiBzZWxmO1xufVxuY29uc3QgcmViYXNlID0gKGJhc2UsIGRpcikgPT4gc2hpbSQxLnBhdGgucmVsYXRpdmUoYmFzZSwgZGlyKTtcbmZ1bmN0aW9uIGlzWWFyZ3NJbnN0YW5jZSh5KSB7XG4gICAgcmV0dXJuICEheSAmJiB0eXBlb2YgeS5fcGFyc2VBcmdzID09PSAnZnVuY3Rpb24nO1xufVxuXG52YXIgX2EsIF9iO1xuY29uc3QgeyByZWFkRmlsZVN5bmMgfSA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IGluc3BlY3QgfSA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IHsgcmVzb2x2ZSB9ID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgeTE4biA9IHJlcXVpcmUoJ3kxOG4nKTtcbmNvbnN0IFBhcnNlciA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xudmFyIGNqc1BsYXRmb3JtU2hpbSA9IHtcbiAgICBhc3NlcnQ6IHtcbiAgICAgICAgbm90U3RyaWN0RXF1YWw6IGFzc2VydC5ub3RTdHJpY3RFcXVhbCxcbiAgICAgICAgc3RyaWN0RXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgICB9LFxuICAgIGNsaXVpOiByZXF1aXJlKCdjbGl1aScpLFxuICAgIGZpbmRVcDogcmVxdWlyZSgnZXNjYWxhZGUvc3luYycpLFxuICAgIGdldEVudjogKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICB9LFxuICAgIGdldENhbGxlckZpbGU6IHJlcXVpcmUoJ2dldC1jYWxsZXItZmlsZScpLFxuICAgIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpbixcbiAgICBpbnNwZWN0LFxuICAgIG1haW5GaWxlbmFtZTogKF9iID0gKF9hID0gcmVxdWlyZSA9PT0gbnVsbCB8fCByZXF1aXJlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXF1aXJlLm1haW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWxlbmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogcHJvY2Vzcy5jd2QoKSxcbiAgICBQYXJzZXIsXG4gICAgcGF0aDogcmVxdWlyZSgncGF0aCcpLFxuICAgIHByb2Nlc3M6IHtcbiAgICAgICAgYXJndjogKCkgPT4gcHJvY2Vzcy5hcmd2LFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgICAgICBleGVjUGF0aDogKCkgPT4gcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgZXhpdDogKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dFRpY2s6IHByb2Nlc3MubmV4dFRpY2ssXG4gICAgICAgIHN0ZENvbHVtbnM6IHR5cGVvZiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgfSxcbiAgICByZWFkRmlsZVN5bmMsXG4gICAgcmVxdWlyZTogcmVxdWlyZSxcbiAgICByZXF1aXJlRGlyZWN0b3J5OiByZXF1aXJlKCdyZXF1aXJlLWRpcmVjdG9yeScpLFxuICAgIHN0cmluZ1dpZHRoOiByZXF1aXJlKCdzdHJpbmctd2lkdGgnKSxcbiAgICB5MThuOiB5MThuKHtcbiAgICAgICAgZGlyZWN0b3J5OiByZXNvbHZlKF9fZGlybmFtZSwgJy4uL2xvY2FsZXMnKSxcbiAgICAgICAgdXBkYXRlRmlsZXM6IGZhbHNlLFxuICAgIH0pLFxufTtcblxuY29uc3QgbWluTm9kZVZlcnNpb24gPSBwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT05cbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3Mjc3VwcG9ydGVkLW5vZGVqcy12ZXJzaW9uc2ApO1xuICAgIH1cbn1cbmNvbnN0IFBhcnNlciQxID0gcmVxdWlyZSgneWFyZ3MtcGFyc2VyJyk7XG5jb25zdCBZYXJncyQxID0gWWFyZ3NXaXRoU2hpbShjanNQbGF0Zm9ybVNoaW0pO1xudmFyIGNqcyA9IHtcbiAgICBhcHBseUV4dGVuZHMsXG4gICAgY2pzUGxhdGZvcm1TaGltLFxuICAgIFlhcmdzOiBZYXJncyQxLFxuICAgIGFyZ3NlcnQsXG4gICAgZ2xvYmFsTWlkZGxld2FyZUZhY3RvcnksXG4gICAgaXNQcm9taXNlLFxuICAgIG9iakZpbHRlcixcbiAgICBwYXJzZUNvbW1hbmQsXG4gICAgUGFyc2VyOiBQYXJzZXIkMSxcbiAgICBwcm9jZXNzQXJndixcbiAgICByZWJhc2UsXG4gICAgWUVycm9yLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjanM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gY2xhc3NpYyBzaW5nbGV0b24geWFyZ3MgQVBJLCB0byB1c2UgeWFyZ3Ncbi8vIHdpdGhvdXQgcnVubmluZyBhcyBhIHNpbmdsZXRvbiBkbzpcbi8vIHJlcXVpcmUoJ3lhcmdzL3lhcmdzJykocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxuY29uc3Qge1lhcmdzLCBwcm9jZXNzQXJndn0gPSByZXF1aXJlKCcuL2J1aWxkL2luZGV4LmNqcycpO1xuXG5Bcmd2KHByb2Nlc3NBcmd2LmhpZGVCaW4ocHJvY2Vzcy5hcmd2KSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJndjtcblxuZnVuY3Rpb24gQXJndihwcm9jZXNzQXJncywgY3dkKSB7XG4gIGNvbnN0IGFyZ3YgPSBZYXJncyhwcm9jZXNzQXJncywgY3dkLCByZXF1aXJlKTtcbiAgc2luZ2xldG9uaWZ5KGFyZ3YpO1xuICByZXR1cm4gYXJndjtcbn1cblxuLyogIEhhY2sgYW4gaW5zdGFuY2Ugb2YgQXJndiB3aXRoIHByb2Nlc3MuYXJndiBpbnRvIEFyZ3ZcbiAgICBzbyBwZW9wbGUgY2FuIGRvXG4gICAgcmVxdWlyZSgneWFyZ3MnKShbJy0tYmVlYmxlPTEnLCcteicsJ3ppenpsZSddKS5hcmd2XG4gICAgdG8gcGFyc2UgYSBsaXN0IG9mIGFyZ3MgYW5kXG4gICAgcmVxdWlyZSgneWFyZ3MnKS5hcmd2XG4gICAgdG8gZ2V0IGEgcGFyc2VkIHZlcnNpb24gb2YgcHJvY2Vzcy5hcmd2LlxuKi9cbmZ1bmN0aW9uIHNpbmdsZXRvbmlmeShpbnN0KSB7XG4gIE9iamVjdC5rZXlzKGluc3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5ID09PSAnYXJndicpIHtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXyhrZXksIGluc3QuX19sb29rdXBHZXR0ZXJfXyhrZXkpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0W2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIEFyZ3Zba2V5XSA9IGluc3Rba2V5XS5iaW5kKGluc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oJyQwJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC4kMDtcbiAgICAgIH0pO1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCdwYXJzZWQnLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBpbnN0LnBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiLy8gRXhlcmNpc2UgYWxsIGludGVnIHN0YWNrcyBhbmQgaWYgdGhleSBkZXBsb3ksIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgc3ludGggZmlsZXNcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25UZXN0cywgSW50ZWdUZXN0SW5mbywgSW50ZWdUZXN0IH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cywgSW50ZWdSdW5uZXJNZXRyaWNzLCBJbnRlZ1Rlc3RXb3JrZXJDb25maWcsIERlc3RydWN0aXZlQ2hhbmdlIH0gZnJvbSAnLi93b3JrZXJzJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8xOTI5XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTQ5MlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHlhcmdzID0gcmVxdWlyZSgneWFyZ3MnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmd2ID0geWFyZ3NcbiAgICAudXNhZ2UoJ1VzYWdlOiBpbnRlZy1ydW5uZXIgW1RFU1QuLi5dJylcbiAgICAub3B0aW9uKCdsaXN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnTGlzdCB0ZXN0cyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbScgfSlcbiAgICAub3B0aW9uKCdjbGVhbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnU2tpcHMgc3RhY2sgY2xlYW4gdXAgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgZGVzYzogJ1ZlcmJvc2UgbG9ncyBhbmQgbWV0cmljcyBvbiBpbnRlZ3JhdGlvbiB0ZXN0cyBkdXJhdGlvbnMnIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIG5hcmdzOiAxLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgbmFyZ3M6IDEsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbnMoJ21heC13b3JrZXJzJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzYzogJ1RoZSBtYXggbnVtYmVyIG9mIHdvcmtlcnBvb2wgd29ya2VycyB0byB1c2Ugd2hlbiBydW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsJywgZGVmYXVsdDogMTYgfSlcbiAgICAub3B0aW9ucygnZXhjbHVkZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnUnVuIGFsbCB0ZXN0cyBpbiB0aGUgZGlyZWN0b3J5LCBleGNlcHQgdGhlIHNwZWNpZmllZCBURVNUcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbnMoJ2Zyb20tZmlsZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdSZWFkIFRFU1QgbmFtZXMgZnJvbSBhIGZpbGUgKG9uZSBURVNUIHBlciBsaW5lKScgfSlcbiAgICAub3B0aW9uKCdpbnNwZWN0LWZhaWx1cmVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdLZWVwIHRoZSBpbnRlZyB0ZXN0IGNsb3VkIGFzc2VtYmx5IGlmIGEgZmFpbHVyZSBvY2N1cnMgZm9yIGluc3BlY3Rpb24nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnSWYgdGhpcyBpcyBcInRydWVcIiB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZCcgfSlcbiAgICAuc3RyaWN0KClcbiAgICAuYXJndjtcblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9saWIvd29ya2Vycy9leHRyYWN0L2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBhcmd2WydtYXgtd29ya2VycyddLFxuICB9KTtcblxuICAvLyBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZFxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBjb25zdCBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW10gPSBbXTtcbiAgY29uc3QgdGVzdHNGcm9tQXJnczogSW50ZWdUZXN0W10gPSBbXTtcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgcnVuVXBkYXRlT25GYWlsZWQgPSBhcmd2Wyd1cGRhdGUtb24tZmFpbGVkJ10gPz8gZmFsc2U7XG4gIGNvbnN0IGZyb21GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhcmd2Wydmcm9tLWZpbGUnXTtcbiAgY29uc3QgZXhjbHVkZTogYm9vbGVhbiA9IGFyZ3YuZXhjbHVkZTtcblxuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBpZiAoYXJndlsnbWF4LXdvcmtlcnMnXSA8IHRlc3RSZWdpb25zLmxlbmd0aCAqIChwcm9maWxlcyA/PyBbMV0pLmxlbmd0aCkge1xuICAgIGxvZ2dlci53YXJuaW5nKCdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuICVzIHRlc3RzIGluIHBhcmFsbGVsLCBidXQgb25seSBoYXZlICVzIHdvcmtlcnMuIE5vdCBhbGwgb2YgeW91ciBwcm9maWxlcytyZWdpb25zIHdpbGwgYmUgdXRpbGl6ZWQnLCBhcmd2LnByb2ZpbGVzICogYXJndlsncGFyYWxsZWwtcmVnaW9ucyddLCBhcmd2WydtYXgtd29ya2VycyddKTtcbiAgfVxuXG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGlmIChhcmd2Lmxpc3QpIHtcbiAgICAgIGNvbnN0IHRlc3RzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMoYXJndi5kaXJlY3RvcnkpLmZyb21DbGlBcmdzKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh0ZXN0cy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhcmd2Ll8ubGVuZ3RoID4gMCAmJiBmcm9tRmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ZWRUZXN0cyA9IGZyb21GaWxlXG4gICAgICA/IChhd2FpdCBmcy5yZWFkRmlsZShmcm9tRmlsZSwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pKS5zcGxpdCgnXFxuJykuZmlsdGVyKHggPT4geClcbiAgICAgIDogKGFyZ3YuXy5sZW5ndGggPiAwID8gYXJndi5fIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gICAgdGVzdHNGcm9tQXJncy5wdXNoKC4uLihhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhwYXRoLnJlc29sdmUoYXJndi5kaXJlY3RvcnkpKS5mcm9tQ2xpQXJncyhyZXF1ZXN0ZWRUZXN0cywgZXhjbHVkZSkpKTtcblxuICAgIC8vIGFsd2F5cyBydW4gc25hcHNob3QgdGVzdHMsIGJ1dCBpZiAnLS1mb3JjZScgaXMgcGFzc2VkIHRoZW5cbiAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgIGZhaWxlZFNuYXBzaG90cyA9IGF3YWl0IHJ1blNuYXBzaG90VGVzdHMocG9vbCwgdGVzdHNGcm9tQXJncywge1xuICAgICAgcmV0YWluOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10sXG4gICAgICB2ZXJib3NlOiBhcmd2LnZlcmJvc2UsXG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWxlZFNuYXBzaG90cykge1xuICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLnB1c2goLi4uZmFpbHVyZS5kZXN0cnVjdGl2ZUNoYW5nZXMgPz8gW10pO1xuICAgIH1cbiAgICBpZiAoIWFyZ3YuZm9yY2UpIHtcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbnkgb2YgdGhlIHRlc3QgZmFpbGVkIHNuYXBzaG90IHRlc3RzLCBrZWVwIHRob3NlIHJlc3VsdHNcbiAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5tZXJnZVRlc3RzKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSwgZmFpbGVkU25hcHNob3RzKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKHJ1blVwZGF0ZU9uRmFpbGVkIHx8IGFyZ3YuZm9yY2UpIHtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgbWV0cmljcyB9ID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0cyh7XG4gICAgICAgIHBvb2wsXG4gICAgICAgIHRlc3RzOiB0ZXN0c1RvUnVuLFxuICAgICAgICByZWdpb25zOiB0ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBhcmd2LmNsZWFuLFxuICAgICAgICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgICAgICAgdmVyYm9zZTogYXJndi52ZXJib3NlLFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogIWFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10sXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuXG4gICAgICBpZiAoYXJndi5jbGVhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdCBjbGVhbmluZyB1cCBzdGFja3Mgc2luY2UgXCItLW5vLWNsZWFuXCIgd2FzIHVzZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgICAgICBwcmludE1ldHJpY3MobWV0cmljcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgaW50ZWdyYXRpb24gdGVzdHMgZmFpbGVkIScpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2b2lkIHBvb2wudGVybWluYXRlKCk7XG4gIH1cblxuICBpZiAoZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhkZXN0cnVjdGl2ZUNoYW5nZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBjaGFuZ2VzIHdlcmUgZGVzdHJ1Y3RpdmUhJyk7XG4gIH1cbiAgaWYgKGZhaWxlZFNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoIXJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiB5YXJuIGludGVnLXJ1bm5lciAtLXVwZGF0ZS1vbi1mYWlsZWQnO1xuICAgIH1cbiAgICBpZiAoIXRlc3RzU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgdGVzdHMgZmFpbGVkIVxcbiR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgcmV0dXJuIHhzLmZpbHRlcih4ID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgdGVzdHMgd2UgcmVjZWl2ZWQgZnJvbSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdpdGhcbiAqIHRlc3RzIHRoYXQgZmFpbGVkIHNuYXBzaG90IHRlc3RzLiBUaGUgZmFpbGVkIHNuYXBzaG90IHRlc3RzIGhhdmUgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gdGhhdCB3ZSB3YW50IHRvIGtlZXAgc28gdGhpcyBzaG91bGQgb3ZlcnJpZGUgYW55IHRlc3QgZnJvbSBhcmdzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlVGVzdHModGVzdEZyb21BcmdzOiBJbnRlZ1Rlc3RJbmZvW10sIGZhaWxlZFNuYXBzaG90VGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdKTogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10ge1xuICBjb25zdCBmYWlsZWRUZXN0TmFtZXMgPSBuZXcgU2V0KGZhaWxlZFNuYXBzaG90VGVzdHMubWFwKHRlc3QgPT4gdGVzdC5maWxlTmFtZSkpO1xuICBjb25zdCBmaW5hbDogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBmYWlsZWRTbmFwc2hvdFRlc3RzO1xuICBmaW5hbC5wdXNoKC4uLnRlc3RGcm9tQXJncy5maWx0ZXIodGVzdCA9PiAhZmFpbGVkVGVzdE5hbWVzLmhhcyh0ZXN0LmZpbGVOYW1lKSkpO1xuICByZXR1cm4gZmluYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGkoKSB7XG4gIG1haW4oKS50aGVuKCkuY2F0Y2goZXJyID0+IHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IHsgY2xpIH0gZnJvbSAnLi9jbGknO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDhDQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNoQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzlCLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQ3BCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFVBQVUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3hCLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ2pCLGtCQUFrQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDaEMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDbEIsY0FBYyxDQUFDLEtBQUssSUFBSSxHQUFHO0FBQUEsTUFDM0IsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQUEsTUFDckIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsYUFBYSxDQUFDLElBQUksS0FBSyxHQUFHO0FBQUEsTUFDMUIsY0FBYyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDMUIsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDMUIsU0FBUyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDdEIsa0JBQWtCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNoQyxZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN2QixRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNwQixZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN0QixZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUN4QixpQkFBaUIsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQzlCLFlBQVksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzFCLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLE1BQ3ZCLFlBQVksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzFCLGFBQWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLGVBQWUsQ0FBQyxLQUFLLEdBQUcsR0FBRztBQUFBLE1BQzNCLGtCQUFrQixDQUFDLElBQUksS0FBSyxFQUFFO0FBQUEsTUFDOUIsY0FBYyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDMUIsY0FBYyxDQUFDLEtBQUssSUFBSSxHQUFHO0FBQUEsTUFDM0IsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDckIsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM5QixpQkFBaUIsQ0FBQyxJQUFJLElBQUksR0FBRztBQUFBLE1BQzdCLGlCQUFpQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQUEsTUFDNUIsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFBQSxNQUM1QixpQkFBaUIsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQzdCLGNBQWMsQ0FBQyxLQUFLLEdBQUcsR0FBRztBQUFBLE1BQzFCLFlBQVksQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQ3pCLGVBQWUsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQzNCLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3pCLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3pCLGNBQWMsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzNCLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ3pCLGVBQWUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzdCLGVBQWUsQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUFBLE1BQzNCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsR0FBRztBQUFBLE1BQ3ZCLGFBQWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLFFBQVEsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQ3BCLGFBQWEsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQzFCLFFBQVEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3RCLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLE1BQ25CLGVBQWUsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQzVCLFFBQVEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3RCLFlBQVksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzFCLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3pCLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ3pCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsR0FBRztBQUFBLE1BQ3JCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFNB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QTtBQUFBOzs7O0FDWmQsSUFBQSxRQUFBO0FBQVMsT0FBQSxlQUFBLFNBQUEsT0FBQSxFQUFBLFlBQUEsTUFBQSxLQUFBLFdBQUE7QUFBQSxTQUFBLE1BQUE7QUFBRyxFQUFBLENBQUE7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdyYXkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjaGFsayIsICJzdHlsZXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hhbGsiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlRm9vbFdlYnBhY2siLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicmVxdWlyZUZvb2xXZWJwYWNrIiwgIlRFUk1JTkFURV9NRVRIT0RfSUQiLCAiV29ya2VyVGhyZWFkcyIsICJlcnJvciIsICJXb3JrZXIiLCAid29ya2VyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicG9vbCIsICJ3b3JrZXIiLCAicmVzb2x2ZSIsICJlcnJvciIsICJyZXN1bHQiLCAiZXhwb3J0cyIsICJwb29sIiwgIndvcmtlciIsICJleHBvcnRzIiwgInJlc29sdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlcnIiLCAiZXJyMiIsICJlciIsICJlcjIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInV0aWwiLCAicXVldWUiLCAicGF0aCIsICJvcHRpb25zIiwgImNiIiwgImRhdGEiLCAic3JjIiwgImRlc3QiLCAiZmxhZ3MiLCAicmVhZGRpciIsICJnbyRyZWFkZGlyIiwgIm1vZGUiLCAiZXhwb3J0cyIsICJmcyIsICJyZXNvbHZlIiwgImJ1ZmZlciIsICJidWZmZXJzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInV0aWwiLCAic3RhdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9jb3B5X3N5bmMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAiZXJyIiwgImVycm9yIiwgInJlcXVpcmVfY29weSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZW1wdHlEaXIiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAiZXJyIiwgInN0YXRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAic3JjcGF0aCIsICJkc3RwYXRoIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJyZWxhdGl2ZSIsICJ0eXBlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInJlYWRGaWxlU3luYyIsICJyZXF1aXJlX2pzb25maWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic3RhdCIsICJyZXF1aXJlX21vdmVfc3luYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAiZXJyIiwgInJlcXVpcmVfbW92ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJjaGFsayIsICJ3b3JrZXIiLCAicG9vbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJ1dGlsIiwgInBhdGgiLCAieTE4biIsICJyZXF1aXJlX2J1aWxkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInV0aWwiLCAiZnMiLCAicGF0aCIsICJEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSIsICJrZXkiLCAiZXJyb3IiLCAiYXJncyIsICJ2YWx1ZSIsICJ2YWwiLCAiYXJndiIsICJlbnYiLCAiYWxpYXNlcyIsICJkZWZhdWx0cyIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNvZGUiLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXNvbHZlIiwgIm1vZHVsZSIsICJzdGFjayIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJqb2luIiwgInJlc29sdmUiLCAicGF0aCIsICJyZXF1aXJlX2J1aWxkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNtZCIsICJpc1Byb21pc2UiLCAic2hpbSIsICJ5YXJncyIsICJ1c2FnZSIsICJ2YWxpZGF0aW9uIiwgInNlbGYiLCAiY29tbWFuZCIsICJlcnJvciIsICJjIiwgInkxOG4iLCAibG9nZ2VyIiwgIm1heFdpZHRoIiwgImFyZ3YiLCAiY29tcGxldGlvbnMiLCAia2V5IiwgImdsb2JhbCIsICJrIiwgInR5cGUiLCAidmFsdWUiLCAicGFyc2VGbiIsICJwYXJzZSIsICJjb21wbGV0aW9uIiwgInJlYWRGaWxlU3luYyIsICJyZXNvbHZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBvb2wiLCAiZnMiLCAic3VjY2VzcyIsICJwYXRoIiwgImNoYWxrIl0KfQo=