testcafe 3.7.4 → 3.7.5

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.
@@ -896,7 +896,7 @@ class TestRun extends async_event_emitter_1.default {
896
896
  }
897
897
  async getCurrentUrl() {
898
898
  const builder = new ClientFunctionBuilder(() => {
899
- return window.location.href; // eslint-disable-line no-undef
899
+ return window.location.href;
900
900
  }, { boundTestRun: this });
901
901
  const getLocation = builder.getFunction();
902
902
  return await getLocation();
@@ -1018,4 +1018,4 @@ class TestRun extends async_event_emitter_1.default {
1018
1018
  }
1019
1019
  exports.default = TestRun;
1020
1020
  module.exports = exports.default;
1021
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1ydW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUlnQjtBQUVoQixtQ0FBZ0M7QUFDaEMsMkRBQXNEO0FBQ3RELHNFQUE2QztBQUM3Qyx3REFBZ0M7QUFDaEMsdUZBQTZEO0FBQzdELDREQUEwQztBQUMxQyxpR0FBb0Y7QUFDcEYsc0VBQXFEO0FBQ3JELCtDQUFpRDtBQUVqRCxrREFVNkI7QUFFN0Isd0VBQWdEO0FBQ2hELDJEQUEyQztBQUMzQywyREFBbUM7QUFDbkMsbUZBQXlEO0FBQ3pELG9FQUE0QztBQUM1QywrRUFBcUQ7QUFDckQsMERBQXVDO0FBQ3ZDLDBFQUF5RDtBQUN6RCwwRkFBZ0U7QUFDaEUsK0VBQXNEO0FBQ3RELHVGQUErRDtBQUUvRCw2REFRNkI7QUFFN0IsbUVBQXFEO0FBQ3JELDBEQUF3RTtBQUN4RSw0Q0FBK0U7QUFFL0UsNENBUTBCO0FBRTFCLGdEQVk0QjtBQUc1QiwyQ0FBa0U7QUFDbEUsNEZBQWlFO0FBQ2pFLCtEQUF5RjtBQUl6Riw4RUFBcUQ7QUFFckQsOEZBQW9FO0FBQ3BFLDhGQUFvRTtBQU1wRSxnREFBb0U7QUFLcEUsdUdBQTZFO0FBTTdFLG9EQUFtQztBQUVuQyxnRkFHNEM7QUFFNUMsaUdBQXVFO0FBQ3ZFLHVFQUE4QztBQUM5QyxzRUFBdUQ7QUFDdkQseUVBQWdEO0FBR2hELCtGQUFvRTtBQUNwRSw2QkFBMEI7QUFFMUIsMERBQW1FO0FBQ25FLCtDQUEwRDtBQUcxRCxnREFBNkQ7QUFFN0QsbUZBQXlEO0FBRXpELG1EQUl5QjtBQUl6QixrRkFBd0Q7QUFHeEQsTUFBTSxXQUFXLEdBQXFCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RSxNQUFNLHFCQUFxQixHQUFXLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFD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O0lBRU8sS0FBSyxDQUFDLENBQUMseUJBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFFLEdBQWtCO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjs7Z0JBRUcsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLE9BQU8sQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQXp5Q0QsMEJBeXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgcHVsbCxcbiAgICByZW1vdmUsXG4gICAgY2hhaW4sXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgeyByZWFkU3luYyBhcyByZWFkIH0gZnJvbSAncmVhZC1maWxlLXJlbGF0aXZlJztcbmltcG9ydCBwcm9taXNpZnlFdmVudCBmcm9tICdwcm9taXNpZnktZXZlbnQnO1xuaW1wb3J0IE11c3RhY2hlIGZyb20gJ211c3RhY2hlJztcbmltcG9ydCBBc3luY0V2ZW50RW1pdHRlciBmcm9tICcuLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCBUZXN0UnVuRGVidWdMb2cgZnJvbSAnLi9kZWJ1Zy1sb2cnO1xuaW1wb3J0IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlciBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlcic7XG5pbXBvcnQgVGVzdENhZmVFcnJvckxpc3QgZnJvbSAnLi4vZXJyb3JzL2Vycm9yLWxpc3QnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuXG5pbXBvcnQge1xuICAgIFJlcXVlc3RIb29rVW5oYW5kbGVkRXJyb3IsXG4gICAgUGFnZUxvYWRFcnJvcixcbiAgICBSb2xlU3dpdGNoSW5Sb2xlSW5pdGlhbGl6ZXJFcnJvcixcbiAgICBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yLFxuICAgIFdpbmRvd05vdEZvdW5kRXJyb3IsXG4gICAgUmVxdWVzdEhvb2tCYXNlRXJyb3IsXG4gICAgVGVzdFRpbWVvdXRFcnJvcixcbiAgICBFeHRlcm5hbEFzc2VydGlvbkxpYnJhcnlFcnJvcixcbiAgICBSdW5UaW1lb3V0RXJyb3IsXG59IGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bi8nO1xuXG5pbXBvcnQgQ0xJRU5UX01FU1NBR0VTIGZyb20gJy4vY2xpZW50LW1lc3NhZ2VzJztcbmltcG9ydCBDT01NQU5EX1RZUEUgZnJvbSAnLi9jb21tYW5kcy90eXBlJztcbmltcG9ydCBkZWxheSBmcm9tICcuLi91dGlscy9kZWxheSc7XG5pbXBvcnQgaXNQYXNzd29yZElucHV0IGZyb20gJy4uL3V0aWxzL2lzLXBhc3N3b3JkLWlucHV0JztcbmltcG9ydCB0ZXN0UnVuTWFya2VyIGZyb20gJy4vbWFya2VyLXN5bWJvbCc7XG5pbXBvcnQgdGVzdFJ1blRyYWNrZXIgZnJvbSAnLi4vYXBpL3Rlc3QtcnVuLXRyYWNrZXInO1xuaW1wb3J0IFJPTEVfUEhBU0UgZnJvbSAnLi4vcm9sZS9waGFzZSc7XG5pbXBvcnQgUmVwb3J0ZXJQbHVnaW5Ib3N0IGZyb20gJy4uL3JlcG9ydGVyL3BsdWdpbi1ob3N0JztcbmltcG9ydCBCcm93c2VyQ29uc29sZU1lc3NhZ2VzIGZyb20gJy4vYnJvd3Nlci1jb25zb2xlLW1lc3NhZ2VzJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRSBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5cbmltcG9ydCB7XG4gICAgU3RhdGVTbmFwc2hvdCxcbiAgICBTUEVDSUFMX0VSUk9SX1BBR0UsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgSW5qZWN0YWJsZVJlc291cmNlcyxcbiAgICBSZXF1ZXN0SG9va01ldGhvZEVycm9yLFxuICAgIFN0b3JhZ2VzU25hcHNob3QsXG4gICAgUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0ICogYXMgSU5KRUNUQUJMRVMgZnJvbSAnLi4vYXNzZXRzL2luamVjdGFibGVzJztcbmltcG9ydCB7IGZpbmRQcm9ibGVtYXRpY1NjcmlwdHMgfSBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0UGx1cmFsU3VmZml4LCBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy9zdHJpbmcnO1xuXG5pbXBvcnQge1xuICAgIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcixcbiAgICBpc0Jyb3dzZXJNYW5pcHVsYXRpb25Db21tYW5kLFxuICAgIGlzU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgaXNTZXJ2aWNlQ29tbWFuZCxcbiAgICBjYW5TZXREZWJ1Z2dlckJyZWFrcG9pbnRCZWZvcmVDb21tYW5kLFxuICAgIGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZCxcbiAgICBpc1Jlc2l6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4vY29tbWFuZHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICAgIEV4ZWN1dGVBc3luY0V4cHJlc3Npb25Db21tYW5kLFxuICAgIEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCxcbiAgICBHZXRDdXJyZW50V2luZG93c0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dDb21tYW5kLFxuICAgIEdldENvb2tpZXNDb21tYW5kLFxuICAgIFNldENvb2tpZXNDb21tYW5kLFxuICAgIERlbGV0ZUNvb2tpZXNDb21tYW5kLFxuICAgIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQsXG4gICAgUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCxcbiAgICBSdW5DdXN0b21BY3Rpb25Db21tYW5kLFxufSBmcm9tICcuL2NvbW1hbmRzL2FjdGlvbnMnO1xuaW1wb3J0IHsgRGVidWdDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9vYnNlcnZhdGlvbic7XG5cbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTLCBURVNUX1JVTl9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHByb2Nlc3NUZXN0Rm5FcnJvciBmcm9tICcuLi9lcnJvcnMvcHJvY2Vzcy10ZXN0LWZuLWVycm9yJztcbmltcG9ydCB7IGNyZWF0ZVJlcGxpY2F0b3IsIFNlbGVjdG9yTm9kZVRyYW5zZm9ybSB9IGZyb20gJy4uL2NsaWVudC1mdW5jdGlvbnMvcmVwbGljYXRvcic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IENhcHR1cmVyIGZyb20gJy4uL3NjcmVlbnNob3RzL2NhcHR1cmVyJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IFNlc3Npb25Db250cm9sbGVyIGZyb20gJy4vc2Vzc2lvbi1jb250cm9sbGVyJztcbmltcG9ydCBUZXN0Q29udHJvbGxlciBmcm9tICcuLi9hcGkvdGVzdC1jb250cm9sbGVyJztcbmltcG9ydCBCcm93c2VyTWFuaXB1bGF0aW9uUXVldWUgZnJvbSAnLi9icm93c2VyLW1hbmlwdWxhdGlvbi1xdWV1ZSc7XG5pbXBvcnQgT2JzZXJ2ZWRDYWxsc2l0ZXNTdG9yYWdlIGZyb20gJy4vb2JzZXJ2ZWQtY2FsbHNpdGVzLXN0b3JhZ2UnO1xuaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdCc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uJztcbmltcG9ydCB7IFF1YXJhbnRpbmUgfSBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucy9xdWFyYW50aW5lJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9hcGkvcmVxdWVzdC1ob29rcy9ob29rJztcbmltcG9ydCBEcml2ZXJTdGF0dXMgZnJvbSAnLi4vY2xpZW50L2RyaXZlci9zdGF0dXMnO1xuaW1wb3J0IHsgQ29tbWFuZEJhc2UsIEFjdGlvbkNvbW1hbmRCYXNlIH0gZnJvbSAnLi9jb21tYW5kcy9iYXNlLmpzJztcbmltcG9ydCBSb2xlIGZyb20gJy4uL3JvbGUvcm9sZSc7XG5pbXBvcnQgeyBUZXN0UnVuRXJyb3JCYXNlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9ycyc7XG5pbXBvcnQgeyBDYWxsc2l0ZVJlY29yZCB9IGZyb20gJ0BkZXZleHByZXNzL2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgZ2V0QXNzZXJ0aW9uVGltZW91dCBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucy9nZXQtYXNzZXJ0aW9uLXRpbWVvdXQnO1xuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYXNzZXJ0aW9uJztcbmltcG9ydCB7IFRha2VTY3JlZW5zaG90QmFzZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJztcbi8vQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGVzdFJ1biBhcyBMZWdhY3lUZXN0UnVuIH0gZnJvbSAndGVzdGNhZmUtbGVnYWN5LWFwaSc7XG5pbXBvcnQgeyBBdXRoQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ludGVyZmFjZXMnO1xuaW1wb3J0IFRlc3RSdW5QaGFzZSBmcm9tICcuL3BoYXNlJztcblxuaW1wb3J0IHtcbiAgICBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kLFxuICAgIEV4ZWN1dGVTZWxlY3RvckNvbW1hbmQsXG59IGZyb20gJy4vY29tbWFuZHMvZXhlY3V0ZS1jbGllbnQtZnVuY3Rpb24nO1xuXG5pbXBvcnQgYWRkUmVuZGVyZWRXYXJuaW5nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IGdldEJyb3dzZXIgZnJvbSAnLi4vdXRpbHMvZ2V0LWJyb3dzZXInO1xuaW1wb3J0IEFzc2VydGlvbkV4ZWN1dG9yIGZyb20gJy4uL2Fzc2VydGlvbnMvZXhlY3V0b3InO1xuaW1wb3J0IGFzeW5jRmlsdGVyIGZyb20gJy4uL3V0aWxzL2FzeW5jLWZpbHRlcic7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IE1lc3NhZ2VCdXMgZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS1idXMnO1xuaW1wb3J0IGV4ZWN1dGVGbldpdGhUaW1lb3V0IGZyb20gJy4uL3V0aWxzL2V4ZWN1dGUtZm4td2l0aC10aW1lb3V0JztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi9jb21tYW5kcy9vcHRpb25zJztcbmltcG9ydCB7IHByZXBhcmVTa2lwSnNFcnJvcnNPcHRpb25zIH0gZnJvbSAnLi4vYXBpL3NraXAtanMtZXJyb3JzJztcbmltcG9ydCB7IENvb2tpZVByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4vY29va2llcy9mYWN0b3J5JztcbmltcG9ydCB7IENvb2tpZVByb3ZpZGVyIH0gZnJvbSAnLi9jb29raWVzL2Jhc2UnO1xuaW1wb3J0IHsgU3RvcmFnZXNQcm92aWRlciB9IGZyb20gJy4vc3RvcmFnZXMvYmFzZSc7XG5pbXBvcnQgeyBTdG9yYWdlc1Byb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4vc3RvcmFnZXMvZmFjdG9yeSc7XG5cbmltcG9ydCB3cmFwQ3VzdG9tQWN0aW9uIGZyb20gJy4uL2FwaS93cmFwLWN1c3RvbS1hY3Rpb24nO1xuXG5pbXBvcnQge1xuICAgIE5hdGl2ZUF1dG9tYXRpb25Sb2xlUHJvdmlkZXIsXG4gICAgUHJveHlSb2xlUHJvdmlkZXIsXG4gICAgUm9sZVByb3ZpZGVyLFxufSBmcm9tICcuL3JvbGUtcHJvdmlkZXInO1xuXG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RQaXBlbGluZSBmcm9tICcuLi9uYXRpdmUtYXV0b21hdGlvbi9yZXF1ZXN0LXBpcGVsaW5lJztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25CYXNlIH0gZnJvbSAnLi4vbmF0aXZlLWF1dG9tYXRpb24nO1xuaW1wb3J0IFJlcG9ydERhdGFMb2cgZnJvbSAnLi4vcmVwb3J0ZXIvcmVwb3J0LWRhdGEtbG9nJztcbmltcG9ydCByZW1vdGVDaHJvbWUgZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuXG5jb25zdCBsYXp5UmVxdWlyZSAgICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJ2ltcG9ydC1sYXp5JykocmVxdWlyZSk7XG5jb25zdCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgICAgICAgICA9IGxhenlSZXF1aXJlKCcuLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJyk7XG5jb25zdCBUZXN0UnVuQm9va21hcmsgICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2Jvb2ttYXJrJyk7XG5jb25zdCBhY3Rpb25Db21tYW5kcyAgICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2NvbW1hbmRzL2FjdGlvbnMnKTtcbmNvbnN0IGJyb3dzZXJNYW5pcHVsYXRpb25Db21tYW5kcyAgID0gbGF6eVJlcXVpcmUoJy4vY29tbWFuZHMvYnJvd3Nlci1tYW5pcHVsYXRpb24nKTtcbmNvbnN0IHNlcnZpY2VDb21tYW5kcyAgICAgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4vY29tbWFuZHMvc2VydmljZScpO1xuY29uc3QgZXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZHMgPSBsYXp5UmVxdWlyZSgnLi9jb21tYW5kcy9leGVjdXRlLWNsaWVudC1mdW5jdGlvbicpO1xuXG5jb25zdCB7IGV4ZWN1dGVKc0V4cHJlc3Npb24sIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiB9ID0gbGF6eVJlcXVpcmUoJy4vZXhlY3V0ZS1qcy1leHByZXNzaW9uJyk7XG5cbmNvbnN0IFRFU1RfUlVOX1RFTVBMQVRFICAgICAgICAgICAgICAgPSByZWFkKCcuLi9jbGllbnQvdGVzdC1ydW4vaW5kZXguanMubXVzdGFjaGUnKSBhcyBzdHJpbmc7XG5jb25zdCBJRlJBTUVfVEVTVF9SVU5fVEVNUExBVEUgICAgICAgID0gcmVhZCgnLi4vY2xpZW50L3Rlc3QtcnVuL2lmcmFtZS5qcy5tdXN0YWNoZScpIGFzIHN0cmluZztcbmNvbnN0IFRFU1RfRE9ORV9DT05GSVJNQVRJT05fUkVTUE9OU0UgPSAndGVzdC1kb25lLWNvbmZpcm1hdGlvbic7XG5jb25zdCBNQVhfUkVTUE9OU0VfREVMQVkgICAgICAgICAgICAgID0gMzAwMDtcbmNvbnN0IENISUxEX1dJTkRPV19SRUFEWV9USU1FT1VUICAgICAgPSAzMCAqIDEwMDA7XG5cbmNvbnN0IEFMTF9EUklWRVJfVEFTS1NfQURERURfVE9fUVVFVUVfRVZFTlQgPSAnYWxsLWRyaXZlci10YXNrcy1hZGRlZC10by1xdWV1ZSc7XG5cblxuaW50ZXJmYWNlIFRlc3RSdW5Jbml0IHtcbiAgICB0ZXN0OiBUZXN0O1xuICAgIGJyb3dzZXJDb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbjtcbiAgICBzY3JlZW5zaG90Q2FwdHVyZXI6IENhcHR1cmVyO1xuICAgIGdsb2JhbFdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG4gICAgbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG4gICAgc3RhcnRSdW5FeGVjdXRpb25UaW1lPzogRGF0ZTtcbiAgICBuYXRpdmVBdXRvbWF0aW9uOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRHJpdmVyVGFzayB7XG4gICAgY29tbWFuZDogQ29tbWFuZEJhc2U7XG4gICAgcmVzb2x2ZTogRnVuY3Rpb247XG4gICAgcmVqZWN0OiBGdW5jdGlvbjtcbiAgICBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQ7XG59XG5cbmludGVyZmFjZSBEcml2ZXJNZXNzYWdlIHtcbiAgICBzdGF0dXM6IERyaXZlclN0YXR1cztcbn1cblxuaW50ZXJmYWNlIERyaXZlcldhcm5pbmcge1xuICAgIHR5cGU6IGtleW9mIHR5cGVvZiBXQVJOSU5HX01FU1NBR0U7XG4gICAgYXJnczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0VGltZW91dCB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBhamF4PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRXhlY3V0aW9uVGltZW91dCB7XG4gICAgdGltZW91dDogbnVtYmVyO1xuICAgIHJlamVjdFdpdGg6IFRlc3RUaW1lb3V0RXJyb3IgfCBSdW5UaW1lb3V0RXJyb3I7XG59XG5cbmludGVyZmFjZSBQZW5kaW5nUmVxdWVzdCB7XG4gICAgcmVzcG9uc2VUaW1lb3V0OiBOb2RlSlMuVGltZW91dDtcbiAgICByZXNvbHZlOiBGdW5jdGlvbjtcbiAgICByZWplY3Q6IEZ1bmN0aW9uO1xufVxuXG5pbnRlcmZhY2UgQnJvd3Nlck1hbmlwdWxhdGlvblJlc3VsdCB7XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGVycm9yOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgT3BlbmVkV2luZG93SW5mb3JtYXRpb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFJ1biBleHRlbmRzIEFzeW5jRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIFt0ZXN0UnVuTWFya2VyXTogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0RGF0YUxvZzogUmVwb3J0RGF0YUxvZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+O1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXN0OiBUZXN0O1xuICAgIHB1YmxpYyByZWFkb25seSBicm93c2VyQ29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb247XG4gICAgcHVibGljIHVuc3RhYmxlOiBib29sZWFuO1xuICAgIHB1YmxpYyBwaGFzZTogVGVzdFJ1blBoYXNlO1xuICAgIHByaXZhdGUgZHJpdmVyVGFza1F1ZXVlOiBEcml2ZXJUYXNrW107XG4gICAgcHJpdmF0ZSB0ZXN0RG9uZUNvbW1hbmRRdWV1ZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGFjdGl2ZURpYWxvZ0hhbmRsZXI6IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQgfCBudWxsO1xuICAgIHB1YmxpYyBhY3RpdmVJZnJhbWVTZWxlY3RvcjogRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCB8IG51bGw7XG4gICAgcHVibGljIHNwZWVkOiBudW1iZXI7XG4gICAgcHVibGljIHBhZ2VMb2FkVGltZW91dDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVzdEV4ZWN1dGlvblRpbWVvdXQ6IEV4ZWN1dGlvblRpbWVvdXQgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcnVuRXhlY3V0aW9uVGltZW91dDogRXhlY3V0aW9uVGltZW91dCB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlUGFnZVJlbG9hZHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkaXNhYmxlUGFnZUNhY2hpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVxdWVzdFRpbWVvdXQ6IFJlcXVlc3RUaW1lb3V0O1xuICAgIHB1YmxpYyByZWFkb25seSBzZXNzaW9uOiBTZXNzaW9uQ29udHJvbGxlcjtcbiAgICBwdWJsaWMgY29uc29sZU1lc3NhZ2VzOiBCcm93c2VyQ29uc29sZU1lc3NhZ2VzO1xuICAgIHByaXZhdGUgcGVuZGluZ1JlcXVlc3Q6IFBlbmRpbmdSZXF1ZXN0IHwgbnVsbDtcbiAgICBwdWJsaWMgcGVuZGluZ1BhZ2VFcnJvcjogUGFnZUxvYWRFcnJvciB8IEVycm9yIHwgbnVsbDtcbiAgICBwdWJsaWMgY29udHJvbGxlcjogVGVzdENvbnRyb2xsZXIgfCBudWxsO1xuICAgIHB1YmxpYyBjdHg6IG9iamVjdDtcbiAgICBwdWJsaWMgZml4dHVyZUN0eDogb2JqZWN0IHwgbnVsbDtcbiAgICBwdWJsaWMgdGVzdFJ1bkN0eDogb2JqZWN0IHwgbnVsbDtcbiAgICBwcml2YXRlIGN1cnJlbnRSb2xlSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VkUm9sZVN0YXRlczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwdWJsaWMgZXJyczogVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyW107XG4gICAgcHJpdmF0ZSBsYXN0RHJpdmVyU3RhdHVzSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2U6IENvbW1hbmRCYXNlIHwgbnVsbCB8IHN0cmluZztcbiAgICBwcml2YXRlIGZpbGVEb3dubG9hZGluZ0hhbmRsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHJpdmF0ZSBhZGRpbmdEcml2ZXJUYXNrc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIGRlYnVnZ2luZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnT25GYWlsOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZURlYnVnQnJlYWtwb2ludHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z1JlcG9ydGVyUGx1Z2luSG9zdDogUmVwb3J0ZXJQbHVnaW5Ib3N0O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlOiBCcm93c2VyTWFuaXB1bGF0aW9uUXVldWU7XG4gICAgcHJpdmF0ZSBkZWJ1Z0xvZzogVGVzdFJ1bkRlYnVnTG9nO1xuICAgIHB1YmxpYyBxdWFyYW50aW5lOiBRdWFyYW50aW5lIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBhbnk7XG4gICAgcHVibGljIG9ic2VydmVkQ2FsbHNpdGVzOiBPYnNlcnZlZENhbGxzaXRlc1N0b3JhZ2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBsaWNhdG9yOiBhbnk7XG4gICAgcHJpdmF0ZSBkaXNjb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBlcnJTY3JlZW5zaG90UGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIGFzeW5jSnNFeHByZXNzaW9uQ2FsbHNpdGVzOiBNYXA8c3RyaW5nLCBDYWxsc2l0ZVJlY29yZD47XG4gICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXI6IEJyb3dzZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvb2tpZVByb3ZpZGVyOiBDb29raWVQcm92aWRlcjtcbiAgICBwcml2YXRlIF9zdG9yYWdlc1Byb3ZpZGVyOiBTdG9yYWdlc1Byb3ZpZGVyO1xuICAgIHB1YmxpYyByZWFkb25seSBzdGFydFJ1bkV4ZWN1dGlvblRpbWU/OiBEYXRlO1xuICAgIHB1YmxpYyBmaW5pc2hUaW1lPzogRGF0ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI6IFJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb2xlUHJvdmlkZXI6IFJvbGVQcm92aWRlcjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNOYXRpdmVBdXRvbWF0aW9uOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBpc0V4cGVyaW1lbnRhbE11bHRpcGxlV2luZG93czogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoeyB0ZXN0LCBicm93c2VyQ29ubmVjdGlvbiwgc2NyZWVuc2hvdENhcHR1cmVyLCBnbG9iYWxXYXJuaW5nTG9nLCBvcHRzLCBtZXNzYWdlQnVzLCBzdGFydFJ1bkV4ZWN1dGlvblRpbWUsIG5hdGl2ZUF1dG9tYXRpb24gfTogVGVzdFJ1bkluaXQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzW3Rlc3RSdW5NYXJrZXJdICAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cyAgICAgICA9IG1lc3NhZ2VCdXM7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgICAgPSBuZXcgV2FybmluZ0xvZyhnbG9iYWxXYXJuaW5nTG9nLCBXYXJuaW5nTG9nLmNyZWF0ZUFkZFdhcm5pbmdDYWxsYmFjayhtZXNzYWdlQnVzLCB0aGlzKSk7XG4gICAgICAgIHRoaXMucmVwb3J0RGF0YUxvZyAgICAgPSBuZXcgUmVwb3J0RGF0YUxvZyhSZXBvcnREYXRhTG9nLmNyZWF0ZUFkZERhdGFDYWxsYmFjayhtZXNzYWdlQnVzLCB0aGlzKSk7XG4gICAgICAgIHRoaXMub3B0cyAgICAgICAgICAgICAgPSBvcHRzO1xuICAgICAgICB0aGlzLnRlc3QgICAgICAgICAgICAgID0gdGVzdDtcbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbiA9IGJyb3dzZXJDb25uZWN0aW9uO1xuICAgICAgICB0aGlzLnVuc3RhYmxlICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnJvd3NlciAgICAgICAgICAgPSBnZXRCcm93c2VyKGJyb3dzZXJDb25uZWN0aW9uLCBuYXRpdmVBdXRvbWF0aW9uKTtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLmluaXRpYWw7XG5cbiAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy50ZXN0RG9uZUNvbW1hbmRRdWV1ZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIgID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVJZnJhbWVTZWxlY3RvciA9IG51bGw7XG4gICAgICAgIHRoaXMuc3BlZWQgICAgICAgICAgICAgICAgPSB0aGlzLm9wdHMuc3BlZWQgYXMgbnVtYmVyO1xuICAgICAgICB0aGlzLnBhZ2VMb2FkVGltZW91dCAgICAgID0gdGhpcy5fZ2V0UGFnZUxvYWRUaW1lb3V0KHRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnRlc3RFeGVjdXRpb25UaW1lb3V0ID0gdGhpcy5fZ2V0VGVzdEV4ZWN1dGlvblRpbWVvdXQob3B0cyk7XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMgPSB0ZXN0LmRpc2FibGVQYWdlUmVsb2FkcyB8fCBvcHRzLmRpc2FibGVQYWdlUmVsb2FkcyBhcyBib29sZWFuICYmIHRlc3QuZGlzYWJsZVBhZ2VSZWxvYWRzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZUNhY2hpbmcgPSB0ZXN0LmRpc2FibGVQYWdlQ2FjaGluZyB8fCBvcHRzLmRpc2FibGVQYWdlQ2FjaGluZyBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmlzTmF0aXZlQXV0b21hdGlvbiA9IG5hdGl2ZUF1dG9tYXRpb247XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzICAgICAgICA9IG9wdHMuZGlzYWJsZU11bHRpcGxlV2luZG93cyBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmlzRXhwZXJpbWVudGFsTXVsdGlwbGVXaW5kb3dzID0gb3B0cy5leHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3MgYXMgYm9vbGVhbjtcblxuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0ID0gdGhpcy5fZ2V0UmVxdWVzdFRpbWVvdXQodGVzdCwgb3B0cyk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gU2Vzc2lvbkNvbnRyb2xsZXIuZ2V0U2Vzc2lvbih0aGlzKTtcblxuICAgICAgICB0aGlzLmNvbnNvbGVNZXNzYWdlcyA9IG5ldyBCcm93c2VyQ29uc29sZU1lc3NhZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbnVsbDtcblxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmN0eCAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmZpeHR1cmVDdHggPSBudWxsO1xuICAgICAgICB0aGlzLnRlc3RSdW5DdHggPSBudWxsO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvbGVJZCAgPSBudWxsO1xuICAgICAgICB0aGlzLnVzZWRSb2xlU3RhdGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB0aGlzLmVycnMgPSBbXTtcblxuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNJZCAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5hdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50ID0gMDtcblxuICAgICAgICB0aGlzLmRlYnVnZ2luZyAgICAgICAgICAgICAgID0gdGhpcy5vcHRzLmRlYnVnTW9kZSBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmRlYnVnT25GYWlsICAgICAgICAgICAgID0gdGhpcy5vcHRzLmRlYnVnT25GYWlsIGFzIGJvb2xlYW47XG4gICAgICAgIHRoaXMuZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWJ1Z1JlcG9ydGVyUGx1Z2luSG9zdCA9IG5ldyBSZXBvcnRlclBsdWdpbkhvc3QoeyBub0NvbG9yczogZmFsc2UgfSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUgPSBuZXcgQnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlKGJyb3dzZXJDb25uZWN0aW9uLCBzY3JlZW5zaG90Q2FwdHVyZXIsIHRoaXMud2FybmluZ0xvZywgbmF0aXZlQXV0b21hdGlvbik7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyA9IG5ldyBUZXN0UnVuRGVidWdMb2codGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQpO1xuXG4gICAgICAgIHRoaXMucXVhcmFudGluZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IHRoaXMub3B0cy5kZWJ1Z0xvZ2dlcjtcblxuICAgICAgICB0aGlzLm9ic2VydmVkQ2FsbHNpdGVzICAgICAgICAgID0gbmV3IE9ic2VydmVkQ2FsbHNpdGVzU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLmFzeW5jSnNFeHByZXNzaW9uQ2FsbHNpdGVzID0gbmV3IE1hcDxzdHJpbmcsIENhbGxzaXRlUmVjb3JkPigpO1xuXG4gICAgICAgIHRoaXMucmVwbGljYXRvciA9IGNyZWF0ZVJlcGxpY2F0b3IoWyBuZXcgU2VsZWN0b3JOb2RlVHJhbnNmb3JtKCkgXSk7XG5cbiAgICAgICAgdGhpcy5kaXNjb25uZWN0ZWQgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVyclNjcmVlbnNob3RQYXRoID0gbnVsbDtcblxuICAgICAgICB0aGlzLnN0YXJ0UnVuRXhlY3V0aW9uVGltZSAgICAgPSBzdGFydFJ1bkV4ZWN1dGlvblRpbWU7XG4gICAgICAgIHRoaXMucnVuRXhlY3V0aW9uVGltZW91dCAgICAgICA9IHRoaXMuX2dldFJ1bkV4ZWN1dGlvblRpbWVvdXQob3B0cyk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RIb29rRXZlbnRQcm92aWRlciA9IHRoaXMuX2dldFJlcXVlc3RIb29rRXZlbnRQcm92aWRlcigpO1xuICAgICAgICB0aGlzLl9yb2xlUHJvdmlkZXIgICAgICAgICAgICAgPSB0aGlzLl9nZXRSb2xlUHJvdmlkZXIoKTtcblxuICAgICAgICB0aGlzLmNvb2tpZVByb3ZpZGVyICAgID0gQ29va2llUHJvdmlkZXJGYWN0b3J5LmNyZWF0ZSh0aGlzLCB0aGlzLmlzTmF0aXZlQXV0b21hdGlvbik7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2VzUHJvdmlkZXIgPSBTdG9yYWdlc1Byb3ZpZGVyRmFjdG9yeS5jcmVhdGUodGhpcywgdGhpcy5pc05hdGl2ZUF1dG9tYXRpb24pO1xuXG4gICAgICAgIHRoaXMuX2FkZEluamVjdGFibGVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyICgpOiBSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIge1xuICAgICAgICBpZiAoIXRoaXMuaXNOYXRpdmVBdXRvbWF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlU3RvcmFnZXNTbmFwc2hvdCAoc3RvcmFnZVNuYXBzaG90OiBTdG9yYWdlc1NuYXBzaG90KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTmF0aXZlQXV0b21hdGlvbilcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUucmVzdG9yaW5nU3RvcmFnZXMgPSBzdG9yYWdlU25hcHNob3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX25hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUgKCk6IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlQXV0b21hdGlvbi5yZXF1ZXN0UGlwZWxpbmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX25hdGl2ZUF1dG9tYXRpb24gKCk6IE5hdGl2ZUF1dG9tYXRpb25CYXNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uZ2V0TmF0aXZlQXV0b21hdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJvbGVQcm92aWRlciAoKTogUm9sZVByb3ZpZGVyIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOYXRpdmVBdXRvbWF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVBdXRvbWF0aW9uUm9sZVByb3ZpZGVyKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJveHlSb2xlUHJvdmlkZXIodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UGFnZUxvYWRUaW1lb3V0ICh0ZXN0OiBUZXN0LCBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IG51bWJlciB7XG4gICAgICAgIGlmICh0ZXN0LnRpbWVvdXRzPy5wYWdlTG9hZFRpbWVvdXQgIT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybiB0ZXN0LnRpbWVvdXRzLnBhZ2VMb2FkVGltZW91dDtcblxuICAgICAgICByZXR1cm4gb3B0cy5wYWdlTG9hZFRpbWVvdXQgYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlcXVlc3RUaW1lb3V0ICh0ZXN0OiBUZXN0LCBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IFJlcXVlc3RUaW1lb3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2U6IHRlc3QudGltZW91dHM/LnBhZ2VSZXF1ZXN0VGltZW91dCB8fCBvcHRzLnBhZ2VSZXF1ZXN0VGltZW91dCBhcyBudW1iZXIsXG4gICAgICAgICAgICBhamF4OiB0ZXN0LnRpbWVvdXRzPy5hamF4UmVxdWVzdFRpbWVvdXQgfHwgb3B0cy5hamF4UmVxdWVzdFRpbWVvdXQgYXMgbnVtYmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV4ZWN1dGlvblRpbWVvdXQgKHRpbWVvdXQ6IG51bWJlciwgZXJyb3I6IFRlc3RUaW1lb3V0RXJyb3IgfCBSdW5UaW1lb3V0RXJyb3IpOiBFeGVjdXRpb25UaW1lb3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICByZWplY3RXaXRoOiBlcnJvcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRUZXN0RXhlY3V0aW9uVGltZW91dCAob3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHRlc3RFeGVjdXRpb25UaW1lb3V0ID0gb3B0cy50ZXN0RXhlY3V0aW9uVGltZW91dCBhcyBudW1iZXIgfHwgMDtcblxuICAgICAgICBpZiAoIXRlc3RFeGVjdXRpb25UaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEV4ZWN1dGlvblRpbWVvdXQodGVzdEV4ZWN1dGlvblRpbWVvdXQsIG5ldyBUZXN0VGltZW91dEVycm9yKHRlc3RFeGVjdXRpb25UaW1lb3V0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UnVuRXhlY3V0aW9uVGltZW91dCAob3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJ1bkV4ZWN1dGlvblRpbWVvdXQgPSBvcHRzLnJ1bkV4ZWN1dGlvblRpbWVvdXQgYXMgbnVtYmVyIHx8IDA7XG5cbiAgICAgICAgaWYgKCFydW5FeGVjdXRpb25UaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEV4ZWN1dGlvblRpbWVvdXQocnVuRXhlY3V0aW9uVGltZW91dCwgbmV3IFJ1blRpbWVvdXRFcnJvcihydW5FeGVjdXRpb25UaW1lb3V0KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN0UnVuRXhlY3V0aW9uVGltZW91dCAoKTogRXhlY3V0aW9uVGltZW91dCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRSdW5FeGVjdXRpb25UaW1lIHx8ICF0aGlzLnJ1bkV4ZWN1dGlvblRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBjdXJyZW50VGltZW91dCA9IE1hdGgubWF4KHRoaXMucnVuRXhlY3V0aW9uVGltZW91dC50aW1lb3V0IC0gKERhdGUubm93KCkgLSB0aGlzLnN0YXJ0UnVuRXhlY3V0aW9uVGltZS5nZXRUaW1lKCkpLCAwKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RXhlY3V0aW9uVGltZW91dChjdXJyZW50VGltZW91dCwgdGhpcy5ydW5FeGVjdXRpb25UaW1lb3V0LnJlamVjdFdpdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uVGltZW91dCAoKTogRXhlY3V0aW9uVGltZW91dCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0UnVuRXhlY3V0aW9uVGltZW91dCAmJiAoIXRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgfHwgdGhpcy5yZXN0UnVuRXhlY3V0aW9uVGltZW91dC50aW1lb3V0IDwgdGhpcy50ZXN0RXhlY3V0aW9uVGltZW91dC50aW1lb3V0KVxuICAgICAgICAgICAgPyB0aGlzLnJlc3RSdW5FeGVjdXRpb25UaW1lb3V0XG4gICAgICAgICAgICA6IHRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudENEUFNlc3Npb24gKCk6IFByb21pc2U8cmVtb3RlQ2hyb21lLlByb3RvY29sQXBpIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5nZXRDdXJyZW50Q0RQU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZENsaWVudFNjcmlwdENvbnRlbnRXYXJuaW5nc0lmTmVjZXNzYXJ5ICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBlbXB0eSwgZHVwbGljYXRlZENvbnRlbnQgfSA9IGZpbmRQcm9ibGVtYXRpY1NjcmlwdHModGhpcy50ZXN0LmNsaWVudFNjcmlwdHMgYXMgQ2xpZW50U2NyaXB0W10pO1xuXG4gICAgICAgIGlmIChlbXB0eS5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyhXQVJOSU5HX01FU1NBR0UuY2xpZW50U2NyaXB0c1dpdGhFbXB0eUNvbnRlbnQpO1xuXG4gICAgICAgIGlmIChkdXBsaWNhdGVkQ29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldFBsdXJhbFN1ZmZpeChkdXBsaWNhdGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCBkdXBsaWNhdGVkQ29udGVudENsaWVudFNjcmlwdHNTdHIgPSBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcoZHVwbGljYXRlZENvbnRlbnQsICdcXG4nKTtcblxuICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoV0FSTklOR19NRVNTQUdFLmNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQsIHN1ZmZpeCwgZHVwbGljYXRlZENvbnRlbnRDbGllbnRTY3JpcHRzU3RyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZEluamVjdGFibGVzICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkQ2xpZW50U2NyaXB0Q29udGVudFdhcm5pbmdzSWZOZWNlc3NhcnkoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNOYXRpdmVBdXRvbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluamVjdGFibGUuc2NyaXB0cy5wdXNoKC4uLklOSkVDVEFCTEVTLlNDUklQVFMpO1xuICAgICAgICAgICAgdGhpcy5pbmplY3RhYmxlLnN0eWxlcy5wdXNoKElOSkVDVEFCTEVTLlRFU1RDQUZFX1VJX1NUWUxFUyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluamVjdGFibGUudXNlclNjcmlwdHMucHVzaCguLi50aGlzLnRlc3QuY2xpZW50U2NyaXB0cy5tYXAoc2NyaXB0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiAgKHNjcmlwdCBhcyBDbGllbnRTY3JpcHQpLmdldFJlc3VsdFVybCh0aGlzLmlkKSxcbiAgICAgICAgICAgICAgICBwYWdlOiBzY3JpcHQucGFnZSBhcyBSZXF1ZXN0RmlsdGVyUnVsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5qZWN0YWJsZSAoKTogSW5qZWN0YWJsZVJlc291cmNlcyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uaW5qZWN0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUXVhcmFudGluZUluZm8gKHF1YXJhbnRpbmU6IFF1YXJhbnRpbmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWFyYW50aW5lID0gcXVhcmFudGluZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9hZGRSZXF1ZXN0SG9vayAoaG9vazogUmVxdWVzdEhvb2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MuaW5jbHVkZXMoaG9vaykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5wdXNoKGhvb2spO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UmVxdWVzdEhvb2soaG9vayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVtb3ZlUmVxdWVzdEhvb2sgKGhvb2s6IFJlcXVlc3RIb29rKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5pbmNsdWRlcyhob29rKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBwdWxsKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MsIGhvb2spO1xuICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlUmVxdWVzdEhvb2soaG9vayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5pdFJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBob29rLl93YXJuaW5nTG9nID0gdGhpcy53YXJuaW5nTG9nO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGhvb2suX3JlcXVlc3RGaWx0ZXJSdWxlcy5tYXAocnVsZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLmFkZFJlcXVlc3RFdmVudExpc3RlbmVycyhydWxlLCB7XG4gICAgICAgICAgICAgICAgb25SZXF1ZXN0OiAgICAgICAgICAgaG9vay5vblJlcXVlc3QuYmluZChob29rKSxcbiAgICAgICAgICAgICAgICBvbkNvbmZpZ3VyZVJlc3BvbnNlOiBob29rLl9vbkNvbmZpZ3VyZVJlc3BvbnNlLmJpbmQoaG9vayksXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZTogICAgICAgICAgaG9vay5vblJlc3BvbnNlLmJpbmQoaG9vayksXG4gICAgICAgICAgICB9LCAoZXJyOiBSZXF1ZXN0SG9va01ldGhvZEVycm9yKSA9PiB0aGlzLl9vblJlcXVlc3RIb29rTWV0aG9kRXJyb3IoZXJyLCBob29rLl9jbGFzc05hbWUpKTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uUmVxdWVzdEhvb2tNZXRob2RFcnJvciAoZXZlbnQ6IFJlcXVlc3RIb29rTWV0aG9kRXJyb3IsIGhvb2tDbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgZXJyOiBFcnJvciB8IFRlc3RSdW5FcnJvckJhc2UgICAgICAgICAgICA9IGV2ZW50LmVycm9yO1xuICAgICAgICBjb25zdCBpc1JlcXVlc3RIb29rTm90SW1wbGVtZW50ZWRNZXRob2RFcnJvciA9IChlcnIgYXMgdW5rbm93biBhcyBUZXN0UnVuRXJyb3JCYXNlKT8uY29kZSA9PT0gVEVTVF9SVU5fRVJST1JTLnJlcXVlc3RIb29rTm90SW1wbGVtZW50ZWRFcnJvcjtcblxuICAgICAgICBpZiAoIWlzUmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZE1ldGhvZEVycm9yKVxuICAgICAgICAgICAgZXJyID0gbmV3IFJlcXVlc3RIb29rVW5oYW5kbGVkRXJyb3IoZXJyLCBob29rQ2xhc3NOYW1lLCBldmVudC5tZXRob2ROYW1lKTtcblxuICAgICAgICB0aGlzLmFkZEVycm9yKGVycik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZGlzcG9zZVJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBob29rLl93YXJuaW5nTG9nID0gbnVsbDtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChob29rLl9yZXF1ZXN0RmlsdGVyUnVsZXMubWFwKHJ1bGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RIb29rRXZlbnRQcm92aWRlci5yZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMocnVsZSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9kZXRhY2hSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMgKHJ1bGVzOiBSZXF1ZXN0RmlsdGVyUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJ1bGVzLm1hcChydWxlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIucmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzKHJ1bGUpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5pdFJlcXVlc3RIb29rcyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MubWFwKGhvb2sgPT4gdGhpcy5faW5pdFJlcXVlc3RIb29rKGhvb2spKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVNraXBKc0Vycm9yc09wdGlvbiAoKTogYm9vbGVhbiB8IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50ZXN0LnNraXBKc0Vycm9yc09wdGlvbnMgIT09IHZvaWQgMFxuICAgICAgICAgICAgPyB0aGlzLnRlc3Quc2tpcEpzRXJyb3JzT3B0aW9uc1xuICAgICAgICAgICAgOiB0aGlzLm9wdHMuc2tpcEpzRXJyb3JzIGFzIFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3QgfCBib29sZWFuIHx8IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBwcmVwYXJlU2tpcEpzRXJyb3JzT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBIYW1tZXJoZWFkIHBheWxvYWRcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGF5bG9hZFNjcmlwdCAod2luZG93SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgY29uc3Qgc2tpcEpzRXJyb3JzID0gdGhpcy5fcHJlcGFyZVNraXBKc0Vycm9yc09wdGlvbigpO1xuXG4gICAgICAgIHJldHVybiBNdXN0YWNoZS5yZW5kZXIoVEVTVF9SVU5fVEVNUExBVEUsIHtcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2Vzc2lvbi5pZCksXG4gICAgICAgICAgICBicm93c2VySWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmlkKSxcbiAgICAgICAgICAgIGFjdGl2ZVdpbmRvd0lkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlV2luZG93SWQpLFxuICAgICAgICAgICAgd2luZG93SWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkod2luZG93SWQgfHwgJycpLFxuICAgICAgICAgICAgYnJvd3NlckhlYXJ0YmVhdFJlbGF0aXZlVXJsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5oZWFydGJlYXRSZWxhdGl2ZVVybCksXG4gICAgICAgICAgICBicm93c2VyU3RhdHVzUmVsYXRpdmVVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnN0YXR1c1JlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJTdGF0dXNEb25lUmVsYXRpdmVVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uc3RhdHVzRG9uZVJlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJJZGxlUmVsYXRpdmVVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaWRsZVJlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJBY3RpdmVXaW5kb3dJZFVybDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWRVcmwpLFxuICAgICAgICAgICAgYnJvd3NlckVuc3VyZVdpbmRvd0luTmF0aXZlQXV0b21hdGlvblVybDogICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5lbnN1cmVXaW5kb3dJbk5hdGl2ZUF1dG9tYXRpb25VcmwpLFxuICAgICAgICAgICAgYnJvd3NlckNsb3NlV2luZG93VXJsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5jbG9zZVdpbmRvd1VybCksXG4gICAgICAgICAgICBicm93c2VyT3BlbkZpbGVQcm90b2NvbFJlbGF0aXZlVXJsOiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLm9wZW5GaWxlUHJvdG9jb2xSZWxhdGl2ZVVybCksXG4gICAgICAgICAgICBicm93c2VyRGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnRSZWxhdGl2ZVVybDogICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50UmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgYnJvd3NlckRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50U2VxdWVuY2VSZWxhdGl2ZVVybDogSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5kaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlUmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgYnJvd3NlclBhcnNlU2VsZWN0b3JVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5wYXJzZVNlbGVjdG9yUmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgdXNlckFnZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQpLFxuICAgICAgICAgICAgdGVzdE5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy50ZXN0Lm5hbWUpLFxuICAgICAgICAgICAgZml4dHVyZU5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoKHRoaXMudGVzdC5maXh0dXJlIGFzIEZpeHR1cmUpLm5hbWUpLFxuICAgICAgICAgICAgc2VsZWN0b3JUaW1lb3V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnNlbGVjdG9yVGltZW91dCxcbiAgICAgICAgICAgIHBhZ2VMb2FkVGltZW91dDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRUaW1lb3V0LFxuICAgICAgICAgICAgY2hpbGRXaW5kb3dSZWFkeVRpbWVvdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTERfV0lORE9XX1JFQURZX1RJTUVPVVQsXG4gICAgICAgICAgICBza2lwSnNFcnJvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShza2lwSnNFcnJvcnMpLFxuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJldHJ5VGVzdFBhZ2VzLFxuICAgICAgICAgICAgc3BlZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVlZCxcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciksXG4gICAgICAgICAgICBjYW5Vc2VEZWZhdWx0V2luZG93QWN0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmNhblVzZURlZmF1bHRXaW5kb3dBY3Rpb25zKCkpLFxuICAgICAgICAgICAgbmF0aXZlQXV0b21hdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05hdGl2ZUF1dG9tYXRpb24sXG4gICAgICAgICAgICBleHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXhwZXJpbWVudGFsTXVsdGlwbGVXaW5kb3dzLFxuICAgICAgICAgICAgZG9tYWluOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElmcmFtZVBheWxvYWRTY3JpcHQgKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJFbnN1cmVXaW5kb3dJbk5hdGl2ZUF1dG9tYXRpb25VcmwgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmVuc3VyZVdpbmRvd0luTmF0aXZlQXV0b21hdGlvblVybCk7XG4gICAgICAgIGNvbnN0IGV4cGVyaW1lbnRhbE11bHRpcGxlV2luZG93cyA9IHRoaXMuaXNFeHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3M7XG5cbiAgICAgICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcihJRlJBTUVfVEVTVF9SVU5fVEVNUExBVEUsIHtcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2Vzc2lvbi5pZCksXG4gICAgICAgICAgICBzZWxlY3RvclRpbWVvdXQ6ICB0aGlzLm9wdHMuc2VsZWN0b3JUaW1lb3V0LFxuICAgICAgICAgICAgcGFnZUxvYWRUaW1lb3V0OiAgdGhpcy5wYWdlTG9hZFRpbWVvdXQsXG4gICAgICAgICAgICByZXRyeVRlc3RQYWdlczogICAhIXRoaXMub3B0cy5yZXRyeVRlc3RQYWdlcyxcbiAgICAgICAgICAgIHNwZWVkOiAgICAgICAgICAgIHRoaXMuc3BlZWQsXG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIpLFxuICAgICAgICAgICAgbmF0aXZlQXV0b21hdGlvbjogSlNPTi5zdHJpbmdpZnkodGhpcy5pc05hdGl2ZUF1dG9tYXRpb24pLFxuICAgICAgICAgICAgZG9tYWluOiAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGJyb3dzZXJFbnN1cmVXaW5kb3dJbk5hdGl2ZUF1dG9tYXRpb25VcmwsXG4gICAgICAgICAgICBleHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgaGFuZGxlcnNcbiAgICBwdWJsaWMgZ2V0QXV0aENyZWRlbnRpYWxzICgpOiBudWxsIHwgQXV0aENyZWRlbnRpYWxzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdC5hdXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbGVEb3dubG9hZCAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRpbmdIYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQXR0YWNobWVudCAoZGF0YTogeyBpc09wZW5lZEluTmV3V2luZG93OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGEuaXNPcGVuZWRJbk5ld1dpbmRvdylcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERvd25sb2FkaW5nSGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVBhZ2VFcnJvciAoY3R4OiBhbnksIGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbmV3IFBhZ2VMb2FkRXJyb3IoZXJyLCBjdHgucmVxT3B0cy51cmwpO1xuXG4gICAgICAgIGN0eC5yZWRpcmVjdChjdHgudG9Qcm94eVVybChTUEVDSUFMX0VSUk9SX1BBR0UpKTtcbiAgICB9XG5cbiAgICAvLyBUZXN0IGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVUZXN0Rm4gKHBoYXNlOiBUZXN0UnVuUGhhc2UsIGZuOiBGdW5jdGlvbiwgdGltZW91dDogRXhlY3V0aW9uVGltZW91dCB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5waGFzZSA9IHBoYXNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBleGVjdXRlRm5XaXRoVGltZW91dChmbiwgdGltZW91dCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9tYWtlU2NyZWVuc2hvdE9uRmFpbCgpO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycik7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuZXJyU2NyZWVuc2hvdFBhdGggPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLl9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5CZWZvcmVIb29rICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMudGVzdC5nbG9iYWxCZWZvcmVGbilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdEJlZm9yZUhvb2ssIHRoaXMudGVzdC5nbG9iYWxCZWZvcmVGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0LmJlZm9yZUZuKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdEJlZm9yZUhvb2ssIHRoaXMudGVzdC5iZWZvcmVGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0LmZpeHR1cmU/LmJlZm9yZUVhY2hGbilcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pbkZpeHR1cmVCZWZvcmVFYWNoSG9vaywgdGhpcy50ZXN0LmZpeHR1cmU/LmJlZm9yZUVhY2hGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5BZnRlckhvb2sgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy50ZXN0LmFmdGVyRm4pXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pblRlc3RBZnRlckhvb2ssIHRoaXMudGVzdC5hZnRlckZuLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRlc3QuZml4dHVyZT8uYWZ0ZXJFYWNoRm4pXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pbkZpeHR1cmVBZnRlckVhY2hIb29rLCB0aGlzLnRlc3QuZml4dHVyZT8uYWZ0ZXJFYWNoRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdC5nbG9iYWxBZnRlckZuKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0QWZ0ZXJIb29rLCB0aGlzLnRlc3QuZ2xvYmFsQWZ0ZXJGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9maW5hbGl6ZVRlc3RSdW4gKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGVzdFJ1blRyYWNrZXIucmVtb3ZlQWN0aXZlVGVzdFJ1bihpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGVzdFJ1blRyYWNrZXIuYWRkQWN0aXZlVGVzdFJ1bih0aGlzKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG5cbiAgICAgICAgY29uc3Qgb25EaXNjb25uZWN0ZWQgPSAoZXJyOiBFcnJvcik6IHZvaWQgPT4gdGhpcy5fZGlzY29ubmVjdChlcnIpO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ub25jZSgnZGlzY29ubmVjdGVkJywgb25EaXNjb25uZWN0ZWQpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMub25jZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyZWFkeScpO1xuXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLl9ydW5CZWZvcmVIb29rKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdCwgdGhpcy50ZXN0LmZuIGFzIEZ1bmN0aW9uLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcnVuQWZ0ZXJIb29rKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNjb25uZWN0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5waGFzZSA9IFRlc3RSdW5QaGFzZS5wZW5kaW5nRmluYWxpemF0aW9uO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucmVtb3ZlTGlzdGVuZXIoJ2Rpc2Nvbm5lY3RlZCcsIG9uRGlzY29ubmVjdGVkKTtcblxuICAgICAgICBpZiAodGhpcy5lcnJzLmxlbmd0aCAmJiB0aGlzLmRlYnVnT25GYWlsKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJTdHIgPSB0aGlzLmRlYnVnUmVwb3J0ZXJQbHVnaW5Ib3N0LmZvcm1hdEVycm9yKHRoaXMuZXJyc1swXSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZCh2b2lkIDAsIG51bGwsIGVyclN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZS1kb25lJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlRlc3REb25lQ29tbWFuZCgpKTtcblxuICAgICAgICB0aGlzLl9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkoKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLmNsZWFyUmVxdWVzdEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMubm9ybWFsaXplUmVxdWVzdEhvb2tFcnJvcnMoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9maW5hbGl6ZVRlc3RSdW4odGhpcy5zZXNzaW9uLmlkKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2RvbmUnKTtcbiAgICB9XG5cbiAgICAvLyBFcnJvcnNcbiAgICBwcml2YXRlIF9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkgKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucGVuZGluZ1BhZ2VFcnJvcjtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbnN1cmVFcnJvcklkIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmlkID0gZXJyLmlkIHx8IG5hbm9pZCg3KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVFcnJvckFkYXB0ZXIgKGVycjogRXJyb3IpOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIge1xuICAgICAgICB0aGlzLl9lbnN1cmVFcnJvcklkKGVycik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIoZXJyLCB7XG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQsXG4gICAgICAgICAgICBzY3JlZW5zaG90UGF0aDogdGhpcy5lcnJTY3JlZW5zaG90UGF0aCB8fCAnJyxcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgdGVzdFJ1blBoYXNlOiAgIHRoaXMucGhhc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFcnJvciAoZXJyOiBFcnJvciB8IFRlc3RDYWZlRXJyb3JMaXN0IHwgVGVzdFJ1bkVycm9yQmFzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJMaXN0ID0gKGVyciBpbnN0YW5jZW9mIFRlc3RDYWZlRXJyb3JMaXN0ID8gZXJyLml0ZW1zIDogW2Vycl0pIGFzIEVycm9yW107XG5cbiAgICAgICAgZXJyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2NyZWF0ZUVycm9yQWRhcHRlcihpdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5lcnJzLnB1c2goYWRhcHRlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemVSZXF1ZXN0SG9va0Vycm9ycyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIb29rRXJyb3JzID0gcmVtb3ZlKHRoaXMuZXJycywgZSA9PlxuICAgICAgICAgICAgKGUgYXMgdW5rbm93biBhcyBUZXN0UnVuRXJyb3JCYXNlKS5jb2RlID09PSBURVNUX1JVTl9FUlJPUlMucmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZEVycm9yIHx8XG4gICAgICAgICAgICAoZSBhcyB1bmtub3duIGFzIFRlc3RSdW5FcnJvckJhc2UpLmNvZGUgPT09IFRFU1RfUlVOX0VSUk9SUy5yZXF1ZXN0SG9va1VuaGFuZGxlZEVycm9yKSBhcyB1bmtub3duIGFzIFJlcXVlc3RIb29rQmFzZUVycm9yW107XG5cbiAgICAgICAgaWYgKCFyZXF1ZXN0SG9va0Vycm9ycy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdW5pcVJlcXVlc3RIb29rRXJyb3JzID0gY2hhaW4ocmVxdWVzdEhvb2tFcnJvcnMpXG4gICAgICAgICAgICAudW5pcUJ5KGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IGUgYXMgdW5rbm93biBhcyBSZXF1ZXN0SG9va0Jhc2VFcnJvcjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIuaG9va0NsYXNzTmFtZSArIGVyci5tZXRob2ROYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0QnkoWydob29rQ2xhc3NOYW1lJywgJ21ldGhvZE5hbWUnXSlcbiAgICAgICAgICAgIC52YWx1ZSgpIGFzIHVua25vd24gYXMgVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyW107XG5cbiAgICAgICAgdGhpcy5lcnJzID0gdGhpcy5lcnJzLmNvbmNhdCh1bmlxUmVxdWVzdEhvb2tFcnJvcnMpO1xuICAgIH1cblxuICAgIC8vIFRhc2sgcXVldWVcbiAgICBwcml2YXRlIF9lbnF1ZXVlQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdClcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVQZW5kaW5nUmVxdWVzdChjb21tYW5kKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudC0tO1xuICAgICAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUucHVzaCh7IGNvbW1hbmQsIHJlc29sdmUsIHJlamVjdCwgY2FsbHNpdGUgfSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdChBTExfRFJJVkVSX1RBU0tTX0FEREVEX1RPX1FVRVVFX0VWRU5ULCB0aGlzLmRyaXZlclRhc2tRdWV1ZS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRyaXZlclRhc2tRdWV1ZUxlbmd0aCAoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudCA/IHByb21pc2lmeUV2ZW50KHRoaXMgYXMgdW5rbm93biBhcyBFdmVudEVtaXR0ZXIsIEFMTF9EUklWRVJfVEFTS1NfQURERURfVE9fUVVFVUVfRVZFTlQpIDogUHJvbWlzZS5yZXNvbHZlKHRoaXMuZHJpdmVyVGFza1F1ZXVlLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9lbnF1ZXVlQnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIGNvbnN0IGNvbnNvbGVNZXNzYWdlQ29weSA9IHRoaXMuY29uc29sZU1lc3NhZ2VzLmdldENvcHkoKTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBjb25zb2xlTWVzc2FnZUNvcHlbU3RyaW5nKHRoaXMuYWN0aXZlV2luZG93SWQpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2VucXVldWVHZXRDb29raWVzIChjb21tYW5kOiBHZXRDb29raWVzQ29tbWFuZCk6IFByb21pc2U8UGFydGlhbDxDb29raWVPcHRpb25zPltdPiB7XG4gICAgICAgIGNvbnN0IHsgY29va2llcywgdXJscyB9ID0gY29tbWFuZDtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb29raWVQcm92aWRlci5nZXRDb29raWVzKGNvb2tpZXMsIHVybHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZW5xdWV1ZVNldENvb2tpZXMgKGNvbW1hbmQ6IFNldENvb2tpZXNDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgPSBjb21tYW5kLmNvb2tpZXM7XG4gICAgICAgIGNvbnN0IHVybCAgICAgPSBjb21tYW5kLnVybCB8fCBhd2FpdCB0aGlzLmdldEN1cnJlbnRVcmwoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb29raWVQcm92aWRlci5zZXRDb29raWVzKGNvb2tpZXMsIHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9lbnF1ZXVlRGVsZXRlQ29va2llcyAoY29tbWFuZDogRGVsZXRlQ29va2llc0NvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBjb29raWVzLCB1cmxzIH0gPSBjb21tYW5kO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvb2tpZVByb3ZpZGVyLmRlbGV0ZUNvb2tpZXMoY29va2llcywgdXJscyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZW5xdWV1ZVNldEJyZWFrcG9pbnRDb21tYW5kIChjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQgfCB1bmRlZmluZWQsIHNlbGVjdG9yPzogb2JqZWN0IHwgbnVsbCwgZXJyb3I/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWdMb2dnZXIpXG4gICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyLnNob3dCcmVha3BvaW50KHRoaXMuc2Vzc2lvbi5pZCwgdGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQsIGNhbGxzaXRlLCBlcnJvcik7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z2dpbmcgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuU2V0QnJlYWtwb2ludENvbW1hbmQoISFlcnJvciwgc2VsZWN0b3IpLCBjYWxsc2l0ZSkgYXMgYm9vbGVhbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxOb25TZXJ2aWNlVGFza3MgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZSA9IHRoaXMuZHJpdmVyVGFza1F1ZXVlLmZpbHRlcihkcml2ZXJUYXNrID0+IGlzU2VydmljZUNvbW1hbmQoZHJpdmVyVGFzay5jb21tYW5kKSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUucmVtb3ZlQWxsTm9uU2VydmljZU1hbmlwdWxhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBDdXJyZW50IGRyaXZlciB0YXNrXG4gICAgcHVibGljIGdldCBjdXJyZW50RHJpdmVyVGFzayAoKTogRHJpdmVyVGFzayB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyaXZlclRhc2tRdWV1ZVswXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJhc2VVcmwgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuYmFzZVVybCBhcyBzdHJpbmcgfHwgJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZUN1cnJlbnREcml2ZXJUYXNrIChyZXN1bHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudERyaXZlclRhc2sucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZS5zaGlmdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3REb25lQ29tbWFuZFF1ZXVlZClcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbE5vblNlcnZpY2VUYXNrcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmNhbGxzaXRlID0gZXJyLmNhbGxzaXRlIHx8IHRoaXMuY3VycmVudERyaXZlclRhc2suY2FsbHNpdGU7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50RHJpdmVyVGFzay5yZWplY3QoZXJyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTm9uU2VydmljZVRhc2tzKCk7XG4gICAgfVxuXG4gICAgLy8gUGVuZGluZyByZXF1ZXN0XG4gICAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nUmVxdWVzdCAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nUmVxdWVzdC5yZXNwb25zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlUGVuZGluZ1JlcXVlc3QgKGNvbW1hbmQ6IENvbW1hbmRCYXNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZSA9IGNvbW1hbmQ7XG5cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1JlcXVlc3QpXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0LnJlc29sdmUoY29tbWFuZCk7XG5cbiAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcml2ZXIgcmVxdWVzdFxuICAgIHByaXZhdGUgX3Nob3VsZFJlc29sdmVDdXJyZW50RHJpdmVyVGFzayAoZHJpdmVyU3RhdHVzOiBEcml2ZXJTdGF0dXMpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbW1hbmQgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNvbW1hbmQ7XG5cbiAgICAgICAgY29uc3QgaXNFeGVjdXRpbmdPYnNlcnZhdGlvbkNvbW1hbmQgPSBjdXJyZW50Q29tbWFuZCBpbnN0YW5jZW9mIGV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmRzLkV4ZWN1dGVTZWxlY3RvckNvbW1hbmQgfHxcbiAgICAgICAgICAgIGN1cnJlbnRDb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZDtcblxuICAgICAgICBjb25zdCBpc0RlYnVnQWN0aXZlID0gY3VycmVudENvbW1hbmQgaW5zdGFuY2VvZiBzZXJ2aWNlQ29tbWFuZHMuU2V0QnJlYWtwb2ludENvbW1hbmQ7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRXhlY3V0ZUN1cnJlbnRDb21tYW5kID1cbiAgICAgICAgICAgIGRyaXZlclN0YXR1cy5pc0ZpcnN0UmVxdWVzdEFmdGVyV2luZG93U3dpdGNoaW5nICYmIChpc0V4ZWN1dGluZ09ic2VydmF0aW9uQ29tbWFuZCB8fCBpc0RlYnVnQWN0aXZlKTtcblxuICAgICAgICByZXR1cm4gIXNob3VsZEV4ZWN1dGVDdXJyZW50Q29tbWFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mdWxmaWxsQ3VycmVudERyaXZlclRhc2sgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50RHJpdmVyVGFzaylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoZHJpdmVyU3RhdHVzLndhcm5pbmdzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRyaXZlclN0YXR1cy53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nOiBEcml2ZXJXYXJuaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkUmVuZGVyZWRXYXJuaW5nKHRoaXMud2FybmluZ0xvZywgV0FSTklOR19NRVNTQUdFW3dhcm5pbmcudHlwZV0sIHRoaXMuY3VycmVudERyaXZlclRhc2suY2FsbHNpdGUsIC4uLndhcm5pbmcuYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkcml2ZXJTdGF0dXMuZXhlY3V0aW9uRXJyb3IpXG4gICAgICAgICAgICB0aGlzLl9yZWplY3RDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMuZXhlY3V0aW9uRXJyb3IpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9zaG91bGRSZXNvbHZlQ3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzKSlcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVQYWdlRXJyb3JTdGF0dXMgKHBhZ2VFcnJvcjogRXJyb3IpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERyaXZlclRhc2sgJiYgaXNDb21tYW5kUmVqZWN0YWJsZUJ5UGFnZUVycm9yKHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrKHBhZ2VFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IHRoaXMucGVuZGluZ1BhZ2VFcnJvciB8fCBwYWdlRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZURyaXZlclJlcXVlc3QgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogUHJvbWlzZTxDb21tYW5kQmFzZSB8IG51bGwgfCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgaXNUZXN0RG9uZSAgICAgICAgICAgICAgICAgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrICYmIHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZC50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfVFlQRS50ZXN0RG9uZTtcbiAgICAgICAgY29uc3QgcGFnZUVycm9yICAgICAgICAgICAgICAgICAgPSB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgfHwgZHJpdmVyU3RhdHVzLnBhZ2VFcnJvcjtcbiAgICAgICAgY29uc3QgY3VycmVudFRhc2tSZWplY3RlZEJ5RXJyb3IgPSBwYWdlRXJyb3IgJiYgdGhpcy5faGFuZGxlUGFnZUVycm9yU3RhdHVzKHBhZ2VFcnJvcik7XG5cbiAgICAgICAgdGhpcy5jb25zb2xlTWVzc2FnZXMuY29uY2F0KGRyaXZlclN0YXR1cy5jb25zb2xlTWVzc2FnZXMpO1xuXG4gICAgICAgIGlmICghY3VycmVudFRhc2tSZWplY3RlZEJ5RXJyb3IgJiYgZHJpdmVyU3RhdHVzLmlzQ29tbWFuZFJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGlzVGVzdERvbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvbHZlQ3VycmVudERyaXZlclRhc2soKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBURVNUX0RPTkVfQ09ORklSTUFUSU9OX1JFU1BPTlNFO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9mdWxmaWxsQ3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzKTtcblxuICAgICAgICAgICAgaWYgKGRyaXZlclN0YXR1cy5pc1BlbmRpbmdXaW5kb3dTd2l0Y2hpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q3VycmVudERyaXZlclRhc2tDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0Q3VycmVudERyaXZlclRhc2tDb21tYW5kICgpOiBQcm9taXNlPENvbW1hbmRCYXNlIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudERyaXZlclRhc2spXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGhpcy5jdXJyZW50RHJpdmVyVGFzay5jb21tYW5kO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5uYXZpZ2F0ZVRvICYmIChjb21tYW5kIGFzIGFueSkuc3RhdGVTbmFwc2hvdClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JvbGVQcm92aWRlci51c2VTdGF0ZVNuYXBzaG90KEpTT04ucGFyc2UoKGNvbW1hbmQgYXMgYW55KS5zdGF0ZVNuYXBzaG90KSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSBjb21tYW5kXG4gICAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUpzRXhwcmVzc2lvbiAoY29tbWFuZDogRXhlY3V0ZUV4cHJlc3Npb25Db21tYW5kKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZhcmlhYmxlTmFtZSA9IGNvbW1hbmQucmVzdWx0VmFyaWFibGVOYW1lO1xuICAgICAgICBsZXQgZXhwcmVzc2lvbiAgICAgICAgICAgPSBjb21tYW5kLmV4cHJlc3Npb247XG5cbiAgICAgICAgaWYgKHJlc3VsdFZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBgJHtyZXN1bHRWYXJpYWJsZU5hbWV9ID0gJHtleHByZXNzaW9ufSwgJHtyZXN1bHRWYXJpYWJsZU5hbWV9YDtcblxuICAgICAgICByZXR1cm4gZXhlY3V0ZUpzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0aGlzLCB7IHNraXBWaXNpYmlsaXR5Q2hlY2s6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiAoY29tbWFuZDogRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsIGNhbGxzaXRlPzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24oY29tbWFuZC5leHByZXNzaW9uLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUFzc2VydGlvbiAoY29tbWFuZDogQXNzZXJ0aW9uQ29tbWFuZCwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblRpbWVvdXQgPSBnZXRBc3NlcnRpb25UaW1lb3V0KGNvbW1hbmQsIHRoaXMub3B0cyk7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yICAgICAgICAgPSBuZXcgQXNzZXJ0aW9uRXhlY3V0b3IoY29tbWFuZCwgYXNzZXJ0aW9uVGltZW91dCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4ZWN1dG9yLm9uY2UoJ3N0YXJ0LWFzc2VydGlvbi1yZXRyaWVzJywgKHRpbWVvdXQ6IG51bWJlcikgPT4gdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlNob3dBc3NlcnRpb25SZXRyaWVzU3RhdHVzQ29tbWFuZCh0aW1lb3V0KSkpO1xuICAgICAgICBleGVjdXRvci5vbmNlKCdlbmQtYXNzZXJ0aW9uLXJldHJpZXMnLCAoc3VjY2VzczogYm9vbGVhbikgPT4gdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLkhpZGVBc3NlcnRpb25SZXRyaWVzU3RhdHVzQ29tbWFuZChzdWNjZXNzKSkpO1xuXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVGbiA9IHRoaXMuZGVjb3JhdGVQcmV2ZW50RW1pdEFjdGlvbkV2ZW50cygoKSA9PiBleGVjdXRvci5ydW4oKSwgeyBwcmV2ZW50OiB0cnVlIH0pO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBleGVjdXRlRm4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGp1c3RDb25maWd1cmF0aW9uV2l0aENvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogdm9pZCB7XG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS50ZXN0RG9uZSkge1xuICAgICAgICAgICAgdGhpcy50ZXN0RG9uZUNvbW1hbmRRdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdMb2dnZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlci5oaWRlQnJlYWtwb2ludCh0aGlzLnNlc3Npb24uaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0TmF0aXZlRGlhbG9nSGFuZGxlcilcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciA9IChjb21tYW5kIGFzIGFueSkuZGlhbG9nSGFuZGxlcjtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zd2l0Y2hUb0lmcmFtZSlcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSWZyYW1lU2VsZWN0b3IgPSAoY29tbWFuZCBhcyBhbnkpLnNlbGVjdG9yO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvTWFpbldpbmRvdylcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSWZyYW1lU2VsZWN0b3IgPSBudWxsO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnNldFRlc3RTcGVlZClcbiAgICAgICAgICAgIHRoaXMuc3BlZWQgPSAoY29tbWFuZCBhcyBhbnkpLnNwZWVkO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnNldFBhZ2VMb2FkVGltZW91dClcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRUaW1lb3V0ID0gKGNvbW1hbmQgYXMgYW55KS5kdXJhdGlvbjtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZGVidWdnaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9hZGp1c3RTY3JlZW5zaG90Q29tbWFuZCAoY29tbWFuZDogVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBicm93c2VySWQgICAgICAgICAgICAgICAgICAgID0gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5pZDtcbiAgICAgICAgY29uc3QgeyBoYXNDaHJvbWVsZXNzU2NyZWVuc2hvdHMgfSA9IGF3YWl0IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucHJvdmlkZXIuaGFzQ3VzdG9tQWN0aW9uRm9yQnJvd3Nlcihicm93c2VySWQpO1xuXG4gICAgICAgIGlmICghaGFzQ2hyb21lbGVzc1NjcmVlbnNob3RzKVxuICAgICAgICAgICAgY29tbWFuZC5nZW5lcmF0ZVNjcmVlbnNob3RNYXJrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9hZGp1c3RDb21tYW5kT3B0aW9uc0FuZEVudmlyb25tZW50IChjb21tYW5kOiBDb21tYW5kQmFzZSwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICgoY29tbWFuZCBhcyBhbnkpLm9wdGlvbnM/LmNvbmZpZGVudGlhbCAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS50eXBlVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZCgoY29tbWFuZCBhcyBhbnkpLnNlbGVjdG9yLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVwbGljYXRvci5kZWNvZGUocmVzdWx0KTtcblxuICAgICAgICAgICAgKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zLmNvbmZpZGVudGlhbCA9IGlzUGFzc3dvcmRJbnB1dChub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnByZXNzS2V5KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuR2V0QWN0aXZlRWxlbWVudENvbW1hbmQoKSk7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVwbGljYXRvci5kZWNvZGUocmVzdWx0KTtcblxuICAgICAgICAgICAgKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zLmNvbmZpZGVudGlhbCA9IGlzUGFzc3dvcmRJbnB1dChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfc2V0QnJlYWtwb2ludElmTmVjZXNzYXJ5IChjb21tYW5kOiBDb21tYW5kQmFzZSwgY2FsbHNpdGU/OiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgJiYgdGhpcy5kZWJ1Z2dpbmcgJiYgY2FuU2V0RGVidWdnZXJCcmVha3BvaW50QmVmb3JlQ29tbWFuZChjb21tYW5kKSlcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZChjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjb21tYW5kOiBDb21tYW5kQmFzZSB8IEFjdGlvbkNvbW1hbmRCYXNlLCBjYWxsc2l0ZT86IHN0cmluZyB8IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBjb21tYW5kIGluc3RhbmNlb2YgQWN0aW9uQ29tbWFuZEJhc2VcbiAgICAgICAgICAgID8gdGhpcy5fZXhlY3V0ZUFjdGlvbkNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpXG4gICAgICAgICAgICA6IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZXhlY3V0ZUFjdGlvbkNvbW1hbmQgKGNvbW1hbmQ6IEFjdGlvbkNvbW1hbmRCYXNlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uQXJncyA9IHsgYXBpQWN0aW9uTmFtZTogY29tbWFuZC5tZXRob2ROYW1lLCBjb21tYW5kIH07XG5cbiAgICAgICAgbGV0IGVycm9yQWRhcHRlciA9IG51bGw7XG4gICAgICAgIGxldCBlcnJvciAgICAgICAgPSBudWxsO1xuICAgICAgICBsZXQgcmVzdWx0ICAgICAgID0gbnVsbDtcblxuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9hZGp1c3RDb21tYW5kT3B0aW9uc0FuZEVudmlyb25tZW50KGNvbW1hbmQsIGNhbGxzaXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEFjdGlvbkV2ZW50KCdhY3Rpb24tc3RhcnQnLCBhY3Rpb25BcmdzKTtcblxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBoYXNlID09PSBUZXN0UnVuUGhhc2UucGVuZGluZ0ZpbmFsaXphdGlvbiAmJiBlcnIgaW5zdGFuY2VvZiBFeHRlcm5hbEFzc2VydGlvbkxpYnJhcnlFcnJvcilcbiAgICAgICAgICAgICAgICBhZGRSZW5kZXJlZFdhcm5pbmcodGhpcy53YXJuaW5nTG9nLCB7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS51bmF3YWl0ZWRNZXRob2RXaXRoQXNzZXJ0aW9uLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9LCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBjaGVjayBpZiBlcnJvciBpcyBUZXN0Q2FmZUVycm9yTGlzdCBpcyBzcGVjaWZpYyBmb3IgdGhlIGB1c2VSb2xlYCBhY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGlzIFRlc3RDYWZlRXJyb3JMaXN0IHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhbiBhZGFwdGVyLFxuICAgICAgICAgICAgLy8gc2luY2UgZXJyb3IgaXMgYWxyZWFkeSB3YXMgcHJvY2Vzc2VkIGluIHJvbGUgaW5pdGlhbGl6ZXJcbiAgICAgICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgVGVzdENhZmVFcnJvckxpc3QpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWFrZVNjcmVlbnNob3RPbkZhaWwoY29tbWFuZC5hY3Rpb25JZCk7XG5cbiAgICAgICAgICAgICAgICBlcnJvckFkYXB0ZXIgPSB0aGlzLl9jcmVhdGVFcnJvckFkYXB0ZXIocHJvY2Vzc1Rlc3RGbkVycm9yKGVycm9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXJyb3JBZGFwdGVyID0gZXJyb3IuYWRhcHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uQXJncywge1xuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBlcnI6IGVycm9yQWRhcHRlcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QWN0aW9uRXZlbnQoJ2FjdGlvbi1kb25lJywgYWN0aW9uQXJncyk7XG5cbiAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBjYWxsc2l0ZT86IENhbGxzaXRlUmVjb3JkIHwgc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHRoaXMuZGVidWdMb2cuY29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUGFnZUVycm9yICYmIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcihjb21tYW5kKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3RDb21tYW5kV2l0aFBhZ2VFcnJvcihjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgaWYgKGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZChjb21tYW5kKSlcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudCsrO1xuXG4gICAgICAgIHRoaXMuX2FkanVzdENvbmZpZ3VyYXRpb25XaXRoQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9zZXRCcmVha3BvaW50SWZOZWNlc3NhcnkoY29tbWFuZCwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpO1xuXG4gICAgICAgIGlmIChpc1NjcmVlbnNob3RDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVTY3JlZW5zaG90cykge1xuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnNjcmVlbnNob3RzRGlzYWJsZWQsIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkanVzdFNjcmVlbnNob3RDb21tYW5kKGNvbW1hbmQgYXMgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNCcm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUucHVzaChjb21tYW5kKTtcblxuICAgICAgICAgICAgaWYgKGlzUmVzaXplV2luZG93Q29tbWFuZChjb21tYW5kKSAmJiB0aGlzLm9wdHMudmlkZW9QYXRoKVxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnZpZGVvQnJvd3NlclJlc2l6aW5nLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9LCB0aGlzLnRlc3QubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUud2FpdClcbiAgICAgICAgICAgIHJldHVybiBkZWxheSgoY29tbWFuZCBhcyBhbnkpLnRpbWVvdXQpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zZXRQYWdlTG9hZFRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRlYnVnID0gIXRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaXNIZWFkbGVzc0Jyb3dzZXIoKTtcblxuICAgICAgICAgICAgaWYgKGNhbkRlYnVnKVxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9lbnF1ZXVlU2V0QnJlYWtwb2ludENvbW1hbmQoY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQsIChjb21tYW5kIGFzIERlYnVnQ29tbWFuZCk/LnNlbGVjdG9yLCB2b2lkIDApO1xuXG4gICAgICAgICAgICB0aGlzLmRlYnVnZ2luZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS5kZWJ1Z0luSGVhZGxlc3NFcnJvciwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnVzZVJvbGUpIHtcbiAgICAgICAgICAgIGxldCBmbiA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuX3VzZVJvbGUoKGNvbW1hbmQgYXMgYW55KS5yb2xlLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgICAgIGZuID0gdGhpcy5kZWNvcmF0ZVByZXZlbnRFbWl0QWN0aW9uRXZlbnRzKGZuLCB7IHByZXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICBmbiA9IHRoaXMuZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyhmbiwgeyBkaXNhYmxlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5ydW5DdXN0b21BY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZm4sIGFyZ3MgfSA9IGNvbW1hbmQgYXMgUnVuQ3VzdG9tQWN0aW9uQ29tbWFuZDtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRGbiAgICA9IHdyYXBDdXN0b21BY3Rpb24oZm4pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgd3JhcHBlZEZuKHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnJlcG9ydClcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9ydERhdGFMb2cuYWRkRGF0YShjb21tYW5kLmFyZ3MgYXMgYW55W10pO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5hc3NlcnRpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzc2VydGlvbihjb21tYW5kIGFzIEFzc2VydGlvbkNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZXhlY3V0ZUV4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZUpzRXhwcmVzc2lvbihjb21tYW5kIGFzIEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmV4ZWN1dGVBc3luY0V4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uKGNvbW1hbmQgYXMgRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsIGNhbGxzaXRlIGFzIHN0cmluZyk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXMpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9QcmV2aW91c1dpbmRvdylcbiAgICAgICAgICAgIChjb21tYW5kIGFzIGFueSkud2luZG93SWQgPSB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnByZXZpb3VzQWN0aXZlV2luZG93SWQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZShjb21tYW5kIGFzIFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZ2V0Q29va2llcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlR2V0Q29va2llcyhjb21tYW5kIGFzIEdldENvb2tpZXNDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0Q29va2llcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlU2V0Q29va2llcyhjb21tYW5kIGFzIFNldENvb2tpZXNDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGVsZXRlQ29va2llcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlRGVsZXRlQ29va2llcyhjb21tYW5kIGFzIERlbGV0ZUNvb2tpZXNDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuYWRkUmVxdWVzdEhvb2tzKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKChjb21tYW5kIGFzIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQpLmhvb2tzLm1hcChob29rID0+IHRoaXMuX2FkZFJlcXVlc3RIb29rKGhvb2spKSk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnJlbW92ZVJlcXVlc3RIb29rcylcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCgoY29tbWFuZCBhcyBSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kKS5ob29rcy5tYXAoaG9vayA9PiB0aGlzLl9yZW1vdmVSZXF1ZXN0SG9vayhob29rKSkpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5nZXRDdXJyZW50Q0RQU2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRDRFBTZXNzaW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWplY3RDb21tYW5kV2l0aFBhZ2VFcnJvciAoY2FsbHNpdGU/OiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8RXJyb3I+IHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5wZW5kaW5nUGFnZUVycm9yO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmNhbGxzaXRlICAgICAgICAgID0gY2FsbHNpdGU7XG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VuZENsb3NlQ2hpbGRXaW5kb3dPbkZpbGVEb3dubG9hZGluZ0NvbW1hbmQgKCk6IENvbW1hbmRCYXNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhY3Rpb25Db21tYW5kcy5DbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX21ha2VTY3JlZW5zaG90T25GYWlsIChmYWlsZWRBY3Rpb25JZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IHNjcmVlbnNob3RzIH0gPSB0aGlzLm9wdHMgYXMgeyBzY3JlZW5zaG90czogU2NyZWVuc2hvdE9wdGlvblZhbHVlIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLmVyclNjcmVlbnNob3RQYXRoICYmIHNjcmVlbnNob3RzPy50YWtlT25GYWlscylcbiAgICAgICAgICAgIHRoaXMuZXJyU2NyZWVuc2hvdFBhdGggPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBicm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZHMuVGFrZVNjcmVlbnNob3RPbkZhaWxDb21tYW5kKHsgZmFpbGVkQWN0aW9uSWQsIGZ1bGxQYWdlOiBzY3JlZW5zaG90cy5mdWxsUGFnZSB9KSkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RlY29yYXRlV2l0aEZsYWcgKGZuOiBGdW5jdGlvbiwgZmxhZ05hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXNbZmxhZ05hbWVdID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdGhpc1tmbGFnTmFtZV0gPSAhdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29yYXRlUHJldmVudEVtaXRBY3Rpb25FdmVudHMgKGZuOiBGdW5jdGlvbiwgeyBwcmV2ZW50IH06IHsgcHJldmVudDogYm9vbGVhbiB9KTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcmF0ZVdpdGhGbGFnKGZuLCAncHJldmVudEVtaXRBY3Rpb25FdmVudHMnLCBwcmV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyAoZm46IEZ1bmN0aW9uLCB7IGRpc2FibGUgfTogeyBkaXNhYmxlOiBib29sZWFuIH0pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29yYXRlV2l0aEZsYWcoZm4sICdkaXNhYmxlRGVidWdCcmVha3BvaW50cycsIGRpc2FibGUpO1xuICAgIH1cblxuICAgIC8vIFJvbGUgbWFuYWdlbWVudFxuICAgIHB1YmxpYyBhc3luYyBnZXRTdGF0ZVNuYXBzaG90ICgpOiBQcm9taXNlPFN0YXRlU25hcHNob3Q+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLl9yb2xlUHJvdmlkZXIuZ2V0U3RhdGVTbmFwc2hvdCgpO1xuXG4gICAgICAgIHN0YXRlLnN0b3JhZ2VzID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLkJhY2t1cFN0b3JhZ2VzQ29tbWFuZCgpKSBhcyBTdG9yYWdlc1NuYXBzaG90O1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9jbGVhblVwQ3R4cyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuY3R4ICAgICAgICA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuZml4dHVyZUN0eCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMudGVzdFJ1bkN0eCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN3aXRjaFRvQ2xlYW5SdW4gKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NsZWFuVXBDdHhzKCk7XG5cbiAgICAgICAgdGhpcy5jb25zb2xlTWVzc2FnZXMgPSBuZXcgQnJvd3NlckNvbnNvbGVNZXNzYWdlcygpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3JvbGVQcm92aWRlci51c2VTdGF0ZVNuYXBzaG90KFN0YXRlU25hcHNob3QuZW1wdHkoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3BlZWQgIT09IHRoaXMub3B0cy5zcGVlZCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0U3BlZWRDb21tYW5kID0gbmV3IGFjdGlvbkNvbW1hbmRzLlNldFRlc3RTcGVlZENvbW1hbmQoeyBzcGVlZDogdGhpcy5vcHRzLnNwZWVkIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHNldFNwZWVkQ29tbWFuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdlTG9hZFRpbWVvdXQgIT09IHRoaXMub3B0cy5wYWdlTG9hZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCh7IGR1cmF0aW9uOiB0aGlzLm9wdHMucGFnZUxvYWRUaW1lb3V0IH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvVXJsKHVybCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRGlhbG9nSGFuZGxlckNvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQoeyBkaWFsb2dIYW5kbGVyOiB7IGZuOiBudWxsIH0gfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQocmVtb3ZlRGlhbG9nSGFuZGxlckNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5hdmlnYXRlVG9VcmwgKHVybDogc3RyaW5nLCBmb3JjZVJlbG9hZDogYm9vbGVhbiwgc3RhdGVTbmFwc2hvdD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0ZUNvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuTmF2aWdhdGVUb0NvbW1hbmQoeyB1cmwsIGZvcmNlUmVsb2FkLCBzdGF0ZVNuYXBzaG90IH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmF2aWdhdGVDb21tYW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRTdGF0ZVNuYXBzaG90RnJvbVJvbGUgKHJvbGU6IFJvbGUpOiBQcm9taXNlPFN0YXRlU25hcHNob3Q+IHtcbiAgICAgICAgY29uc3QgcHJldlBoYXNlID0gdGhpcy5waGFzZTtcblxuICAgICAgICBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS5pbml0aWFsaXplZCAmJiByb2xlLmluaXRFcnIgaW5zdGFuY2VvZiBUZXN0Q2FmZUVycm9yTGlzdCAmJiByb2xlLmluaXRFcnIuaGFzRXJyb3JzKVxuICAgICAgICAgICAgcm9sZS5pbml0RXJyLmFkYXB0ZXIgPSB0aGlzLl9jcmVhdGVFcnJvckFkYXB0ZXIocm9sZS5pbml0RXJyLml0ZW1zWzBdKTtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLmluUm9sZUluaXRpYWxpemVyO1xuXG4gICAgICAgIGlmIChyb2xlLnBoYXNlID09PSBST0xFX1BIQVNFLnVuaW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICBhd2FpdCByb2xlLmluaXRpYWxpemUodGhpcyk7XG5cbiAgICAgICAgZWxzZSBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS5wZW5kaW5nSW5pdGlhbGl6YXRpb24pXG4gICAgICAgICAgICBhd2FpdCBwcm9taXNpZnlFdmVudChyb2xlLCAnaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICBpZiAocm9sZS5pbml0RXJyKVxuICAgICAgICAgICAgdGhyb3cgcm9sZS5pbml0RXJyO1xuXG4gICAgICAgIHRoaXMucGhhc2UgPSBwcmV2UGhhc2U7XG5cbiAgICAgICAgcmV0dXJuIHJvbGUuc3RhdGVTbmFwc2hvdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF91c2VSb2xlIChyb2xlOiBSb2xlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMucGhhc2UgPT09IFRlc3RSdW5QaGFzZS5pblJvbGVJbml0aWFsaXplcilcbiAgICAgICAgICAgIHRocm93IG5ldyBSb2xlU3dpdGNoSW5Sb2xlSW5pdGlhbGl6ZXJFcnJvcihjYWxsc2l0ZSk7XG5cbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBuZXcgVGVzdFJ1bkJvb2ttYXJrKHRoaXMsIHJvbGUpO1xuXG4gICAgICAgIGF3YWl0IGJvb2ttYXJrLmluaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Um9sZUlkKVxuICAgICAgICAgICAgdGhpcy51c2VkUm9sZVN0YXRlc1t0aGlzLmN1cnJlbnRSb2xlSWRdID0gYXdhaXQgdGhpcy5nZXRTdGF0ZVNuYXBzaG90KCk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGVTbmFwc2hvdCA9IHRoaXMudXNlZFJvbGVTdGF0ZXNbcm9sZS5pZF0gfHwgYXdhaXQgdGhpcy5fZ2V0U3RhdGVTbmFwc2hvdEZyb21Sb2xlKHJvbGUpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3JvbGVQcm92aWRlci51c2VTdGF0ZVNuYXBzaG90KHN0YXRlU25hcHNob3QpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvbGVJZCA9IHJvbGUuaWQ7XG5cbiAgICAgICAgYXdhaXQgYm9va21hcmsucmVzdG9yZShjYWxsc2l0ZSwgc3RhdGVTbmFwc2hvdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRVcmwgKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQ2xpZW50RnVuY3Rpb25CdWlsZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgICAgICB9LCB7IGJvdW5kVGVzdFJ1bjogdGhpcyB9KTtcblxuICAgICAgICBjb25zdCBnZXRMb2NhdGlvbiA9IGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0TG9jYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlIChjb21tYW5kOiBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjdXJyZW50V2luZG93cyA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmV3IEdldEN1cnJlbnRXaW5kb3dzQ29tbWFuZCh7fSwgdGhpcykgYXMgQ29tbWFuZEJhc2UpIGFzIE9wZW5lZFdpbmRvd0luZm9ybWF0aW9uW107XG5cbiAgICAgICAgY29uc3Qgd2luZG93cyA9IGF3YWl0IGFzeW5jRmlsdGVyPE9wZW5lZFdpbmRvd0luZm9ybWF0aW9uPihjdXJyZW50V2luZG93cywgYXN5bmMgd25kID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgIG5ldyBVUkwod25kLnVybCksXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3bmQudGl0bGUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kLmNoZWNrV2luZG93KHByZWRpY2F0ZURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yKGUubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghd2luZG93cy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2luZG93Tm90Rm91bmRFcnJvcigpO1xuXG4gICAgICAgIGlmICh3aW5kb3dzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS5tdWx0aXBsZVdpbmRvd3NGb3VuZEJ5UHJlZGljYXRlLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQoeyB3aW5kb3dJZDogd2luZG93c1swXS5pZCB9LCB0aGlzKSBhcyBDb21tYW5kQmFzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzY29ubmVjdCAoZXJyOiBFcnJvcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERyaXZlclRhc2spXG4gICAgICAgICAgICB0aGlzLl9yZWplY3RDdXJyZW50RHJpdmVyVGFzayhlcnIpO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnZGlzY29ubmVjdGVkJywgZXJyKTtcblxuICAgICAgICB0ZXN0UnVuVHJhY2tlci5yZW1vdmVBY3RpdmVUZXN0UnVuKHRoaXMuc2Vzc2lvbi5pZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlRmlsZURvd25sb2FkaW5nSW5OZXdXaW5kb3dSZXF1ZXN0ICgpOiBDb21tYW5kQmFzZSB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREb3dubG9hZGluZ0hhbmRsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbmRDbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmdDb21tYW5kKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW1pdEFjdGlvbkV2ZW50IChldmVudE5hbWU6IHN0cmluZywgYXJnczogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICghdGhpcy5wcmV2ZW50RW1pdEFjdGlvbkV2ZW50cylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNNdWx0aXBsZVdpbmRvd3NBbGxvd2VkICh0ZXN0UnVuOiBUZXN0UnVuKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgZGlzYWJsZU11bHRpcGxlV2luZG93cywgdGVzdCB9ID0gdGVzdFJ1bjtcblxuICAgICAgICByZXR1cm4gIWRpc2FibGVNdWx0aXBsZVdpbmRvd3MgJiYgISh0ZXN0IGFzIExlZ2FjeVRlc3RSdW4pLmlzTGVnYWN5ICYmICEhdGVzdFJ1bi5hY3RpdmVXaW5kb3dJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0LnNraXApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyQ29va2llc0FuZFN0b3JhZ2VzKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbml0UmVxdWVzdEhvb2tzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9jbGVhckNvb2tpZXNBbmRTdG9yYWdlcyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVQYWdlUmVsb2FkcylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvb2tpZVByb3ZpZGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmFnZXNQcm92aWRlci5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVXaW5kb3dJZCAoKTogbnVsbCB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmFjdGl2ZVdpbmRvd0lkO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IHRoaXMgZnVuY3Rpb24gaXMgdGltZS1jcml0aWNhbCBhbmQgbXVzdCByZXR1cm4gQVNBUCB0byBhdm9pZCBjbGllbnQgZGlzY29ubmVjdGlvblxuICAgIHByaXZhdGUgYXN5bmMgW0NMSUVOVF9NRVNTQUdFUy5yZWFkeV0gKG1zZzogRHJpdmVyTWVzc2FnZSk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBpZiAobXNnLnN0YXR1cy5pc09ic2VydmluZ0ZpbGVEb3dubG9hZGluZ0luTmV3V2luZG93KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUZpbGVEb3dubG9hZGluZ0luTmV3V2luZG93UmVxdWVzdCgpO1xuXG4gICAgICAgIHRoaXMuZGVidWdMb2cuZHJpdmVyTWVzc2FnZShtc2cpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpc2Nvbm5lY3RlZClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnRlc3RSdW5SZXF1ZXN0SW5EaXNjb25uZWN0ZWRCcm93c2VyLCB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmJyb3dzZXJJbmZvLmFsaWFzKSk7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0ZWQnKTtcblxuICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmdSZXF1ZXN0KCk7XG5cbiAgICAgICAgLy8gTk9URTogdGhlIGRyaXZlciBzZW5kcyB0aGUgc3RhdHVzIGZvciB0aGUgc2Vjb25kIHRpbWUgaWYgaXQgZGlkbid0IGdldCBhIHJlc3BvbnNlIGF0IHRoZVxuICAgICAgICAvLyBmaXJzdCB0cnkuIFRoaXMgaXMgcG9zc2libGUgd2hlbiB0aGUgcGFnZSB3YXMgdW5sb2FkZWQgYWZ0ZXIgdGhlIGRyaXZlciBzZW50IHRoZSBzdGF0dXMuXG4gICAgICAgIGlmIChtc2cuc3RhdHVzLmlkID09PSB0aGlzLmxhc3REcml2ZXJTdGF0dXNJZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZTtcblxuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNJZCAgICAgICA9IG1zZy5zdGF0dXMuaWQ7XG4gICAgICAgIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5faGFuZGxlRHJpdmVyUmVxdWVzdChtc2cuc3RhdHVzKTtcblxuICAgICAgICBpZiAodGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2UgfHwgbXNnLnN0YXR1cy5pc1BlbmRpbmdXaW5kb3dTd2l0Y2hpbmcpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2U7XG5cbiAgICAgICAgLy8gTk9URTogd2Ugc2VuZCBhbiBlbXB0eSByZXNwb25zZSBhZnRlciB0aGUgTUFYX1JFU1BPTlNFX0RFTEFZIHRpbWVvdXQgaXMgZXhjZWVkZWQgdG8ga2VlcCBjb25uZWN0aW9uXG4gICAgICAgIC8vIHdpdGggdGhlIGNsaWVudCBhbmQgcHJldmVudCB0aGUgcmVzcG9uc2UgdGltZW91dCBleGNlcHRpb24gb24gdGhlIGNsaWVudCBzaWRlXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fcmVzb2x2ZVBlbmRpbmdSZXF1ZXN0KG51bGwpLCBNQVhfUkVTUE9OU0VfREVMQVkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0geyByZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlVGltZW91dCB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIFtDTElFTlRfTUVTU0FHRVMucmVhZHlGb3JCcm93c2VyTWFuaXB1bGF0aW9uXSAobXNnOiBEcml2ZXJNZXNzYWdlKTogUHJvbWlzZTxCcm93c2VyTWFuaXB1bGF0aW9uUmVzdWx0PiB7XG4gICAgICAgIHRoaXMuZGVidWdMb2cuZHJpdmVyTWVzc2FnZShtc2cpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBsZXQgZXJyb3IgID0gbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUuZXhlY3V0ZVBlbmRpbmdNYW5pcHVsYXRpb24obXNnLCB0aGlzLl9tZXNzYWdlQnVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogICAgICAgICAgICBlcnIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogICAgICAgICBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhY2s6ICAgICAgICAgICBlcnIuc3RhY2ssXG4gICAgICAgICAgICAgICAgICAgIGlzSW50ZXJuYWxFcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0LCBlcnJvciB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgW0NMSUVOVF9NRVNTQUdFUy53YWl0Rm9yRmlsZURvd25sb2FkXSAobXNnOiBEcml2ZXJNZXNzYWdlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuZGVidWdMb2cuZHJpdmVyTWVzc2FnZShtc2cpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
1021
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1ydW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUlnQjtBQUVoQixtQ0FBZ0M7QUFDaEMsMkRBQXNEO0FBQ3RELHNFQUE2QztBQUM3Qyx3REFBZ0M7QUFDaEMsdUZBQTZEO0FBQzdELDREQUEwQztBQUMxQyxpR0FBb0Y7QUFDcEYsc0VBQXFEO0FBQ3JELCtDQUFpRDtBQUVqRCxrREFVNkI7QUFFN0Isd0VBQWdEO0FBQ2hELDJEQUEyQztBQUMzQywyREFBbUM7QUFDbkMsbUZBQXlEO0FBQ3pELG9FQUE0QztBQUM1QywrRUFBcUQ7QUFDckQsMERBQXVDO0FBQ3ZDLDBFQUF5RDtBQUN6RCwwRkFBZ0U7QUFDaEUsK0VBQXNEO0FBQ3RELHVGQUErRDtBQUUvRCw2REFRNkI7QUFFN0IsbUVBQXFEO0FBQ3JELDBEQUF3RTtBQUN4RSw0Q0FBK0U7QUFFL0UsNENBUTBCO0FBRTFCLGdEQVk0QjtBQUc1QiwyQ0FBa0U7QUFDbEUsNEZBQWlFO0FBQ2pFLCtEQUF5RjtBQUl6Riw4RUFBcUQ7QUFFckQsOEZBQW9FO0FBQ3BFLDhGQUFvRTtBQU1wRSxnREFBb0U7QUFLcEUsdUdBQTZFO0FBTTdFLG9EQUFtQztBQUVuQyxnRkFHNEM7QUFFNUMsaUdBQXVFO0FBQ3ZFLHVFQUE4QztBQUM5QyxzRUFBdUQ7QUFDdkQseUVBQWdEO0FBR2hELCtGQUFvRTtBQUNwRSw2QkFBMEI7QUFFMUIsMERBQW1FO0FBQ25FLCtDQUEwRDtBQUcxRCxnREFBNkQ7QUFFN0QsbUZBQXlEO0FBRXpELG1EQUl5QjtBQUl6QixrRkFBd0Q7QUFHeEQsTUFBTSxXQUFXLEdBQXFCLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RSxNQUFNLHFCQUFxQixHQUFXLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFD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QUFDLENBQUMseUJBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFFLEdBQWtCO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjs7Z0JBRUcsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLE9BQU8sQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQXp5Q0QsMEJBeXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgcHVsbCxcbiAgICByZW1vdmUsXG4gICAgY2hhaW4sXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgeyByZWFkU3luYyBhcyByZWFkIH0gZnJvbSAncmVhZC1maWxlLXJlbGF0aXZlJztcbmltcG9ydCBwcm9taXNpZnlFdmVudCBmcm9tICdwcm9taXNpZnktZXZlbnQnO1xuaW1wb3J0IE11c3RhY2hlIGZyb20gJ211c3RhY2hlJztcbmltcG9ydCBBc3luY0V2ZW50RW1pdHRlciBmcm9tICcuLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCBUZXN0UnVuRGVidWdMb2cgZnJvbSAnLi9kZWJ1Zy1sb2cnO1xuaW1wb3J0IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlciBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlcic7XG5pbXBvcnQgVGVzdENhZmVFcnJvckxpc3QgZnJvbSAnLi4vZXJyb3JzL2Vycm9yLWxpc3QnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuXG5pbXBvcnQge1xuICAgIFJlcXVlc3RIb29rVW5oYW5kbGVkRXJyb3IsXG4gICAgUGFnZUxvYWRFcnJvcixcbiAgICBSb2xlU3dpdGNoSW5Sb2xlSW5pdGlhbGl6ZXJFcnJvcixcbiAgICBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yLFxuICAgIFdpbmRvd05vdEZvdW5kRXJyb3IsXG4gICAgUmVxdWVzdEhvb2tCYXNlRXJyb3IsXG4gICAgVGVzdFRpbWVvdXRFcnJvcixcbiAgICBFeHRlcm5hbEFzc2VydGlvbkxpYnJhcnlFcnJvcixcbiAgICBSdW5UaW1lb3V0RXJyb3IsXG59IGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bi8nO1xuXG5pbXBvcnQgQ0xJRU5UX01FU1NBR0VTIGZyb20gJy4vY2xpZW50LW1lc3NhZ2VzJztcbmltcG9ydCBDT01NQU5EX1RZUEUgZnJvbSAnLi9jb21tYW5kcy90eXBlJztcbmltcG9ydCBkZWxheSBmcm9tICcuLi91dGlscy9kZWxheSc7XG5pbXBvcnQgaXNQYXNzd29yZElucHV0IGZyb20gJy4uL3V0aWxzL2lzLXBhc3N3b3JkLWlucHV0JztcbmltcG9ydCB0ZXN0UnVuTWFya2VyIGZyb20gJy4vbWFya2VyLXN5bWJvbCc7XG5pbXBvcnQgdGVzdFJ1blRyYWNrZXIgZnJvbSAnLi4vYXBpL3Rlc3QtcnVuLXRyYWNrZXInO1xuaW1wb3J0IFJPTEVfUEhBU0UgZnJvbSAnLi4vcm9sZS9waGFzZSc7XG5pbXBvcnQgUmVwb3J0ZXJQbHVnaW5Ib3N0IGZyb20gJy4uL3JlcG9ydGVyL3BsdWdpbi1ob3N0JztcbmltcG9ydCBCcm93c2VyQ29uc29sZU1lc3NhZ2VzIGZyb20gJy4vYnJvd3Nlci1jb25zb2xlLW1lc3NhZ2VzJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRSBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5cbmltcG9ydCB7XG4gICAgU3RhdGVTbmFwc2hvdCxcbiAgICBTUEVDSUFMX0VSUk9SX1BBR0UsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgSW5qZWN0YWJsZVJlc291cmNlcyxcbiAgICBSZXF1ZXN0SG9va01ldGhvZEVycm9yLFxuICAgIFN0b3JhZ2VzU25hcHNob3QsXG4gICAgUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0ICogYXMgSU5KRUNUQUJMRVMgZnJvbSAnLi4vYXNzZXRzL2luamVjdGFibGVzJztcbmltcG9ydCB7IGZpbmRQcm9ibGVtYXRpY1NjcmlwdHMgfSBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0UGx1cmFsU3VmZml4LCBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy9zdHJpbmcnO1xuXG5pbXBvcnQge1xuICAgIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcixcbiAgICBpc0Jyb3dzZXJNYW5pcHVsYXRpb25Db21tYW5kLFxuICAgIGlzU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgaXNTZXJ2aWNlQ29tbWFuZCxcbiAgICBjYW5TZXREZWJ1Z2dlckJyZWFrcG9pbnRCZWZvcmVDb21tYW5kLFxuICAgIGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZCxcbiAgICBpc1Jlc2l6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4vY29tbWFuZHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICAgIEV4ZWN1dGVBc3luY0V4cHJlc3Npb25Db21tYW5kLFxuICAgIEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCxcbiAgICBHZXRDdXJyZW50V2luZG93c0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dDb21tYW5kLFxuICAgIEdldENvb2tpZXNDb21tYW5kLFxuICAgIFNldENvb2tpZXNDb21tYW5kLFxuICAgIERlbGV0ZUNvb2tpZXNDb21tYW5kLFxuICAgIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQsXG4gICAgUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCxcbiAgICBSdW5DdXN0b21BY3Rpb25Db21tYW5kLFxufSBmcm9tICcuL2NvbW1hbmRzL2FjdGlvbnMnO1xuaW1wb3J0IHsgRGVidWdDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9vYnNlcnZhdGlvbic7XG5cbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTLCBURVNUX1JVTl9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHByb2Nlc3NUZXN0Rm5FcnJvciBmcm9tICcuLi9lcnJvcnMvcHJvY2Vzcy10ZXN0LWZuLWVycm9yJztcbmltcG9ydCB7IGNyZWF0ZVJlcGxpY2F0b3IsIFNlbGVjdG9yTm9kZVRyYW5zZm9ybSB9IGZyb20gJy4uL2NsaWVudC1mdW5jdGlvbnMvcmVwbGljYXRvcic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IENhcHR1cmVyIGZyb20gJy4uL3NjcmVlbnNob3RzL2NhcHR1cmVyJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IFNlc3Npb25Db250cm9sbGVyIGZyb20gJy4vc2Vzc2lvbi1jb250cm9sbGVyJztcbmltcG9ydCBUZXN0Q29udHJvbGxlciBmcm9tICcuLi9hcGkvdGVzdC1jb250cm9sbGVyJztcbmltcG9ydCBCcm93c2VyTWFuaXB1bGF0aW9uUXVldWUgZnJvbSAnLi9icm93c2VyLW1hbmlwdWxhdGlvbi1xdWV1ZSc7XG5pbXBvcnQgT2JzZXJ2ZWRDYWxsc2l0ZXNTdG9yYWdlIGZyb20gJy4vb2JzZXJ2ZWQtY2FsbHNpdGVzLXN0b3JhZ2UnO1xuaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdCc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uJztcbmltcG9ydCB7IFF1YXJhbnRpbmUgfSBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucy9xdWFyYW50aW5lJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9hcGkvcmVxdWVzdC1ob29rcy9ob29rJztcbmltcG9ydCBEcml2ZXJTdGF0dXMgZnJvbSAnLi4vY2xpZW50L2RyaXZlci9zdGF0dXMnO1xuaW1wb3J0IHsgQ29tbWFuZEJhc2UsIEFjdGlvbkNvbW1hbmRCYXNlIH0gZnJvbSAnLi9jb21tYW5kcy9iYXNlLmpzJztcbmltcG9ydCBSb2xlIGZyb20gJy4uL3JvbGUvcm9sZSc7XG5pbXBvcnQgeyBUZXN0UnVuRXJyb3JCYXNlIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9ycyc7XG5pbXBvcnQgeyBDYWxsc2l0ZVJlY29yZCB9IGZyb20gJ0BkZXZleHByZXNzL2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgZ2V0QXNzZXJ0aW9uVGltZW91dCBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucy9nZXQtYXNzZXJ0aW9uLXRpbWVvdXQnO1xuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvYXNzZXJ0aW9uJztcbmltcG9ydCB7IFRha2VTY3JlZW5zaG90QmFzZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJztcbi8vQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGVzdFJ1biBhcyBMZWdhY3lUZXN0UnVuIH0gZnJvbSAndGVzdGNhZmUtbGVnYWN5LWFwaSc7XG5pbXBvcnQgeyBBdXRoQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ludGVyZmFjZXMnO1xuaW1wb3J0IFRlc3RSdW5QaGFzZSBmcm9tICcuL3BoYXNlJztcblxuaW1wb3J0IHtcbiAgICBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kLFxuICAgIEV4ZWN1dGVTZWxlY3RvckNvbW1hbmQsXG59IGZyb20gJy4vY29tbWFuZHMvZXhlY3V0ZS1jbGllbnQtZnVuY3Rpb24nO1xuXG5pbXBvcnQgYWRkUmVuZGVyZWRXYXJuaW5nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IGdldEJyb3dzZXIgZnJvbSAnLi4vdXRpbHMvZ2V0LWJyb3dzZXInO1xuaW1wb3J0IEFzc2VydGlvbkV4ZWN1dG9yIGZyb20gJy4uL2Fzc2VydGlvbnMvZXhlY3V0b3InO1xuaW1wb3J0IGFzeW5jRmlsdGVyIGZyb20gJy4uL3V0aWxzL2FzeW5jLWZpbHRlcic7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IE1lc3NhZ2VCdXMgZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS1idXMnO1xuaW1wb3J0IGV4ZWN1dGVGbldpdGhUaW1lb3V0IGZyb20gJy4uL3V0aWxzL2V4ZWN1dGUtZm4td2l0aC10aW1lb3V0JztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi9jb21tYW5kcy9vcHRpb25zJztcbmltcG9ydCB7IHByZXBhcmVTa2lwSnNFcnJvcnNPcHRpb25zIH0gZnJvbSAnLi4vYXBpL3NraXAtanMtZXJyb3JzJztcbmltcG9ydCB7IENvb2tpZVByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4vY29va2llcy9mYWN0b3J5JztcbmltcG9ydCB7IENvb2tpZVByb3ZpZGVyIH0gZnJvbSAnLi9jb29raWVzL2Jhc2UnO1xuaW1wb3J0IHsgU3RvcmFnZXNQcm92aWRlciB9IGZyb20gJy4vc3RvcmFnZXMvYmFzZSc7XG5pbXBvcnQgeyBTdG9yYWdlc1Byb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4vc3RvcmFnZXMvZmFjdG9yeSc7XG5cbmltcG9ydCB3cmFwQ3VzdG9tQWN0aW9uIGZyb20gJy4uL2FwaS93cmFwLWN1c3RvbS1hY3Rpb24nO1xuXG5pbXBvcnQge1xuICAgIE5hdGl2ZUF1dG9tYXRpb25Sb2xlUHJvdmlkZXIsXG4gICAgUHJveHlSb2xlUHJvdmlkZXIsXG4gICAgUm9sZVByb3ZpZGVyLFxufSBmcm9tICcuL3JvbGUtcHJvdmlkZXInO1xuXG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RQaXBlbGluZSBmcm9tICcuLi9uYXRpdmUtYXV0b21hdGlvbi9yZXF1ZXN0LXBpcGVsaW5lJztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25CYXNlIH0gZnJvbSAnLi4vbmF0aXZlLWF1dG9tYXRpb24nO1xuaW1wb3J0IFJlcG9ydERhdGFMb2cgZnJvbSAnLi4vcmVwb3J0ZXIvcmVwb3J0LWRhdGEtbG9nJztcbmltcG9ydCByZW1vdGVDaHJvbWUgZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuXG5jb25zdCBsYXp5UmVxdWlyZSAgICAgICAgICAgICAgICAgICA9IHJlcXVpcmUoJ2ltcG9ydC1sYXp5JykocmVxdWlyZSk7XG5jb25zdCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgICAgICAgICA9IGxhenlSZXF1aXJlKCcuLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJyk7XG5jb25zdCBUZXN0UnVuQm9va21hcmsgICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2Jvb2ttYXJrJyk7XG5jb25zdCBhY3Rpb25Db21tYW5kcyAgICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2NvbW1hbmRzL2FjdGlvbnMnKTtcbmNvbnN0IGJyb3dzZXJNYW5pcHVsYXRpb25Db21tYW5kcyAgID0gbGF6eVJlcXVpcmUoJy4vY29tbWFuZHMvYnJvd3Nlci1tYW5pcHVsYXRpb24nKTtcbmNvbnN0IHNlcnZpY2VDb21tYW5kcyAgICAgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4vY29tbWFuZHMvc2VydmljZScpO1xuY29uc3QgZXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZHMgPSBsYXp5UmVxdWlyZSgnLi9jb21tYW5kcy9leGVjdXRlLWNsaWVudC1mdW5jdGlvbicpO1xuXG5jb25zdCB7IGV4ZWN1dGVKc0V4cHJlc3Npb24sIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiB9ID0gbGF6eVJlcXVpcmUoJy4vZXhlY3V0ZS1qcy1leHByZXNzaW9uJyk7XG5cbmNvbnN0IFRFU1RfUlVOX1RFTVBMQVRFICAgICAgICAgICAgICAgPSByZWFkKCcuLi9jbGllbnQvdGVzdC1ydW4vaW5kZXguanMubXVzdGFjaGUnKSBhcyBzdHJpbmc7XG5jb25zdCBJRlJBTUVfVEVTVF9SVU5fVEVNUExBVEUgICAgICAgID0gcmVhZCgnLi4vY2xpZW50L3Rlc3QtcnVuL2lmcmFtZS5qcy5tdXN0YWNoZScpIGFzIHN0cmluZztcbmNvbnN0IFRFU1RfRE9ORV9DT05GSVJNQVRJT05fUkVTUE9OU0UgPSAndGVzdC1kb25lLWNvbmZpcm1hdGlvbic7XG5jb25zdCBNQVhfUkVTUE9OU0VfREVMQVkgICAgICAgICAgICAgID0gMzAwMDtcbmNvbnN0IENISUxEX1dJTkRPV19SRUFEWV9USU1FT1VUICAgICAgPSAzMCAqIDEwMDA7XG5cbmNvbnN0IEFMTF9EUklWRVJfVEFTS1NfQURERURfVE9fUVVFVUVfRVZFTlQgPSAnYWxsLWRyaXZlci10YXNrcy1hZGRlZC10by1xdWV1ZSc7XG5cblxuaW50ZXJmYWNlIFRlc3RSdW5Jbml0IHtcbiAgICB0ZXN0OiBUZXN0O1xuICAgIGJyb3dzZXJDb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbjtcbiAgICBzY3JlZW5zaG90Q2FwdHVyZXI6IENhcHR1cmVyO1xuICAgIGdsb2JhbFdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG4gICAgbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG4gICAgc3RhcnRSdW5FeGVjdXRpb25UaW1lPzogRGF0ZTtcbiAgICBuYXRpdmVBdXRvbWF0aW9uOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRHJpdmVyVGFzayB7XG4gICAgY29tbWFuZDogQ29tbWFuZEJhc2U7XG4gICAgcmVzb2x2ZTogRnVuY3Rpb247XG4gICAgcmVqZWN0OiBGdW5jdGlvbjtcbiAgICBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQ7XG59XG5cbmludGVyZmFjZSBEcml2ZXJNZXNzYWdlIHtcbiAgICBzdGF0dXM6IERyaXZlclN0YXR1cztcbn1cblxuaW50ZXJmYWNlIERyaXZlcldhcm5pbmcge1xuICAgIHR5cGU6IGtleW9mIHR5cGVvZiBXQVJOSU5HX01FU1NBR0U7XG4gICAgYXJnczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0VGltZW91dCB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBhamF4PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRXhlY3V0aW9uVGltZW91dCB7XG4gICAgdGltZW91dDogbnVtYmVyO1xuICAgIHJlamVjdFdpdGg6IFRlc3RUaW1lb3V0RXJyb3IgfCBSdW5UaW1lb3V0RXJyb3I7XG59XG5cbmludGVyZmFjZSBQZW5kaW5nUmVxdWVzdCB7XG4gICAgcmVzcG9uc2VUaW1lb3V0OiBOb2RlSlMuVGltZW91dDtcbiAgICByZXNvbHZlOiBGdW5jdGlvbjtcbiAgICByZWplY3Q6IEZ1bmN0aW9uO1xufVxuXG5pbnRlcmZhY2UgQnJvd3Nlck1hbmlwdWxhdGlvblJlc3VsdCB7XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGVycm9yOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgT3BlbmVkV2luZG93SW5mb3JtYXRpb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFJ1biBleHRlbmRzIEFzeW5jRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIFt0ZXN0UnVuTWFya2VyXTogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0RGF0YUxvZzogUmVwb3J0RGF0YUxvZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+O1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXN0OiBUZXN0O1xuICAgIHB1YmxpYyByZWFkb25seSBicm93c2VyQ29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb247XG4gICAgcHVibGljIHVuc3RhYmxlOiBib29sZWFuO1xuICAgIHB1YmxpYyBwaGFzZTogVGVzdFJ1blBoYXNlO1xuICAgIHByaXZhdGUgZHJpdmVyVGFza1F1ZXVlOiBEcml2ZXJUYXNrW107XG4gICAgcHJpdmF0ZSB0ZXN0RG9uZUNvbW1hbmRRdWV1ZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGFjdGl2ZURpYWxvZ0hhbmRsZXI6IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQgfCBudWxsO1xuICAgIHB1YmxpYyBhY3RpdmVJZnJhbWVTZWxlY3RvcjogRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCB8IG51bGw7XG4gICAgcHVibGljIHNwZWVkOiBudW1iZXI7XG4gICAgcHVibGljIHBhZ2VMb2FkVGltZW91dDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVzdEV4ZWN1dGlvblRpbWVvdXQ6IEV4ZWN1dGlvblRpbWVvdXQgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcnVuRXhlY3V0aW9uVGltZW91dDogRXhlY3V0aW9uVGltZW91dCB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlUGFnZVJlbG9hZHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkaXNhYmxlUGFnZUNhY2hpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVxdWVzdFRpbWVvdXQ6IFJlcXVlc3RUaW1lb3V0O1xuICAgIHB1YmxpYyByZWFkb25seSBzZXNzaW9uOiBTZXNzaW9uQ29udHJvbGxlcjtcbiAgICBwdWJsaWMgY29uc29sZU1lc3NhZ2VzOiBCcm93c2VyQ29uc29sZU1lc3NhZ2VzO1xuICAgIHByaXZhdGUgcGVuZGluZ1JlcXVlc3Q6IFBlbmRpbmdSZXF1ZXN0IHwgbnVsbDtcbiAgICBwdWJsaWMgcGVuZGluZ1BhZ2VFcnJvcjogUGFnZUxvYWRFcnJvciB8IEVycm9yIHwgbnVsbDtcbiAgICBwdWJsaWMgY29udHJvbGxlcjogVGVzdENvbnRyb2xsZXIgfCBudWxsO1xuICAgIHB1YmxpYyBjdHg6IG9iamVjdDtcbiAgICBwdWJsaWMgZml4dHVyZUN0eDogb2JqZWN0IHwgbnVsbDtcbiAgICBwdWJsaWMgdGVzdFJ1bkN0eDogb2JqZWN0IHwgbnVsbDtcbiAgICBwcml2YXRlIGN1cnJlbnRSb2xlSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VkUm9sZVN0YXRlczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwdWJsaWMgZXJyczogVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyW107XG4gICAgcHJpdmF0ZSBsYXN0RHJpdmVyU3RhdHVzSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSBsYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2U6IENvbW1hbmRCYXNlIHwgbnVsbCB8IHN0cmluZztcbiAgICBwcml2YXRlIGZpbGVEb3dubG9hZGluZ0hhbmRsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVzb2x2ZVdhaXRGb3JGaWxlRG93bmxvYWRpbmdQcm9taXNlOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHJpdmF0ZSBhZGRpbmdEcml2ZXJUYXNrc0NvdW50OiBudW1iZXI7XG4gICAgcHVibGljIGRlYnVnZ2luZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnT25GYWlsOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZURlYnVnQnJlYWtwb2ludHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z1JlcG9ydGVyUGx1Z2luSG9zdDogUmVwb3J0ZXJQbHVnaW5Ib3N0O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlOiBCcm93c2VyTWFuaXB1bGF0aW9uUXVldWU7XG4gICAgcHJpdmF0ZSBkZWJ1Z0xvZzogVGVzdFJ1bkRlYnVnTG9nO1xuICAgIHB1YmxpYyBxdWFyYW50aW5lOiBRdWFyYW50aW5lIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBhbnk7XG4gICAgcHVibGljIG9ic2VydmVkQ2FsbHNpdGVzOiBPYnNlcnZlZENhbGxzaXRlc1N0b3JhZ2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBsaWNhdG9yOiBhbnk7XG4gICAgcHJpdmF0ZSBkaXNjb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBlcnJTY3JlZW5zaG90UGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIGFzeW5jSnNFeHByZXNzaW9uQ2FsbHNpdGVzOiBNYXA8c3RyaW5nLCBDYWxsc2l0ZVJlY29yZD47XG4gICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXI6IEJyb3dzZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvb2tpZVByb3ZpZGVyOiBDb29raWVQcm92aWRlcjtcbiAgICBwcml2YXRlIF9zdG9yYWdlc1Byb3ZpZGVyOiBTdG9yYWdlc1Byb3ZpZGVyO1xuICAgIHB1YmxpYyByZWFkb25seSBzdGFydFJ1bkV4ZWN1dGlvblRpbWU/OiBEYXRlO1xuICAgIHB1YmxpYyBmaW5pc2hUaW1lPzogRGF0ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI6IFJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb2xlUHJvdmlkZXI6IFJvbGVQcm92aWRlcjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNOYXRpdmVBdXRvbWF0aW9uOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBpc0V4cGVyaW1lbnRhbE11bHRpcGxlV2luZG93czogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoeyB0ZXN0LCBicm93c2VyQ29ubmVjdGlvbiwgc2NyZWVuc2hvdENhcHR1cmVyLCBnbG9iYWxXYXJuaW5nTG9nLCBvcHRzLCBtZXNzYWdlQnVzLCBzdGFydFJ1bkV4ZWN1dGlvblRpbWUsIG5hdGl2ZUF1dG9tYXRpb24gfTogVGVzdFJ1bkluaXQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzW3Rlc3RSdW5NYXJrZXJdICAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cyAgICAgICA9IG1lc3NhZ2VCdXM7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgICAgPSBuZXcgV2FybmluZ0xvZyhnbG9iYWxXYXJuaW5nTG9nLCBXYXJuaW5nTG9nLmNyZWF0ZUFkZFdhcm5pbmdDYWxsYmFjayhtZXNzYWdlQnVzLCB0aGlzKSk7XG4gICAgICAgIHRoaXMucmVwb3J0RGF0YUxvZyAgICAgPSBuZXcgUmVwb3J0RGF0YUxvZyhSZXBvcnREYXRhTG9nLmNyZWF0ZUFkZERhdGFDYWxsYmFjayhtZXNzYWdlQnVzLCB0aGlzKSk7XG4gICAgICAgIHRoaXMub3B0cyAgICAgICAgICAgICAgPSBvcHRzO1xuICAgICAgICB0aGlzLnRlc3QgICAgICAgICAgICAgID0gdGVzdDtcbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbiA9IGJyb3dzZXJDb25uZWN0aW9uO1xuICAgICAgICB0aGlzLnVuc3RhYmxlICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnJvd3NlciAgICAgICAgICAgPSBnZXRCcm93c2VyKGJyb3dzZXJDb25uZWN0aW9uLCBuYXRpdmVBdXRvbWF0aW9uKTtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLmluaXRpYWw7XG5cbiAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy50ZXN0RG9uZUNvbW1hbmRRdWV1ZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIgID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVJZnJhbWVTZWxlY3RvciA9IG51bGw7XG4gICAgICAgIHRoaXMuc3BlZWQgICAgICAgICAgICAgICAgPSB0aGlzLm9wdHMuc3BlZWQgYXMgbnVtYmVyO1xuICAgICAgICB0aGlzLnBhZ2VMb2FkVGltZW91dCAgICAgID0gdGhpcy5fZ2V0UGFnZUxvYWRUaW1lb3V0KHRlc3QsIG9wdHMpO1xuICAgICAgICB0aGlzLnRlc3RFeGVjdXRpb25UaW1lb3V0ID0gdGhpcy5fZ2V0VGVzdEV4ZWN1dGlvblRpbWVvdXQob3B0cyk7XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMgPSB0ZXN0LmRpc2FibGVQYWdlUmVsb2FkcyB8fCBvcHRzLmRpc2FibGVQYWdlUmVsb2FkcyBhcyBib29sZWFuICYmIHRlc3QuZGlzYWJsZVBhZ2VSZWxvYWRzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZUNhY2hpbmcgPSB0ZXN0LmRpc2FibGVQYWdlQ2FjaGluZyB8fCBvcHRzLmRpc2FibGVQYWdlQ2FjaGluZyBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmlzTmF0aXZlQXV0b21hdGlvbiA9IG5hdGl2ZUF1dG9tYXRpb247XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzICAgICAgICA9IG9wdHMuZGlzYWJsZU11bHRpcGxlV2luZG93cyBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmlzRXhwZXJpbWVudGFsTXVsdGlwbGVXaW5kb3dzID0gb3B0cy5leHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3MgYXMgYm9vbGVhbjtcblxuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0ID0gdGhpcy5fZ2V0UmVxdWVzdFRpbWVvdXQodGVzdCwgb3B0cyk7XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gU2Vzc2lvbkNvbnRyb2xsZXIuZ2V0U2Vzc2lvbih0aGlzKTtcblxuICAgICAgICB0aGlzLmNvbnNvbGVNZXNzYWdlcyA9IG5ldyBCcm93c2VyQ29uc29sZU1lc3NhZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbnVsbDtcblxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmN0eCAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmZpeHR1cmVDdHggPSBudWxsO1xuICAgICAgICB0aGlzLnRlc3RSdW5DdHggPSBudWxsO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvbGVJZCAgPSBudWxsO1xuICAgICAgICB0aGlzLnVzZWRSb2xlU3RhdGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB0aGlzLmVycnMgPSBbXTtcblxuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNJZCAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5hdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50ID0gMDtcblxuICAgICAgICB0aGlzLmRlYnVnZ2luZyAgICAgICAgICAgICAgID0gdGhpcy5vcHRzLmRlYnVnTW9kZSBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmRlYnVnT25GYWlsICAgICAgICAgICAgID0gdGhpcy5vcHRzLmRlYnVnT25GYWlsIGFzIGJvb2xlYW47XG4gICAgICAgIHRoaXMuZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWJ1Z1JlcG9ydGVyUGx1Z2luSG9zdCA9IG5ldyBSZXBvcnRlclBsdWdpbkhvc3QoeyBub0NvbG9yczogZmFsc2UgfSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUgPSBuZXcgQnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlKGJyb3dzZXJDb25uZWN0aW9uLCBzY3JlZW5zaG90Q2FwdHVyZXIsIHRoaXMud2FybmluZ0xvZywgbmF0aXZlQXV0b21hdGlvbik7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyA9IG5ldyBUZXN0UnVuRGVidWdMb2codGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQpO1xuXG4gICAgICAgIHRoaXMucXVhcmFudGluZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciA9IHRoaXMub3B0cy5kZWJ1Z0xvZ2dlcjtcblxuICAgICAgICB0aGlzLm9ic2VydmVkQ2FsbHNpdGVzICAgICAgICAgID0gbmV3IE9ic2VydmVkQ2FsbHNpdGVzU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLmFzeW5jSnNFeHByZXNzaW9uQ2FsbHNpdGVzID0gbmV3IE1hcDxzdHJpbmcsIENhbGxzaXRlUmVjb3JkPigpO1xuXG4gICAgICAgIHRoaXMucmVwbGljYXRvciA9IGNyZWF0ZVJlcGxpY2F0b3IoWyBuZXcgU2VsZWN0b3JOb2RlVHJhbnNmb3JtKCkgXSk7XG5cbiAgICAgICAgdGhpcy5kaXNjb25uZWN0ZWQgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVyclNjcmVlbnNob3RQYXRoID0gbnVsbDtcblxuICAgICAgICB0aGlzLnN0YXJ0UnVuRXhlY3V0aW9uVGltZSAgICAgPSBzdGFydFJ1bkV4ZWN1dGlvblRpbWU7XG4gICAgICAgIHRoaXMucnVuRXhlY3V0aW9uVGltZW91dCAgICAgICA9IHRoaXMuX2dldFJ1bkV4ZWN1dGlvblRpbWVvdXQob3B0cyk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RIb29rRXZlbnRQcm92aWRlciA9IHRoaXMuX2dldFJlcXVlc3RIb29rRXZlbnRQcm92aWRlcigpO1xuICAgICAgICB0aGlzLl9yb2xlUHJvdmlkZXIgICAgICAgICAgICAgPSB0aGlzLl9nZXRSb2xlUHJvdmlkZXIoKTtcblxuICAgICAgICB0aGlzLmNvb2tpZVByb3ZpZGVyICAgID0gQ29va2llUHJvdmlkZXJGYWN0b3J5LmNyZWF0ZSh0aGlzLCB0aGlzLmlzTmF0aXZlQXV0b21hdGlvbik7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2VzUHJvdmlkZXIgPSBTdG9yYWdlc1Byb3ZpZGVyRmFjdG9yeS5jcmVhdGUodGhpcywgdGhpcy5pc05hdGl2ZUF1dG9tYXRpb24pO1xuXG4gICAgICAgIHRoaXMuX2FkZEluamVjdGFibGVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyICgpOiBSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIge1xuICAgICAgICBpZiAoIXRoaXMuaXNOYXRpdmVBdXRvbWF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlU3RvcmFnZXNTbmFwc2hvdCAoc3RvcmFnZVNuYXBzaG90OiBTdG9yYWdlc1NuYXBzaG90KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTmF0aXZlQXV0b21hdGlvbilcbiAgICAgICAgICAgIHRoaXMuX25hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUucmVzdG9yaW5nU3RvcmFnZXMgPSBzdG9yYWdlU25hcHNob3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX25hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUgKCk6IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF0aXZlQXV0b21hdGlvbi5yZXF1ZXN0UGlwZWxpbmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX25hdGl2ZUF1dG9tYXRpb24gKCk6IE5hdGl2ZUF1dG9tYXRpb25CYXNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uZ2V0TmF0aXZlQXV0b21hdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJvbGVQcm92aWRlciAoKTogUm9sZVByb3ZpZGVyIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOYXRpdmVBdXRvbWF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVBdXRvbWF0aW9uUm9sZVByb3ZpZGVyKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJveHlSb2xlUHJvdmlkZXIodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UGFnZUxvYWRUaW1lb3V0ICh0ZXN0OiBUZXN0LCBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IG51bWJlciB7XG4gICAgICAgIGlmICh0ZXN0LnRpbWVvdXRzPy5wYWdlTG9hZFRpbWVvdXQgIT09IHZvaWQgMClcbiAgICAgICAgICAgIHJldHVybiB0ZXN0LnRpbWVvdXRzLnBhZ2VMb2FkVGltZW91dDtcblxuICAgICAgICByZXR1cm4gb3B0cy5wYWdlTG9hZFRpbWVvdXQgYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlcXVlc3RUaW1lb3V0ICh0ZXN0OiBUZXN0LCBvcHRzOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPik6IFJlcXVlc3RUaW1lb3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2U6IHRlc3QudGltZW91dHM/LnBhZ2VSZXF1ZXN0VGltZW91dCB8fCBvcHRzLnBhZ2VSZXF1ZXN0VGltZW91dCBhcyBudW1iZXIsXG4gICAgICAgICAgICBhamF4OiB0ZXN0LnRpbWVvdXRzPy5hamF4UmVxdWVzdFRpbWVvdXQgfHwgb3B0cy5hamF4UmVxdWVzdFRpbWVvdXQgYXMgbnVtYmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV4ZWN1dGlvblRpbWVvdXQgKHRpbWVvdXQ6IG51bWJlciwgZXJyb3I6IFRlc3RUaW1lb3V0RXJyb3IgfCBSdW5UaW1lb3V0RXJyb3IpOiBFeGVjdXRpb25UaW1lb3V0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICByZWplY3RXaXRoOiBlcnJvcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRUZXN0RXhlY3V0aW9uVGltZW91dCAob3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHRlc3RFeGVjdXRpb25UaW1lb3V0ID0gb3B0cy50ZXN0RXhlY3V0aW9uVGltZW91dCBhcyBudW1iZXIgfHwgMDtcblxuICAgICAgICBpZiAoIXRlc3RFeGVjdXRpb25UaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEV4ZWN1dGlvblRpbWVvdXQodGVzdEV4ZWN1dGlvblRpbWVvdXQsIG5ldyBUZXN0VGltZW91dEVycm9yKHRlc3RFeGVjdXRpb25UaW1lb3V0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UnVuRXhlY3V0aW9uVGltZW91dCAob3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT4pOiBFeGVjdXRpb25UaW1lb3V0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJ1bkV4ZWN1dGlvblRpbWVvdXQgPSBvcHRzLnJ1bkV4ZWN1dGlvblRpbWVvdXQgYXMgbnVtYmVyIHx8IDA7XG5cbiAgICAgICAgaWYgKCFydW5FeGVjdXRpb25UaW1lb3V0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEV4ZWN1dGlvblRpbWVvdXQocnVuRXhlY3V0aW9uVGltZW91dCwgbmV3IFJ1blRpbWVvdXRFcnJvcihydW5FeGVjdXRpb25UaW1lb3V0KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN0UnVuRXhlY3V0aW9uVGltZW91dCAoKTogRXhlY3V0aW9uVGltZW91dCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRSdW5FeGVjdXRpb25UaW1lIHx8ICF0aGlzLnJ1bkV4ZWN1dGlvblRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBjdXJyZW50VGltZW91dCA9IE1hdGgubWF4KHRoaXMucnVuRXhlY3V0aW9uVGltZW91dC50aW1lb3V0IC0gKERhdGUubm93KCkgLSB0aGlzLnN0YXJ0UnVuRXhlY3V0aW9uVGltZS5nZXRUaW1lKCkpLCAwKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RXhlY3V0aW9uVGltZW91dChjdXJyZW50VGltZW91dCwgdGhpcy5ydW5FeGVjdXRpb25UaW1lb3V0LnJlamVjdFdpdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uVGltZW91dCAoKTogRXhlY3V0aW9uVGltZW91dCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0UnVuRXhlY3V0aW9uVGltZW91dCAmJiAoIXRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgfHwgdGhpcy5yZXN0UnVuRXhlY3V0aW9uVGltZW91dC50aW1lb3V0IDwgdGhpcy50ZXN0RXhlY3V0aW9uVGltZW91dC50aW1lb3V0KVxuICAgICAgICAgICAgPyB0aGlzLnJlc3RSdW5FeGVjdXRpb25UaW1lb3V0XG4gICAgICAgICAgICA6IHRoaXMudGVzdEV4ZWN1dGlvblRpbWVvdXQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudENEUFNlc3Npb24gKCk6IFByb21pc2U8cmVtb3RlQ2hyb21lLlByb3RvY29sQXBpIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5nZXRDdXJyZW50Q0RQU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZENsaWVudFNjcmlwdENvbnRlbnRXYXJuaW5nc0lmTmVjZXNzYXJ5ICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBlbXB0eSwgZHVwbGljYXRlZENvbnRlbnQgfSA9IGZpbmRQcm9ibGVtYXRpY1NjcmlwdHModGhpcy50ZXN0LmNsaWVudFNjcmlwdHMgYXMgQ2xpZW50U2NyaXB0W10pO1xuXG4gICAgICAgIGlmIChlbXB0eS5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyhXQVJOSU5HX01FU1NBR0UuY2xpZW50U2NyaXB0c1dpdGhFbXB0eUNvbnRlbnQpO1xuXG4gICAgICAgIGlmIChkdXBsaWNhdGVkQ29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdldFBsdXJhbFN1ZmZpeChkdXBsaWNhdGVkQ29udGVudCk7XG4gICAgICAgICAgICBjb25zdCBkdXBsaWNhdGVkQ29udGVudENsaWVudFNjcmlwdHNTdHIgPSBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcoZHVwbGljYXRlZENvbnRlbnQsICdcXG4nKTtcblxuICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoV0FSTklOR19NRVNTQUdFLmNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQsIHN1ZmZpeCwgZHVwbGljYXRlZENvbnRlbnRDbGllbnRTY3JpcHRzU3RyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZEluamVjdGFibGVzICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkQ2xpZW50U2NyaXB0Q29udGVudFdhcm5pbmdzSWZOZWNlc3NhcnkoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNOYXRpdmVBdXRvbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluamVjdGFibGUuc2NyaXB0cy5wdXNoKC4uLklOSkVDVEFCTEVTLlNDUklQVFMpO1xuICAgICAgICAgICAgdGhpcy5pbmplY3RhYmxlLnN0eWxlcy5wdXNoKElOSkVDVEFCTEVTLlRFU1RDQUZFX1VJX1NUWUxFUyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluamVjdGFibGUudXNlclNjcmlwdHMucHVzaCguLi50aGlzLnRlc3QuY2xpZW50U2NyaXB0cy5tYXAoc2NyaXB0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiAgKHNjcmlwdCBhcyBDbGllbnRTY3JpcHQpLmdldFJlc3VsdFVybCh0aGlzLmlkKSxcbiAgICAgICAgICAgICAgICBwYWdlOiBzY3JpcHQucGFnZSBhcyBSZXF1ZXN0RmlsdGVyUnVsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5qZWN0YWJsZSAoKTogSW5qZWN0YWJsZVJlc291cmNlcyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uaW5qZWN0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUXVhcmFudGluZUluZm8gKHF1YXJhbnRpbmU6IFF1YXJhbnRpbmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWFyYW50aW5lID0gcXVhcmFudGluZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9hZGRSZXF1ZXN0SG9vayAoaG9vazogUmVxdWVzdEhvb2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MuaW5jbHVkZXMoaG9vaykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5wdXNoKGhvb2spO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UmVxdWVzdEhvb2soaG9vayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVtb3ZlUmVxdWVzdEhvb2sgKGhvb2s6IFJlcXVlc3RIb29rKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0LnJlcXVlc3RIb29rcy5pbmNsdWRlcyhob29rKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBwdWxsKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MsIGhvb2spO1xuICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlUmVxdWVzdEhvb2soaG9vayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5pdFJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBob29rLl93YXJuaW5nTG9nID0gdGhpcy53YXJuaW5nTG9nO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGhvb2suX3JlcXVlc3RGaWx0ZXJSdWxlcy5tYXAocnVsZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLmFkZFJlcXVlc3RFdmVudExpc3RlbmVycyhydWxlLCB7XG4gICAgICAgICAgICAgICAgb25SZXF1ZXN0OiAgICAgICAgICAgaG9vay5vblJlcXVlc3QuYmluZChob29rKSxcbiAgICAgICAgICAgICAgICBvbkNvbmZpZ3VyZVJlc3BvbnNlOiBob29rLl9vbkNvbmZpZ3VyZVJlc3BvbnNlLmJpbmQoaG9vayksXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZTogICAgICAgICAgaG9vay5vblJlc3BvbnNlLmJpbmQoaG9vayksXG4gICAgICAgICAgICB9LCAoZXJyOiBSZXF1ZXN0SG9va01ldGhvZEVycm9yKSA9PiB0aGlzLl9vblJlcXVlc3RIb29rTWV0aG9kRXJyb3IoZXJyLCBob29rLl9jbGFzc05hbWUpKTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uUmVxdWVzdEhvb2tNZXRob2RFcnJvciAoZXZlbnQ6IFJlcXVlc3RIb29rTWV0aG9kRXJyb3IsIGhvb2tDbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgZXJyOiBFcnJvciB8IFRlc3RSdW5FcnJvckJhc2UgICAgICAgICAgICA9IGV2ZW50LmVycm9yO1xuICAgICAgICBjb25zdCBpc1JlcXVlc3RIb29rTm90SW1wbGVtZW50ZWRNZXRob2RFcnJvciA9IChlcnIgYXMgdW5rbm93biBhcyBUZXN0UnVuRXJyb3JCYXNlKT8uY29kZSA9PT0gVEVTVF9SVU5fRVJST1JTLnJlcXVlc3RIb29rTm90SW1wbGVtZW50ZWRFcnJvcjtcblxuICAgICAgICBpZiAoIWlzUmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZE1ldGhvZEVycm9yKVxuICAgICAgICAgICAgZXJyID0gbmV3IFJlcXVlc3RIb29rVW5oYW5kbGVkRXJyb3IoZXJyLCBob29rQ2xhc3NOYW1lLCBldmVudC5tZXRob2ROYW1lKTtcblxuICAgICAgICB0aGlzLmFkZEVycm9yKGVycik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZGlzcG9zZVJlcXVlc3RIb29rIChob29rOiBSZXF1ZXN0SG9vayk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBob29rLl93YXJuaW5nTG9nID0gbnVsbDtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChob29rLl9yZXF1ZXN0RmlsdGVyUnVsZXMubWFwKHJ1bGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RIb29rRXZlbnRQcm92aWRlci5yZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMocnVsZSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9kZXRhY2hSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMgKHJ1bGVzOiBSZXF1ZXN0RmlsdGVyUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJ1bGVzLm1hcChydWxlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIucmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzKHJ1bGUpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5pdFJlcXVlc3RIb29rcyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMudGVzdC5yZXF1ZXN0SG9va3MubWFwKGhvb2sgPT4gdGhpcy5faW5pdFJlcXVlc3RIb29rKGhvb2spKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVNraXBKc0Vycm9yc09wdGlvbiAoKTogYm9vbGVhbiB8IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50ZXN0LnNraXBKc0Vycm9yc09wdGlvbnMgIT09IHZvaWQgMFxuICAgICAgICAgICAgPyB0aGlzLnRlc3Quc2tpcEpzRXJyb3JzT3B0aW9uc1xuICAgICAgICAgICAgOiB0aGlzLm9wdHMuc2tpcEpzRXJyb3JzIGFzIFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3QgfCBib29sZWFuIHx8IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBwcmVwYXJlU2tpcEpzRXJyb3JzT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBIYW1tZXJoZWFkIHBheWxvYWRcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGF5bG9hZFNjcmlwdCAod2luZG93SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZGluZ0hhbmRsZWQgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgY29uc3Qgc2tpcEpzRXJyb3JzID0gdGhpcy5fcHJlcGFyZVNraXBKc0Vycm9yc09wdGlvbigpO1xuXG4gICAgICAgIHJldHVybiBNdXN0YWNoZS5yZW5kZXIoVEVTVF9SVU5fVEVNUExBVEUsIHtcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2Vzc2lvbi5pZCksXG4gICAgICAgICAgICBicm93c2VySWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmlkKSxcbiAgICAgICAgICAgIGFjdGl2ZVdpbmRvd0lkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlV2luZG93SWQpLFxuICAgICAgICAgICAgd2luZG93SWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkod2luZG93SWQgfHwgJycpLFxuICAgICAgICAgICAgYnJvd3NlckhlYXJ0YmVhdFJlbGF0aXZlVXJsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5oZWFydGJlYXRSZWxhdGl2ZVVybCksXG4gICAgICAgICAgICBicm93c2VyU3RhdHVzUmVsYXRpdmVVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnN0YXR1c1JlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJTdGF0dXNEb25lUmVsYXRpdmVVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uc3RhdHVzRG9uZVJlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJJZGxlUmVsYXRpdmVVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaWRsZVJlbGF0aXZlVXJsKSxcbiAgICAgICAgICAgIGJyb3dzZXJBY3RpdmVXaW5kb3dJZFVybDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYnJvd3NlckNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWRVcmwpLFxuICAgICAgICAgICAgYnJvd3NlckVuc3VyZVdpbmRvd0luTmF0aXZlQXV0b21hdGlvblVybDogICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5lbnN1cmVXaW5kb3dJbk5hdGl2ZUF1dG9tYXRpb25VcmwpLFxuICAgICAgICAgICAgYnJvd3NlckNsb3NlV2luZG93VXJsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5jbG9zZVdpbmRvd1VybCksXG4gICAgICAgICAgICBicm93c2VyT3BlbkZpbGVQcm90b2NvbFJlbGF0aXZlVXJsOiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLm9wZW5GaWxlUHJvdG9jb2xSZWxhdGl2ZVVybCksXG4gICAgICAgICAgICBicm93c2VyRGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnRSZWxhdGl2ZVVybDogICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50UmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgYnJvd3NlckRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50U2VxdWVuY2VSZWxhdGl2ZVVybDogSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5kaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlUmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgYnJvd3NlclBhcnNlU2VsZWN0b3JVcmw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5wYXJzZVNlbGVjdG9yUmVsYXRpdmVVcmwpLFxuICAgICAgICAgICAgdXNlckFnZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQpLFxuICAgICAgICAgICAgdGVzdE5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy50ZXN0Lm5hbWUpLFxuICAgICAgICAgICAgZml4dHVyZU5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoKHRoaXMudGVzdC5maXh0dXJlIGFzIEZpeHR1cmUpLm5hbWUpLFxuICAgICAgICAgICAgc2VsZWN0b3JUaW1lb3V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnNlbGVjdG9yVGltZW91dCxcbiAgICAgICAgICAgIHBhZ2VMb2FkVGltZW91dDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRUaW1lb3V0LFxuICAgICAgICAgICAgY2hpbGRXaW5kb3dSZWFkeVRpbWVvdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTERfV0lORE9XX1JFQURZX1RJTUVPVVQsXG4gICAgICAgICAgICBza2lwSnNFcnJvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShza2lwSnNFcnJvcnMpLFxuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJldHJ5VGVzdFBhZ2VzLFxuICAgICAgICAgICAgc3BlZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVlZCxcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciksXG4gICAgICAgICAgICBjYW5Vc2VEZWZhdWx0V2luZG93QWN0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmNhblVzZURlZmF1bHRXaW5kb3dBY3Rpb25zKCkpLFxuICAgICAgICAgICAgbmF0aXZlQXV0b21hdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05hdGl2ZUF1dG9tYXRpb24sXG4gICAgICAgICAgICBleHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXhwZXJpbWVudGFsTXVsdGlwbGVXaW5kb3dzLFxuICAgICAgICAgICAgZG9tYWluOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElmcmFtZVBheWxvYWRTY3JpcHQgKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJFbnN1cmVXaW5kb3dJbk5hdGl2ZUF1dG9tYXRpb25VcmwgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmJyb3dzZXJDb25uZWN0aW9uLmVuc3VyZVdpbmRvd0luTmF0aXZlQXV0b21hdGlvblVybCk7XG4gICAgICAgIGNvbnN0IGV4cGVyaW1lbnRhbE11bHRpcGxlV2luZG93cyA9IHRoaXMuaXNFeHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3M7XG5cbiAgICAgICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcihJRlJBTUVfVEVTVF9SVU5fVEVNUExBVEUsIHtcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2Vzc2lvbi5pZCksXG4gICAgICAgICAgICBzZWxlY3RvclRpbWVvdXQ6ICB0aGlzLm9wdHMuc2VsZWN0b3JUaW1lb3V0LFxuICAgICAgICAgICAgcGFnZUxvYWRUaW1lb3V0OiAgdGhpcy5wYWdlTG9hZFRpbWVvdXQsXG4gICAgICAgICAgICByZXRyeVRlc3RQYWdlczogICAhIXRoaXMub3B0cy5yZXRyeVRlc3RQYWdlcyxcbiAgICAgICAgICAgIHNwZWVkOiAgICAgICAgICAgIHRoaXMuc3BlZWQsXG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmFjdGl2ZURpYWxvZ0hhbmRsZXIpLFxuICAgICAgICAgICAgbmF0aXZlQXV0b21hdGlvbjogSlNPTi5zdHJpbmdpZnkodGhpcy5pc05hdGl2ZUF1dG9tYXRpb24pLFxuICAgICAgICAgICAgZG9tYWluOiAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5icm93c2VyQ29ubmVjdGlvbi5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGJyb3dzZXJFbnN1cmVXaW5kb3dJbk5hdGl2ZUF1dG9tYXRpb25VcmwsXG4gICAgICAgICAgICBleHBlcmltZW50YWxNdWx0aXBsZVdpbmRvd3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgaGFuZGxlcnNcbiAgICBwdWJsaWMgZ2V0QXV0aENyZWRlbnRpYWxzICgpOiBudWxsIHwgQXV0aENyZWRlbnRpYWxzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdC5hdXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbGVEb3dubG9hZCAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlV2FpdEZvckZpbGVEb3dubG9hZGluZ1Byb21pc2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRpbmdIYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQXR0YWNobWVudCAoZGF0YTogeyBpc09wZW5lZEluTmV3V2luZG93OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGEuaXNPcGVuZWRJbk5ld1dpbmRvdylcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERvd25sb2FkaW5nSGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVBhZ2VFcnJvciAoY3R4OiBhbnksIGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFnZUVycm9yID0gbmV3IFBhZ2VMb2FkRXJyb3IoZXJyLCBjdHgucmVxT3B0cy51cmwpO1xuXG4gICAgICAgIGN0eC5yZWRpcmVjdChjdHgudG9Qcm94eVVybChTUEVDSUFMX0VSUk9SX1BBR0UpKTtcbiAgICB9XG5cbiAgICAvLyBUZXN0IGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVUZXN0Rm4gKHBoYXNlOiBUZXN0UnVuUGhhc2UsIGZuOiBGdW5jdGlvbiwgdGltZW91dDogRXhlY3V0aW9uVGltZW91dCB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5waGFzZSA9IHBoYXNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBleGVjdXRlRm5XaXRoVGltZW91dChmbiwgdGltZW91dCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9tYWtlU2NyZWVuc2hvdE9uRmFpbCgpO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycik7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuZXJyU2NyZWVuc2hvdFBhdGggPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLl9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5CZWZvcmVIb29rICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMudGVzdC5nbG9iYWxCZWZvcmVGbilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdEJlZm9yZUhvb2ssIHRoaXMudGVzdC5nbG9iYWxCZWZvcmVGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0LmJlZm9yZUZuKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdEJlZm9yZUhvb2ssIHRoaXMudGVzdC5iZWZvcmVGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICBpZiAodGhpcy50ZXN0LmZpeHR1cmU/LmJlZm9yZUVhY2hGbilcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pbkZpeHR1cmVCZWZvcmVFYWNoSG9vaywgdGhpcy50ZXN0LmZpeHR1cmU/LmJlZm9yZUVhY2hGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5BZnRlckhvb2sgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy50ZXN0LmFmdGVyRm4pXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pblRlc3RBZnRlckhvb2ssIHRoaXMudGVzdC5hZnRlckZuLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRlc3QuZml4dHVyZT8uYWZ0ZXJFYWNoRm4pXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlVGVzdEZuKFRlc3RSdW5QaGFzZS5pbkZpeHR1cmVBZnRlckVhY2hIb29rLCB0aGlzLnRlc3QuZml4dHVyZT8uYWZ0ZXJFYWNoRm4sIHRoaXMuZXhlY3V0aW9uVGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVzdC5nbG9iYWxBZnRlckZuKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZVRlc3RGbihUZXN0UnVuUGhhc2UuaW5UZXN0QWZ0ZXJIb29rLCB0aGlzLnRlc3QuZ2xvYmFsQWZ0ZXJGbiwgdGhpcy5leGVjdXRpb25UaW1lb3V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9maW5hbGl6ZVRlc3RSdW4gKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGVzdFJ1blRyYWNrZXIucmVtb3ZlQWN0aXZlVGVzdFJ1bihpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGVzdFJ1blRyYWNrZXIuYWRkQWN0aXZlVGVzdFJ1bih0aGlzKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3N0YXJ0Jyk7XG5cbiAgICAgICAgY29uc3Qgb25EaXNjb25uZWN0ZWQgPSAoZXJyOiBFcnJvcik6IHZvaWQgPT4gdGhpcy5fZGlzY29ubmVjdChlcnIpO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ub25jZSgnZGlzY29ubmVjdGVkJywgb25EaXNjb25uZWN0ZWQpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMub25jZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdyZWFkeScpO1xuXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLl9ydW5CZWZvcmVIb29rKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVUZXN0Rm4oVGVzdFJ1blBoYXNlLmluVGVzdCwgdGhpcy50ZXN0LmZuIGFzIEZ1bmN0aW9uLCB0aGlzLmV4ZWN1dGlvblRpbWVvdXQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcnVuQWZ0ZXJIb29rKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNjb25uZWN0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5waGFzZSA9IFRlc3RSdW5QaGFzZS5wZW5kaW5nRmluYWxpemF0aW9uO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucmVtb3ZlTGlzdGVuZXIoJ2Rpc2Nvbm5lY3RlZCcsIG9uRGlzY29ubmVjdGVkKTtcblxuICAgICAgICBpZiAodGhpcy5lcnJzLmxlbmd0aCAmJiB0aGlzLmRlYnVnT25GYWlsKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJTdHIgPSB0aGlzLmRlYnVnUmVwb3J0ZXJQbHVnaW5Ib3N0LmZvcm1hdEVycm9yKHRoaXMuZXJyc1swXSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZCh2b2lkIDAsIG51bGwsIGVyclN0cik7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZS1kb25lJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlRlc3REb25lQ29tbWFuZCgpKTtcblxuICAgICAgICB0aGlzLl9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkoKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLmNsZWFyUmVxdWVzdEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMubm9ybWFsaXplUmVxdWVzdEhvb2tFcnJvcnMoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9maW5hbGl6ZVRlc3RSdW4odGhpcy5zZXNzaW9uLmlkKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2RvbmUnKTtcbiAgICB9XG5cbiAgICAvLyBFcnJvcnNcbiAgICBwcml2YXRlIF9hZGRQZW5kaW5nUGFnZUVycm9ySWZBbnkgKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucGVuZGluZ1BhZ2VFcnJvcjtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbnN1cmVFcnJvcklkIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmlkID0gZXJyLmlkIHx8IG5hbm9pZCg3KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVFcnJvckFkYXB0ZXIgKGVycjogRXJyb3IpOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIge1xuICAgICAgICB0aGlzLl9lbnN1cmVFcnJvcklkKGVycik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIoZXJyLCB7XG4gICAgICAgICAgICB1c2VyQWdlbnQ6ICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQsXG4gICAgICAgICAgICBzY3JlZW5zaG90UGF0aDogdGhpcy5lcnJTY3JlZW5zaG90UGF0aCB8fCAnJyxcbiAgICAgICAgICAgIHRlc3RSdW5JZDogICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgdGVzdFJ1blBoYXNlOiAgIHRoaXMucGhhc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFcnJvciAoZXJyOiBFcnJvciB8IFRlc3RDYWZlRXJyb3JMaXN0IHwgVGVzdFJ1bkVycm9yQmFzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJMaXN0ID0gKGVyciBpbnN0YW5jZW9mIFRlc3RDYWZlRXJyb3JMaXN0ID8gZXJyLml0ZW1zIDogW2Vycl0pIGFzIEVycm9yW107XG5cbiAgICAgICAgZXJyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2NyZWF0ZUVycm9yQWRhcHRlcihpdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5lcnJzLnB1c2goYWRhcHRlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemVSZXF1ZXN0SG9va0Vycm9ycyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RIb29rRXJyb3JzID0gcmVtb3ZlKHRoaXMuZXJycywgZSA9PlxuICAgICAgICAgICAgKGUgYXMgdW5rbm93biBhcyBUZXN0UnVuRXJyb3JCYXNlKS5jb2RlID09PSBURVNUX1JVTl9FUlJPUlMucmVxdWVzdEhvb2tOb3RJbXBsZW1lbnRlZEVycm9yIHx8XG4gICAgICAgICAgICAoZSBhcyB1bmtub3duIGFzIFRlc3RSdW5FcnJvckJhc2UpLmNvZGUgPT09IFRFU1RfUlVOX0VSUk9SUy5yZXF1ZXN0SG9va1VuaGFuZGxlZEVycm9yKSBhcyB1bmtub3duIGFzIFJlcXVlc3RIb29rQmFzZUVycm9yW107XG5cbiAgICAgICAgaWYgKCFyZXF1ZXN0SG9va0Vycm9ycy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdW5pcVJlcXVlc3RIb29rRXJyb3JzID0gY2hhaW4ocmVxdWVzdEhvb2tFcnJvcnMpXG4gICAgICAgICAgICAudW5pcUJ5KGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IGUgYXMgdW5rbm93biBhcyBSZXF1ZXN0SG9va0Jhc2VFcnJvcjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIuaG9va0NsYXNzTmFtZSArIGVyci5tZXRob2ROYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0QnkoWydob29rQ2xhc3NOYW1lJywgJ21ldGhvZE5hbWUnXSlcbiAgICAgICAgICAgIC52YWx1ZSgpIGFzIHVua25vd24gYXMgVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyW107XG5cbiAgICAgICAgdGhpcy5lcnJzID0gdGhpcy5lcnJzLmNvbmNhdCh1bmlxUmVxdWVzdEhvb2tFcnJvcnMpO1xuICAgIH1cblxuICAgIC8vIFRhc2sgcXVldWVcbiAgICBwcml2YXRlIF9lbnF1ZXVlQ29tbWFuZCAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdClcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVQZW5kaW5nUmVxdWVzdChjb21tYW5kKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudC0tO1xuICAgICAgICAgICAgdGhpcy5kcml2ZXJUYXNrUXVldWUucHVzaCh7IGNvbW1hbmQsIHJlc29sdmUsIHJlamVjdCwgY2FsbHNpdGUgfSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5hZGRpbmdEcml2ZXJUYXNrc0NvdW50KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdChBTExfRFJJVkVSX1RBU0tTX0FEREVEX1RPX1FVRVVFX0VWRU5ULCB0aGlzLmRyaXZlclRhc2tRdWV1ZS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRyaXZlclRhc2tRdWV1ZUxlbmd0aCAoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudCA/IHByb21pc2lmeUV2ZW50KHRoaXMgYXMgdW5rbm93biBhcyBFdmVudEVtaXR0ZXIsIEFMTF9EUklWRVJfVEFTS1NfQURERURfVE9fUVVFVUVfRVZFTlQpIDogUHJvbWlzZS5yZXNvbHZlKHRoaXMuZHJpdmVyVGFza1F1ZXVlLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9lbnF1ZXVlQnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIGNvbnN0IGNvbnNvbGVNZXNzYWdlQ29weSA9IHRoaXMuY29uc29sZU1lc3NhZ2VzLmdldENvcHkoKTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBjb25zb2xlTWVzc2FnZUNvcHlbU3RyaW5nKHRoaXMuYWN0aXZlV2luZG93SWQpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2VucXVldWVHZXRDb29raWVzIChjb21tYW5kOiBHZXRDb29raWVzQ29tbWFuZCk6IFByb21pc2U8UGFydGlhbDxDb29raWVPcHRpb25zPltdPiB7XG4gICAgICAgIGNvbnN0IHsgY29va2llcywgdXJscyB9ID0gY29tbWFuZDtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb29raWVQcm92aWRlci5nZXRDb29raWVzKGNvb2tpZXMsIHVybHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZW5xdWV1ZVNldENvb2tpZXMgKGNvbW1hbmQ6IFNldENvb2tpZXNDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgPSBjb21tYW5kLmNvb2tpZXM7XG4gICAgICAgIGNvbnN0IHVybCAgICAgPSBjb21tYW5kLnVybCB8fCBhd2FpdCB0aGlzLmdldEN1cnJlbnRVcmwoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb29raWVQcm92aWRlci5zZXRDb29raWVzKGNvb2tpZXMsIHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9lbnF1ZXVlRGVsZXRlQ29va2llcyAoY29tbWFuZDogRGVsZXRlQ29va2llc0NvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBjb29raWVzLCB1cmxzIH0gPSBjb21tYW5kO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvb2tpZVByb3ZpZGVyLmRlbGV0ZUNvb2tpZXMoY29va2llcywgdXJscyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZW5xdWV1ZVNldEJyZWFrcG9pbnRDb21tYW5kIChjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQgfCB1bmRlZmluZWQsIHNlbGVjdG9yPzogb2JqZWN0IHwgbnVsbCwgZXJyb3I/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWdMb2dnZXIpXG4gICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyLnNob3dCcmVha3BvaW50KHRoaXMuc2Vzc2lvbi5pZCwgdGhpcy5icm93c2VyQ29ubmVjdGlvbi51c2VyQWdlbnQsIGNhbGxzaXRlLCBlcnJvcik7XG5cbiAgICAgICAgdGhpcy5kZWJ1Z2dpbmcgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuU2V0QnJlYWtwb2ludENvbW1hbmQoISFlcnJvciwgc2VsZWN0b3IpLCBjYWxsc2l0ZSkgYXMgYm9vbGVhbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxOb25TZXJ2aWNlVGFza3MgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZSA9IHRoaXMuZHJpdmVyVGFza1F1ZXVlLmZpbHRlcihkcml2ZXJUYXNrID0+IGlzU2VydmljZUNvbW1hbmQoZHJpdmVyVGFzay5jb21tYW5kKSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUucmVtb3ZlQWxsTm9uU2VydmljZU1hbmlwdWxhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBDdXJyZW50IGRyaXZlciB0YXNrXG4gICAgcHVibGljIGdldCBjdXJyZW50RHJpdmVyVGFzayAoKTogRHJpdmVyVGFzayB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyaXZlclRhc2tRdWV1ZVswXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJhc2VVcmwgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuYmFzZVVybCBhcyBzdHJpbmcgfHwgJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZUN1cnJlbnREcml2ZXJUYXNrIChyZXN1bHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudERyaXZlclRhc2sucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB0aGlzLmRyaXZlclRhc2tRdWV1ZS5zaGlmdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3REb25lQ29tbWFuZFF1ZXVlZClcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbE5vblNlcnZpY2VUYXNrcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmNhbGxzaXRlID0gZXJyLmNhbGxzaXRlIHx8IHRoaXMuY3VycmVudERyaXZlclRhc2suY2FsbHNpdGU7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50RHJpdmVyVGFzay5yZWplY3QoZXJyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTm9uU2VydmljZVRhc2tzKCk7XG4gICAgfVxuXG4gICAgLy8gUGVuZGluZyByZXF1ZXN0XG4gICAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nUmVxdWVzdCAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nUmVxdWVzdC5yZXNwb25zZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlUGVuZGluZ1JlcXVlc3QgKGNvbW1hbmQ6IENvbW1hbmRCYXNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZSA9IGNvbW1hbmQ7XG5cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1JlcXVlc3QpXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0LnJlc29sdmUoY29tbWFuZCk7XG5cbiAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nUmVxdWVzdCgpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcml2ZXIgcmVxdWVzdFxuICAgIHByaXZhdGUgX3Nob3VsZFJlc29sdmVDdXJyZW50RHJpdmVyVGFzayAoZHJpdmVyU3RhdHVzOiBEcml2ZXJTdGF0dXMpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbW1hbmQgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrLmNvbW1hbmQ7XG5cbiAgICAgICAgY29uc3QgaXNFeGVjdXRpbmdPYnNlcnZhdGlvbkNvbW1hbmQgPSBjdXJyZW50Q29tbWFuZCBpbnN0YW5jZW9mIGV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmRzLkV4ZWN1dGVTZWxlY3RvckNvbW1hbmQgfHxcbiAgICAgICAgICAgIGN1cnJlbnRDb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZDtcblxuICAgICAgICBjb25zdCBpc0RlYnVnQWN0aXZlID0gY3VycmVudENvbW1hbmQgaW5zdGFuY2VvZiBzZXJ2aWNlQ29tbWFuZHMuU2V0QnJlYWtwb2ludENvbW1hbmQ7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRXhlY3V0ZUN1cnJlbnRDb21tYW5kID1cbiAgICAgICAgICAgIGRyaXZlclN0YXR1cy5pc0ZpcnN0UmVxdWVzdEFmdGVyV2luZG93U3dpdGNoaW5nICYmIChpc0V4ZWN1dGluZ09ic2VydmF0aW9uQ29tbWFuZCB8fCBpc0RlYnVnQWN0aXZlKTtcblxuICAgICAgICByZXR1cm4gIXNob3VsZEV4ZWN1dGVDdXJyZW50Q29tbWFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mdWxmaWxsQ3VycmVudERyaXZlclRhc2sgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50RHJpdmVyVGFzaylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoZHJpdmVyU3RhdHVzLndhcm5pbmdzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRyaXZlclN0YXR1cy53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nOiBEcml2ZXJXYXJuaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkUmVuZGVyZWRXYXJuaW5nKHRoaXMud2FybmluZ0xvZywgV0FSTklOR19NRVNTQUdFW3dhcm5pbmcudHlwZV0sIHRoaXMuY3VycmVudERyaXZlclRhc2suY2FsbHNpdGUsIC4uLndhcm5pbmcuYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkcml2ZXJTdGF0dXMuZXhlY3V0aW9uRXJyb3IpXG4gICAgICAgICAgICB0aGlzLl9yZWplY3RDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMuZXhlY3V0aW9uRXJyb3IpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9zaG91bGRSZXNvbHZlQ3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzKSlcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVDdXJyZW50RHJpdmVyVGFzayhkcml2ZXJTdGF0dXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVQYWdlRXJyb3JTdGF0dXMgKHBhZ2VFcnJvcjogRXJyb3IpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERyaXZlclRhc2sgJiYgaXNDb21tYW5kUmVqZWN0YWJsZUJ5UGFnZUVycm9yKHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdEN1cnJlbnREcml2ZXJUYXNrKHBhZ2VFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IHRoaXMucGVuZGluZ1BhZ2VFcnJvciB8fCBwYWdlRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZURyaXZlclJlcXVlc3QgKGRyaXZlclN0YXR1czogRHJpdmVyU3RhdHVzKTogUHJvbWlzZTxDb21tYW5kQmFzZSB8IG51bGwgfCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgaXNUZXN0RG9uZSAgICAgICAgICAgICAgICAgPSB0aGlzLmN1cnJlbnREcml2ZXJUYXNrICYmIHRoaXMuY3VycmVudERyaXZlclRhc2suY29tbWFuZC50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfVFlQRS50ZXN0RG9uZTtcbiAgICAgICAgY29uc3QgcGFnZUVycm9yICAgICAgICAgICAgICAgICAgPSB0aGlzLnBlbmRpbmdQYWdlRXJyb3IgfHwgZHJpdmVyU3RhdHVzLnBhZ2VFcnJvcjtcbiAgICAgICAgY29uc3QgY3VycmVudFRhc2tSZWplY3RlZEJ5RXJyb3IgPSBwYWdlRXJyb3IgJiYgdGhpcy5faGFuZGxlUGFnZUVycm9yU3RhdHVzKHBhZ2VFcnJvcik7XG5cbiAgICAgICAgdGhpcy5jb25zb2xlTWVzc2FnZXMuY29uY2F0KGRyaXZlclN0YXR1cy5jb25zb2xlTWVzc2FnZXMpO1xuXG4gICAgICAgIGlmICghY3VycmVudFRhc2tSZWplY3RlZEJ5RXJyb3IgJiYgZHJpdmVyU3RhdHVzLmlzQ29tbWFuZFJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGlzVGVzdERvbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvbHZlQ3VycmVudERyaXZlclRhc2soKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBURVNUX0RPTkVfQ09ORklSTUFUSU9OX1JFU1BPTlNFO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9mdWxmaWxsQ3VycmVudERyaXZlclRhc2soZHJpdmVyU3RhdHVzKTtcblxuICAgICAgICAgICAgaWYgKGRyaXZlclN0YXR1cy5pc1BlbmRpbmdXaW5kb3dTd2l0Y2hpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q3VycmVudERyaXZlclRhc2tDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0Q3VycmVudERyaXZlclRhc2tDb21tYW5kICgpOiBQcm9taXNlPENvbW1hbmRCYXNlIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudERyaXZlclRhc2spXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGhpcy5jdXJyZW50RHJpdmVyVGFzay5jb21tYW5kO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5uYXZpZ2F0ZVRvICYmIChjb21tYW5kIGFzIGFueSkuc3RhdGVTbmFwc2hvdClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JvbGVQcm92aWRlci51c2VTdGF0ZVNuYXBzaG90KEpTT04ucGFyc2UoKGNvbW1hbmQgYXMgYW55KS5zdGF0ZVNuYXBzaG90KSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSBjb21tYW5kXG4gICAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUpzRXhwcmVzc2lvbiAoY29tbWFuZDogRXhlY3V0ZUV4cHJlc3Npb25Db21tYW5kKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZhcmlhYmxlTmFtZSA9IGNvbW1hbmQucmVzdWx0VmFyaWFibGVOYW1lO1xuICAgICAgICBsZXQgZXhwcmVzc2lvbiAgICAgICAgICAgPSBjb21tYW5kLmV4cHJlc3Npb247XG5cbiAgICAgICAgaWYgKHJlc3VsdFZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBgJHtyZXN1bHRWYXJpYWJsZU5hbWV9ID0gJHtleHByZXNzaW9ufSwgJHtyZXN1bHRWYXJpYWJsZU5hbWV9YDtcblxuICAgICAgICByZXR1cm4gZXhlY3V0ZUpzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0aGlzLCB7IHNraXBWaXNpYmlsaXR5Q2hlY2s6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2V4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiAoY29tbWFuZDogRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsIGNhbGxzaXRlPzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24oY29tbWFuZC5leHByZXNzaW9uLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZXhlY3V0ZUFzc2VydGlvbiAoY29tbWFuZDogQXNzZXJ0aW9uQ29tbWFuZCwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvblRpbWVvdXQgPSBnZXRBc3NlcnRpb25UaW1lb3V0KGNvbW1hbmQsIHRoaXMub3B0cyk7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yICAgICAgICAgPSBuZXcgQXNzZXJ0aW9uRXhlY3V0b3IoY29tbWFuZCwgYXNzZXJ0aW9uVGltZW91dCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4ZWN1dG9yLm9uY2UoJ3N0YXJ0LWFzc2VydGlvbi1yZXRyaWVzJywgKHRpbWVvdXQ6IG51bWJlcikgPT4gdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLlNob3dBc3NlcnRpb25SZXRyaWVzU3RhdHVzQ29tbWFuZCh0aW1lb3V0KSkpO1xuICAgICAgICBleGVjdXRvci5vbmNlKCdlbmQtYXNzZXJ0aW9uLXJldHJpZXMnLCAoc3VjY2VzczogYm9vbGVhbikgPT4gdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLkhpZGVBc3NlcnRpb25SZXRyaWVzU3RhdHVzQ29tbWFuZChzdWNjZXNzKSkpO1xuXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVGbiA9IHRoaXMuZGVjb3JhdGVQcmV2ZW50RW1pdEFjdGlvbkV2ZW50cygoKSA9PiBleGVjdXRvci5ydW4oKSwgeyBwcmV2ZW50OiB0cnVlIH0pO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBleGVjdXRlRm4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGp1c3RDb25maWd1cmF0aW9uV2l0aENvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogdm9pZCB7XG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS50ZXN0RG9uZSkge1xuICAgICAgICAgICAgdGhpcy50ZXN0RG9uZUNvbW1hbmRRdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdMb2dnZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlci5oaWRlQnJlYWtwb2ludCh0aGlzLnNlc3Npb24uaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0TmF0aXZlRGlhbG9nSGFuZGxlcilcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlciA9IChjb21tYW5kIGFzIGFueSkuZGlhbG9nSGFuZGxlcjtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zd2l0Y2hUb0lmcmFtZSlcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSWZyYW1lU2VsZWN0b3IgPSAoY29tbWFuZCBhcyBhbnkpLnNlbGVjdG9yO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvTWFpbldpbmRvdylcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSWZyYW1lU2VsZWN0b3IgPSBudWxsO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnNldFRlc3RTcGVlZClcbiAgICAgICAgICAgIHRoaXMuc3BlZWQgPSAoY29tbWFuZCBhcyBhbnkpLnNwZWVkO1xuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnNldFBhZ2VMb2FkVGltZW91dClcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRUaW1lb3V0ID0gKGNvbW1hbmQgYXMgYW55KS5kdXJhdGlvbjtcblxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZGVidWdnaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9hZGp1c3RTY3JlZW5zaG90Q29tbWFuZCAoY29tbWFuZDogVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBicm93c2VySWQgICAgICAgICAgICAgICAgICAgID0gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5pZDtcbiAgICAgICAgY29uc3QgeyBoYXNDaHJvbWVsZXNzU2NyZWVuc2hvdHMgfSA9IGF3YWl0IHRoaXMuYnJvd3NlckNvbm5lY3Rpb24ucHJvdmlkZXIuaGFzQ3VzdG9tQWN0aW9uRm9yQnJvd3Nlcihicm93c2VySWQpO1xuXG4gICAgICAgIGlmICghaGFzQ2hyb21lbGVzc1NjcmVlbnNob3RzKVxuICAgICAgICAgICAgY29tbWFuZC5nZW5lcmF0ZVNjcmVlbnNob3RNYXJrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9hZGp1c3RDb21tYW5kT3B0aW9uc0FuZEVudmlyb25tZW50IChjb21tYW5kOiBDb21tYW5kQmFzZSwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICgoY29tbWFuZCBhcyBhbnkpLm9wdGlvbnM/LmNvbmZpZGVudGlhbCAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS50eXBlVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZCgoY29tbWFuZCBhcyBhbnkpLnNlbGVjdG9yLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVwbGljYXRvci5kZWNvZGUocmVzdWx0KTtcblxuICAgICAgICAgICAgKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zLmNvbmZpZGVudGlhbCA9IGlzUGFzc3dvcmRJbnB1dChub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnByZXNzS2V5KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBzZXJ2aWNlQ29tbWFuZHMuR2V0QWN0aXZlRWxlbWVudENvbW1hbmQoKSk7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVwbGljYXRvci5kZWNvZGUocmVzdWx0KTtcblxuICAgICAgICAgICAgKGNvbW1hbmQgYXMgYW55KS5vcHRpb25zLmNvbmZpZGVudGlhbCA9IGlzUGFzc3dvcmRJbnB1dChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfc2V0QnJlYWtwb2ludElmTmVjZXNzYXJ5IChjb21tYW5kOiBDb21tYW5kQmFzZSwgY2FsbHNpdGU/OiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZURlYnVnQnJlYWtwb2ludHMgJiYgdGhpcy5kZWJ1Z2dpbmcgJiYgY2FuU2V0RGVidWdnZXJCcmVha3BvaW50QmVmb3JlQ29tbWFuZChjb21tYW5kKSlcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VucXVldWVTZXRCcmVha3BvaW50Q29tbWFuZChjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjb21tYW5kOiBDb21tYW5kQmFzZSB8IEFjdGlvbkNvbW1hbmRCYXNlLCBjYWxsc2l0ZT86IHN0cmluZyB8IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBjb21tYW5kIGluc3RhbmNlb2YgQWN0aW9uQ29tbWFuZEJhc2VcbiAgICAgICAgICAgID8gdGhpcy5fZXhlY3V0ZUFjdGlvbkNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpXG4gICAgICAgICAgICA6IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZXhlY3V0ZUFjdGlvbkNvbW1hbmQgKGNvbW1hbmQ6IEFjdGlvbkNvbW1hbmRCYXNlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uQXJncyA9IHsgYXBpQWN0aW9uTmFtZTogY29tbWFuZC5tZXRob2ROYW1lLCBjb21tYW5kIH07XG5cbiAgICAgICAgbGV0IGVycm9yQWRhcHRlciA9IG51bGw7XG4gICAgICAgIGxldCBlcnJvciAgICAgICAgPSBudWxsO1xuICAgICAgICBsZXQgcmVzdWx0ICAgICAgID0gbnVsbDtcblxuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9hZGp1c3RDb21tYW5kT3B0aW9uc0FuZEVudmlyb25tZW50KGNvbW1hbmQsIGNhbGxzaXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEFjdGlvbkV2ZW50KCdhY3Rpb24tc3RhcnQnLCBhY3Rpb25BcmdzKTtcblxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBoYXNlID09PSBUZXN0UnVuUGhhc2UucGVuZGluZ0ZpbmFsaXphdGlvbiAmJiBlcnIgaW5zdGFuY2VvZiBFeHRlcm5hbEFzc2VydGlvbkxpYnJhcnlFcnJvcilcbiAgICAgICAgICAgICAgICBhZGRSZW5kZXJlZFdhcm5pbmcodGhpcy53YXJuaW5nTG9nLCB7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS51bmF3YWl0ZWRNZXRob2RXaXRoQXNzZXJ0aW9uLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9LCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBjaGVjayBpZiBlcnJvciBpcyBUZXN0Q2FmZUVycm9yTGlzdCBpcyBzcGVjaWZpYyBmb3IgdGhlIGB1c2VSb2xlYCBhY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGlzIFRlc3RDYWZlRXJyb3JMaXN0IHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhbiBhZGFwdGVyLFxuICAgICAgICAgICAgLy8gc2luY2UgZXJyb3IgaXMgYWxyZWFkeSB3YXMgcHJvY2Vzc2VkIGluIHJvbGUgaW5pdGlhbGl6ZXJcbiAgICAgICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgVGVzdENhZmVFcnJvckxpc3QpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbWFrZVNjcmVlbnNob3RPbkZhaWwoY29tbWFuZC5hY3Rpb25JZCk7XG5cbiAgICAgICAgICAgICAgICBlcnJvckFkYXB0ZXIgPSB0aGlzLl9jcmVhdGVFcnJvckFkYXB0ZXIocHJvY2Vzc1Rlc3RGbkVycm9yKGVycm9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZXJyb3JBZGFwdGVyID0gZXJyb3IuYWRhcHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uQXJncywge1xuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBlcnI6IGVycm9yQWRhcHRlcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QWN0aW9uRXZlbnQoJ2FjdGlvbi1kb25lJywgYWN0aW9uQXJncyk7XG5cbiAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBjYWxsc2l0ZT86IENhbGxzaXRlUmVjb3JkIHwgc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHRoaXMuZGVidWdMb2cuY29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUGFnZUVycm9yICYmIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvcihjb21tYW5kKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWplY3RDb21tYW5kV2l0aFBhZ2VFcnJvcihjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgaWYgKGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZChjb21tYW5kKSlcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nRHJpdmVyVGFza3NDb3VudCsrO1xuXG4gICAgICAgIHRoaXMuX2FkanVzdENvbmZpZ3VyYXRpb25XaXRoQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9zZXRCcmVha3BvaW50SWZOZWNlc3NhcnkoY29tbWFuZCwgY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQpO1xuXG4gICAgICAgIGlmIChpc1NjcmVlbnNob3RDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVTY3JlZW5zaG90cykge1xuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnNjcmVlbnNob3RzRGlzYWJsZWQsIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkanVzdFNjcmVlbnNob3RDb21tYW5kKGNvbW1hbmQgYXMgVGFrZVNjcmVlbnNob3RCYXNlQ29tbWFuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNCcm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyTWFuaXB1bGF0aW9uUXVldWUucHVzaChjb21tYW5kKTtcblxuICAgICAgICAgICAgaWYgKGlzUmVzaXplV2luZG93Q29tbWFuZChjb21tYW5kKSAmJiB0aGlzLm9wdHMudmlkZW9QYXRoKVxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKHsgbWVzc2FnZTogV0FSTklOR19NRVNTQUdFLnZpZGVvQnJvd3NlclJlc2l6aW5nLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9LCB0aGlzLnRlc3QubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUud2FpdClcbiAgICAgICAgICAgIHJldHVybiBkZWxheSgoY29tbWFuZCBhcyBhbnkpLnRpbWVvdXQpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5zZXRQYWdlTG9hZFRpbWVvdXQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRlYnVnID0gIXRoaXMuYnJvd3NlckNvbm5lY3Rpb24uaXNIZWFkbGVzc0Jyb3dzZXIoKTtcblxuICAgICAgICAgICAgaWYgKGNhbkRlYnVnKVxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9lbnF1ZXVlU2V0QnJlYWtwb2ludENvbW1hbmQoY2FsbHNpdGUgYXMgQ2FsbHNpdGVSZWNvcmQsIChjb21tYW5kIGFzIERlYnVnQ29tbWFuZCk/LnNlbGVjdG9yLCB2b2lkIDApO1xuXG4gICAgICAgICAgICB0aGlzLmRlYnVnZ2luZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyh7IG1lc3NhZ2U6IFdBUk5JTkdfTUVTU0FHRS5kZWJ1Z0luSGVhZGxlc3NFcnJvciwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnVzZVJvbGUpIHtcbiAgICAgICAgICAgIGxldCBmbiA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuX3VzZVJvbGUoKGNvbW1hbmQgYXMgYW55KS5yb2xlLCBjYWxsc2l0ZSBhcyBDYWxsc2l0ZVJlY29yZCk7XG5cbiAgICAgICAgICAgIGZuID0gdGhpcy5kZWNvcmF0ZVByZXZlbnRFbWl0QWN0aW9uRXZlbnRzKGZuLCB7IHByZXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICBmbiA9IHRoaXMuZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyhmbiwgeyBkaXNhYmxlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5ydW5DdXN0b21BY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZm4sIGFyZ3MgfSA9IGNvbW1hbmQgYXMgUnVuQ3VzdG9tQWN0aW9uQ29tbWFuZDtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRGbiAgICA9IHdyYXBDdXN0b21BY3Rpb24oZm4pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgd3JhcHBlZEZuKHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnJlcG9ydClcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9ydERhdGFMb2cuYWRkRGF0YShjb21tYW5kLmFyZ3MgYXMgYW55W10pO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5hc3NlcnRpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzc2VydGlvbihjb21tYW5kIGFzIEFzc2VydGlvbkNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZXhlY3V0ZUV4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZUpzRXhwcmVzc2lvbihjb21tYW5kIGFzIEV4ZWN1dGVFeHByZXNzaW9uQ29tbWFuZCk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmV4ZWN1dGVBc3luY0V4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uKGNvbW1hbmQgYXMgRXhlY3V0ZUFzeW5jRXhwcmVzc2lvbkNvbW1hbmQsIGNhbGxzaXRlIGFzIHN0cmluZyk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLmdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXMpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc3dpdGNoVG9QcmV2aW91c1dpbmRvdylcbiAgICAgICAgICAgIChjb21tYW5kIGFzIGFueSkud2luZG93SWQgPSB0aGlzLmJyb3dzZXJDb25uZWN0aW9uLnByZXZpb3VzQWN0aXZlV2luZG93SWQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZShjb21tYW5kIGFzIFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZ2V0Q29va2llcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlR2V0Q29va2llcyhjb21tYW5kIGFzIEdldENvb2tpZXNDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuc2V0Q29va2llcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlU2V0Q29va2llcyhjb21tYW5kIGFzIFNldENvb2tpZXNDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuZGVsZXRlQ29va2llcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlRGVsZXRlQ29va2llcyhjb21tYW5kIGFzIERlbGV0ZUNvb2tpZXNDb21tYW5kKTtcblxuICAgICAgICBpZiAoY29tbWFuZC50eXBlID09PSBDT01NQU5EX1RZUEUuYWRkUmVxdWVzdEhvb2tzKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKChjb21tYW5kIGFzIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQpLmhvb2tzLm1hcChob29rID0+IHRoaXMuX2FkZFJlcXVlc3RIb29rKGhvb2spKSk7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PT0gQ09NTUFORF9UWVBFLnJlbW92ZVJlcXVlc3RIb29rcylcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCgoY29tbWFuZCBhcyBSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kKS5ob29rcy5tYXAoaG9vayA9PiB0aGlzLl9yZW1vdmVSZXF1ZXN0SG9vayhob29rKSkpO1xuXG4gICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT09IENPTU1BTkRfVFlQRS5nZXRDdXJyZW50Q0RQU2Vzc2lvbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRDRFBTZXNzaW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlIGFzIENhbGxzaXRlUmVjb3JkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWplY3RDb21tYW5kV2l0aFBhZ2VFcnJvciAoY2FsbHNpdGU/OiBDYWxsc2l0ZVJlY29yZCk6IFByb21pc2U8RXJyb3I+IHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5wZW5kaW5nUGFnZUVycm9yO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZXJyLmNhbGxzaXRlICAgICAgICAgID0gY2FsbHNpdGU7XG4gICAgICAgIHRoaXMucGVuZGluZ1BhZ2VFcnJvciA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VuZENsb3NlQ2hpbGRXaW5kb3dPbkZpbGVEb3dubG9hZGluZ0NvbW1hbmQgKCk6IENvbW1hbmRCYXNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhY3Rpb25Db21tYW5kcy5DbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX21ha2VTY3JlZW5zaG90T25GYWlsIChmYWlsZWRBY3Rpb25JZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IHNjcmVlbnNob3RzIH0gPSB0aGlzLm9wdHMgYXMgeyBzY3JlZW5zaG90czogU2NyZWVuc2hvdE9wdGlvblZhbHVlIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLmVyclNjcmVlbnNob3RQYXRoICYmIHNjcmVlbnNob3RzPy50YWtlT25GYWlscylcbiAgICAgICAgICAgIHRoaXMuZXJyU2NyZWVuc2hvdFBhdGggPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBicm93c2VyTWFuaXB1bGF0aW9uQ29tbWFuZHMuVGFrZVNjcmVlbnNob3RPbkZhaWxDb21tYW5kKHsgZmFpbGVkQWN0aW9uSWQsIGZ1bGxQYWdlOiBzY3JlZW5zaG90cy5mdWxsUGFnZSB9KSkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RlY29yYXRlV2l0aEZsYWcgKGZuOiBGdW5jdGlvbiwgZmxhZ05hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXNbZmxhZ05hbWVdID0gdmFsdWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdGhpc1tmbGFnTmFtZV0gPSAhdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGRlY29yYXRlUHJldmVudEVtaXRBY3Rpb25FdmVudHMgKGZuOiBGdW5jdGlvbiwgeyBwcmV2ZW50IH06IHsgcHJldmVudDogYm9vbGVhbiB9KTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcmF0ZVdpdGhGbGFnKGZuLCAncHJldmVudEVtaXRBY3Rpb25FdmVudHMnLCBwcmV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyAoZm46IEZ1bmN0aW9uLCB7IGRpc2FibGUgfTogeyBkaXNhYmxlOiBib29sZWFuIH0pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29yYXRlV2l0aEZsYWcoZm4sICdkaXNhYmxlRGVidWdCcmVha3BvaW50cycsIGRpc2FibGUpO1xuICAgIH1cblxuICAgIC8vIFJvbGUgbWFuYWdlbWVudFxuICAgIHB1YmxpYyBhc3luYyBnZXRTdGF0ZVNuYXBzaG90ICgpOiBQcm9taXNlPFN0YXRlU25hcHNob3Q+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLl9yb2xlUHJvdmlkZXIuZ2V0U3RhdGVTbmFwc2hvdCgpO1xuXG4gICAgICAgIHN0YXRlLnN0b3JhZ2VzID0gYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgc2VydmljZUNvbW1hbmRzLkJhY2t1cFN0b3JhZ2VzQ29tbWFuZCgpKSBhcyBTdG9yYWdlc1NuYXBzaG90O1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9jbGVhblVwQ3R4cyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuY3R4ICAgICAgICA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuZml4dHVyZUN0eCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMudGVzdFJ1bkN0eCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN3aXRjaFRvQ2xlYW5SdW4gKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NsZWFuVXBDdHhzKCk7XG5cbiAgICAgICAgdGhpcy5jb25zb2xlTWVzc2FnZXMgPSBuZXcgQnJvd3NlckNvbnNvbGVNZXNzYWdlcygpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3JvbGVQcm92aWRlci51c2VTdGF0ZVNuYXBzaG90KFN0YXRlU25hcHNob3QuZW1wdHkoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3BlZWQgIT09IHRoaXMub3B0cy5zcGVlZCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0U3BlZWRDb21tYW5kID0gbmV3IGFjdGlvbkNvbW1hbmRzLlNldFRlc3RTcGVlZENvbW1hbmQoeyBzcGVlZDogdGhpcy5vcHRzLnNwZWVkIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHNldFNwZWVkQ29tbWFuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdlTG9hZFRpbWVvdXQgIT09IHRoaXMub3B0cy5wYWdlTG9hZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCh7IGR1cmF0aW9uOiB0aGlzLm9wdHMucGFnZUxvYWRUaW1lb3V0IH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKHNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvVXJsKHVybCwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGlhbG9nSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlRGlhbG9nSGFuZGxlckNvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQoeyBkaWFsb2dIYW5kbGVyOiB7IGZuOiBudWxsIH0gfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQocmVtb3ZlRGlhbG9nSGFuZGxlckNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5hdmlnYXRlVG9VcmwgKHVybDogc3RyaW5nLCBmb3JjZVJlbG9hZDogYm9vbGVhbiwgc3RhdGVTbmFwc2hvdD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBuYXZpZ2F0ZUNvbW1hbmQgPSBuZXcgYWN0aW9uQ29tbWFuZHMuTmF2aWdhdGVUb0NvbW1hbmQoeyB1cmwsIGZvcmNlUmVsb2FkLCBzdGF0ZVNuYXBzaG90IH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludGVybmFsRXhlY3V0ZUNvbW1hbmQobmF2aWdhdGVDb21tYW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRTdGF0ZVNuYXBzaG90RnJvbVJvbGUgKHJvbGU6IFJvbGUpOiBQcm9taXNlPFN0YXRlU25hcHNob3Q+IHtcbiAgICAgICAgY29uc3QgcHJldlBoYXNlID0gdGhpcy5waGFzZTtcblxuICAgICAgICBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS5pbml0aWFsaXplZCAmJiByb2xlLmluaXRFcnIgaW5zdGFuY2VvZiBUZXN0Q2FmZUVycm9yTGlzdCAmJiByb2xlLmluaXRFcnIuaGFzRXJyb3JzKVxuICAgICAgICAgICAgcm9sZS5pbml0RXJyLmFkYXB0ZXIgPSB0aGlzLl9jcmVhdGVFcnJvckFkYXB0ZXIocm9sZS5pbml0RXJyLml0ZW1zWzBdKTtcblxuICAgICAgICB0aGlzLnBoYXNlID0gVGVzdFJ1blBoYXNlLmluUm9sZUluaXRpYWxpemVyO1xuXG4gICAgICAgIGlmIChyb2xlLnBoYXNlID09PSBST0xFX1BIQVNFLnVuaW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICBhd2FpdCByb2xlLmluaXRpYWxpemUodGhpcyk7XG5cbiAgICAgICAgZWxzZSBpZiAocm9sZS5waGFzZSA9PT0gUk9MRV9QSEFTRS5wZW5kaW5nSW5pdGlhbGl6YXRpb24pXG4gICAgICAgICAgICBhd2FpdCBwcm9taXNpZnlFdmVudChyb2xlLCAnaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICBpZiAocm9sZS5pbml0RXJyKVxuICAgICAgICAgICAgdGhyb3cgcm9sZS5pbml0RXJyO1xuXG4gICAgICAgIHRoaXMucGhhc2UgPSBwcmV2UGhhc2U7XG5cbiAgICAgICAgcmV0dXJuIHJvbGUuc3RhdGVTbmFwc2hvdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF91c2VSb2xlIChyb2xlOiBSb2xlLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMucGhhc2UgPT09IFRlc3RSdW5QaGFzZS5pblJvbGVJbml0aWFsaXplcilcbiAgICAgICAgICAgIHRocm93IG5ldyBSb2xlU3dpdGNoSW5Sb2xlSW5pdGlhbGl6ZXJFcnJvcihjYWxsc2l0ZSk7XG5cbiAgICAgICAgY29uc3QgYm9va21hcmsgPSBuZXcgVGVzdFJ1bkJvb2ttYXJrKHRoaXMsIHJvbGUpO1xuXG4gICAgICAgIGF3YWl0IGJvb2ttYXJrLmluaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Um9sZUlkKVxuICAgICAgICAgICAgdGhpcy51c2VkUm9sZVN0YXRlc1t0aGlzLmN1cnJlbnRSb2xlSWRdID0gYXdhaXQgdGhpcy5nZXRTdGF0ZVNuYXBzaG90KCk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGVTbmFwc2hvdCA9IHRoaXMudXNlZFJvbGVTdGF0ZXNbcm9sZS5pZF0gfHwgYXdhaXQgdGhpcy5fZ2V0U3RhdGVTbmFwc2hvdEZyb21Sb2xlKHJvbGUpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3JvbGVQcm92aWRlci51c2VTdGF0ZVNuYXBzaG90KHN0YXRlU25hcHNob3QpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFJvbGVJZCA9IHJvbGUuaWQ7XG5cbiAgICAgICAgYXdhaXQgYm9va21hcmsucmVzdG9yZShjYWxsc2l0ZSwgc3RhdGVTbmFwc2hvdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRVcmwgKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQ2xpZW50RnVuY3Rpb25CdWlsZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgfSwgeyBib3VuZFRlc3RSdW46IHRoaXMgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0TG9jYXRpb24gPSBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldExvY2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZSAoY29tbWFuZDogU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd3MgPSBhd2FpdCB0aGlzLl9pbnRlcm5hbEV4ZWN1dGVDb21tYW5kKG5ldyBHZXRDdXJyZW50V2luZG93c0NvbW1hbmQoe30sIHRoaXMpIGFzIENvbW1hbmRCYXNlKSBhcyBPcGVuZWRXaW5kb3dJbmZvcm1hdGlvbltdO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd3MgPSBhd2FpdCBhc3luY0ZpbHRlcjxPcGVuZWRXaW5kb3dJbmZvcm1hdGlvbj4oY3VycmVudFdpbmRvd3MsIGFzeW5jIHduZCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZURhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogICBuZXcgVVJMKHduZC51cmwpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogd25kLnRpdGxlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZC5jaGVja1dpbmRvdyhwcmVkaWNhdGVEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3dpdGNoVG9XaW5kb3dQcmVkaWNhdGVFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXdpbmRvd3MubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFdpbmRvd05vdEZvdW5kRXJyb3IoKTtcblxuICAgICAgICBpZiAod2luZG93cy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoeyBtZXNzYWdlOiBXQVJOSU5HX01FU1NBR0UubXVsdGlwbGVXaW5kb3dzRm91bmRCeVByZWRpY2F0ZSwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5faW50ZXJuYWxFeGVjdXRlQ29tbWFuZChuZXcgU3dpdGNoVG9XaW5kb3dDb21tYW5kKHsgd2luZG93SWQ6IHdpbmRvd3NbMF0uaWQgfSwgdGhpcykgYXMgQ29tbWFuZEJhc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2Nvbm5lY3QgKGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREcml2ZXJUYXNrKVxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0Q3VycmVudERyaXZlclRhc2soZXJyKTtcblxuICAgICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3RlZCcsIGVycik7XG5cbiAgICAgICAgdGVzdFJ1blRyYWNrZXIucmVtb3ZlQWN0aXZlVGVzdFJ1bih0aGlzLnNlc3Npb24uaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZUZpbGVEb3dubG9hZGluZ0luTmV3V2luZG93UmVxdWVzdCAoKTogQ29tbWFuZEJhc2UgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudERvd25sb2FkaW5nSGFuZGxlZCkge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50RG93bmxvYWRpbmdIYW5kbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZW5kQ2xvc2VDaGlsZFdpbmRvd09uRmlsZURvd25sb2FkaW5nQ29tbWFuZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVtaXRBY3Rpb25FdmVudCAoZXZlbnROYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoIXRoaXMucHJldmVudEVtaXRBY3Rpb25FdmVudHMpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoZXZlbnROYW1lLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzTXVsdGlwbGVXaW5kb3dzQWxsb3dlZCAodGVzdFJ1bjogVGVzdFJ1bik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGRpc2FibGVNdWx0aXBsZVdpbmRvd3MsIHRlc3QgfSA9IHRlc3RSdW47XG5cbiAgICAgICAgcmV0dXJuICFkaXNhYmxlTXVsdGlwbGVXaW5kb3dzICYmICEodGVzdCBhcyBMZWdhY3lUZXN0UnVuKS5pc0xlZ2FjeSAmJiAhIXRlc3RSdW4uYWN0aXZlV2luZG93SWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXRpYWxpemUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGVzdC5za2lwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhckNvb2tpZXNBbmRTdG9yYWdlcygpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdFJlcXVlc3RIb29rcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2xlYXJDb29raWVzQW5kU3RvcmFnZXMgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb29raWVQcm92aWRlci5pbml0aWFsaXplKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX3N0b3JhZ2VzUHJvdmlkZXIuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlV2luZG93SWQgKCk6IG51bGwgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyQ29ubmVjdGlvbi5hY3RpdmVXaW5kb3dJZDtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIGlzIHRpbWUtY3JpdGljYWwgYW5kIG11c3QgcmV0dXJuIEFTQVAgdG8gYXZvaWQgY2xpZW50IGRpc2Nvbm5lY3Rpb25cbiAgICBwcml2YXRlIGFzeW5jIFtDTElFTlRfTUVTU0FHRVMucmVhZHldIChtc2c6IERyaXZlck1lc3NhZ2UpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgaWYgKG1zZy5zdGF0dXMuaXNPYnNlcnZpbmdGaWxlRG93bmxvYWRpbmdJbk5ld1dpbmRvdylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlRG93bmxvYWRpbmdJbk5ld1dpbmRvd1JlcXVlc3QoKTtcblxuICAgICAgICB0aGlzLmRlYnVnTG9nLmRyaXZlck1lc3NhZ2UobXNnKTtcblxuICAgICAgICBpZiAodGhpcy5kaXNjb25uZWN0ZWQpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy50ZXN0UnVuUmVxdWVzdEluRGlzY29ubmVjdGVkQnJvd3NlciwgdGhpcy5icm93c2VyQ29ubmVjdGlvbi5icm93c2VySW5mby5hbGlhcykpO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGVkJyk7XG5cbiAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nUmVxdWVzdCgpO1xuXG4gICAgICAgIC8vIE5PVEU6IHRoZSBkcml2ZXIgc2VuZHMgdGhlIHN0YXR1cyBmb3IgdGhlIHNlY29uZCB0aW1lIGlmIGl0IGRpZG4ndCBnZXQgYSByZXNwb25zZSBhdCB0aGVcbiAgICAgICAgLy8gZmlyc3QgdHJ5LiBUaGlzIGlzIHBvc3NpYmxlIHdoZW4gdGhlIHBhZ2Ugd2FzIHVubG9hZGVkIGFmdGVyIHRoZSBkcml2ZXIgc2VudCB0aGUgc3RhdHVzLlxuICAgICAgICBpZiAobXNnLnN0YXR1cy5pZCA9PT0gdGhpcy5sYXN0RHJpdmVyU3RhdHVzSWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0RHJpdmVyU3RhdHVzUmVzcG9uc2U7XG5cbiAgICAgICAgdGhpcy5sYXN0RHJpdmVyU3RhdHVzSWQgICAgICAgPSBtc2cuc3RhdHVzLmlkO1xuICAgICAgICB0aGlzLmxhc3REcml2ZXJTdGF0dXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuX2hhbmRsZURyaXZlclJlcXVlc3QobXNnLnN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlIHx8IG1zZy5zdGF0dXMuaXNQZW5kaW5nV2luZG93U3dpdGNoaW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdERyaXZlclN0YXR1c1Jlc3BvbnNlO1xuXG4gICAgICAgIC8vIE5PVEU6IHdlIHNlbmQgYW4gZW1wdHkgcmVzcG9uc2UgYWZ0ZXIgdGhlIE1BWF9SRVNQT05TRV9ERUxBWSB0aW1lb3V0IGlzIGV4Y2VlZGVkIHRvIGtlZXAgY29ubmVjdGlvblxuICAgICAgICAvLyB3aXRoIHRoZSBjbGllbnQgYW5kIHByZXZlbnQgdGhlIHJlc3BvbnNlIHRpbWVvdXQgZXhjZXB0aW9uIG9uIHRoZSBjbGllbnQgc2lkZVxuICAgICAgICBjb25zdCByZXNwb25zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3Jlc29sdmVQZW5kaW5nUmVxdWVzdChudWxsKSwgTUFYX1JFU1BPTlNFX0RFTEFZKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHsgcmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZVRpbWVvdXQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBbQ0xJRU5UX01FU1NBR0VTLnJlYWR5Rm9yQnJvd3Nlck1hbmlwdWxhdGlvbl0gKG1zZzogRHJpdmVyTWVzc2FnZSk6IFByb21pc2U8QnJvd3Nlck1hbmlwdWxhdGlvblJlc3VsdD4ge1xuICAgICAgICB0aGlzLmRlYnVnTG9nLmRyaXZlck1lc3NhZ2UobXNnKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgbGV0IGVycm9yICA9IG51bGw7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuYnJvd3Nlck1hbmlwdWxhdGlvblF1ZXVlLmV4ZWN1dGVQZW5kaW5nTWFuaXB1bGF0aW9uKG1zZywgdGhpcy5fbWVzc2FnZUJ1cyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICAgICAgICAgICAgZXJyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICAgICAgICAgZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHN0YWNrOiAgICAgICAgICAgZXJyLnN0YWNrLFxuICAgICAgICAgICAgICAgICAgICBpc0ludGVybmFsRXJyb3I6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlc3VsdCwgZXJyb3IgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIFtDTElFTlRfTUVTU0FHRVMud2FpdEZvckZpbGVEb3dubG9hZF0gKG1zZzogRHJpdmVyTWVzc2FnZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmRlYnVnTG9nLmRyaXZlck1lc3NhZ2UobXNnKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWxlRG93bmxvYWRpbmdIYW5kbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRpbmdIYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVXYWl0Rm9yRmlsZURvd25sb2FkaW5nUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==